summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/extccomp.nim7
-rw-r--r--config/nim.cfg36
2 files changed, 37 insertions, 6 deletions
diff --git a/compiler/extccomp.nim b/compiler/extccomp.nim
index aad3ddfab..3005d111a 100644
--- a/compiler/extccomp.nim
+++ b/compiler/extccomp.nim
@@ -157,12 +157,12 @@ compiler vcc:
     optSize: " /O1 ",
     compilerExe: "cl",
     cppCompiler: "cl",
-    compileTmpl: "/c$vccplatform $options $include /Fo$objfile $file",
-    buildGui: " /link /SUBSYSTEM:WINDOWS ",
+    compileTmpl: "/c$vccplatform $options $include /nologo /Fo$objfile $file",
+    buildGui: " /SUBSYSTEM:WINDOWS user32.lib ",
     buildDll: " /LD",
     buildLib: "lib /OUT:$libfile $objfiles",
     linkerExe: "cl",
-    linkTmpl: "$builddll$vccplatform /Fe$exefile $objfiles $buildgui $options",
+    linkTmpl: "$builddll$vccplatform /Fe$exefile $objfiles $buildgui /link /nologo $options",
     includeCmd: " /I",
     linkDirCmd: " /LIBPATH:",
     linkLibCmd: " $1.lib",
@@ -180,6 +180,7 @@ compiler clangcl:
   result.compilerExe = "clang-cl"
   result.cppCompiler = "clang-cl"
   result.linkerExe = "clang-cl"
+  result.linkTmpl = "-fuse-ld=lld " & result.linkTmpl
 
 # Intel C/C++ Compiler
 compiler icl:
diff --git a/config/nim.cfg b/config/nim.cfg
index eea04ec11..21d976982 100644
--- a/config/nim.cfg
+++ b/config/nim.cfg
@@ -271,9 +271,7 @@ vcc.linkerexe = "vccexe.exe"
 vcc.cpp.linkerexe = "vccexe.exe"
 
 vcc.options.always =  "/nologo"
-vcc.cpp.options.always = "/EHsc"
-vcc.options.linker = "/nologo /F33554432" # set the stack size to 32 MiB
-vcc.cpp.options.linker = "/nologo /F33554432"
+vcc.cpp.options.always = "/nologo /EHsc"
 vcc.options.debug = "/Zi /FS /Od"
 vcc.cpp.options.debug = "/Zi /FS /Od"
 vcc.options.speed = "/O2"
@@ -317,3 +315,35 @@ tcc.options.always = "-w"
   --define:nimOldCaseObjects
   --define:nimOldShiftRight
 @end
+
+@if lto or lto_incremental:
+  @if lto_incremental:
+   vcc.options.always%= "${vcc.options.always} /GL /Gw /Gy"
+   vcc.cpp.options.always%= "${vcc.cpp.options.always} /GL /Gw /Gy"
+   vcc.options.linker %= "${vcc.options.linker} /LTCG:incremental"
+   vcc.cpp.options.linker %= "${vcc.cpp.options.linker} /LTCG:incremental"
+  @else:
+   vcc.options.always%= "${vcc.options.always} /GL"
+   vcc.cpp.options.always%= "${vcc.cpp.options.always} /GL"
+   vcc.options.linker %= "${vcc.options.linker} /LTCG"
+   vcc.cpp.options.linker %= "${vcc.cpp.options.linker} /LTCG"
+  @end
+  clang_cl.options.always%= "${clang_cl.options.always} -flto"
+  clang_cl.cpp.options.always%= "${clang.cpp.options.always} -flto"
+  clang.options.always%= "${clang.options.always} -flto"
+  clang.cpp.options.always%= "${clang.cpp.options.always} -flto"
+  icl.options.always %= "${icl.options.always} /Qipo"
+  icl.cpp.options.always %= "${icl.cpp.options.always} /Qipo"
+  gcc.options.always %= "${gcc.options.always} -flto"
+  gcc.cpp.options.always %= "${gcc.cpp.options.always} -flto"
+  clang.options.linker %= "${clang.options.linker} -fuse-ld=lld -flto"
+  clang.cpp.options.linker %= "${clang.cpp.options.linker} -fuse-ld=lld -flto"
+  gcc.options.linker %= "${gcc.options.linker} -flto"
+  gcc.cpp.options.linker %= "${gcc.cpp.options.linker} -flto"
+@end
+@if strip:
+  gcc.options.linker %= "${gcc.options.linker} -s"
+  gcc.cpp.options.linker %= "${gcc.cpp.options.linker} -s"
+  clang.options.linker %= "${clang.options.linker} -s"
+  clang.cpp.options.linker %= "${clang.cpp.options.linker} -s"
+@end
\ No newline at end of file