summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKeithcat1 <47483928+Keithcat1@users.noreply.github.com>2020-04-22 16:56:43 -0500
committerGitHub <noreply@github.com>2020-04-22 23:56:43 +0200
commitd27bc03b21ea066134a297e61d0d18c901300ccc (patch)
tree2e1c265e684a6805f9ccde125a94b6f8686cc609
parent6cfe2e0c3dc67504594f55ff19b67b1331f6c22e (diff)
downloadNim-d27bc03b21ea066134a297e61d0d18c901300ccc.tar.gz
Add LTO support for most compilers and do some VCC fixes (#14013)
* Added LTO in nim.cfg, added /link in extccomp.nim and other fixes

* Fix line endings

* Fix line endings, for real this time. Almost certainly. Like, 95% certain.

* Removed /MD from extccom.nim VCC comiler
-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