[llvm] r361826 - [CMake] Default options for faster executables on MSVC
Alexandre Ganea via llvm-commits
llvm-commits at lists.llvm.org
Tue May 28 07:14:49 PDT 2019
Author: aganea
Date: Tue May 28 07:14:48 2019
New Revision: 361826
URL: http://llvm.org/viewvc/llvm-project?rev=361826&view=rev
Log:
[CMake] Default options for faster executables on MSVC
Differential Revision: https://reviews.llvm.org/D55056
Modified:
llvm/trunk/CMakeLists.txt
llvm/trunk/cmake/modules/ChooseMSVCCRT.cmake
llvm/trunk/cmake/modules/HandleLLVMOptions.cmake
Modified: llvm/trunk/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/CMakeLists.txt?rev=361826&r1=361825&r2=361826&view=diff
==============================================================================
--- llvm/trunk/CMakeLists.txt (original)
+++ llvm/trunk/CMakeLists.txt Tue May 28 07:14:48 2019
@@ -435,6 +435,10 @@ option(LLVM_ENABLE_LLD "Use lld as C and
option(LLVM_ENABLE_PEDANTIC "Compile with pedantic enabled." ON)
option(LLVM_ENABLE_WERROR "Fail and stop if a warning is triggered." OFF)
+if (MSVC)
+ option(LLVM_ENABLE_INCREMENTAL_LINK "Link incrementally. Enabling it might produce slower executables." OFF)
+endif()
+
option(LLVM_ENABLE_DUMP "Enable dump functions even when assertions are disabled" OFF)
if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" )
Modified: llvm/trunk/cmake/modules/ChooseMSVCCRT.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/ChooseMSVCCRT.cmake?rev=361826&r1=361825&r2=361826&view=diff
==============================================================================
--- llvm/trunk/cmake/modules/ChooseMSVCCRT.cmake (original)
+++ llvm/trunk/cmake/modules/ChooseMSVCCRT.cmake Tue May 28 07:14:48 2019
@@ -50,6 +50,17 @@ macro(set_flag_in_var flagsvar regex fla
set(${flagsvar} "${${flagsvar}}" CACHE STRING "${flagsvar_docs}" FORCE)
endmacro(set_flag_in_var)
+macro(disable_MT_if_LLDB build message)
+ if (LLVM_TOOL_LLDB_BUILD)
+ if ((NOT ${build} STREQUAL "DEBUG") AND (LLVM_USE_CRT_${build} STREQUAL "MT"))
+ if (LLVM_TOOL_CLANG_BUILD OR LLVM_TOOL_LLD_BUILD)
+ set(performance " This might impact runtime performance for Clang or LLD. Preferably build them separately.")
+ endif()
+ message(WARNING "${message}.${performance}")
+ set(LLVM_USE_CRT_${build} "MD")
+ endif()
+ endif()
+endmacro(disable_MT_if_LLDB)
macro(choose_msvc_crt MSVC_CRT)
if(LLVM_USE_CRT)
@@ -66,13 +77,26 @@ variables (LLVM_USE_CRT_DEBUG, etc) inst
get_current_crt(LLVM_USE_CRT_${build}
MSVC_CRT_REGEX
CMAKE_CXX_FLAGS_${build})
+
+ # Make /MT the default in Release builds to make them faster
+ # and avoid the DLL function thunking.
+ if ((${build} STREQUAL "MINSIZEREL") OR
+ (${build} STREQUAL "RELEASE") OR
+ (${build} STREQUAL "RELWITHDEBINFO"))
+ set(LLVM_USE_CRT_${build} "MT")
+ endif()
+
+ disable_MT_if_LLDB(${build} "Using /MD as required by LLDB")
+
set(LLVM_USE_CRT_${build}
"${LLVM_USE_CRT_${build}}"
CACHE STRING "Specify VC++ CRT to use for ${build_type} configurations."
FORCE)
set_property(CACHE LLVM_USE_CRT_${build}
PROPERTY STRINGS ;${${MSVC_CRT}})
- endif(NOT LLVM_USE_CRT_${build})
+ else()
+ disable_MT_if_LLDB(${build} "Disabling /MT as required by LLDB")
+ endif()
endforeach(build_type)
foreach(build_type ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE})
Modified: llvm/trunk/cmake/modules/HandleLLVMOptions.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/HandleLLVMOptions.cmake?rev=361826&r1=361825&r2=361826&view=diff
==============================================================================
--- llvm/trunk/cmake/modules/HandleLLVMOptions.cmake (original)
+++ llvm/trunk/cmake/modules/HandleLLVMOptions.cmake Tue May 28 07:14:48 2019
@@ -418,6 +418,14 @@ if( MSVC )
# "Enforce type conversion rules".
append("/Zc:rvalueCast" CMAKE_CXX_FLAGS)
+ if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC" AND NOT LLVM_ENABLE_INCREMENTAL_LINK)
+ foreach(CONFIG RELEASE RELWITHDEBINFO MINSIZEREL)
+ foreach(FLAG EXE MODULE SHARED STATIC)
+ string(REGEX REPLACE "[-/](INCREMENTAL:YES|INCREMENTAL:NO|INCREMENTAL)" "/INCREMENTAL:NO" CMAKE_${FLAG}_LINKER_FLAGS_${CONFIG} "${CMAKE_${FLAG}_LINKER_FLAGS_${CONFIG}}")
+ endforeach()
+ endforeach()
+ endif()
+
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT LLVM_ENABLE_LTO)
# clang-cl and cl by default produce non-deterministic binaries because
# link.exe /incremental requires a timestamp in the .obj file. clang-cl
More information about the llvm-commits
mailing list