diff options
author | Petr Hosek <phosek@chromium.org> | 2019-10-11 22:22:29 +0000 |
---|---|---|
committer | Petr Hosek <phosek@chromium.org> | 2019-10-11 22:22:29 +0000 |
commit | 20da3bdb96c306c3e89d56039ffdeaf2bd41d737 (patch) | |
tree | 2c44cf7950c07d417d23a73330bdf27355220a4d /libunwind/src | |
parent | e2d104f64ca8f3b77888f218f0054c28c96a3975 (diff) | |
download | bcm5719-llvm-20da3bdb96c306c3e89d56039ffdeaf2bd41d737.tar.gz bcm5719-llvm-20da3bdb96c306c3e89d56039ffdeaf2bd41d737.zip |
[libunwind] Refactor CMake flag checks to match libc++ and libc++abi
libunwind was using its own set of macros/functions for flag checking
which was similar but different from libc++ and libc++abi. This made
it difficult to replicate the same checks across projects, in fact
there were some checks that appear to have been copy & pasted from
another project and that were broken in the standalone libunwind build.
This change refactors flag checks to match libc++ and libc++abi using
a copy of HandleLibunwindFlags.cmake which is derived from the versions
used by the other projects. This also paves a road to deduplicating and
unifying HandleLibunwindFlags.cmake, HandleLibcxxabiFlags.cmake and
HandleLibcxxFlags.cmake post monorepo switch.
Differential Revision: https://reviews.llvm.org/D68855
llvm-svn: 374606
Diffstat (limited to 'libunwind/src')
-rw-r--r-- | libunwind/src/CMakeLists.txt | 85 |
1 files changed, 49 insertions, 36 deletions
diff --git a/libunwind/src/CMakeLists.txt b/libunwind/src/CMakeLists.txt index 572c82396bf..0b2a830b2ca 100644 --- a/libunwind/src/CMakeLists.txt +++ b/libunwind/src/CMakeLists.txt @@ -5,7 +5,11 @@ set(LIBUNWIND_CXX_SOURCES Unwind-EHABI.cpp Unwind-seh.cpp ) -unwind_append_if(LIBUNWIND_CXX_SOURCES APPLE Unwind_AppleExtras.cpp) +if(APPLE) + list(APPEND LIBUNWIND_CXX_SOURCES + Unwind_AppleExtras.cpp + ) +endif() set(LIBUNWIND_C_SOURCES UnwindLevel1.c @@ -39,10 +43,11 @@ set(LIBUNWIND_HEADERS ../include/libunwind.h ../include/unwind.h ) - -unwind_append_if(LIBUNWIND_HEADERS APPLE +if(APPLE) + list(APPEND LIBUNWIND_HEADERS ../include/mach-o/compact_unwind_encoding.h ) +endif() if (MSVC_IDE) # Force them all into the headers dir on MSVC, otherwise they end up at @@ -56,32 +61,28 @@ set(LIBUNWIND_SOURCES ${LIBUNWIND_ASM_SOURCES}) # Generate library list. -set(libraries) -unwind_append_if(libraries LIBUNWIND_HAS_C_LIB c) +add_library_flags_if(LIBUNWIND_HAS_C_LIB c) if (LIBUNWIND_USE_COMPILER_RT) - list(APPEND libraries "${LIBUNWIND_BUILTINS_LIBRARY}") + add_library_flags("${LIBUNWIND_BUILTINS_LIBRARY}") else() - unwind_append_if(libraries LIBUNWIND_HAS_GCC_S_LIB gcc_s) - unwind_append_if(libraries LIBUNWIND_HAS_GCC_LIB gcc) + add_library_flags_if(LIBUNWIND_HAS_GCC_S_LIB gcc_s) + add_library_flags_if(LIBUNWIND_HAS_GCC_LIB gcc) endif() -unwind_append_if(libraries LIBUNWIND_HAS_DL_LIB dl) +add_library_flags_if(LIBUNWIND_HAS_DL_LIB dl) if (LIBUNWIND_ENABLE_THREADS) - unwind_append_if(libraries LIBUNWIND_HAS_PTHREAD_LIB pthread) - unwind_append_if(LIBUNWIND_COMPILE_FLAGS LIBUNWIND_WEAK_PTHREAD_LIB -DLIBUNWIND_USE_WEAK_PTHREAD=1) + add_library_flags_if(LIBUNWIND_HAS_PTHREAD_LIB pthread) + add_compile_flags_if(LIBUNWIND_WEAK_PTHREAD_LIB -DLIBUNWIND_USE_WEAK_PTHREAD=1) endif() # Setup flags. -unwind_append_if(LIBUNWIND_CXX_FLAGS LIBUNWIND_HAS_NO_RTTI_FLAG -fno-rtti) - -unwind_append_if(LIBUNWIND_LINK_FLAGS LIBUNWIND_HAS_NODEFAULTLIBS_FLAG -nodefaultlibs) +add_link_flags_if_supported(-nodefaultlibs) # MINGW_LIBRARIES is defined in config-ix.cmake -unwind_append_if(libraries MINGW "${MINGW_LIBRARIES}") +add_library_flags_if(MINGW "${MINGW_LIBRARIES}") -if (LIBUNWIND_HAS_NO_EXCEPTIONS_FLAG AND LIBUNWIND_HAS_FUNWIND_TABLES) - list(APPEND LIBUNWIND_COMPILE_FLAGS -fno-exceptions) - list(APPEND LIBUNWIND_COMPILE_FLAGS -funwind-tables) -elseif (LIBUNWIND_ENABLE_SHARED) +if (LIBUNWIND_ENABLE_SHARED AND + NOT (LIBUNWIND_SUPPORTS_FNO_EXCEPTIONS_FLAG AND + LIBUNWIND_SUPPORTS_FUNWIND_TABLES_FLAG)) message(FATAL_ERROR "Compiler doesn't support generation of unwind tables if exception " "support is disabled. Building libunwind DSO with runtime dependency " @@ -89,15 +90,11 @@ elseif (LIBUNWIND_ENABLE_SHARED) endif() if (APPLE) - list(APPEND LIBUNWIND_COMPILE_FLAGS "-U__STRICT_ANSI__") - list(APPEND LIBUNWIND_LINK_FLAGS - "-compatibility_version 1" - "-install_name /usr/lib/libunwind.1.dylib") + add_compile_flags("-U__STRICT_ANSI__") + add_link_flags("-compatibility_version 1" "-install_name /usr/lib/libunwind.1.dylib") if (CMAKE_OSX_DEPLOYMENT_TARGET STREQUAL "10.6") - list(APPEND LIBUNWIND_LINK_FLAGS - "-current_version ${LIBUNWIND_VERSION}" - "/usr/lib/libSystem.B.dylib") + add_link_flags("-current_version ${LIBUNWIND_VERSION}" "/usr/lib/libSystem.B.dylib") endif () endif () @@ -117,14 +114,23 @@ if (LIBUNWIND_ENABLE_SHARED) if(COMMAND llvm_setup_rpath) llvm_setup_rpath(unwind_shared) endif() - target_link_libraries(unwind_shared PRIVATE ${libraries}) + target_link_libraries(unwind_shared PRIVATE ${LIBUNWIND_LIBRARIES}) set_target_properties(unwind_shared PROPERTIES - COMPILE_FLAGS "${LIBUNWIND_COMPILE_FLAGS}" - LINK_FLAGS "${LIBUNWIND_LINK_FLAGS}" - OUTPUT_NAME "unwind" - VERSION "1.0" - SOVERSION "1") + CXX_STANDARD + 11 + CXX_STANDARD_REQUIRED + ON + COMPILE_FLAGS + "${LIBUNWIND_COMPILE_FLAGS}" + LINK_FLAGS + "${LIBUNWIND_LINK_FLAGS}" + OUTPUT_NAME + "unwind" + VERSION + "1.0" + SOVERSION + "1") list(APPEND LIBUNWIND_BUILD_TARGETS "unwind_shared") if (LIBUNWIND_INSTALL_SHARED_LIBRARY) list(APPEND LIBUNWIND_INSTALL_TARGETS "unwind_shared") @@ -134,12 +140,19 @@ endif() # Build the static library. if (LIBUNWIND_ENABLE_STATIC) add_library(unwind_static STATIC ${LIBUNWIND_SOURCES} ${LIBUNWIND_HEADERS}) - target_link_libraries(unwind_static PRIVATE ${libraries}) + target_link_libraries(unwind_static PRIVATE ${LIBUNWIND_LIBRARIES}) set_target_properties(unwind_static PROPERTIES - COMPILE_FLAGS "${LIBUNWIND_COMPILE_FLAGS}" - LINK_FLAGS "${LIBUNWIND_LINK_FLAGS}" - OUTPUT_NAME "unwind") + CXX_STANDARD + 11 + CXX_STANDARD_REQUIRED + ON + COMPILE_FLAGS + "${LIBUNWIND_COMPILE_FLAGS}" + LINK_FLAGS + "${LIBUNWIND_LINK_FLAGS}" + OUTPUT_NAME + "unwind") if(LIBUNWIND_HERMETIC_STATIC_LIBRARY) append_flags_if_supported(UNWIND_STATIC_LIBRARY_FLAGS -fvisibility=hidden) |