Tools.h revision c1da981bba867681004004b2d54ec2fdf3c08913
1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//===--- Tools.h - Tool Implementations -------------------------*- C++ -*-===// 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// The LLVM Compiler Infrastructure 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// This file is distributed under the University of Illinois Open Source 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// License. See LICENSE.TXT for details. 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//===----------------------------------------------------------------------===// 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef CLANG_LIB_DRIVER_TOOLS_H_ 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define CLANG_LIB_DRIVER_TOOLS_H_ 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "clang/Driver/Tool.h" 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "clang/Driver/Types.h" 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "clang/Driver/Util.h" 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "llvm/Support/Compiler.h" 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownnamespace clang { 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownnamespace driver { 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown class Driver; 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownnamespace toolchains { 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown class Darwin; 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownnamespace tools { 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /// \brief Clang compiler tool. 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown class LLVM_LIBRARY_VISIBILITY Clang : public Tool { 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown void AddPreprocessingOptions(const Driver &D, 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const ArgList &Args, 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ArgStringList &CmdArgs, 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const InputInfo &Output, 35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const InputInfoList &Inputs) const; 36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown public: 42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {} 43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual bool hasGoodDiagnostics() const { return true; } 45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual bool hasIntegratedAssembler() const { return true; } 46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual bool hasIntegratedCPP() const { return true; } 47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void ConstructJob(Compilation &C, const JobAction &JA, 49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const InputInfo &Output, 50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const InputInfoList &Inputs, 51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const ArgList &TCArgs, 52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const char *LinkingOutput) const; 53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }; 54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /// \brief Clang integrated assembler tool. 56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool { 57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown public: 58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ClangAs(const ToolChain &TC) : Tool("clang::as", 59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "clang integrated assembler", TC) {} 60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual bool hasGoodDiagnostics() const { return true; } 62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual bool hasIntegratedAssembler() const { return false; } 63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual bool hasIntegratedCPP() const { return false; } 64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void ConstructJob(Compilation &C, const JobAction &JA, 66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const InputInfo &Output, 67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const InputInfoList &Inputs, 68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const ArgList &TCArgs, 69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const char *LinkingOutput) const; 70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }; 71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /// gcc - Generic GCC tool implementations. 73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownnamespace gcc { 74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown class LLVM_LIBRARY_VISIBILITY Common : public Tool { 75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown public: 76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Common(const char *Name, const char *ShortName, 77ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const ToolChain &TC) : Tool(Name, ShortName, TC) {} 78ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void ConstructJob(Compilation &C, const JobAction &JA, 80ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const InputInfo &Output, 81ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const InputInfoList &Inputs, 82ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const ArgList &TCArgs, 83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const char *LinkingOutput) const; 84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /// RenderExtraToolArgs - Render any arguments necessary to force 86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /// the particular tool mode. 87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void RenderExtraToolArgs(const JobAction &JA, 88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ArgStringList &CmdArgs) const = 0; 89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }; 90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown class LLVM_LIBRARY_VISIBILITY Preprocess : public Common { 93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown public: 94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", 95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "gcc preprocessor", TC) {} 96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual bool hasGoodDiagnostics() const { return true; } 98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual bool hasIntegratedCPP() const { return false; } 99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void RenderExtraToolArgs(const JobAction &JA, 101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ArgStringList &CmdArgs) const; 102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }; 103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown class LLVM_LIBRARY_VISIBILITY Precompile : public Common { 105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown public: 106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Precompile(const ToolChain &TC) : Common("gcc::Precompile", 107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "gcc precompile", TC) {} 108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual bool hasGoodDiagnostics() const { return true; } 110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual bool hasIntegratedCPP() const { return true; } 111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void RenderExtraToolArgs(const JobAction &JA, 113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ArgStringList &CmdArgs) const; 114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }; 115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 116 class LLVM_LIBRARY_VISIBILITY Compile : public Common { 117 public: 118 Compile(const ToolChain &TC) : Common("gcc::Compile", 119 "gcc frontend", TC) {} 120 121 virtual bool hasGoodDiagnostics() const { return true; } 122 virtual bool hasIntegratedCPP() const { return true; } 123 124 virtual void RenderExtraToolArgs(const JobAction &JA, 125 ArgStringList &CmdArgs) const; 126 }; 127 128 class LLVM_LIBRARY_VISIBILITY Assemble : public Common { 129 public: 130 Assemble(const ToolChain &TC) : Common("gcc::Assemble", 131 "assembler (via gcc)", TC) {} 132 133 virtual bool hasIntegratedCPP() const { return false; } 134 135 virtual void RenderExtraToolArgs(const JobAction &JA, 136 ArgStringList &CmdArgs) const; 137 }; 138 139 class LLVM_LIBRARY_VISIBILITY Link : public Common { 140 public: 141 Link(const ToolChain &TC) : Common("gcc::Link", 142 "linker (via gcc)", TC) {} 143 144 virtual bool hasIntegratedCPP() const { return false; } 145 146 virtual void RenderExtraToolArgs(const JobAction &JA, 147 ArgStringList &CmdArgs) const; 148 }; 149} // end namespace gcc 150 151namespace darwin { 152 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool { 153 protected: 154 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const; 155 156 const toolchains::Darwin &getDarwinToolChain() const { 157 return reinterpret_cast<const toolchains::Darwin&>(getToolChain()); 158 } 159 160 public: 161 DarwinTool(const char *Name, const char *ShortName, 162 const ToolChain &TC) : Tool(Name, ShortName, TC) {} 163 }; 164 165 class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool { 166 public: 167 static const char *getBaseInputName(const ArgList &Args, 168 const InputInfoList &Input); 169 static const char *getBaseInputStem(const ArgList &Args, 170 const InputInfoList &Input); 171 static const char *getDependencyFileName(const ArgList &Args, 172 const InputInfoList &Inputs); 173 174 protected: 175 const char *getCC1Name(types::ID Type) const; 176 177 void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const; 178 void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 179 const InputInfoList &Inputs, 180 const ArgStringList &OutputArgs) const; 181 void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 182 const InputInfoList &Inputs, 183 const ArgStringList &OutputArgs) const; 184 void AddCPPUniqueOptionsArgs(const ArgList &Args, 185 ArgStringList &CmdArgs, 186 const InputInfoList &Inputs) const; 187 void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 188 189 public: 190 CC1(const char *Name, const char *ShortName, 191 const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {} 192 193 virtual bool hasGoodDiagnostics() const { return true; } 194 virtual bool hasIntegratedCPP() const { return true; } 195 }; 196 197 class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1 { 198 public: 199 Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess", 200 "gcc preprocessor", TC) {} 201 202 virtual void ConstructJob(Compilation &C, const JobAction &JA, 203 const InputInfo &Output, 204 const InputInfoList &Inputs, 205 const ArgList &TCArgs, 206 const char *LinkingOutput) const; 207 }; 208 209 class LLVM_LIBRARY_VISIBILITY Compile : public CC1 { 210 public: 211 Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {} 212 213 virtual void ConstructJob(Compilation &C, const JobAction &JA, 214 const InputInfo &Output, 215 const InputInfoList &Inputs, 216 const ArgList &TCArgs, 217 const char *LinkingOutput) const; 218 }; 219 220 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool { 221 public: 222 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble", 223 "assembler", TC) {} 224 225 virtual bool hasIntegratedCPP() const { return false; } 226 227 virtual void ConstructJob(Compilation &C, const JobAction &JA, 228 const InputInfo &Output, 229 const InputInfoList &Inputs, 230 const ArgList &TCArgs, 231 const char *LinkingOutput) const; 232 }; 233 234 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool { 235 void AddLinkArgs(Compilation &C, const ArgList &Args, 236 ArgStringList &CmdArgs) const; 237 238 public: 239 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {} 240 241 virtual bool hasIntegratedCPP() const { return false; } 242 243 virtual void ConstructJob(Compilation &C, const JobAction &JA, 244 const InputInfo &Output, 245 const InputInfoList &Inputs, 246 const ArgList &TCArgs, 247 const char *LinkingOutput) const; 248 }; 249 250 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool { 251 public: 252 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {} 253 254 virtual bool hasIntegratedCPP() const { return false; } 255 256 virtual void ConstructJob(Compilation &C, const JobAction &JA, 257 const InputInfo &Output, 258 const InputInfoList &Inputs, 259 const ArgList &TCArgs, 260 const char *LinkingOutput) const; 261 }; 262 263 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool { 264 public: 265 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil", 266 "dsymutil", TC) {} 267 268 virtual bool hasIntegratedCPP() const { return false; } 269 270 virtual void ConstructJob(Compilation &C, const JobAction &JA, 271 const InputInfo &Output, 272 const InputInfoList &Inputs, 273 const ArgList &TCArgs, 274 const char *LinkingOutput) const; 275 }; 276} 277 278 /// openbsd -- Directly call GNU Binutils assembler and linker 279namespace openbsd { 280 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 281 public: 282 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler", 283 TC) {} 284 285 virtual bool hasIntegratedCPP() const { return false; } 286 287 virtual void ConstructJob(Compilation &C, const JobAction &JA, 288 const InputInfo &Output, 289 const InputInfoList &Inputs, 290 const ArgList &TCArgs, 291 const char *LinkingOutput) const; 292 }; 293 class LLVM_LIBRARY_VISIBILITY Link : public Tool { 294 public: 295 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {} 296 297 virtual bool hasIntegratedCPP() const { return false; } 298 299 virtual void ConstructJob(Compilation &C, const JobAction &JA, 300 const InputInfo &Output, 301 const InputInfoList &Inputs, 302 const ArgList &TCArgs, 303 const char *LinkingOutput) const; 304 }; 305} // end namespace openbsd 306 307 /// freebsd -- Directly call GNU Binutils assembler and linker 308namespace freebsd { 309 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 310 public: 311 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler", 312 TC) {} 313 314 virtual bool hasIntegratedCPP() const { return false; } 315 316 virtual void ConstructJob(Compilation &C, const JobAction &JA, 317 const InputInfo &Output, 318 const InputInfoList &Inputs, 319 const ArgList &TCArgs, 320 const char *LinkingOutput) const; 321 }; 322 class LLVM_LIBRARY_VISIBILITY Link : public Tool { 323 public: 324 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {} 325 326 virtual bool hasIntegratedCPP() const { return false; } 327 328 virtual void ConstructJob(Compilation &C, const JobAction &JA, 329 const InputInfo &Output, 330 const InputInfoList &Inputs, 331 const ArgList &TCArgs, 332 const char *LinkingOutput) const; 333 }; 334} // end namespace freebsd 335 336 /// linux -- Directly call GNU Binutils assembler and linker 337namespace linuxtools { 338 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 339 public: 340 Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler", 341 TC) {} 342 343 virtual bool hasIntegratedCPP() const { return false; } 344 345 virtual void ConstructJob(Compilation &C, const JobAction &JA, 346 const InputInfo &Output, 347 const InputInfoList &Inputs, 348 const ArgList &TCArgs, 349 const char *LinkingOutput) const; 350 }; 351 class LLVM_LIBRARY_VISIBILITY Link : public Tool { 352 public: 353 Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {} 354 355 virtual bool hasIntegratedCPP() const { return false; } 356 357 virtual void ConstructJob(Compilation &C, const JobAction &JA, 358 const InputInfo &Output, 359 const InputInfoList &Inputs, 360 const ArgList &TCArgs, 361 const char *LinkingOutput) const; 362 }; 363} 364 /// minix -- Directly call GNU Binutils assembler and linker 365namespace minix { 366 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 367 public: 368 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler", 369 TC) {} 370 371 virtual bool hasIntegratedCPP() const { return false; } 372 373 virtual void ConstructJob(Compilation &C, const JobAction &JA, 374 const InputInfo &Output, 375 const InputInfoList &Inputs, 376 const ArgList &TCArgs, 377 const char *LinkingOutput) const; 378 }; 379 class LLVM_LIBRARY_VISIBILITY Link : public Tool { 380 public: 381 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {} 382 383 virtual bool hasIntegratedCPP() const { return false; } 384 385 virtual void ConstructJob(Compilation &C, const JobAction &JA, 386 const InputInfo &Output, 387 const InputInfoList &Inputs, 388 const ArgList &TCArgs, 389 const char *LinkingOutput) const; 390 }; 391} // end namespace minix 392 393 /// auroraux -- Directly call GNU Binutils assembler and linker 394namespace auroraux { 395 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 396 public: 397 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler", 398 TC) {} 399 400 virtual bool hasIntegratedCPP() const { return false; } 401 402 virtual void ConstructJob(Compilation &C, const JobAction &JA, 403 const InputInfo &Output, 404 const InputInfoList &Inputs, 405 const ArgList &TCArgs, 406 const char *LinkingOutput) const; 407 }; 408 class LLVM_LIBRARY_VISIBILITY Link : public Tool { 409 public: 410 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {} 411 412 virtual bool hasIntegratedCPP() const { return false; } 413 414 virtual void ConstructJob(Compilation &C, const JobAction &JA, 415 const InputInfo &Output, 416 const InputInfoList &Inputs, 417 const ArgList &TCArgs, 418 const char *LinkingOutput) const; 419 }; 420} // end namespace auroraux 421 422 /// dragonfly -- Directly call GNU Binutils assembler and linker 423namespace dragonfly { 424 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 425 public: 426 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler", 427 TC) {} 428 429 virtual bool hasIntegratedCPP() const { return false; } 430 431 virtual void ConstructJob(Compilation &C, const JobAction &JA, 432 const InputInfo &Output, 433 const InputInfoList &Inputs, 434 const ArgList &TCArgs, 435 const char *LinkingOutput) const; 436 }; 437 class LLVM_LIBRARY_VISIBILITY Link : public Tool { 438 public: 439 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {} 440 441 virtual bool hasIntegratedCPP() const { return false; } 442 443 virtual void ConstructJob(Compilation &C, const JobAction &JA, 444 const InputInfo &Output, 445 const InputInfoList &Inputs, 446 const ArgList &TCArgs, 447 const char *LinkingOutput) const; 448 }; 449} // end namespace dragonfly 450 451 /// Visual studio tools. 452namespace visualstudio { 453 class LLVM_LIBRARY_VISIBILITY Link : public Tool { 454 public: 455 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {} 456 457 virtual bool hasIntegratedCPP() const { return false; } 458 459 virtual void ConstructJob(Compilation &C, const JobAction &JA, 460 const InputInfo &Output, 461 const InputInfoList &Inputs, 462 const ArgList &TCArgs, 463 const char *LinkingOutput) const; 464 }; 465} // end namespace visualstudio 466 467} // end namespace toolchains 468} // end namespace driver 469} // end namespace clang 470 471#endif // CLANG_LIB_DRIVER_TOOLS_H_ 472