From 5b51f41ceed6604b388b63d73360a22d1ea95749 Mon Sep 17 00:00:00 2001 From: Sahnvour Date: Thu, 10 Oct 2019 22:44:52 +0200 Subject: [PATCH 1/4] stage1: override cmake's default compilation flags to statically link the CRT on windows we want to use /MT instead of /MD for a fully static executable --- CMakeLists.txt | 6 +++++- cmake/c_flag_overrides.cmake | 13 +++++++++++++ cmake/cxx_flag_overrides.cmake | 13 +++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 cmake/c_flag_overrides.cmake create mode 100644 cmake/cxx_flag_overrides.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 5d918f2b143a..fbc34f80511b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,10 +10,14 @@ if(NOT CMAKE_INSTALL_PREFIX) "Directory to install zig to" FORCE) endif() +set(CMAKE_USER_MAKE_RULES_OVERRIDE + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/c_flag_overrides.cmake) +set(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cxx_flag_overrides.cmake) + project(zig C CXX) set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) - set(ZIG_VERSION_MAJOR 0) set(ZIG_VERSION_MINOR 5) set(ZIG_VERSION_PATCH 0) diff --git a/cmake/c_flag_overrides.cmake b/cmake/c_flag_overrides.cmake new file mode 100644 index 000000000000..0eed5308ba4b --- /dev/null +++ b/cmake/c_flag_overrides.cmake @@ -0,0 +1,13 @@ +if(MSVC) + set(CMAKE_C_FLAGS_DEBUG_INIT + "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") + + set(CMAKE_C_FLAGS_MINSIZEREL_INIT + "/MT /O1 /Ob1 /D NDEBUG") + + set(CMAKE_C_FLAGS_RELEASE_INIT + "/MT /O2 /Ob2 /D NDEBUG") + + set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT + "/MT /Zi /O2 /Ob1 /D NDEBUG") +endif() diff --git a/cmake/cxx_flag_overrides.cmake b/cmake/cxx_flag_overrides.cmake new file mode 100644 index 000000000000..82fb7b39d05c --- /dev/null +++ b/cmake/cxx_flag_overrides.cmake @@ -0,0 +1,13 @@ +if(MSVC) + set(CMAKE_CXX_FLAGS_DEBUG_INIT + "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") + + set(CMAKE_CXX_FLAGS_MINSIZEREL_INIT + "/MT /O1 /Ob1 /D NDEBUG") + + set(CMAKE_CXX_FLAGS_RELEASE_INIT + "/MT /O2 /Ob2 /D NDEBUG") + + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT + "/MT /Zi /O2 /Ob1 /D NDEBUG") +endif() From 63ecded3ce57614ce142e50b6351c65a3c5fa074 Mon Sep 17 00:00:00 2001 From: Sahnvour Date: Sat, 12 Oct 2019 13:50:55 +0200 Subject: [PATCH 2/4] msvc: reduce inlining aggressivity to workaround a codegen bug in cl.exe cf. #3024 --- cmake/c_flag_overrides.cmake | 2 +- cmake/cxx_flag_overrides.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/c_flag_overrides.cmake b/cmake/c_flag_overrides.cmake index 0eed5308ba4b..c3225d2c4792 100644 --- a/cmake/c_flag_overrides.cmake +++ b/cmake/c_flag_overrides.cmake @@ -6,7 +6,7 @@ if(MSVC) "/MT /O1 /Ob1 /D NDEBUG") set(CMAKE_C_FLAGS_RELEASE_INIT - "/MT /O2 /Ob2 /D NDEBUG") + "/MT /O2 /Ob1 /D NDEBUG") set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") diff --git a/cmake/cxx_flag_overrides.cmake b/cmake/cxx_flag_overrides.cmake index 82fb7b39d05c..2f5473df93e1 100644 --- a/cmake/cxx_flag_overrides.cmake +++ b/cmake/cxx_flag_overrides.cmake @@ -6,7 +6,7 @@ if(MSVC) "/MT /O1 /Ob1 /D NDEBUG") set(CMAKE_CXX_FLAGS_RELEASE_INIT - "/MT /O2 /Ob2 /D NDEBUG") + "/MT /O2 /Ob1 /D NDEBUG") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") From c03dc6665f55bbb16a62a74eae6b258863ac0a05 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Wed, 16 Oct 2019 19:08:41 -0400 Subject: [PATCH 3/4] update CI script for windows static builds --- ci/azure/windows_install | 4 ++-- ci/azure/windows_script.bat | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/ci/azure/windows_install b/ci/azure/windows_install index 390467e55bf0..f0e02caa8e03 100755 --- a/ci/azure/windows_install +++ b/ci/azure/windows_install @@ -6,5 +6,5 @@ set -e pacman -Su --needed --noconfirm pacman -S --needed --noconfirm wget p7zip python3-pip pip install s3cmd -wget -nv "https://ziglang.org/deps/llvm%2bclang-9.0.0-win64-msvc-release.tar.xz" -tar xf llvm+clang-9.0.0-win64-msvc-release.tar.xz +wget -nv "https://ziglang.org/deps/llvm%2bclang-9.0.0-win64-msvc-mt.tar.xz" +tar xf llvm+clang-9.0.0-win64-msvc-mt.tar.xz diff --git a/ci/azure/windows_script.bat b/ci/azure/windows_script.bat index 57140e19b586..160d3c63b580 100644 --- a/ci/azure/windows_script.bat +++ b/ci/azure/windows_script.bat @@ -11,15 +11,14 @@ SET "MSYSTEM=%PREVMSYSTEM%" SET "ZIGBUILDDIR=%SRCROOT%\build" SET "ZIGINSTALLDIR=%ZIGBUILDDIR%\dist" -SET "ZIGPREFIXPATH=%SRCROOT%\llvm+clang-9.0.0-win64-msvc-release" +SET "ZIGPREFIXPATH=%SRCROOT%\llvm+clang-9.0.0-win64-msvc-mt" call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 mkdir %ZIGBUILDDIR% cd %ZIGBUILDDIR% -REM Here we use MinSizeRel instead of Release to work around https://github.com/ziglang/zig/issues/3024 -cmake.exe .. -Thost=x64 -G"Visual Studio 16 2019" -A x64 "-DCMAKE_INSTALL_PREFIX=%ZIGINSTALLDIR%" "-DCMAKE_PREFIX_PATH=%ZIGPREFIXPATH%" -DCMAKE_BUILD_TYPE=MinSizeRel || exit /b -msbuild /maxcpucount /p:Configuration=MinSizeRel INSTALL.vcxproj || exit /b +cmake.exe .. -Thost=x64 -G"Visual Studio 16 2019" -A x64 "-DCMAKE_INSTALL_PREFIX=%ZIGINSTALLDIR%" "-DCMAKE_PREFIX_PATH=%ZIGPREFIXPATH%" -DCMAKE_BUILD_TYPE=Release -DZIG_FORCE_EXTERNAL_LLD=ON || exit /b +msbuild /maxcpucount /p:Configuration=Release INSTALL.vcxproj || exit /b "%ZIGINSTALLDIR%\bin\zig.exe" build test || exit /b From 93295f3b134e58477e4f28be378123ceb6d1ddfe Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Wed, 16 Oct 2019 21:16:06 -0400 Subject: [PATCH 4/4] remove -DZIG_FORCE_EXTERNAL_LLD=ON Looks like the patch we need is in llvm trunk, not llvm 9. --- ci/azure/windows_script.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/azure/windows_script.bat b/ci/azure/windows_script.bat index 160d3c63b580..d3437e885b25 100644 --- a/ci/azure/windows_script.bat +++ b/ci/azure/windows_script.bat @@ -17,7 +17,7 @@ call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliar mkdir %ZIGBUILDDIR% cd %ZIGBUILDDIR% -cmake.exe .. -Thost=x64 -G"Visual Studio 16 2019" -A x64 "-DCMAKE_INSTALL_PREFIX=%ZIGINSTALLDIR%" "-DCMAKE_PREFIX_PATH=%ZIGPREFIXPATH%" -DCMAKE_BUILD_TYPE=Release -DZIG_FORCE_EXTERNAL_LLD=ON || exit /b +cmake.exe .. -Thost=x64 -G"Visual Studio 16 2019" -A x64 "-DCMAKE_INSTALL_PREFIX=%ZIGINSTALLDIR%" "-DCMAKE_PREFIX_PATH=%ZIGPREFIXPATH%" -DCMAKE_BUILD_TYPE=Release || exit /b msbuild /maxcpucount /p:Configuration=Release INSTALL.vcxproj || exit /b "%ZIGINSTALLDIR%\bin\zig.exe" build test || exit /b