clang 10.0.0git

Clang.h
Go to the documentation of this file.
1 //===--- Clang.h - Clang Tool and 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-exception
6 //
7 //===----------------------------------------------------------------------===//
8
9 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_Clang_H
10 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_Clang_H
11
12 #include "MSVC.h"
13 #include "clang/Basic/DebugInfoOptions.h"
14 #include "clang/Driver/Driver.h"
15 #include "clang/Driver/Tool.h"
16 #include "clang/Driver/Types.h"
17 #include "llvm/ADT/Triple.h"
18 #include "llvm/Option/Option.h"
19 #include "llvm/Support/raw_ostream.h"
20
21 namespace clang {
22 class ObjCRuntime;
23 namespace driver {
24
25 namespace tools {
26
27 /// Clang compiler tool.
28 class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
29 public:
30 static const char *getBaseInputName(const llvm::opt::ArgList &Args,
31 const InputInfo &Input);
32 static const char *getBaseInputStem(const llvm::opt::ArgList &Args,
33 const InputInfoList &Inputs);
34 static const char *getDependencyFileName(const llvm::opt::ArgList &Args,
35 const InputInfoList &Inputs);
36
37 private:
38 void AddPreprocessingOptions(Compilation &C, const JobAction &JA,
39 const Driver &D, const llvm::opt::ArgList &Args,
40 llvm::opt::ArgStringList &CmdArgs,
41 const InputInfo &Output,
42 const InputInfoList &Inputs) const;
43
44 void RenderTargetOptions(const llvm::Triple &EffectiveTriple,
45 const llvm::opt::ArgList &Args, bool KernelOrKext,
46 llvm::opt::ArgStringList &CmdArgs) const;
47
48 void AddAArch64TargetArgs(const llvm::opt::ArgList &Args,
49 llvm::opt::ArgStringList &CmdArgs) const;
50 void AddARMTargetArgs(const llvm::Triple &Triple,
51 const llvm::opt::ArgList &Args,
52 llvm::opt::ArgStringList &CmdArgs,
53 bool KernelOrKext) const;
54 void AddARM64TargetArgs(const llvm::opt::ArgList &Args,
55 llvm::opt::ArgStringList &CmdArgs) const;
56 void AddMIPSTargetArgs(const llvm::opt::ArgList &Args,
57 llvm::opt::ArgStringList &CmdArgs) const;
58 void AddPPCTargetArgs(const llvm::opt::ArgList &Args,
59 llvm::opt::ArgStringList &CmdArgs) const;
60 void AddR600TargetArgs(const llvm::opt::ArgList &Args,
61 llvm::opt::ArgStringList &CmdArgs) const;
62 void AddRISCVTargetArgs(const llvm::opt::ArgList &Args,
63 llvm::opt::ArgStringList &CmdArgs) const;
64 void AddSparcTargetArgs(const llvm::opt::ArgList &Args,
65 llvm::opt::ArgStringList &CmdArgs) const;
66 void AddSystemZTargetArgs(const llvm::opt::ArgList &Args,
67 llvm::opt::ArgStringList &CmdArgs) const;
68 void AddX86TargetArgs(const llvm::opt::ArgList &Args,
69 llvm::opt::ArgStringList &CmdArgs) const;
70 void AddHexagonTargetArgs(const llvm::opt::ArgList &Args,
71 llvm::opt::ArgStringList &CmdArgs) const;
72 void AddLanaiTargetArgs(const llvm::opt::ArgList &Args,
73 llvm::opt::ArgStringList &CmdArgs) const;
74 void AddWebAssemblyTargetArgs(const llvm::opt::ArgList &Args,
75 llvm::opt::ArgStringList &CmdArgs) const;
76
77 enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile };
78
79 ObjCRuntime AddObjCRuntimeArgs(const llvm::opt::ArgList &args,
80 llvm::opt::ArgStringList &cmdArgs,
81 RewriteKind rewrite) const;
82
83 void AddClangCLArgs(const llvm::opt::ArgList &Args, types::ID InputType,
84 llvm::opt::ArgStringList &CmdArgs,
85 codegenoptions::DebugInfoKind *DebugInfoKind,
86 bool *EmitCodeView) const;
87
88 visualstudio::Compiler *getCLFallback() const;
89
90 mutable std::unique_ptr<visualstudio::Compiler> CLFallback;
91
92 mutable std::unique_ptr<llvm::raw_fd_ostream> CompilationDatabase = nullptr;
93 void DumpCompilationDatabase(Compilation &C, StringRef Filename,
94 StringRef Target,
95 const InputInfo &Output, const InputInfo &Input,
96 const llvm::opt::ArgList &Args) const;
97
98 void DumpCompilationDatabaseFragmentToDir(
99 StringRef Dir, Compilation &C, StringRef Target, const InputInfo &Output,
100 const InputInfo &Input, const llvm::opt::ArgList &Args) const;
101
102 public:
103 Clang(const ToolChain &TC);
104 ~Clang() override;
105
106 bool hasGoodDiagnostics() const override { return true; }
107 bool hasIntegratedAssembler() const override { return true; }
108 bool hasIntegratedCPP() const override { return true; }
109 bool canEmitIR() const override { return true; }
110
111 void ConstructJob(Compilation &C, const JobAction &JA,
112 const InputInfo &Output, const InputInfoList &Inputs,
113 const llvm::opt::ArgList &TCArgs,
114 const char *LinkingOutput) const override;
115 };
116
117 /// Clang integrated assembler tool.
118 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
119 public:
120 ClangAs(const ToolChain &TC)
121 : Tool("clang::as", "clang integrated assembler", TC, RF_Full) {}
122 void AddMIPSTargetArgs(const llvm::opt::ArgList &Args,
123 llvm::opt::ArgStringList &CmdArgs) const;
124 void AddX86TargetArgs(const llvm::opt::ArgList &Args,
125 llvm::opt::ArgStringList &CmdArgs) const;
126 void AddRISCVTargetArgs(const llvm::opt::ArgList &Args,
127 llvm::opt::ArgStringList &CmdArgs) const;
128 bool hasGoodDiagnostics() const override { return true; }
129 bool hasIntegratedAssembler() const override { return false; }
130 bool hasIntegratedCPP() const override { return false; }
131
132 void ConstructJob(Compilation &C, const JobAction &JA,
133 const InputInfo &Output, const InputInfoList &Inputs,
134 const llvm::opt::ArgList &TCArgs,
135 const char *LinkingOutput) const override;
136 };
137
138 /// Offload bundler tool.
139 class LLVM_LIBRARY_VISIBILITY OffloadBundler final : public Tool {
140 public:
141 OffloadBundler(const ToolChain &TC)
142 : Tool("offload bundler", "clang-offload-bundler", TC) {}
143
144 bool hasIntegratedCPP() const override { return false; }
145 void ConstructJob(Compilation &C, const JobAction &JA,
146 const InputInfo &Output, const InputInfoList &Inputs,
147 const llvm::opt::ArgList &TCArgs,
148 const char *LinkingOutput) const override;
149 void ConstructJobMultipleOutputs(Compilation &C, const JobAction &JA,
150 const InputInfoList &Outputs,
151 const InputInfoList &Inputs,
152 const llvm::opt::ArgList &TCArgs,
153 const char *LinkingOutput) const override;
154 };
155
156 /// Offload wrapper tool.
157 class LLVM_LIBRARY_VISIBILITY OffloadWrapper final : public Tool {
158 public:
159 OffloadWrapper(const ToolChain &TC)
160 : Tool("offload wrapper", "clang-offload-wrapper", TC) {}
161
162 bool hasIntegratedCPP() const override { return false; }
163 void ConstructJob(Compilation &C, const JobAction &JA,
164 const InputInfo &Output, const InputInfoList &Inputs,
165 const llvm::opt::ArgList &TCArgs,
166 const char *LinkingOutput) const override;
167 };
168
169 } // end namespace tools
170
171 } // end namespace driver
172 } // end namespace clang
173
174 #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_CLANG_H
clang::codegenoptions::DebugInfoKind
DebugInfoKind
Definition: DebugInfoOptions.h:20
clang::driver::tools::OffloadWrapper::hasIntegratedCPP
bool hasIntegratedCPP() const override
Definition: Clang.h:162
Types.h
Tool.h
clang::driver::types::ID
ID
Definition: Types.h:23
clang::driver::tools::ClangAs
Clang integrated assembler tool.
Definition: Clang.h:118
clang::MultiVersionKind::Target
clang::driver::tools::visualstudio::Compiler
Definition: MSVC.h:39
clang::driver::JobAction
Definition: Action.h:375
clang::driver::InputInfo
InputInfo - Wrapper for information about an input source.
Definition: InputInfo.h:22
clang::driver::tools::Clang::hasGoodDiagnostics
bool hasGoodDiagnostics() const override
Does this tool have "good" standardized diagnostics, or should the driver add an additional "command ...
Definition: Clang.h:106
clang::driver::Driver
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
Definition: Driver.h:59
clang::driver::tools::ClangAs::ClangAs
ClangAs(const ToolChain &TC)
Definition: Clang.h:120
clang::driver::tools::Clang::hasIntegratedAssembler
bool hasIntegratedAssembler() const override
Definition: Clang.h:107
Driver.h
Filename
StringRef Filename
Definition: Format.cpp:1825
clang::driver::tools::ClangAs::hasIntegratedAssembler
bool hasIntegratedAssembler() const override
Definition: Clang.h:129
clang::driver::tools::OffloadBundler::hasIntegratedCPP
bool hasIntegratedCPP() const override
Definition: Clang.h:144
clang::driver::tools::OffloadBundler::OffloadBundler
OffloadBundler(const ToolChain &TC)
Definition: Clang.h:141
clang::driver::tools::OffloadBundler
Offload bundler tool.
Definition: Clang.h:139
clang::driver::tools::Clang::canEmitIR
bool canEmitIR() const override
Definition: Clang.h:109
clang::driver::tools::Clang::hasIntegratedCPP
bool hasIntegratedCPP() const override
Definition: Clang.h:108
llvm::SmallVector
Definition: LLVM.h:35
clang
Dataflow Directional Tag Classes.
Definition: CFGReachabilityAnalysis.h:21
clang::driver::tools::Clang
Clang compiler tool.
Definition: Clang.h:28
DebugInfoOptions.h
clang::ObjCRuntime
The basic abstraction for the target Objective-C runtime.
Definition: ObjCRuntime.h:27
clang::driver::Tool
Tool - Information on a specific compilation tool.
Definition: Tool.h:33
clang::driver::Compilation
Compilation - A set of tasks to perform for a single driver invocation.
Definition: Compilation.h:45
clang::driver::tools::OffloadWrapper::OffloadWrapper
OffloadWrapper(const ToolChain &TC)
Definition: Clang.h:159
MSVC.h
clang::driver::tools::ClangAs::hasGoodDiagnostics
bool hasGoodDiagnostics() const override
Does this tool have "good" standardized diagnostics, or should the driver add an additional "command ...
Definition: Clang.h:128
clang::driver::tools::ClangAs::hasIntegratedCPP
bool hasIntegratedCPP() const override
Definition: Clang.h:130
clang::driver::ToolChain
ToolChain - Access to tools for a single platform.
Definition: ToolChain.h:88
clang::driver::tools::OffloadWrapper
Offload wrapper tool.
Definition: Clang.h:157