clang: lib/Driver/ToolChains/Hurd.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

11#include "clang/Config/config.h"

14#include "llvm/Support/Path.h"

15#include "llvm/Support/VirtualFileSystem.h"

16

19using namespace clang;

21

23

24

25

26

27

28

29

31 const llvm::Triple &TargetTriple,

32 StringRef SysRoot) const {

33 switch (TargetTriple.getArch()) {

34 default:

35 break;

36

37 case llvm::Triple::x86:

38

39

40

41

42 if (D.getVFS().exists(SysRoot + "/lib/i386-gnu"))

43 return "i386-gnu";

44 break;

45

46 case llvm::Triple::x86_64:

47 return "x86_64-gnu";

48 }

49

50

51

52 return TargetTriple.str();

53}

54

55static StringRef getOSLibDir(const llvm::Triple &Triple, const ArgList &Args) {

56

57

58

59

60

61

62

63

64

65

66 if (Triple.getArch() == llvm::Triple::x86)

67 return "lib32";

68

69 return Triple.isArch32Bit() ? "lib" : "lib64";

70}

71

72Hurd::Hurd(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)

79

81

82

83

84

85

86

88

89 const std::string OSLibDir = std::string(getOSLibDir(Triple, Args));

90 const std::string MultiarchTriple = getMultiarchTriple(D, Triple, SysRoot);

91

92#ifdef ENABLE_LINKER_BUILD_ID

93 ExtraOpts.push_back("--build-id");

94#endif

95

97

98

99

100

101

102

103 if (StringRef(D.Dir).starts_with(SysRoot)) {

104 addPathIfExists(D, D.Dir + "/../lib/" + MultiarchTriple, Paths);

105 addPathIfExists(D, D.Dir + "/../" + OSLibDir, Paths);

106 }

107

108 addPathIfExists(D, SysRoot + "/lib/" + MultiarchTriple, Paths);

109 addPathIfExists(D, SysRoot + "/lib/../" + OSLibDir, Paths);

110

111 addPathIfExists(D, SysRoot + "/usr/lib/" + MultiarchTriple, Paths);

112 addPathIfExists(D, SysRoot + "/usr/lib/../" + OSLibDir, Paths);

113

115

116

117

118

119

120

121 if (StringRef(D.Dir).starts_with(SysRoot))

122 addPathIfExists(D, D.Dir + "/../lib", Paths);

123

124 addPathIfExists(D, SysRoot + "/lib", Paths);

125 addPathIfExists(D, SysRoot + "/usr/lib", Paths);

126}

127

129

131

134}

135

138 case llvm::Triple::x86:

139 return "/lib/ld.so";

140 case llvm::Triple::x86_64:

141 return "/lib/ld-x86-64.so.1";

142 default:

143 break;

144 }

145

146 llvm_unreachable("unsupported architecture");

147}

148

150 ArgStringList &CC1Args) const {

153

154 if (DriverArgs.hasArg(clang::driver::options::OPT_nostdinc))

155 return;

156

157 if (!DriverArgs.hasArg(options::OPT_nostdlibinc))

158 addSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/local/include");

159

160 if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {

162 llvm::sys::path::append(P, "include");

164 }

165

166 if (DriverArgs.hasArg(options::OPT_nostdlibinc))

167 return;

168

169

170 StringRef CIncludeDirs(C_INCLUDE_DIRS);

171 if (CIncludeDirs != "") {

173 CIncludeDirs.split(Dirs, ":");

174 for (StringRef Dir : Dirs) {

175 StringRef Prefix =

176 llvm::sys::path::is_absolute(Dir) ? "" : StringRef(SysRoot);

178 }

179 return;

180 }

181

182

183

184

186

187

188

190 if (!MultiarchIncludeDir.empty() &&

191 D.getVFS().exists(SysRoot + "/usr/include/" + MultiarchIncludeDir))

193 SysRoot + "/usr/include/" + MultiarchIncludeDir);

194

195

196

197

199

201}

202

204 llvm::opt::ArgStringList &CC1Args) const {

205

206

208 return;

209

211 StringRef DebianMultiarch =

213 : TripleStr;

214

216}

217

219 for (const auto &Opt : ExtraOpts)

220 CmdArgs.push_back(Opt.c_str());

221}

static StringRef getOSLibDir(const llvm::Triple &Triple, const ArgList &Args)

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

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