mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Merge pull request #64151 from compnerd/control
Driver: introduce additional Windows controls
This commit is contained in:
@@ -265,6 +265,11 @@ private:
|
|||||||
FrameworkSearchPaths.size() - 1);
|
FrameworkSearchPaths.size() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
llvm::Optional<StringRef> WinSDKRoot = llvm::None;
|
||||||
|
llvm::Optional<StringRef> WinSDKVersion = llvm::None;
|
||||||
|
llvm::Optional<StringRef> VCToolsRoot = llvm::None;
|
||||||
|
llvm::Optional<StringRef> VCToolsVersion = llvm::None;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
StringRef getSDKPath() const { return SDKPath; }
|
StringRef getSDKPath() const { return SDKPath; }
|
||||||
|
|
||||||
@@ -283,6 +288,26 @@ public:
|
|||||||
Lookup.searchPathsDidChange();
|
Lookup.searchPathsDidChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
llvm::Optional<StringRef> getWinSDKRoot() const { return WinSDKRoot; }
|
||||||
|
void setWinSDKRoot(StringRef root) {
|
||||||
|
WinSDKRoot = root;
|
||||||
|
}
|
||||||
|
|
||||||
|
llvm::Optional<StringRef> getWinSDKVersion() const { return WinSDKVersion; }
|
||||||
|
void setWinSDKVersion(StringRef version) {
|
||||||
|
WinSDKVersion = version;
|
||||||
|
}
|
||||||
|
|
||||||
|
llvm::Optional<StringRef> getVCToolsRoot() const { return VCToolsRoot; }
|
||||||
|
void setVCToolsRoot(StringRef root) {
|
||||||
|
VCToolsRoot = root;
|
||||||
|
}
|
||||||
|
|
||||||
|
llvm::Optional<StringRef> getVCToolsVersion() const { return VCToolsVersion; }
|
||||||
|
void setVCToolsVersion(StringRef version) {
|
||||||
|
VCToolsVersion = version;
|
||||||
|
}
|
||||||
|
|
||||||
ArrayRef<std::string> getImportSearchPaths() const {
|
ArrayRef<std::string> getImportSearchPaths() const {
|
||||||
return ImportSearchPaths;
|
return ImportSearchPaths;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -224,6 +224,25 @@ def parseable_output : Flag<["-"], "parseable-output">,
|
|||||||
Flags<[NoInteractiveOption, DoesNotAffectIncrementalBuild]>,
|
Flags<[NoInteractiveOption, DoesNotAffectIncrementalBuild]>,
|
||||||
HelpText<"Emit textual output in a parseable format">;
|
HelpText<"Emit textual output in a parseable format">;
|
||||||
|
|
||||||
|
// Windows Options
|
||||||
|
|
||||||
|
def windows_sdk_root : Separate<["-"], "windows-sdk-root">,
|
||||||
|
Flags<[ArgumentIsPath, FrontendOption, SwiftAPIExtractOption,
|
||||||
|
SwiftSymbolGraphExtractOption, SwiftAPIDigesterOption]>,
|
||||||
|
HelpText<"Windows SDK Root">, MetaVarName<"<root>">;
|
||||||
|
def windows_sdk_version : Separate<["-"], "windows-sdk-version">,
|
||||||
|
Flags<[ArgumentIsPath, FrontendOption, SwiftAPIExtractOption,
|
||||||
|
SwiftSymbolGraphExtractOption, SwiftAPIDigesterOption]>,
|
||||||
|
HelpText<"Windows SDK Version">, MetaVarName<"<version>">;
|
||||||
|
def visualc_tools_root : Separate<["-"], "visualc-tools-root">,
|
||||||
|
Flags<[ArgumentIsPath, FrontendOption, SwiftAPIExtractOption,
|
||||||
|
SwiftSymbolGraphExtractOption, SwiftAPIDigesterOption]>,
|
||||||
|
HelpText<"VisualC++ Tools Root">, MetaVarName<"<root>">;
|
||||||
|
def visualc_tools_version : Separate<["-"], "visualc-tools-version">,
|
||||||
|
Flags<[ArgumentIsPath, FrontendOption, SwiftAPIExtractOption,
|
||||||
|
SwiftSymbolGraphExtractOption, SwiftAPIDigesterOption]>,
|
||||||
|
HelpText<"VisualC++ ToolSet Version">, MetaVarName<"<version>">;
|
||||||
|
|
||||||
// Standard Options
|
// Standard Options
|
||||||
def _DASH_DASH : Option<["--"], "", KIND_REMAINING_ARGS>,
|
def _DASH_DASH : Option<["--"], "", KIND_REMAINING_ARGS>,
|
||||||
Flags<[FrontendOption, DoesNotAffectIncrementalBuild]>;
|
Flags<[FrontendOption, DoesNotAffectIncrementalBuild]>;
|
||||||
|
|||||||
@@ -774,6 +774,23 @@ importer::addCommonInvocationArguments(
|
|||||||
invocationArgStrs.push_back("-mcx16");
|
invocationArgStrs.push_back("-mcx16");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (llvm::Optional<StringRef> R = ctx.SearchPathOpts.getWinSDKRoot()) {
|
||||||
|
invocationArgStrs.emplace_back("-Xmicrosoft-windows-sdk-root");
|
||||||
|
invocationArgStrs.emplace_back(*R);
|
||||||
|
}
|
||||||
|
if (llvm::Optional<StringRef> V = ctx.SearchPathOpts.getWinSDKVersion()) {
|
||||||
|
invocationArgStrs.emplace_back("-Xmicrosoft-windows-sdk-version");
|
||||||
|
invocationArgStrs.emplace_back(*V);
|
||||||
|
}
|
||||||
|
if (llvm::Optional<StringRef> R = ctx.SearchPathOpts.getVCToolsRoot()) {
|
||||||
|
invocationArgStrs.emplace_back("-Xmicrosoft-visualc-tools-root");
|
||||||
|
invocationArgStrs.emplace_back(*R);
|
||||||
|
}
|
||||||
|
if (llvm::Optional<StringRef> V = ctx.SearchPathOpts.getVCToolsVersion()) {
|
||||||
|
invocationArgStrs.emplace_back("-Xmicrosoft-visualc-tools-version");
|
||||||
|
invocationArgStrs.emplace_back(*V);
|
||||||
|
}
|
||||||
|
|
||||||
if (!importerOpts.Optimization.empty()) {
|
if (!importerOpts.Optimization.empty()) {
|
||||||
invocationArgStrs.push_back(importerOpts.Optimization);
|
invocationArgStrs.push_back(importerOpts.Optimization);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -339,7 +339,8 @@ GetWindowsFileMappings(ASTContext &Context) {
|
|||||||
std::string LibraryVersion;
|
std::string LibraryVersion;
|
||||||
int MajorVersion;
|
int MajorVersion;
|
||||||
} WindowsSDK;
|
} WindowsSDK;
|
||||||
if (llvm::getWindowsSDKDir(VFS, {}, {}, {},
|
if (llvm::getWindowsSDKDir(VFS, SearchPathOpts.getWinSDKRoot(),
|
||||||
|
SearchPathOpts.getWinSDKVersion(), {},
|
||||||
WindowsSDK.Path, WindowsSDK.MajorVersion,
|
WindowsSDK.Path, WindowsSDK.MajorVersion,
|
||||||
WindowsSDK.IncludeVersion,
|
WindowsSDK.IncludeVersion,
|
||||||
WindowsSDK.LibraryVersion)) {
|
WindowsSDK.LibraryVersion)) {
|
||||||
@@ -358,7 +359,8 @@ GetWindowsFileMappings(ASTContext &Context) {
|
|||||||
std::string Path;
|
std::string Path;
|
||||||
std::string Version;
|
std::string Version;
|
||||||
} UCRTSDK;
|
} UCRTSDK;
|
||||||
if (llvm::getUniversalCRTSdkDir(VFS, {}, {}, {},
|
if (llvm::getUniversalCRTSdkDir(VFS, SearchPathOpts.getWinSDKRoot(),
|
||||||
|
SearchPathOpts.getWinSDKVersion(), {},
|
||||||
UCRTSDK.Path, UCRTSDK.Version)) {
|
UCRTSDK.Path, UCRTSDK.Version)) {
|
||||||
llvm::SmallString<261> UCRTInjection{UCRTSDK.Path};
|
llvm::SmallString<261> UCRTInjection{UCRTSDK.Path};
|
||||||
llvm::sys::path::append(UCRTInjection, "Include", UCRTSDK.Version, "ucrt");
|
llvm::sys::path::append(UCRTInjection, "Include", UCRTSDK.Version, "ucrt");
|
||||||
@@ -373,9 +375,13 @@ GetWindowsFileMappings(ASTContext &Context) {
|
|||||||
std::string Path;
|
std::string Path;
|
||||||
llvm::ToolsetLayout Layout;
|
llvm::ToolsetLayout Layout;
|
||||||
} VCTools;
|
} VCTools;
|
||||||
if (llvm::findVCToolChainViaCommandLine(VFS, {}, {}, {}, VCTools.Path, VCTools.Layout) ||
|
if (llvm::findVCToolChainViaCommandLine(VFS, SearchPathOpts.getVCToolsRoot(),
|
||||||
|
SearchPathOpts.getVCToolsVersion(),
|
||||||
|
{}, VCTools.Path, VCTools.Layout) ||
|
||||||
llvm::findVCToolChainViaEnvironment(VFS, VCTools.Path, VCTools.Layout) ||
|
llvm::findVCToolChainViaEnvironment(VFS, VCTools.Path, VCTools.Layout) ||
|
||||||
llvm::findVCToolChainViaSetupConfig(VFS, VCTools.Path, VCTools.Layout)) {
|
llvm::findVCToolChainViaSetupConfig(VFS,
|
||||||
|
SearchPathOpts.getVCToolsVersion(),
|
||||||
|
VCTools.Path, VCTools.Layout)) {
|
||||||
assert(VCTools.Layout == llvm::ToolsetLayout::VS2017OrNewer &&
|
assert(VCTools.Layout == llvm::ToolsetLayout::VS2017OrNewer &&
|
||||||
"unsupported toolset layout (VS2017+ required)");
|
"unsupported toolset layout (VS2017+ required)");
|
||||||
|
|
||||||
|
|||||||
@@ -211,6 +211,24 @@ void ToolChain::addCommonFrontendArgs(const OutputInfo &OI,
|
|||||||
arguments.push_back(inputArgs.MakeArgString(OI.SDKPath));
|
arguments.push_back(inputArgs.MakeArgString(OI.SDKPath));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (const Arg *A = inputArgs.getLastArg(options::OPT_windows_sdk_root)) {
|
||||||
|
arguments.push_back("-windows-sdk-root");
|
||||||
|
arguments.push_back(inputArgs.MakeArgString(A->getValue()));
|
||||||
|
}
|
||||||
|
if (const Arg *A = inputArgs.getLastArg(options::OPT_windows_sdk_version)) {
|
||||||
|
arguments.push_back("-windows-sdk-version");
|
||||||
|
arguments.push_back(inputArgs.MakeArgString(A->getValue()));
|
||||||
|
}
|
||||||
|
if (const Arg *A = inputArgs.getLastArg(options::OPT_visualc_tools_root)) {
|
||||||
|
arguments.push_back("-visualc-tools-root");
|
||||||
|
arguments.push_back(inputArgs.MakeArgString(A->getValue()));
|
||||||
|
}
|
||||||
|
if (const Arg *A = inputArgs.getLastArg(options::OPT_visualc_tools_version)) {
|
||||||
|
arguments.push_back("-visualc-tools-version");
|
||||||
|
arguments.push_back(inputArgs.MakeArgString(A->getValue()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (llvm::sys::Process::StandardErrHasColors()) {
|
if (llvm::sys::Process::StandardErrHasColors()) {
|
||||||
arguments.push_back("-color-diagnostics");
|
arguments.push_back("-color-diagnostics");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1494,6 +1494,15 @@ static bool ParseSearchPathArgs(SearchPathOptions &Opts,
|
|||||||
if (const Arg *A = Args.getLastArg(OPT_sdk))
|
if (const Arg *A = Args.getLastArg(OPT_sdk))
|
||||||
Opts.setSDKPath(A->getValue());
|
Opts.setSDKPath(A->getValue());
|
||||||
|
|
||||||
|
if (const Arg *A = Args.getLastArg(OPT_windows_sdk_root))
|
||||||
|
Opts.setWinSDKRoot(A->getValue());
|
||||||
|
if (const Arg *A = Args.getLastArg(OPT_windows_sdk_version))
|
||||||
|
Opts.setWinSDKVersion(A->getValue());
|
||||||
|
if (const Arg *A = Args.getLastArg(OPT_visualc_tools_root))
|
||||||
|
Opts.setVCToolsRoot(A->getValue());
|
||||||
|
if (const Arg *A = Args.getLastArg(OPT_visualc_tools_version))
|
||||||
|
Opts.setVCToolsVersion(A->getValue());
|
||||||
|
|
||||||
if (const Arg *A = Args.getLastArg(OPT_resource_dir))
|
if (const Arg *A = Args.getLastArg(OPT_resource_dir))
|
||||||
Opts.RuntimeResourcePath = A->getValue();
|
Opts.RuntimeResourcePath = A->getValue();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user