[compiler-rt] r201543 - [CMake] Simplify code for detecting/setting compiler flags
Alexey Samsonov
samsonov at google.com
Mon Feb 17 23:26:59 PST 2014
Author: samsonov
Date: Tue Feb 18 01:26:58 2014
New Revision: 201543
URL: http://llvm.org/viewvc/llvm-project?rev=201543&view=rev
Log:
[CMake] Simplify code for detecting/setting compiler flags
Added:
compiler-rt/trunk/cmake/config-ix.cmake
Modified:
compiler-rt/trunk/CMakeLists.txt
compiler-rt/trunk/lib/CMakeLists.txt
compiler-rt/trunk/lib/asan/tests/CMakeLists.txt
compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt
compiler-rt/trunk/lib/tsan/CMakeLists.txt
Modified: compiler-rt/trunk/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/CMakeLists.txt?rev=201543&r1=201542&r2=201543&view=diff
==============================================================================
--- compiler-rt/trunk/CMakeLists.txt (original)
+++ compiler-rt/trunk/CMakeLists.txt Tue Feb 18 01:26:58 2014
@@ -7,8 +7,6 @@
# An important constraint of the build is that it only produces libraries
# based on the ability of the host toolchain to target various platforms.
-include(LLVMParseArguments)
-
# The CompilerRT build system requires CMake version 2.8.8 or higher in order
# to use its support for building convenience "libraries" as a collection of
# .o files. This is particularly useful in producing larger, more complex
@@ -20,7 +18,6 @@ else()
cmake_minimum_required(VERSION 2.8.12.1)
endif()
-
# Top level target used to build all compiler-rt libraries.
add_custom_target(compiler-rt)
@@ -39,17 +36,17 @@ set(COMPILER_RT_LIBRARY_INSTALL_DIR
# Add path for custom modules
set(CMAKE_MODULE_PATH
- ${CMAKE_MODULE_PATH}
+ "${CMAKE_CURRENT_SOURCE_DIR}/cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules"
+ ${CMAKE_MODULE_PATH}
)
-include(AddCompilerRT)
+include(CompilerRTUtils)
set(COMPILER_RT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(COMPILER_RT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
# Setup custom SDK sysroots.
set(COMPILER_RT_DARWIN_SDK_SYSROOT ${COMPILER_RT_SOURCE_DIR}/SDKs/darwin)
set(COMPILER_RT_LINUX_SDK_SYSROOT ${COMPILER_RT_SOURCE_DIR}/SDKs/linux)
-include(SanitizerUtils)
set(COMPILER_RT_EXTRA_ANDROID_HEADERS ${COMPILER_RT_SOURCE_DIR}/third_party/android/include)
@@ -139,66 +136,58 @@ function(filter_available_targets out_va
endfunction()
option(COMPILER_RT_DEBUG "Build runtimes with full debug info" OFF)
-
# COMPILER_RT_DEBUG_PYBOOL is used by lit.common.configured.in.
pythonize_bool(COMPILER_RT_DEBUG)
+#================================
+# Setup Compiler Flags
+#================================
+include(config-ix)
+
+macro(append_if list condition var)
+ if (${condition})
+ list(APPEND ${list} ${var})
+ endif()
+endmacro()
+
# Provide some common commmandline flags for Sanitizer runtimes.
-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 ...
- -fvisibility=hidden)
- if (NOT COMPILER_RT_DEBUG)
+append_if(SANITIZER_COMMON_CFLAGS COMPILER_RT_HAS_FPIC_FLAG -fPIC)
+append_if(SANITIZER_COMMON_CFLAGS COMPILER_RT_HAS_FNO_BUILTIN_FLAG -fno-builtin)
+append_if(SANITIZER_COMMON_CFLAGS COMPILER_RT_HAS_FNO_EXCEPTIONS_FLAG -fno-exceptions)
+append_if(SANITIZER_COMMON_CFLAGS COMPILER_RT_HAS_FOMIT_FRAME_POINTER_FLAG -fomit-frame-pointer)
+append_if(SANITIZER_COMMON_CFLAGS COMPILER_RT_HAS_FUNWIND_TABLES_FLAG -funwind-tables)
+append_if(SANITIZER_COMMON_CFLAGS COMPILER_RT_HAS_FNO_STACK_PROTECTOR_FLAG -fno-stack-protector)
+append_if(SANITIZER_COMMON_CFLAGS COMPILER_RT_HAS_FVISIBILITY_HIDDEN_FLAG -fvisibility=hidden)
+append_if(SANITIZER_COMMON_CFLAGS COMPILER_RT_HAS_FNO_FUNCTION_SECTIONS_FLAG -fno-function-sections)
+
+append_if(SANITIZER_COMMON_CFLAGS COMPILER_RT_HAS_MT_FLAG /MT)
+append_if(SANITIZER_COMMON_CFLAGS COMPILER_RT_HAS_Oy_FLAG /Oy-)
+append_if(SANITIZER_COMMON_CFLAGS COMPILER_RT_HAS_GS_FLAG /GS-)
+
+# Build with optimization, unless we're in debug mode.
+if(NOT COMPILER_RT_DEBUG)
+ if(MSVC)
+ list(APPEND SANITIZER_COMMON_CFLAGS /O2)
+ else()
list(APPEND SANITIZER_COMMON_CFLAGS -O3)
endif()
-else()
- set(SANITIZER_COMMON_CFLAGS
- /MT
- /Zi
- /Oy-
- /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 AND NOT COMPILER_RT_DEBUG)
- list(APPEND SANITIZER_COMMON_CFLAGS -gline-tables-only)
- else()
- list(APPEND SANITIZER_COMMON_CFLAGS -g)
- endif()
+
+# Build sanitizer runtimes with debug info.
+if(COMPILER_RT_HAS_GLINE_TABLES_ONLY_FLAG)
+ list(APPEND SANITIZER_COMMON_CFLAGS -gline-tables-only)
+elseif(COMPILER_RT_HAS_G_FLAG)
+ list(APPEND SANITIZER_COMMON_CFLAGS -g)
+elseif(COMPILER_RT_HAS_Zi_FLAG)
+ list(APPEND SANITIZER_COMMON_CFLAGS /Zi)
endif()
-# Build sanitizer runtimes with -fno-function-sections.
-check_cxx_compiler_flag("-Werror -fno-function-sections" SUPPORTS_FNO_FUNCTION_SECTIONS_FLAG)
-if(SUPPORTS_FNO_FUNCTION_SECTIONS_FLAG)
- list(APPEND SANITIZER_COMMON_CFLAGS -fno-function-sections)
-endif()
-# Warnings suppressions.
-check_cxx_compiler_flag(-Wno-variadic-macros SUPPORTS_NO_VARIADIC_MACROS_FLAG)
-if(SUPPORTS_NO_VARIADIC_MACROS_FLAG)
- list(APPEND SANITIZER_COMMON_CFLAGS -Wno-variadic-macros)
-endif()
-check_cxx_compiler_flag(-Wno-c99-extensions SUPPORTS_NO_C99_EXTENSIONS_FLAG)
-if(SUPPORTS_NO_C99_EXTENSIONS_FLAG)
- list(APPEND SANITIZER_COMMON_CFLAGS -Wno-c99-extensions)
-endif()
-# Sanitizer may not have libstdc++, so we can have problems with virtual
-# destructors.
-check_cxx_compiler_flag(-Wno-non-virtual-dtor SUPPORTS_NO_NON_VIRTUAL_DTOR_FLAG)
-if (SUPPORTS_NO_NON_VIRTUAL_DTOR_FLAG)
- list(APPEND SANITIZER_COMMON_CFLAGS -Wno-non-virtual-dtor)
-endif()
-check_cxx_compiler_flag(-Wglobal-constructors SUPPORTS_GLOBAL_CONSTRUCTORS_FLAG)
-# Not all sanitizers forbid global constructors.
-check_cxx_compiler_flag("-Werror -Wframe-larger-than=512"
- SUPPORTS_FRAME_LARGER_THAN_FLAG)
+
+# Turn off several warnings.
+append_if(SANITIZER_COMMON_CFLAGS COMPILER_RT_HAS_WNO_GNU_FLAG -Wno-gnu)
+append_if(SANITIZER_COMMON_CFLAGS COMPILER_RT_HAS_WNO_VARIADIC_MACROS_FLAG -Wno-variadic-macros)
+append_if(SANITIZER_COMMON_CFLAGS COMPILER_RT_HAS_WNO_C99_EXTENSIONS_FLAG -Wno-c99-extensions)
+append_if(SANITIZER_COMMON_CFLAGS COMPILER_RT_HAS_WNO_NON_VIRTUAL_DTOR_FLAG -Wno-non-virtual-dtor)
+append_if(SANITIZER_COMMON_CFLAGS COMPILER_RT_HAS_WD4722_FLAG /wd4722)
if(APPLE)
# Obtain the iOS Simulator SDK path from xcodebuild.
Added: compiler-rt/trunk/cmake/config-ix.cmake
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/cmake/config-ix.cmake?rev=201543&view=auto
==============================================================================
--- compiler-rt/trunk/cmake/config-ix.cmake (added)
+++ compiler-rt/trunk/cmake/config-ix.cmake Tue Feb 18 01:26:58 2014
@@ -0,0 +1,30 @@
+include(CheckCXXCompilerFlag)
+
+# CodeGen options.
+check_cxx_compiler_flag(-fPIC COMPILER_RT_HAS_FPIC_FLAG)
+check_cxx_compiler_flag(-fno-builtin COMPILER_RT_HAS_FNO_BUILTIN_FLAG)
+check_cxx_compiler_flag(-fno-exceptions COMPILER_RT_HAS_FNO_EXCEPTIONS_FLAG)
+check_cxx_compiler_flag(-fomit-frame-pointer COMPILER_RT_HAS_FOMIT_FRAME_POINTER_FLAG)
+check_cxx_compiler_flag(-funwind-tables COMPILER_RT_HAS_FUNWIND_TABLES_FLAG)
+check_cxx_compiler_flag(-fno-stack-protector COMPILER_RT_HAS_FNO_STACK_PROTECTOR_FLAG)
+check_cxx_compiler_flag(-fvisibility=hidden COMPILER_RT_HAS_FVISIBILITY_HIDDEN_FLAG)
+check_cxx_compiler_flag("-Werror -fno-function-sections" COMPILER_RT_HAS_FNO_FUNCTION_SECTIONS_FLAG)
+
+check_cxx_compiler_flag(/GS COMPILER_RT_HAS_GS_FLAG)
+check_cxx_compiler_flag(/MT COMPILER_RT_HAS_MT_FLAG)
+check_cxx_compiler_flag(/Oy COMPILER_RT_HAS_Oy_FLAG)
+
+# Debug info flags.
+check_cxx_compiler_flag(-gline-tables-only COMPILER_RT_HAS_GLINE_TABLES_ONLY_FLAG)
+check_cxx_compiler_flag(-g COMPILER_RT_HAS_G_FLAG)
+check_cxx_compiler_flag(/Zi COMPILER_RT_HAS_Zi_FLAG)
+
+# Warnings.
+check_cxx_compiler_flag("-Werror -Wframe-larger-than=512" COMPILER_RT_HAS_WFRAME_LARGER_THAN_FLAG)
+check_cxx_compiler_flag("-Werror -Wglobal-constructors" COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG)
+check_cxx_compiler_flag("-Werror -Wno-c99-extensions" COMPILER_RT_HAS_WNO_C99_EXTENSIONS_FLAG)
+check_cxx_compiler_flag("-Werror -Wno-gnu" COMPILER_RT_HAS_WNO_GNU_FLAG)
+check_cxx_compiler_flag("-Werror -Wno-non-virtual-dtor" COMPILER_RT_HAS_WNO_NON_VIRTUAL_DTOR_FLAG)
+check_cxx_compiler_flag("-Werror -Wno-variadic-macros" COMPILER_RT_HAS_WNO_VARIADIC_MACROS_FLAG)
+
+check_cxx_compiler_flag(/wd4722 COMPILER_RT_HAS_WD4722_FLAG)
Modified: compiler-rt/trunk/lib/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/CMakeLists.txt?rev=201543&r1=201542&r2=201543&view=diff
==============================================================================
--- compiler-rt/trunk/lib/CMakeLists.txt (original)
+++ compiler-rt/trunk/lib/CMakeLists.txt Tue Feb 18 01:26:58 2014
@@ -1,6 +1,8 @@
# First, add the subdirectories which contain feature-based runtime libraries
# and several convenience helper libraries.
+include(AddCompilerRT)
+include(SanitizerUtils)
# Don't build sanitizers in the bootstrap build.
if(LLVM_USE_SANITIZER STREQUAL "")
# AddressSanitizer is supported on Linux and Mac OS X.
Modified: compiler-rt/trunk/lib/asan/tests/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/tests/CMakeLists.txt?rev=201543&r1=201542&r2=201543&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/tests/CMakeLists.txt (original)
+++ compiler-rt/trunk/lib/asan/tests/CMakeLists.txt Tue Feb 18 01:26:58 2014
@@ -32,9 +32,7 @@ set(ASAN_UNITTEST_COMMON_CFLAGS
-Werror=sign-compare
-g
-O2)
-if(SUPPORTS_NO_VARIADIC_MACROS_FLAG)
- list(APPEND ASAN_UNITTEST_COMMON_CFLAGS -Wno-variadic-macros)
-endif()
+append_if(ASAN_UNITTEST_COMMON_CFLAGS COMPILER_RT_HAS_WNO_VARIADIC_MACROS_FLAG -Wno-variadic-macros)
# Use -D instead of definitions to please custom compile command.
list(APPEND ASAN_UNITTEST_COMMON_CFLAGS
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=201543&r1=201542&r2=201543&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt (original)
+++ compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt Tue Feb 18 01:26:58 2014
@@ -98,12 +98,8 @@ else()
/GR-)
endif()
-if(SUPPORTS_FRAME_LARGER_THAN_FLAG)
- list(APPEND SANITIZER_CFLAGS -Wframe-larger-than=512)
-endif()
-if(SUPPORTS_GLOBAL_CONSTRUCTORS_FLAG)
- list(APPEND SANITIZER_CFLAGS -Wglobal-constructors)
-endif()
+append_if(SANITIZER_CFLAGS COMPILER_RT_HAS_WFRAME_LARGER_THAN_FLAG -Wframe-larger-than=512)
+append_if(SANITIZER_CFLAGS COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG -Wglobal-constructors)
set(SANITIZER_RUNTIME_LIBRARIES)
if(APPLE)
Modified: compiler-rt/trunk/lib/tsan/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/CMakeLists.txt?rev=201543&r1=201542&r2=201543&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/CMakeLists.txt (original)
+++ compiler-rt/trunk/lib/tsan/CMakeLists.txt Tue Feb 18 01:26:58 2014
@@ -10,12 +10,8 @@ set(TSAN_CFLAGS
-fno-rtti)
set(TSAN_RTL_CFLAGS ${TSAN_CFLAGS})
-if(SUPPORTS_FRAME_LARGER_THAN_FLAG)
- list(APPEND TSAN_RTL_CFLAGS -Wframe-larger-than=512)
-endif()
-if(SUPPORTS_GLOBAL_CONSTRUCTORS_FLAG)
- list(APPEND TSAN_RTL_CFLAGS -Wglobal-constructors)
-endif()
+append_if(TSAN_RTL_CFLAGS COMPILER_RT_HAS_WFRAME_LARGER_THAN_FLAG -Wframe-larger-than=512)
+append_if(TSAN_RTL_CFLAGS COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG -Wglobal-constructors)
# FIXME: Add support for --sysroot=. compile flag:
if("${CMAKE_BUILD_TYPE}" EQUAL "Release")
More information about the llvm-commits
mailing list