<div dir="ltr">We already have LLVM_USE_CRT_${CMAKE_BUILD_TYPE} in llvm/modules/ChooseMSVCCRT.cmake, which can be any of MD, MDd, MT, MTd.  Do we need this at all if it's going to be configurable?</div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Wed, Nov 13, 2013 at 11:12 AM, Hans Wennborg <span dir="ltr"><<a href="mailto:hans@hanshq.net" target="_blank">hans@hanshq.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Author: hans<br>
Date: Wed Nov 13 13:12:02 2013<br>
New Revision: 194596<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=194596&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=194596&view=rev</a><br>
Log:<br>
CMake: make building with /MT an option instead of always forcing it<br>
for release builds.<br>
<br>
This is a follow-up to r194589. Aaron pointed out that building<br>
libraries with /MT and using them in an application that uses a<br>
different run-time library can be a bad idea.<br>
<br>
Move the option to build with /MT behind a CMake option so it can be<br>
turned on selectively, such as when building the toolchain installer.<br>
<br>
Modified:<br>
    llvm/trunk/CMakeLists.txt<br>
    llvm/trunk/cmake/modules/HandleLLVMOptions.cmake<br>
    llvm/trunk/docs/CMake.rst<br>
<br>
Modified: llvm/trunk/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/CMakeLists.txt?rev=194596&r1=194595&r2=194596&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/CMakeLists.txt?rev=194596&r1=194595&r2=194596&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/CMakeLists.txt (original)<br>
+++ llvm/trunk/CMakeLists.txt Wed Nov 13 13:12:02 2013<br>
@@ -17,6 +17,8 @@ set(PACKAGE_VERSION "${LLVM_VERSION_MAJO<br>
<br>
 option(LLVM_INSTALL_TOOLCHAIN_ONLY "Only include toolchain files in the 'install' target." OFF)<br>
<br>
+option(LLVM_STATIC_MSVC_RUNTIME "When using MSVC, link against the static run-time (/MT)" OFF)<br>
+<br>
 option(LLVM_USE_FOLDERS "Enable solution folders in Visual Studio. Disable for Express versions." ON)<br>
 if ( LLVM_USE_FOLDERS )<br>
   set_property(GLOBAL PROPERTY USE_FOLDERS ON)<br>
<br>
Modified: llvm/trunk/cmake/modules/HandleLLVMOptions.cmake<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/HandleLLVMOptions.cmake?rev=194596&r1=194595&r2=194596&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/HandleLLVMOptions.cmake?rev=194596&r1=194595&r2=194596&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/cmake/modules/HandleLLVMOptions.cmake (original)<br>
+++ llvm/trunk/cmake/modules/HandleLLVMOptions.cmake Wed Nov 13 13:12:02 2013<br>
@@ -41,13 +41,16 @@ else()<br>
   endif()<br>
 endif()<br>
<br>
-if(MSVC)<br>
-  # Link release builds against the static runtime.<br>
+if(MSVC AND LLVM_STATIC_MSVC_RUNTIME)<br>
+  # Link against the static runtime.<br>
   foreach(flag CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO<br>
       CMAKE_C_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELEASE<br>
       CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_MINSIZEREL)<br>
     llvm_replace_compiler_option("${flag}" "/MD" "/MT")<br>
   endforeach()<br>
+  foreach(flag CMAKE_C_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG)<br>
+    llvm_replace_compiler_option("${flag}" "/MDd" "/MTd")<br>
+  endforeach()<br>
 endif()<br>
<br>
 if(WIN32)<br>
<br>
Modified: llvm/trunk/docs/CMake.rst<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/CMake.rst?rev=194596&r1=194595&r2=194596&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/CMake.rst?rev=194596&r1=194595&r2=194596&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/docs/CMake.rst (original)<br>
+++ llvm/trunk/docs/CMake.rst Wed Nov 13 13:12:02 2013<br>
@@ -280,6 +280,11 @@ LLVM-specific variables<br>
   are ``Address``, ``Memory`` and ``MemoryWithOrigins``. Defaults to empty<br>
   string.<br>
<br>
+**LLVM_STATIC_MSVC_RUNTIME**:BOOL<br>
+  When building with MSVC, link against the static runtime library (/MT or /MTd<br>
+  for release and debug builds, respectively) instead of the dynamic one.<br>
+  Defaults to OFF.<br>
+<br>
 Executing the test suite<br>
 ========================<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>