blob: 67d5fce8457659326dac781cccbe257b6afefe6d [file] [log] [blame]
David L. Jonesf561aba2017-03-08 01:02:16 +00001//===--- WebAssembly.h - WebAssembly ToolChain Implementations --*- C++ -*-===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// 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-exception
David L. Jonesf561aba2017-03-08 01:02:16 +00006//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_WEBASSEMBLY_H
10#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_WEBASSEMBLY_H
11
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 : public GnuTool {
22public:
Sam Cleggcebce0d2019-05-24 17:36:07 +000023 explicit Linker(const ToolChain &TC)
24 : GnuTool("wasm::Linker", "linker", TC) {}
25 bool isLinkJob() const override { return true; }
26 bool hasIntegratedCPP() const override { return false; }
Sam Cleggfc5ddee2019-03-28 17:45:18 +000027 std::string getLinkerPath(const llvm::opt::ArgList &Args) const;
David L. Jonesf561aba2017-03-08 01:02:16 +000028 void ConstructJob(Compilation &C, const JobAction &JA,
29 const InputInfo &Output, const InputInfoList &Inputs,
30 const llvm::opt::ArgList &TCArgs,
31 const char *LinkingOutput) const override;
32};
33
34} // end namespace wasm
35} // end namespace tools
36
37namespace toolchains {
38
39class LLVM_LIBRARY_VISIBILITY WebAssembly final : public ToolChain {
40public:
41 WebAssembly(const Driver &D, const llvm::Triple &Triple,
42 const llvm::opt::ArgList &Args);
43
44private:
45 bool IsMathErrnoDefault() const override;
46 bool IsObjCNonFragileABIDefault() const override;
47 bool UseObjCMixedDispatch() const override;
48 bool isPICDefault() const override;
49 bool isPIEDefault() const override;
50 bool isPICDefaultForced() const override;
51 bool IsIntegratedAssemblerDefault() const override;
52 bool hasBlocksRuntime() const override;
David L. Jonesf561aba2017-03-08 01:02:16 +000053 bool SupportsProfiling() const override;
54 bool HasNativeLLVMSupport() const override;
Heejin Ahn4fa8dd92018-08-31 20:57:00 +000055 void
56 addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
57 llvm::opt::ArgStringList &CC1Args,
58 Action::OffloadKind DeviceOffloadKind) const override;
David L. Jonesf561aba2017-03-08 01:02:16 +000059 RuntimeLibType GetDefaultRuntimeLibType() const override;
60 CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override;
Heejin Ahn4fa8dd92018-08-31 20:57:00 +000061 void
62 AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
63 llvm::opt::ArgStringList &CC1Args) const override;
David L. Jonesf561aba2017-03-08 01:02:16 +000064 void AddClangCXXStdlibIncludeArgs(
65 const llvm::opt::ArgList &DriverArgs,
66 llvm::opt::ArgStringList &CC1Args) const override;
Sam Cleggffbfc0f2018-01-12 17:54:49 +000067 void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
68 llvm::opt::ArgStringList &CmdArgs) const override;
Thomas Lively5458cd42019-05-29 18:31:50 +000069 SanitizerMask getSupportedSanitizers() const override;
David L. Jonesf561aba2017-03-08 01:02:16 +000070
Sam Clegg98dbbfd2018-08-07 18:55:41 +000071 const char *getDefaultLinker() const override { return "wasm-ld"; }
David L. Jonesf561aba2017-03-08 01:02:16 +000072
73 Tool *buildLinker() const override;
74};
75
76} // end namespace toolchains
77} // end namespace driver
78} // end namespace clang
79
80#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_WEBASSEMBLY_H