diff options
-rw-r--r-- | config/nim.cfg | 22 | ||||
-rw-r--r-- | tools/vccenv/vccexe.nim | 60 | ||||
-rw-r--r-- | tools/vccenv/vcclinkerexe.nim | 25 |
3 files changed, 70 insertions, 37 deletions
diff --git a/config/nim.cfg b/config/nim.cfg index 8c8270f3e..b5bcc4053 100644 --- a/config/nim.cfg +++ b/config/nim.cfg @@ -177,10 +177,26 @@ clang.options.speed = "-O3" clang.options.size = "-Os" # Configuration for the Visual C/C++ compiler: -vcc.options.linker = "/DEBUG /Zi /Fd\"$projectName.pdb\" /F33554432" # set the stack size to 8 MB -vcc.options.debug = "/Zi /Fd\"$projectName.pdb\"" +vcc.exe = "vccexe.exe" +vcc.linkerexe = "vccexe.exe" + +# set the options for specific platforms: +@if i386: +vcc.options.always = "--platform:x86 /nologo" +vcc.options.linker = "--platform:x86 /nologo /DEBUG /Zi /F33554432" # set the stack size to 8 MB +@elif amd64: +vcc.options.always = "--platform:amd64 /nologo" +vcc.options.linker = "--platform:amd64 /nologo /DEBUG /Zi /F33554432" # set the stack size to 8 MB +@elif arm: +vcc.options.always = "--platform:arm /nologo" +vcc.options.linker = "--platform:arm /nologo /DEBUG /Zi /F33554432" # set the stack size to 8 MB +@else: vcc.options.always = "/nologo" -vcc.options.speed = "/O2 /arch:SSE2" +vcc.options.linker = "/nologo /DEBUG /Zi /F33554432" # set the stack size to 8 MB +@end + +vcc.options.debug = "/Zi /FS /Od" +vcc.options.speed = "/O2" vcc.options.size = "/O1" # Configuration for the Tiny C Compiler: diff --git a/tools/vccenv/vccexe.nim b/tools/vccenv/vccexe.nim index 48ae8c8da..892246830 100644 --- a/tools/vccenv/vccexe.nim +++ b/tools/vccenv/vccexe.nim @@ -1,24 +1,66 @@ -import strtabs, os, osproc, vccenv +import strutils, strtabs, os, osproc, vccenv when defined(release): let vccOptions = {poParentStreams} else: let vccOptions = {poEchoCmd, poParentStreams} +const + platformPrefix = "--platform" + winstorePrefix = "--winstore" + sdkversionPrefix = "--sdkversion" + + platformSepIdx = platformPrefix.len + sdkversionSepIdx = sdkversionPrefix.len + + HelpText = """ ++-----------------------------------------------------------------+ +| Microsoft C/C++ compiler wrapper for Nim | +| (c) 2016 Fredrik Høisæther Rasch | ++-----------------------------------------------------------------+ + +Usage: + vccexe [options] [compileroptions] +Options: + --platform:<arch> Specify the Compiler Platform Tools architecture + <arch>: x86 | amd64 | arm | x86_amd64 | x86_arm | amd64_x86 | amd64_arm + --winstore Use Windows Store (rather than desktop) development tools + --sdkversion:<v> Use a specific Windows SDK version: + <v> is either the full Windows 10 SDK version number or + "8.1" to use the windows 8.1 SDK + +Other command line arguments are passed on to the +Microsoft C/C++ compiler for the specified SDK toolset +""" + when isMainModule: - var vccEnvStrTab: StringTableRef = nil - when defined(i386): - vccEnvStrTab = getVccEnv "x86" - when defined(amd64): - vccEnvStrTab = getVccEnv "amd64" - when defined(arm): - vccEnvStrTab = getVccEnv "arm" + var platformArg: string = nil + var sdkVersionArg: string = nil + var storeArg: bool = false + + var clArgs: seq[TaintedString] = @[] + + var wrapperArgs = commandLineParams() + for wargv in wrapperArgs: + # Check whether the current argument contains -- prefix + if wargv.startsWith(platformPrefix): # Check for platform + platformArg = wargv.substr(platformSepIdx + 1) + elif wargv == winstorePrefix: # Check for winstore + storeArg = true + elif wargv.startsWith(sdkversionPrefix): # Check for sdkversion + sdkVersionArg = wargv.substr(sdkversionSepIdx + 1) + else: # Regular cl.exe argument -> store for final cl.exe invocation + if (wargv.len == 2) and (wargv[1] == '?'): + echo HelpText + clArgs.add(wargv) + + var vccEnvStrTab = getVccEnv(platformArg, storeArg, sdkVersionArg) if vccEnvStrTab != nil: for vccEnvKey, vccEnvVal in vccEnvStrTab: putEnv(vccEnvKey, vccEnvVal) let vccProcess = startProcess( "cl.exe", - args = commandLineParams(), + args = clArgs, options = vccOptions ) quit vccProcess.waitForExit() diff --git a/tools/vccenv/vcclinkerexe.nim b/tools/vccenv/vcclinkerexe.nim deleted file mode 100644 index 51c778f38..000000000 --- a/tools/vccenv/vcclinkerexe.nim +++ /dev/null @@ -1,25 +0,0 @@ -import strtabs, os, osproc, vccenv - -when defined(release): - let vccOptions = {poParentStreams} -else: - let vccOptions = {poEchoCmd, poParentStreams} - -when isMainModule: - var vccEnvStrTab: StringTableRef = nil - when defined(i386): - vccEnvStrTab = getVccEnv "x86" - when defined(amd64): - vccEnvStrTab = getVccEnv "amd64" - when defined(arm): - vccEnvStrTab = getVccEnv "arm" - if vccEnvStrTab != nil: - for vccEnvKey, vccEnvVal in vccEnvStrTab: - putEnv(vccEnvKey, vccEnvVal) - let vccProcess = startProcess( - "link.exe", - args = commandLineParams(), - options = vccOptions - ) - quit vccProcess.waitForExit() - |