Path: blob/main/contrib/llvm-project/clang/lib/Driver/ToolChains/Hexagon.h
35269 views
//===--- Hexagon.h - Hexagon ToolChain Implementations ----------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HEXAGON_H9#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HEXAGON_H1011#include "Linux.h"12#include "clang/Driver/Tool.h"13#include "clang/Driver/ToolChain.h"1415namespace clang {16namespace driver {17namespace tools {18namespace hexagon {19// For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile20// and Compile.21// We simply use "clang -cc1" for those actions.22class LLVM_LIBRARY_VISIBILITY Assembler final : public Tool {23public:24Assembler(const ToolChain &TC)25: Tool("hexagon::Assembler", "hexagon-as", TC) {}2627bool hasIntegratedCPP() const override { return false; }2829void RenderExtraToolArgs(const JobAction &JA,30llvm::opt::ArgStringList &CmdArgs) const;31void ConstructJob(Compilation &C, const JobAction &JA,32const InputInfo &Output, const InputInfoList &Inputs,33const llvm::opt::ArgList &TCArgs,34const char *LinkingOutput) const override;35};3637class LLVM_LIBRARY_VISIBILITY Linker final : public Tool {38public:39Linker(const ToolChain &TC) : Tool("hexagon::Linker", "hexagon-ld", TC) {}4041bool hasIntegratedCPP() const override { return false; }42bool isLinkJob() const override { return true; }4344virtual void RenderExtraToolArgs(const JobAction &JA,45llvm::opt::ArgStringList &CmdArgs) const;46void ConstructJob(Compilation &C, const JobAction &JA,47const InputInfo &Output, const InputInfoList &Inputs,48const llvm::opt::ArgList &TCArgs,49const char *LinkingOutput) const override;50};5152void getHexagonTargetFeatures(const Driver &D, const llvm::Triple &Triple,53const llvm::opt::ArgList &Args,54std::vector<StringRef> &Features);5556} // end namespace hexagon.57} // end namespace tools5859namespace toolchains {6061class LLVM_LIBRARY_VISIBILITY HexagonToolChain : public Linux {62protected:63GCCVersion GCCLibAndIncVersion;64Tool *buildAssembler() const override;65Tool *buildLinker() const override;6667unsigned getOptimizationLevel(const llvm::opt::ArgList &DriverArgs) const;6869public:70HexagonToolChain(const Driver &D, const llvm::Triple &Triple,71const llvm::opt::ArgList &Args);72~HexagonToolChain() override;7374void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,75llvm::opt::ArgStringList &CC1Args,76Action::OffloadKind DeviceOffloadKind) const override;77void78AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,79llvm::opt::ArgStringList &CC1Args) const override;80void addLibStdCxxIncludePaths(81const llvm::opt::ArgList &DriverArgs,82llvm::opt::ArgStringList &CC1Args) const override;8384void addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,85llvm::opt::ArgStringList &CC1Args) const override;8687const char *getDefaultLinker() const override {88return getTriple().isMusl() ? "ld.lld" : "hexagon-link";89}9091CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override;9293void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,94llvm::opt::ArgStringList &CmdArgs) const override;9596StringRef GetGCCLibAndIncVersion() const { return GCCLibAndIncVersion.Text; }9798std::string getHexagonTargetDir(99const std::string &InstalledDir,100const SmallVectorImpl<std::string> &PrefixDirs) const;101void getHexagonLibraryPaths(const llvm::opt::ArgList &Args,102ToolChain::path_list &LibPaths) const;103104std::string getCompilerRTPath() const override;105106static bool isAutoHVXEnabled(const llvm::opt::ArgList &Args);107static StringRef GetDefaultCPU();108static StringRef GetTargetCPUVersion(const llvm::opt::ArgList &Args);109110static std::optional<unsigned>111getSmallDataThreshold(const llvm::opt::ArgList &Args);112};113114} // end namespace toolchains115} // end namespace driver116} // end namespace clang117118#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HEXAGON_H119120121