mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-28 16:11:29 +00:00
[CMake] Simplify code for detecting/setting compiler flags
llvm-svn: 201543
This commit is contained in:
parent
202dc131e7
commit
9a1ffce25a
@ -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_var)
|
||||
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.
|
||||
|
30
compiler-rt/cmake/config-ix.cmake
Normal file
30
compiler-rt/cmake/config-ix.cmake
Normal file
@ -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)
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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")
|
||||
|
Loading…
Reference in New Issue
Block a user