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

1

2

3

4

5

6

7

8

14#include "llvm/Option/ArgList.h"

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

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

17#include "llvm/Support/raw_ostream.h"

18

22using namespace clang;

24

27 StringRef InstallPath,

30 for (const auto &Path : PathsCallback(Multilib))

32}

33

34

36 const ArgList &Args)

43

49

50

53 .str());

55 getFilePaths().push_back(computeSysRoot() + "/lib" +

57 } else {

59 getFilePaths().push_back(computeSysRoot() + "/lib");

60 }

61}

62

65}

66

70}

71

75}

76

78 llvm::opt::ArgStringList &CC1Args,

80 CC1Args.push_back("-nostdsysteminc");

81}

82

84 ArgStringList &CC1Args) const {

85 if (DriverArgs.hasArg(options::OPT_nostdinc))

86 return;

87

88 if (!DriverArgs.hasArg(options::OPT_nostdlibinc)) {

90 llvm::sys::path::append(Dir, "include");

93 llvm::sys::path::append(Dir2, "sys-include");

95 }

96}

97

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

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

106 CC1Args);

107}

108

109std::string CSKYToolChain::computeSysRoot() const {

110 if (getDriver().SysRoot.empty())

112

117 llvm::sys::path::append(SysRootDir, LibDir, "..", TripleStr);

118 } else {

119

120

121 llvm::sys::path::append(SysRootDir, getDriver().Dir, "..",

123 }

124

125 if (!llvm::sys::fs::exists(SysRootDir))

126 return std::string();

127

128 return std::string(SysRootDir);

129}

130

134 const ArgList &Args,

135 const char *LinkingOutput) const {

138 ArgStringList CmdArgs;

139

140 if (D.SysRoot.empty())

141 CmdArgs.push_back(Args.MakeArgString("--sysroot=" + D.SysRoot));

142

143 CmdArgs.push_back("-m");

144 CmdArgs.push_back("cskyelf");

145

146 std::string Linker = getToolChain().GetLinkerPath();

147

148 bool WantCRTs =

149 !Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles);

150

151 const char *crtbegin, *crtend;

154 crtbegin = "crtbegin.o";

155 crtend = "crtend.o";

156 } else {

160 crtend =

162 }

163

164 if (WantCRTs) {

168 }

169

170 Args.AddAllArgs(CmdArgs, options::OPT_L);

172 Args.addAllArgs(CmdArgs, {options::OPT_T_Group, options::OPT_s,

173 options::OPT_t, options::OPT_r});

174

176

177

178

179 if (!Args.hasArg(options::OPT_nostdlib) &&

180 !Args.hasArg(options::OPT_nodefaultlibs)) {

183 CmdArgs.push_back("--start-group");

184 CmdArgs.push_back("-lc");

185 if (Args.hasArg(options::OPT_msim))

186 CmdArgs.push_back("-lsemi");

187 else

188 CmdArgs.push_back("-lnosys");

189 CmdArgs.push_back("--end-group");

191 }

192

193 if (WantCRTs) {

196 }

197

198 CmdArgs.push_back("-o");

200 C.addCommand(std::make_unique(

202 CmdArgs, Inputs, Output));

203}

204

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...

std::string SysRoot

sysroot, if present

InputInfo - Wrapper for information about an input source.

const char * getFilename() const

See also MultilibSetBuilder for combining multilibs into a set.

const IncludeDirsFunc & filePathsCallback() const

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

const std::string & includeSuffix() const

Get the include directory suffix.

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

static constexpr ResponseFileSupport AtFileCurCP()