diff options
author | Araq <rumpf_a@web.de> | 2019-05-24 15:25:09 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2019-05-24 15:25:09 +0200 |
commit | d67a9f024eeeb2bc26fb38a98be9a53956003290 (patch) | |
tree | addb1263bdc042dfd659be297e8391eaec6359e8 | |
parent | 1a8ef6b491b115a8b5b97db1559ea44072d25d73 (diff) | |
download | Nim-d67a9f024eeeb2bc26fb38a98be9a53956003290.tar.gz |
fixes #11306
-rw-r--r-- | compiler/extccomp.nim | 23 | ||||
-rw-r--r-- | config/nim.cfg | 16 |
2 files changed, 20 insertions, 19 deletions
diff --git a/compiler/extccomp.nim b/compiler/extccomp.nim index 473911b84..201719b1d 100644 --- a/compiler/extccomp.nim +++ b/compiler/extccomp.nim @@ -138,12 +138,12 @@ compiler vcc: optSize: " /O1 /G7 ", compilerExe: "cl", cppCompiler: "cl", - compileTmpl: "/c $options $include /Fo$objfile $file", + compileTmpl: "/c$vccplatform$options $include /Fo$objfile $file", buildGui: " /link /SUBSYSTEM:WINDOWS ", buildDll: " /LD", buildLib: "lib /OUT:$libfile $objfiles", linkerExe: "cl", - linkTmpl: "$options $builddll /Fe$exefile $objfiles $buildgui", + linkTmpl: "$options $builddll$vccplatform /Fe$exefile $objfiles $buildgui", includeCmd: " /I", linkDirCmd: " /LIBPATH:", linkLibCmd: " $1.lib", @@ -528,6 +528,19 @@ proc cFileSpecificOptions(conf: ConfigRef; nimname: string): string = proc getCompileOptions(conf: ConfigRef): string = result = cFileSpecificOptions(conf, "__dummy__") +proc vccplatform(conf: ConfigRef): string = + # VCC specific but preferable over the config hacks people + # had to do before, see #11306 + case conf.target.targetCPU + of cpuI386: + result = " --platform:x86" + of cpuArm: + result = " --platform:arm" + of cpuAmd64: + result = " --platform:amd64" + else: + result = "" + proc getLinkOptions(conf: ConfigRef): string = result = conf.linkOptions & " " & conf.linkOptionsCmd & " " for linkedLib in items(conf.cLinkedLibs): @@ -611,7 +624,8 @@ proc getCompileCFileCmd*(conf: ConfigRef; cfile: Cfile, isMainFile = false): str "file", cfsh, "objfile", objfile, "options", options, "include", includeCmd, "nim", quoteShell(getPrefixDir(conf)), - "lib", quoteShell(conf.libpath)]) + "lib", quoteShell(conf.libpath), + "vccplatform", vccplatform(conf)]) proc footprint(conf: ConfigRef; cfile: Cfile): SecureHash = result = secureHash( @@ -716,7 +730,8 @@ proc getLinkCmd(conf: ConfigRef; output: AbsoluteFile, "buildgui", buildgui, "options", linkOptions, "objfiles", objfiles, "exefile", exefile, "nim", quoteShell(getPrefixDir(conf)), - "lib", quoteShell(conf.libpath)]) + "lib", quoteShell(conf.libpath), + "vccplatform", vccplatform(conf)]) # On windows the debug information for binaries is emitted in a separate .pdb # file and the binaries (.dll and .exe) contain a full path to that .pdb file. # This is a problem for hot code reloading because even when we copy the .dll diff --git a/config/nim.cfg b/config/nim.cfg index 2eda9a56a..40e0055de 100644 --- a/config/nim.cfg +++ b/config/nim.cfg @@ -223,7 +223,7 @@ clang.options.speed = "-O3" clang.options.size = "-Os" @if windows: - clang_cl.cpp.options.always %= "${clang_cl.options.always} /EHsc" + clang_cl.cpp.options.always %= "${clang_cl.options.always} /EHsc" @if not release: clang_cl.options.linker = "/Z7" clang_cl.cpp.options.linker = "/Z7" @@ -246,20 +246,6 @@ vcc.cpp.exe = "vccexe.exe" vcc.linkerexe = "vccexe.exe" vcc.cpp.linkerexe = "vccexe.exe" -# set the options for cross compiles. (hostCPU != targetCPU) -i386.windows.vcc.options.always = "/nologo --platform:x86" -amd64.windows.vcc.options.always = "/nologo --platform:amd64" -arm.windows.vcc.options.always = "/nologo --platform:arm" - -# set the options for specific platforms: -@if i386: - vcc.options.always %= "${i386.windows.vcc.options.always}" -@elif amd64: - vcc.options.always %= "${amd64.windows.vcc.options.always}" -@elif arm: - vcc.options.always %= "${arm.windows.vcc.options.always}" -@end - vcc.cpp.options.always = "/EHsc" vcc.options.linker.always = "/F33554432" # set the stack size to 32 MiB vcc.options.debug = "/Zi /FS /Od" |