<div dir="ltr">Thanks!<div class="gmail_extra"><br><div class="gmail_quote">On Tue, Aug 27, 2013 at 5:24 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: Mon Aug 26 20:24:01 2013<br>
New Revision: 189304<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=189304&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=189304&view=rev</a><br>
Log:<br>
cmake: fix the compiler-rt build with MSVC<br>
<br>
This sets flags and excludes things that aren't working with MSVC yet,<br>
allowing us to build the ASan runtime as part of the cmake build.<br>
<br>
Differential Revision: <a href="http://llvm-reviews.chandlerc.com/D1525" target="_blank">http://llvm-reviews.chandlerc.com/D1525</a><br>
<br>
Modified:<br>
    compiler-rt/trunk/CMakeLists.txt<br>
    compiler-rt/trunk/lib/CMakeLists.txt<br>
    compiler-rt/trunk/lib/asan/CMakeLists.txt<br>
    compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt<br>
<br>
Modified: compiler-rt/trunk/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/CMakeLists.txt?rev=189304&r1=189303&r2=189304&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/CMakeLists.txt?rev=189304&r1=189303&r2=189304&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/CMakeLists.txt (original)<br>
+++ compiler-rt/trunk/CMakeLists.txt Mon Aug 26 20:24:01 2013<br>
@@ -47,8 +47,13 @@ if (NOT CMAKE_SIZEOF_VOID_P EQUAL 4 AND<br>
     NOT CMAKE_SIZEOF_VOID_P EQUAL 8)<br>
   message(FATAL_ERROR "Please use architecture with 4 or 8 byte pointers.")<br>
 endif()<br>
-set(TARGET_64_BIT_CFLAGS "-m64")<br>
-set(TARGET_32_BIT_CFLAGS "-m32")<br>
+if (NOT MSVC)<br>
+  set(TARGET_64_BIT_CFLAGS "-m64")<br>
+  set(TARGET_32_BIT_CFLAGS "-m32")<br>
+else()<br>
+  set(TARGET_64_BIT_CFLAGS "")<br>
+  set(TARGET_32_BIT_CFLAGS "")<br>
+endif()<br>
<br>
 # List of architectures we can target.<br>
 set(COMPILER_RT_SUPPORTED_ARCH)<br>
@@ -83,7 +88,9 @@ macro(test_target_arch arch)<br>
 endmacro()<br>
<br>
 if("${LLVM_NATIVE_ARCH}" STREQUAL "X86")<br>
-  test_target_arch(x86_64 ${TARGET_64_BIT_CFLAGS})<br>
+  if (NOT MSVC)<br>
+    test_target_arch(x86_64 ${TARGET_64_BIT_CFLAGS})<br>
+  endif()<br>
   test_target_arch(i386 ${TARGET_32_BIT_CFLAGS})<br>
 elseif("${LLVM_NATIVE_ARCH}" STREQUAL "PowerPC")<br>
   test_target_arch(powerpc64 ${TARGET_64_BIT_CFLAGS})<br>
@@ -114,25 +121,34 @@ function(filter_available_targets out_va<br>
 endfunction()<br>
<br>
 # Provide some common commmandline flags for Sanitizer runtimes.<br>
-set(SANITIZER_COMMON_CFLAGS<br>
-  -fPIC<br>
-  -fno-builtin<br>
-  -fno-exceptions<br>
-  -fomit-frame-pointer<br>
-  -funwind-tables<br>
-  -fno-stack-protector<br>
-  -Wno-gnu  # Variadic macros with 0 arguments for ...<br>
-  -O3<br>
-  )<br>
-if(NOT WIN32)<br>
-  list(APPEND SANITIZER_COMMON_CFLAGS -fvisibility=hidden)<br>
-endif()<br>
-# Build sanitizer runtimes with debug info.<br>
-check_cxx_compiler_flag(-gline-tables-only SUPPORTS_GLINE_TABLES_ONLY_FLAG)<br>
-if(SUPPORTS_GLINE_TABLES_ONLY_FLAG)<br>
-  list(APPEND SANITIZER_COMMON_CFLAGS -gline-tables-only)<br>
+if (NOT MSVC)<br>
+  set(SANITIZER_COMMON_CFLAGS<br>
+    -fPIC<br>
+    -fno-builtin<br>
+    -fno-exceptions<br>
+    -fomit-frame-pointer<br>
+    -funwind-tables<br>
+    -fno-stack-protector<br>
+    -Wno-gnu  # Variadic macros with 0 arguments for ...<br>
+    -O3<br>
+    -fvisibility=hidden<br>
+    )<br>
 else()<br>
-  list(APPEND SANITIZER_COMMON_CFLAGS -g)<br>
+  set(SANITIZER_COMMON_CFLAGS<br>
+    /MT<br>
+    /Zi<br>
+    /GS-<br>
+    /wd4722<br>
+    )<br>
+endif()<br>
+# Build sanitizer runtimes with debug info. (MSVC gets /Zi above)<br>
+if (NOT MSVC)<br>
+  check_cxx_compiler_flag(-gline-tables-only SUPPORTS_GLINE_TABLES_ONLY_FLAG)<br>
+  if(SUPPORTS_GLINE_TABLES_ONLY_FLAG)<br>
+    list(APPEND SANITIZER_COMMON_CFLAGS -gline-tables-only)<br>
+  else()<br>
+    list(APPEND SANITIZER_COMMON_CFLAGS -g)<br>
+  endif()<br>
 endif()<br>
 # Warnings suppressions.<br>
 check_cxx_compiler_flag(-Wno-variadic-macros SUPPORTS_NO_VARIADIC_MACROS_FLAG)<br>
<br>
Modified: compiler-rt/trunk/lib/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/CMakeLists.txt?rev=189304&r1=189303&r2=189304&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/CMakeLists.txt?rev=189304&r1=189303&r2=189304&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/CMakeLists.txt (original)<br>
+++ compiler-rt/trunk/lib/CMakeLists.txt Mon Aug 26 20:24:01 2013<br>
@@ -1,12 +1,12 @@<br>
 # First, add the subdirectories which contain feature-based runtime libraries<br>
 # and several convenience helper libraries.<br>
-if(CMAKE_SYSTEM_NAME MATCHES "Darwin|Linux")<br>
+if(CMAKE_SYSTEM_NAME MATCHES "Darwin|Linux|Windows")<br>
   # AddressSanitizer is supported on Linux and Mac OS X.<br>
-  # Windows support is work in progress.<br>
+  # Windows support is experimental.<br>
   add_subdirectory(asan)<br>
   add_subdirectory(interception)<br>
   add_subdirectory(sanitizer_common)<br>
-  if(NOT ANDROID)<br>
+  if(NOT ANDROID AND NOT MSVC)<br>
     add_subdirectory(lsan)<br>
     add_subdirectory(profile)<br>
     add_subdirectory(ubsan)<br>
@@ -182,13 +182,15 @@ set(i386_SOURCES<br>
   i386/umoddi3.S<br>
   ${GENERIC_SOURCES})<br>
<br>
-foreach(arch x86_64 i386)<br>
-  if(CAN_TARGET_${arch})<br>
-    add_compiler_rt_static_runtime(clang_rt.${arch} ${arch}<br>
-      SOURCES ${${arch}_SOURCES}<br>
-      CFLAGS "-std=c99")<br>
-  endif()<br>
-endforeach()<br>
+if (NOT MSVC)<br>
+  foreach(arch x86_64 i386)<br>
+    if(CAN_TARGET_${arch})<br>
+      add_compiler_rt_static_runtime(clang_rt.${arch} ${arch}<br>
+        SOURCES ${${arch}_SOURCES}<br>
+        CFLAGS "-std=c99")<br>
+    endif()<br>
+  endforeach()<br>
+endif()<br>
<br>
 # Generate configs for running lit and unit tests.<br>
 configure_lit_site_cfg(<br>
<br>
Modified: compiler-rt/trunk/lib/asan/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/CMakeLists.txt?rev=189304&r1=189303&r2=189304&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/CMakeLists.txt?rev=189304&r1=189303&r2=189304&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/asan/CMakeLists.txt (original)<br>
+++ compiler-rt/trunk/lib/asan/CMakeLists.txt Mon Aug 26 20:24:01 2013<br>
@@ -26,9 +26,15 @@ set(ASAN_DYLIB_SOURCES<br>
<br>
 include_directories(..)<br>
<br>
-set(ASAN_CFLAGS<br>
-  ${SANITIZER_COMMON_CFLAGS}<br>
-  -fno-rtti)<br>
+if (NOT MSVC)<br>
+  set(ASAN_CFLAGS<br>
+    ${SANITIZER_COMMON_CFLAGS}<br>
+    -fno-rtti)<br>
+else()<br>
+  set(ASAN_CFLAGS<br>
+    ${SANITIZER_COMMON_CFLAGS}<br>
+    /GR-)<br>
+endif()<br>
<br>
 set(ASAN_COMMON_DEFINITIONS<br>
   ASAN_HAS_EXCEPTIONS=1)<br>
@@ -38,6 +44,10 @@ if(ANDROID)<br>
     ASAN_FLEXIBLE_MAPPING_AND_OFFSET=0<br>
     ASAN_NEEDS_SEGV=0<br>
     ASAN_LOW_MEMORY=1)<br>
+elseif(MSVC)<br>
+  list(APPEND ASAN_COMMON_DEFINITIONS<br>
+    ASAN_FLEXIBLE_MAPPING_AND_OFFSET=0<br>
+    ASAN_NEEDS_SEGV=0)<br>
 else()<br>
   list(APPEND ASAN_COMMON_DEFINITIONS<br>
     ASAN_FLEXIBLE_MAPPING_AND_OFFSET=1<br>
@@ -78,17 +88,32 @@ elseif(ANDROID)<br>
   list(APPEND ASAN_RUNTIME_LIBRARIES clang_rt.asan-arm-android)<br>
 else()<br>
   # Otherwise, build separate libraries for each target.<br>
+<br>
   foreach(arch ${ASAN_SUPPORTED_ARCH})<br>
+    set(ASAN_SOURCE_LIBS<br>
+      $<TARGET_OBJECTS:RTInterception.${arch}><br>
+      $<TARGET_OBJECTS:RTSanitizerCommon.${arch}><br>
+      $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>)<br>
+    if (NOT MSVC)<br>
+      # We can't build Leak Sanitizer on Windows yet.<br>
+      list(APPEND ASAN_SOURCE_LIBS $<TARGET_OBJECTS:RTLSanCommon.${arch}>)<br>
+    endif()<br>
+<br>
     add_compiler_rt_static_runtime(clang_rt.asan-${arch} ${arch}<br>
-      SOURCES ${ASAN_SOURCES}<br>
-              $<TARGET_OBJECTS:RTInterception.${arch}><br>
-              $<TARGET_OBJECTS:RTSanitizerCommon.${arch}><br>
-              $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}><br>
-              $<TARGET_OBJECTS:RTLSanCommon.${arch}><br>
+      SOURCES ${ASAN_SOURCES} ${ASAN_SOURCE_LIBS}<br>
       CFLAGS ${ASAN_CFLAGS}<br>
       DEFS ${ASAN_COMMON_DEFINITIONS}<br>
       SYMS asan.syms)<br>
     list(APPEND ASAN_RUNTIME_LIBRARIES clang_rt.asan-${arch})<br>
+<br>
+    if (WIN32)<br></blockquote><div><br></div><div>why not MSVC here as well?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+      add_compiler_rt_static_runtime(clang_rt.asan_dll_thunk-${arch} ${arch}<br>
+      SOURCES asan_dll_thunk.cc<br>
+      CFLAGS ${ASAN_CFLAGS} -DASAN_DLL_THUNK<br>
+      DEFS ${ASAN_COMMON_DEFINITIONS}<br>
+      SYMS asan.syms)<br>
+      list(APPEND ASAN_RUNTIME_LIBRARIES clang_rt.asan_dll_thunk-${arch})<br>
+    endif()<br>
   endforeach()<br>
 endif()<br>
<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt?rev=189304&r1=189303&r2=189304&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt?rev=189304&r1=189303&r2=189304&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt Mon Aug 26 20:24:01 2013<br>
@@ -61,9 +61,15 @@ set(SANITIZER_HEADERS<br>
   sanitizer_symbolizer.h<br>
   sanitizer_thread_registry.h)<br>
<br>
-set(SANITIZER_CFLAGS<br>
-  ${SANITIZER_COMMON_CFLAGS}<br>
-  -fno-rtti)<br>
+if (NOT MSVC)<br>
+  set(SANITIZER_CFLAGS<br>
+    ${SANITIZER_COMMON_CFLAGS}<br>
+    -fno-rtti)<br>
+else()<br>
+  set(SANITIZER_CFLAGS<br>
+    ${SANITIZER_COMMON_CFLAGS}<br>
+    /GR-)<br>
+endif()<br>
<br>
 set(SANITIZER_RUNTIME_LIBRARIES)<br>
 if(APPLE)<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><br clear="all"><div><br></div>-- <br><div>Alexey Samsonov, MSK</div>
</div></div>