From 2390fdb13b64c3cc1dc8c4fb4e743d8cfa884752 Mon Sep 17 00:00:00 2001 From: Hans Wennborg Date: Wed, 13 Nov 2013 19:12:02 +0000 Subject: [PATCH] CMake: make building with /MT an option instead of always forcing it for release builds. This is a follow-up to r194589. Aaron pointed out that building libraries with /MT and using them in an application that uses a different run-time library can be a bad idea. Move the option to build with /MT behind a CMake option so it can be turned on selectively, such as when building the toolchain installer. llvm-svn: 194596 --- CMakeLists.txt | 2 ++ cmake/modules/HandleLLVMOptions.cmake | 7 +++++-- docs/CMake.rst | 5 +++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e6fd506f784..5a8eb980271 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,8 @@ set(PACKAGE_VERSION "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}svn") option(LLVM_INSTALL_TOOLCHAIN_ONLY "Only include toolchain files in the 'install' target." OFF) +option(LLVM_STATIC_MSVC_RUNTIME "When using MSVC, link against the static run-time (/MT)" OFF) + option(LLVM_USE_FOLDERS "Enable solution folders in Visual Studio. Disable for Express versions." ON) if ( LLVM_USE_FOLDERS ) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/cmake/modules/HandleLLVMOptions.cmake b/cmake/modules/HandleLLVMOptions.cmake index ff71c00544f..9fdc708abd7 100644 --- a/cmake/modules/HandleLLVMOptions.cmake +++ b/cmake/modules/HandleLLVMOptions.cmake @@ -41,13 +41,16 @@ else() endif() endif() -if(MSVC) - # Link release builds against the static runtime. +if(MSVC AND LLVM_STATIC_MSVC_RUNTIME) + # Link against the static runtime. foreach(flag CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_C_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_MINSIZEREL) llvm_replace_compiler_option("${flag}" "/MD" "/MT") endforeach() + foreach(flag CMAKE_C_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG) + llvm_replace_compiler_option("${flag}" "/MDd" "/MTd") + endforeach() endif() if(WIN32) diff --git a/docs/CMake.rst b/docs/CMake.rst index c9fe538c9df..69eeaab529d 100644 --- a/docs/CMake.rst +++ b/docs/CMake.rst @@ -280,6 +280,11 @@ LLVM-specific variables are ``Address``, ``Memory`` and ``MemoryWithOrigins``. Defaults to empty string. +**LLVM_STATIC_MSVC_RUNTIME**:BOOL + When building with MSVC, link against the static runtime library (/MT or /MTd + for release and debug builds, respectively) instead of the dynamic one. + Defaults to OFF. + Executing the test suite ========================