@@ -112,13 +112,13 @@ parseClangDriverArgs(const clang::driver::Driver &clangDriver,
112
112
return clangDriver.getOpts ().ParseArgs (args, unused1, unused2);
113
113
}
114
114
115
- static clang::driver::Driver
116
- createClangDriver ( const ASTContext &ctx ,
117
- const llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> & vfs) {
115
+ clang::driver::Driver ClangImporter::createClangDriver (
116
+ const LangOptions &LangOpts, const ClangImporterOptions &ClangImporterOpts ,
117
+ llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> vfs) {
118
118
auto clangDiags = clang::CompilerInstance::createDiagnostics (
119
119
new clang::DiagnosticOptions ());
120
- clang::driver::Driver clangDriver (ctx. ClangImporterOpts .clangPath ,
121
- ctx. LangOpts .Target .str (), *clangDiags,
120
+ clang::driver::Driver clangDriver (ClangImporterOpts.clangPath ,
121
+ LangOpts.Target .str (), *clangDiags,
122
122
" clang LLVM compiler" , vfs);
123
123
return clangDriver;
124
124
}
@@ -162,21 +162,23 @@ static std::optional<Path> findFirstIncludeDir(
162
162
return std::nullopt;
163
163
}
164
164
165
- static llvm::opt::InputArgList
166
- createClangArgs (const ASTContext &ctx, clang::driver::Driver &clangDriver) {
165
+ llvm::opt::InputArgList
166
+ ClangImporter::createClangArgs (const ClangImporterOptions &ClangImporterOpts,
167
+ const SearchPathOptions &SearchPathOpts,
168
+ clang::driver::Driver &clangDriver) {
167
169
// Flags passed to Swift with `-Xcc` might affect include paths.
168
170
std::vector<const char *> clangArgs;
169
- for (const auto &each : ctx. ClangImporterOpts .ExtraArgs ) {
171
+ for (const auto &each : ClangImporterOpts.ExtraArgs ) {
170
172
clangArgs.push_back (each.c_str ());
171
173
}
172
174
llvm::opt::InputArgList clangDriverArgs =
173
175
parseClangDriverArgs (clangDriver, clangArgs);
174
176
// If an SDK path was explicitly passed to Swift, make sure to pass it to
175
177
// Clang driver as well. It affects the resulting include paths.
176
- auto sdkPath = ctx. SearchPathOpts .getSDKPath ();
178
+ auto sdkPath = SearchPathOpts.getSDKPath ();
177
179
if (!sdkPath.empty ())
178
180
clangDriver.SysRoot = sdkPath.str ();
179
- if (auto sysroot = ctx. SearchPathOpts .getSysRoot ())
181
+ if (auto sysroot = SearchPathOpts.getSysRoot ())
180
182
clangDriver.SysRoot = sysroot->str ();
181
183
return clangDriverArgs;
182
184
}
@@ -188,8 +190,10 @@ getLibcFileMapping(ASTContext &ctx, StringRef modulemapFileName,
188
190
const llvm::Triple &triple = ctx.LangOpts .Target ;
189
191
190
192
// Extract the libc path from Clang driver.
191
- auto clangDriver = createClangDriver (ctx, vfs);
192
- auto clangDriverArgs = createClangArgs (ctx, clangDriver);
193
+ auto clangDriver = ClangImporter::createClangDriver (
194
+ ctx.LangOpts , ctx.ClangImporterOpts , vfs);
195
+ auto clangDriverArgs = ClangImporter::createClangArgs (
196
+ ctx.ClangImporterOpts , ctx.SearchPathOpts , clangDriver);
193
197
194
198
llvm::opt::ArgStringList includeArgStrings;
195
199
const auto &clangToolchain =
@@ -262,8 +266,10 @@ static void getLibStdCxxFileMapping(
262
266
return ;
263
267
264
268
// Extract the libstdc++ installation path from Clang driver.
265
- auto clangDriver = createClangDriver (ctx, vfs);
266
- auto clangDriverArgs = createClangArgs (ctx, clangDriver);
269
+ auto clangDriver = ClangImporter::createClangDriver (
270
+ ctx.LangOpts , ctx.ClangImporterOpts , vfs);
271
+ auto clangDriverArgs = ClangImporter::createClangArgs (
272
+ ctx.ClangImporterOpts , ctx.SearchPathOpts , clangDriver);
267
273
268
274
llvm::opt::ArgStringList stdlibArgStrings;
269
275
const auto &clangToolchain =
@@ -457,8 +463,10 @@ SmallVector<std::pair<std::string, std::string>, 2> GetWindowsFileMappings(
457
463
if (!Triple.isWindowsMSVCEnvironment ())
458
464
return Mappings;
459
465
460
- clang::driver::Driver Driver = createClangDriver (Context, driverVFS);
461
- const llvm::opt::InputArgList Args = createClangArgs (Context, Driver);
466
+ clang::driver::Driver Driver = ClangImporter::createClangDriver (
467
+ Context.LangOpts , Context.ClangImporterOpts , driverVFS);
468
+ const llvm::opt::InputArgList Args = ClangImporter::createClangArgs (
469
+ Context.ClangImporterOpts , Context.SearchPathOpts , Driver);
462
470
const clang::driver::ToolChain &ToolChain = Driver.getToolChain (Args, Triple);
463
471
llvm::vfs::FileSystem &VFS = ToolChain.getVFS ();
464
472
0 commit comments