cmake: link release builds statically against run-time library on windows (use /MT...
[oota-llvm.git] / cmake / modules / HandleLLVMOptions.cmake
index 7a455594c5999d4852a5a5ee80b5a9d2d8a68b93..ff71c00544fdab85a51c4bce748d48f758552f64 100644 (file)
@@ -5,6 +5,7 @@
 include(AddLLVMDefinitions)
 include(CheckCCompilerFlag)
 include(CheckCXXCompilerFlag)
+include(LLVMProcessSources)
 
 if( CMAKE_COMPILER_IS_GNUCXX )
   set(LLVM_COMPILER_IS_GCC_COMPATIBLE ON)
@@ -24,8 +25,13 @@ if( LLVM_ENABLE_ASSERTIONS )
   if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" )
     add_definitions( -UNDEBUG )
     # Also remove /D NDEBUG to avoid MSVC warnings about conflicting defines.
-    string (REGEX REPLACE "(^| )[/-]D *NDEBUG($| )" " "
-      CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
+    set(REGEXP_NDEBUG "(^| )[/-]D *NDEBUG($| )")\r
+    string (REGEX REPLACE "${REGEXP_NDEBUG}" " "\r
+      CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")\r
+    string (REGEX REPLACE "${REGEXP_NDEBUG}" " "\r
+      CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")\r
+    string (REGEX REPLACE "${REGEXP_NDEBUG}" " "\r
+      CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL}")\r
   endif()
 else()
   if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE" )
@@ -35,6 +41,15 @@ else()
   endif()
 endif()
 
+if(MSVC)
+  # Link release builds 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()
+endif()  
+
 if(WIN32)
   if(CYGWIN)
     set(LLVM_ON_WIN32 0)