[compiler-rt] r189304 - cmake: fix the compiler-rt build with MSVC

Alexey Samsonov samsonov at google.com
Tue Aug 27 01:21:58 PDT 2013


Thanks!

On Tue, Aug 27, 2013 at 5:24 AM, Hans Wennborg <hans at hanshq.net> wrote:

> Author: hans
> Date: Mon Aug 26 20:24:01 2013
> New Revision: 189304
>
> URL: http://llvm.org/viewvc/llvm-project?rev=189304&view=rev
> Log:
> cmake: fix the compiler-rt build with MSVC
>
> This sets flags and excludes things that aren't working with MSVC yet,
> allowing us to build the ASan runtime as part of the cmake build.
>
> Differential Revision: http://llvm-reviews.chandlerc.com/D1525
>
> Modified:
>     compiler-rt/trunk/CMakeLists.txt
>     compiler-rt/trunk/lib/CMakeLists.txt
>     compiler-rt/trunk/lib/asan/CMakeLists.txt
>     compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt
>
> Modified: compiler-rt/trunk/CMakeLists.txt
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/CMakeLists.txt?rev=189304&r1=189303&r2=189304&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/CMakeLists.txt (original)
> +++ compiler-rt/trunk/CMakeLists.txt Mon Aug 26 20:24:01 2013
> @@ -47,8 +47,13 @@ if (NOT CMAKE_SIZEOF_VOID_P EQUAL 4 AND
>      NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
>    message(FATAL_ERROR "Please use architecture with 4 or 8 byte
> pointers.")
>  endif()
> -set(TARGET_64_BIT_CFLAGS "-m64")
> -set(TARGET_32_BIT_CFLAGS "-m32")
> +if (NOT MSVC)
> +  set(TARGET_64_BIT_CFLAGS "-m64")
> +  set(TARGET_32_BIT_CFLAGS "-m32")
> +else()
> +  set(TARGET_64_BIT_CFLAGS "")
> +  set(TARGET_32_BIT_CFLAGS "")
> +endif()
>
>  # List of architectures we can target.
>  set(COMPILER_RT_SUPPORTED_ARCH)
> @@ -83,7 +88,9 @@ macro(test_target_arch arch)
>  endmacro()
>
>  if("${LLVM_NATIVE_ARCH}" STREQUAL "X86")
> -  test_target_arch(x86_64 ${TARGET_64_BIT_CFLAGS})
> +  if (NOT MSVC)
> +    test_target_arch(x86_64 ${TARGET_64_BIT_CFLAGS})
> +  endif()
>    test_target_arch(i386 ${TARGET_32_BIT_CFLAGS})
>  elseif("${LLVM_NATIVE_ARCH}" STREQUAL "PowerPC")
>    test_target_arch(powerpc64 ${TARGET_64_BIT_CFLAGS})
> @@ -114,25 +121,34 @@ function(filter_available_targets out_va
>  endfunction()
>
>  # Provide some common commmandline flags for Sanitizer runtimes.
> -set(SANITIZER_COMMON_CFLAGS
> -  -fPIC
> -  -fno-builtin
> -  -fno-exceptions
> -  -fomit-frame-pointer
> -  -funwind-tables
> -  -fno-stack-protector
> -  -Wno-gnu  # Variadic macros with 0 arguments for ...
> -  -O3
> -  )
> -if(NOT WIN32)
> -  list(APPEND SANITIZER_COMMON_CFLAGS -fvisibility=hidden)
> -endif()
> -# Build sanitizer runtimes with debug info.
> -check_cxx_compiler_flag(-gline-tables-only
> SUPPORTS_GLINE_TABLES_ONLY_FLAG)
> -if(SUPPORTS_GLINE_TABLES_ONLY_FLAG)
> -  list(APPEND SANITIZER_COMMON_CFLAGS -gline-tables-only)
> +if (NOT MSVC)
> +  set(SANITIZER_COMMON_CFLAGS
> +    -fPIC
> +    -fno-builtin
> +    -fno-exceptions
> +    -fomit-frame-pointer
> +    -funwind-tables
> +    -fno-stack-protector
> +    -Wno-gnu  # Variadic macros with 0 arguments for ...
> +    -O3
> +    -fvisibility=hidden
> +    )
>  else()
> -  list(APPEND SANITIZER_COMMON_CFLAGS -g)
> +  set(SANITIZER_COMMON_CFLAGS
> +    /MT
> +    /Zi
> +    /GS-
> +    /wd4722
> +    )
> +endif()
> +# Build sanitizer runtimes with debug info. (MSVC gets /Zi above)
> +if (NOT MSVC)
> +  check_cxx_compiler_flag(-gline-tables-only
> SUPPORTS_GLINE_TABLES_ONLY_FLAG)
> +  if(SUPPORTS_GLINE_TABLES_ONLY_FLAG)
> +    list(APPEND SANITIZER_COMMON_CFLAGS -gline-tables-only)
> +  else()
> +    list(APPEND SANITIZER_COMMON_CFLAGS -g)
> +  endif()
>  endif()
>  # Warnings suppressions.
>  check_cxx_compiler_flag(-Wno-variadic-macros
> SUPPORTS_NO_VARIADIC_MACROS_FLAG)
>
> Modified: compiler-rt/trunk/lib/CMakeLists.txt
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/CMakeLists.txt?rev=189304&r1=189303&r2=189304&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/CMakeLists.txt (original)
> +++ compiler-rt/trunk/lib/CMakeLists.txt Mon Aug 26 20:24:01 2013
> @@ -1,12 +1,12 @@
>  # First, add the subdirectories which contain feature-based runtime
> libraries
>  # and several convenience helper libraries.
> -if(CMAKE_SYSTEM_NAME MATCHES "Darwin|Linux")
> +if(CMAKE_SYSTEM_NAME MATCHES "Darwin|Linux|Windows")
>    # AddressSanitizer is supported on Linux and Mac OS X.
> -  # Windows support is work in progress.
> +  # Windows support is experimental.
>    add_subdirectory(asan)
>    add_subdirectory(interception)
>    add_subdirectory(sanitizer_common)
> -  if(NOT ANDROID)
> +  if(NOT ANDROID AND NOT MSVC)
>      add_subdirectory(lsan)
>      add_subdirectory(profile)
>      add_subdirectory(ubsan)
> @@ -182,13 +182,15 @@ set(i386_SOURCES
>    i386/umoddi3.S
>    ${GENERIC_SOURCES})
>
> -foreach(arch x86_64 i386)
> -  if(CAN_TARGET_${arch})
> -    add_compiler_rt_static_runtime(clang_rt.${arch} ${arch}
> -      SOURCES ${${arch}_SOURCES}
> -      CFLAGS "-std=c99")
> -  endif()
> -endforeach()
> +if (NOT MSVC)
> +  foreach(arch x86_64 i386)
> +    if(CAN_TARGET_${arch})
> +      add_compiler_rt_static_runtime(clang_rt.${arch} ${arch}
> +        SOURCES ${${arch}_SOURCES}
> +        CFLAGS "-std=c99")
> +    endif()
> +  endforeach()
> +endif()
>
>  # Generate configs for running lit and unit tests.
>  configure_lit_site_cfg(
>
> Modified: compiler-rt/trunk/lib/asan/CMakeLists.txt
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/CMakeLists.txt?rev=189304&r1=189303&r2=189304&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/asan/CMakeLists.txt (original)
> +++ compiler-rt/trunk/lib/asan/CMakeLists.txt Mon Aug 26 20:24:01 2013
> @@ -26,9 +26,15 @@ set(ASAN_DYLIB_SOURCES
>
>  include_directories(..)
>
> -set(ASAN_CFLAGS
> -  ${SANITIZER_COMMON_CFLAGS}
> -  -fno-rtti)
> +if (NOT MSVC)
> +  set(ASAN_CFLAGS
> +    ${SANITIZER_COMMON_CFLAGS}
> +    -fno-rtti)
> +else()
> +  set(ASAN_CFLAGS
> +    ${SANITIZER_COMMON_CFLAGS}
> +    /GR-)
> +endif()
>
>  set(ASAN_COMMON_DEFINITIONS
>    ASAN_HAS_EXCEPTIONS=1)
> @@ -38,6 +44,10 @@ if(ANDROID)
>      ASAN_FLEXIBLE_MAPPING_AND_OFFSET=0
>      ASAN_NEEDS_SEGV=0
>      ASAN_LOW_MEMORY=1)
> +elseif(MSVC)
> +  list(APPEND ASAN_COMMON_DEFINITIONS
> +    ASAN_FLEXIBLE_MAPPING_AND_OFFSET=0
> +    ASAN_NEEDS_SEGV=0)
>  else()
>    list(APPEND ASAN_COMMON_DEFINITIONS
>      ASAN_FLEXIBLE_MAPPING_AND_OFFSET=1
> @@ -78,17 +88,32 @@ elseif(ANDROID)
>    list(APPEND ASAN_RUNTIME_LIBRARIES clang_rt.asan-arm-android)
>  else()
>    # Otherwise, build separate libraries for each target.
> +
>    foreach(arch ${ASAN_SUPPORTED_ARCH})
> +    set(ASAN_SOURCE_LIBS
> +      $<TARGET_OBJECTS:RTInterception.${arch}>
> +      $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
> +      $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>)
> +    if (NOT MSVC)
> +      # We can't build Leak Sanitizer on Windows yet.
> +      list(APPEND ASAN_SOURCE_LIBS $<TARGET_OBJECTS:RTLSanCommon.${arch}>)
> +    endif()
> +
>      add_compiler_rt_static_runtime(clang_rt.asan-${arch} ${arch}
> -      SOURCES ${ASAN_SOURCES}
> -              $<TARGET_OBJECTS:RTInterception.${arch}>
> -              $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
> -              $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>
> -              $<TARGET_OBJECTS:RTLSanCommon.${arch}>
> +      SOURCES ${ASAN_SOURCES} ${ASAN_SOURCE_LIBS}
>        CFLAGS ${ASAN_CFLAGS}
>        DEFS ${ASAN_COMMON_DEFINITIONS}
>        SYMS asan.syms)
>      list(APPEND ASAN_RUNTIME_LIBRARIES clang_rt.asan-${arch})
> +
> +    if (WIN32)
>

why not MSVC here as well?


> +      add_compiler_rt_static_runtime(clang_rt.asan_dll_thunk-${arch}
> ${arch}
> +      SOURCES asan_dll_thunk.cc
> +      CFLAGS ${ASAN_CFLAGS} -DASAN_DLL_THUNK
> +      DEFS ${ASAN_COMMON_DEFINITIONS}
> +      SYMS asan.syms)
> +      list(APPEND ASAN_RUNTIME_LIBRARIES clang_rt.asan_dll_thunk-${arch})
> +    endif()
>    endforeach()
>  endif()
>
>
> Modified: compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt?rev=189304&r1=189303&r2=189304&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt Mon Aug 26
> 20:24:01 2013
> @@ -61,9 +61,15 @@ set(SANITIZER_HEADERS
>    sanitizer_symbolizer.h
>    sanitizer_thread_registry.h)
>
> -set(SANITIZER_CFLAGS
> -  ${SANITIZER_COMMON_CFLAGS}
> -  -fno-rtti)
> +if (NOT MSVC)
> +  set(SANITIZER_CFLAGS
> +    ${SANITIZER_COMMON_CFLAGS}
> +    -fno-rtti)
> +else()
> +  set(SANITIZER_CFLAGS
> +    ${SANITIZER_COMMON_CFLAGS}
> +    /GR-)
> +endif()
>
>  set(SANITIZER_RUNTIME_LIBRARIES)
>  if(APPLE)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>



-- 
Alexey Samsonov, MSK
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130827/5f4e44c3/attachment.html>


More information about the llvm-commits mailing list