93 lines · c
1//===--- WebAssembly.h - WebAssembly ToolChain Implementations --*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_WEBASSEMBLY_H10#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_WEBASSEMBLY_H11 12#include "Gnu.h"13#include "clang/Driver/Tool.h"14#include "clang/Driver/ToolChain.h"15 16namespace clang {17namespace driver {18namespace tools {19namespace wasm {20 21class LLVM_LIBRARY_VISIBILITY Linker final : public Tool {22public:23 explicit Linker(const ToolChain &TC) : Tool("wasm::Linker", "linker", TC) {}24 bool isLinkJob() const override { return true; }25 bool hasIntegratedCPP() const override { return false; }26 std::string getLinkerPath(const llvm::opt::ArgList &Args) const;27 void ConstructJob(Compilation &C, const JobAction &JA,28 const InputInfo &Output, const InputInfoList &Inputs,29 const llvm::opt::ArgList &TCArgs,30 const char *LinkingOutput) const override;31};32 33} // end namespace wasm34} // end namespace tools35 36namespace toolchains {37 38class LLVM_LIBRARY_VISIBILITY WebAssembly final : public ToolChain {39public:40 WebAssembly(const Driver &D, const llvm::Triple &Triple,41 const llvm::opt::ArgList &Args);42 43private:44 bool IsMathErrnoDefault() const override;45 bool IsObjCNonFragileABIDefault() const override;46 bool UseObjCMixedDispatch() const override;47 bool isPICDefault() const override;48 bool isPIEDefault(const llvm::opt::ArgList &Args) const override;49 bool isPICDefaultForced() const override;50 bool hasBlocksRuntime() const override;51 bool SupportsProfiling() const override;52 bool HasNativeLLVMSupport() const override;53 unsigned GetDefaultDwarfVersion() const override { return 4; }54 void55 addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,56 llvm::opt::ArgStringList &CC1Args,57 Action::OffloadKind DeviceOffloadKind) const override;58 RuntimeLibType GetDefaultRuntimeLibType() const override;59 CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override;60 void61 AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,62 llvm::opt::ArgStringList &CC1Args) const override;63 void AddClangCXXStdlibIncludeArgs(64 const llvm::opt::ArgList &DriverArgs,65 llvm::opt::ArgStringList &CC1Args) const override;66 void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,67 llvm::opt::ArgStringList &CmdArgs) const override;68 SanitizerMask getSupportedSanitizers() const override;69 70 const char *getDefaultLinker() const override;71 72 CXXStdlibType GetDefaultCXXStdlibType() const override {73 return ToolChain::CST_Libcxx;74 }75 76 Tool *buildLinker() const override;77 78 std::string getMultiarchTriple(const Driver &D,79 const llvm::Triple &TargetTriple,80 StringRef SysRoot) const override;81 82 void addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,83 llvm::opt::ArgStringList &CC1Args) const;84 void addLibStdCXXIncludePaths(const llvm::opt::ArgList &DriverArgs,85 llvm::opt::ArgStringList &CC1Args) const;86};87 88} // end namespace toolchains89} // end namespace driver90} // end namespace clang91 92#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_WEBASSEMBLY_H93