clang: lib/Driver/ToolChains/Gnu.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_GNU_H

10#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_GNU_H

11

18#include

19

22

34

36 StringRef Path, const llvm::opt::ArgList &Args,

38

40

41

44public:

46

48

51 const llvm::opt::ArgList &TCArgs,

52 const char *LinkingOutput) const override;

53};

54

55class LLVM_LIBRARY_VISIBILITY Linker : public Tool {

56public:

58

60 bool isLinkJob() const override { return true; }

61

64 const llvm::opt::ArgList &TCArgs,

65 const char *LinkingOutput) const override;

66};

67

69public:

71 : Tool("GNU::StaticLibTool", "static-lib-linker", TC) {}

72

74 bool isLinkJob() const override { return true; }

75

78 const llvm::opt::ArgList &TCArgs,

79 const char *LinkingOutput) const override;

80};

81}

82

83

85class LLVM_LIBRARY_VISIBILITY Common : public Tool {

86public:

87 Common(const char *Name, const char *ShortName, const ToolChain &TC)

88 : Tool(Name, ShortName, TC) {}

89

90

91

92

96 const llvm::opt::ArgList &TCArgs,

97 const char *LinkingOutput) const override;

98

99

100

102 llvm::opt::ArgStringList &CmdArgs) const = 0;

103};

104

106public:

108 : Common("gcc::Preprocessor", "gcc preprocessor", TC) {}

109

112

113 void RenderExtraToolArgs(const JobAction &JA,

114 llvm::opt::ArgStringList &CmdArgs) const override;

115};

116

118public:

120

123

124 void RenderExtraToolArgs(const JobAction &JA,

125 llvm::opt::ArgStringList &CmdArgs) const override;

126};

127

129public:

131

133 bool isLinkJob() const override { return true; }

134

135 void RenderExtraToolArgs(const JobAction &JA,

136 llvm::opt::ArgStringList &CmdArgs) const override;

137};

138}

139}

140

141namespace toolchains {

142

143

144

145

147public:

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

164

166

167

169

170

172

173

175

177 bool isOlderThan(int RHSMajor, int RHSMinor, int RHSPatch,

178 StringRef RHSPatchSuffix = StringRef()) const;

185 };

186

188

191

193

194

196

198

199

201

202

204

205

207

208

210

211

213

215 const llvm::opt::ArgList &DriverArgs,

216 llvm::opt::ArgStringList &CC1Args,

217 StringRef DebianMultiarch) const;

218 };

219

220

221

222

223

224

225

227 bool IsValid;

228

230

232

233

234

235 std::optional BiarchSibling;

236

237

238

239 std::setstd::string CandidateGCCInstallPaths;

240

241

243

244

245 const std::string GentooConfigDir = "/etc/env.d/gcc";

246

247 public:

248

249

250

252 [](const llvm::Triple &T) {

253 StringRef S = T.str();

254 return S;

255 };

256

258

259 void init(const llvm::Triple &TargetTriple, const llvm::opt::ArgList &Args);

260

261

262

263

264

265

266

267 bool isValid() const { return IsValid; }

268

270 return SelectedInstallation;

271 }

272

273

275 return SelectedInstallation.GCCTriple;

276 }

277

278

280 return SelectedInstallation.GCCInstallPath;

281 }

282

283

285 return SelectedInstallation.GCCParentLibPath;

286 }

287

288

290 return SelectedInstallation.SelectedMultilib;

291 }

292

293

295

296

297

298 bool getBiarchSibling(Multilib &M) const;

299

300

302 return SelectedInstallation.Version;

303 }

304

305

306 void print(raw_ostream &OS) const;

307

308 private:

309 static void

310 CollectLibDirsAndTriples(const llvm::Triple &TargetTriple,

311 const llvm::Triple &BiarchTriple,

316

317 void AddDefaultGCCPrefixes(const llvm::Triple &TargetTriple,

319 StringRef SysRoot);

320

321

322

323 bool GCCInstallationHasLibStdcxxIncludePaths(

325 const llvm::opt::ArgList &DriverArgs) const;

326

327

328

329 bool SelectGCCInstallationDirectory(

331 const llvm::opt::ArgList &Args,

333

334 bool ScanGCCForMultilibs(const llvm::Triple &TargetTriple,

335 const llvm::opt::ArgList &Args, StringRef Path,

336 bool NeedsBiarchSuffix = false);

337

338 void ScanLibDirForGCCTriple(const llvm::Triple &TargetArch,

339 const llvm::opt::ArgList &Args,

340 const std::string &LibDir,

341 StringRef CandidateTriple,

342 bool NeedsBiarchSuffix, bool GCCDirExists,

343 bool GCCCrossDirExists);

344

345 bool ScanGentooConfigs(const llvm::Triple &TargetTriple,

346 const llvm::opt::ArgList &Args,

349

350 bool ScanGentooGccConfig(const llvm::Triple &TargetTriple,

351 const llvm::opt::ArgList &Args,

352 StringRef CandidateTriple,

353 bool NeedsBiarchSuffix = false);

354 };

355

356protected:

361

362public:

364 const llvm::opt::ArgList &Args);

366

368

372 bool isPIEDefault(const llvm::opt::ArgList &Args) const override;

375 llvm::opt::DerivedArgList *

376 TranslateArgs(const llvm::opt::DerivedArgList &Args, StringRef BoundArch,

378

379protected:

383

384

385

386

387

389

390

392

394 void AddMultilibPaths(const Driver &D, const std::string &SysRoot,

395 const std::string &OSLibDir,

396 const std::string &MultiarchTriple,

397 path_list &Paths);

398 void AddMultiarchPaths(const Driver &D, const std::string &SysRoot,

399 const std::string &OSLibDir, path_list &Paths);

400 void AddMultilibIncludeArgs(const llvm::opt::ArgList &DriverArgs,

401 llvm::opt::ArgStringList &CC1Args) const;

402

403

404

405 void AddClangCXXStdlibIncludeArgs(

406 const llvm::opt::ArgList &DriverArgs,

407 llvm::opt::ArgStringList &CC1Args) const override;

408

409 void addSYCLIncludeArgs(const llvm::opt::ArgList &DriverArgs,

410 llvm::opt::ArgStringList &CC1Args) const override;

411

412 virtual void

413 addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,

414 llvm::opt::ArgStringList &CC1Args) const;

415 virtual void

416 addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,

417 llvm::opt::ArgStringList &CC1Args) const;

418

419 bool addGCCLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,

420 llvm::opt::ArgStringList &CC) const;

421

423 Twine IncludeSuffix,

424 const llvm::opt::ArgList &DriverArgs,

425 llvm::opt::ArgStringList &CC1Args,

426 bool DetectDebian = false) const;

427

428

429

430private:

431 mutable std::unique_ptrtools::gcc::Preprocessor Preprocess;

432 mutable std::unique_ptrtools::gcc::Compiler Compile;

433};

434

436 virtual void anchor();

437

438public:

440 const llvm::opt::ArgList &Args)

442

443 void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,

444 llvm::opt::ArgStringList &CC1Args,

446

447 virtual std::string getDynamicLinker(const llvm::opt::ArgList &Args) const {

448 return {};

449 }

450

451 virtual void addExtraOpts(llvm::opt::ArgStringList &CmdArgs) const {}

452};

453

454}

455}

456}

457

458#endif

static bool addLibStdCXXIncludePaths(llvm::vfs::FileSystem &vfs, Twine IncludeDir, StringRef Triple, Twine IncludeSuffix, const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args, bool DetectDebian=false)

static void print(llvm::raw_ostream &OS, const T &V, ASTContext &ASTCtx, QualType Ty)

Simple wrapper for toolchain detector with costly initialization.

Compilation - A set of tasks to perform for a single driver invocation.

Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...

InputInfo - Wrapper for information about an input source.

See also MultilibSetBuilder for combining multilibs into a set.

This corresponds to a single GCC Multilib, or a segment of one controlled by a command line flag.

SmallVector< InputInfo, 4 > InputInfoList

bool findMIPSMultilibs(const Driver &D, const llvm::Triple &TargetTriple, StringRef Path, const llvm::opt::ArgList &Args, DetectedMultilibs &Result)

The JSON file list parser is used to communicate input to InstallAPI.

@ Result

The result type of a method or function.

const FunctionProtoType * T

int const char * function

MultilibSet Multilibs

The set of multilibs that the detected installation supports.

Definition Gnu.h:25

std::optional< Multilib > BiarchSibling

On Biarch systems, this corresponds to the default multilib when targeting the non-default multilib.

Definition Gnu.h:32

llvm::SmallVector< Multilib > SelectedMultilibs

The multilibs appropriate for the given flags.

Definition Gnu.h:28