mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
This commit is contained in:
@@ -41,6 +41,7 @@ const
|
||||
platformPrefix = "--platform"
|
||||
sdktypePrefix = "--sdktype"
|
||||
sdkversionPrefix = "--sdkversion"
|
||||
vctoolsetPrefix = "--vctoolset"
|
||||
verbosePrefix = "--verbose"
|
||||
|
||||
vccversionSepIdx = vccversionPrefix.len
|
||||
@@ -49,6 +50,7 @@ const
|
||||
platformSepIdx = platformPrefix.len
|
||||
sdktypeSepIdx = sdktypePrefix.len
|
||||
sdkversionSepIdx = sdkversionPrefix.len
|
||||
vctoolsetSepIdx = vctoolsetPrefix.len
|
||||
|
||||
vcvarsallDefaultPath = "vcvarsall.bat"
|
||||
|
||||
@@ -97,6 +99,8 @@ Options:
|
||||
"8.1" to use the windows 8.1 SDK
|
||||
--verbose Echoes the command line for loading the Developer Command Prompt
|
||||
and the command line passed on to the secondary command.
|
||||
--vctoolset Optionally specifies the Visual Studio compiler toolset to use.
|
||||
By default, the environment is set to use the current Visual Studio compiler toolset.
|
||||
|
||||
Other command line arguments are passed on to the
|
||||
secondary command specified by --command or to the
|
||||
@@ -108,7 +112,7 @@ proc parseVccexeCmdLine(argseq: seq[string],
|
||||
vccversionArg: var seq[string], printPathArg: var bool,
|
||||
vcvarsallArg: var string, commandArg: var string, noCommandArg: var bool,
|
||||
platformArg: var VccArch, sdkTypeArg: var VccPlatformType,
|
||||
sdkVersionArg: var string, verboseArg: var bool,
|
||||
sdkVersionArg: var string, vctoolsetArg: var string, verboseArg: var bool,
|
||||
clArgs: var seq[string]) =
|
||||
## Cannot use usual command-line argument parser here
|
||||
## Since vccexe command-line arguments are intermingled
|
||||
@@ -125,7 +129,7 @@ proc parseVccexeCmdLine(argseq: seq[string],
|
||||
responseargs = parseCmdLine(responsecontent)
|
||||
parseVccexeCmdLine(responseargs, vccversionArg, printPathArg,
|
||||
vcvarsallArg, commandArg, noCommandArg, platformArg, sdkTypeArg,
|
||||
sdkVersionArg, verboseArg, clArgs)
|
||||
sdkVersionArg, vctoolsetArg, verboseArg, clArgs)
|
||||
elif wargv.startsWith(vccversionPrefix): # Check for vccversion
|
||||
vccversionArg.add(wargv.substr(vccversionSepIdx + 1))
|
||||
elif wargv.cmpIgnoreCase(printPathPrefix) == 0: # Check for printPath
|
||||
@@ -142,6 +146,8 @@ proc parseVccexeCmdLine(argseq: seq[string],
|
||||
sdkTypeArg = parseEnum[VccPlatformType](wargv.substr(sdktypeSepIdx + 1))
|
||||
elif wargv.startsWith(sdkversionPrefix): # Check for sdkversion
|
||||
sdkVersionArg = wargv.substr(sdkversionSepIdx + 1)
|
||||
elif wargv.startsWith(vctoolsetPrefix): # Check for vctoolset
|
||||
vctoolsetArg = wargv.substr(vctoolsetSepIdx + 1)
|
||||
elif wargv.startsWith(verbosePrefix):
|
||||
verboseArg = true
|
||||
else: # Regular cl.exe argument -> store for final cl.exe invocation
|
||||
@@ -158,13 +164,14 @@ when isMainModule:
|
||||
var platformArg: VccArch
|
||||
var sdkTypeArg: VccPlatformType
|
||||
var sdkVersionArg: string
|
||||
var vctoolsetArg: string
|
||||
var verboseArg: bool = false
|
||||
|
||||
var clArgs: seq[string] = @[]
|
||||
|
||||
let wrapperArgs = commandLineParams()
|
||||
parseVccexeCmdLine(wrapperArgs, vccversionArg, printPathArg, vcvarsallArg,
|
||||
commandArg, noCommandArg, platformArg, sdkTypeArg, sdkVersionArg,
|
||||
commandArg, noCommandArg, platformArg, sdkTypeArg, sdkVersionArg, vctoolsetArg,
|
||||
verboseArg,
|
||||
clArgs)
|
||||
|
||||
@@ -195,7 +202,7 @@ when isMainModule:
|
||||
echo "$1: $2" % [head, vcvarsallArg]
|
||||
|
||||
# Call vcvarsall to get the appropriate VCC process environment
|
||||
var vcvars = vccVarsAll(vcvarsallArg, platformArg, sdkTypeArg, sdkVersionArg, verboseArg)
|
||||
var vcvars = vccVarsAll(vcvarsallArg, platformArg, sdkTypeArg, sdkVersionArg, vctoolsetArg, verboseArg)
|
||||
if vcvars != nil:
|
||||
for vccEnvKey, vccEnvVal in vcvars:
|
||||
putEnv(vccEnvKey, vccEnvVal)
|
||||
|
||||
@@ -33,7 +33,7 @@ type
|
||||
vccplatUWP = "uwp", ## Universal Windows Platform (UWP) Application
|
||||
vccplatOneCore = "onecore" # Undocumented platform type in the Windows SDK, probably XBox One SDK platform type.
|
||||
|
||||
proc vccVarsAll*(path: string, arch: VccArch = vccarchUnspecified, platform_type: VccPlatformType = vccplatEmpty, sdk_version: string = "", verbose: bool = false): StringTableRef =
|
||||
proc vccVarsAll*(path: string, arch: VccArch = vccarchUnspecified, platform_type: VccPlatformType = vccplatEmpty, sdk_version, vctoolset: string = "", verbose: bool = false): StringTableRef =
|
||||
## Returns a string table containing the proper process environment to successfully execute VCC compile commands for the specified SDK version, CPU architecture and platform type.
|
||||
##
|
||||
## path
|
||||
@@ -44,6 +44,8 @@ proc vccVarsAll*(path: string, arch: VccArch = vccarchUnspecified, platform_type
|
||||
## The compile target Platform Type. Defaults to the Windows Desktop platform, i.e. a regular Windows executable binary.
|
||||
## sdk_version
|
||||
## The Windows SDK version to use.
|
||||
## vctoolset
|
||||
## Visual Studio compiler toolset to use.
|
||||
## verbose
|
||||
## Echo the command-line passed on to the system to load the VCC environment. Defaults to `false`.
|
||||
|
||||
@@ -63,6 +65,9 @@ proc vccVarsAll*(path: string, arch: VccArch = vccarchUnspecified, platform_type
|
||||
|
||||
if sdk_version.len > 0:
|
||||
args.add(sdk_version)
|
||||
|
||||
if vctoolset.len > 0:
|
||||
args.add("-vcvars_ver="&vctoolset)
|
||||
|
||||
let argStr = args.join " "
|
||||
|
||||
|
||||
Reference in New Issue
Block a user