diff options
Diffstat (limited to 'Source/cmake/OptionsCommon.cmake')
-rw-r--r-- | Source/cmake/OptionsCommon.cmake | 42 |
1 files changed, 32 insertions, 10 deletions
diff --git a/Source/cmake/OptionsCommon.cmake b/Source/cmake/OptionsCommon.cmake index bc661bb9e..0ccfe3a67 100644 --- a/Source/cmake/OptionsCommon.cmake +++ b/Source/cmake/OptionsCommon.cmake @@ -15,23 +15,26 @@ else () set(CODE_GENERATOR_PREPROCESSOR_WITH_LINEMARKERS "${CMAKE_CXX_COMPILER} -E -x c++") endif () -execute_process(COMMAND ${CMAKE_AR} -V OUTPUT_VARIABLE AR_VERSION) -if ("${AR_VERSION}" MATCHES "^GNU ar") - set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> crT <TARGET> <LINK_FLAGS> <OBJECTS>") - set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> crT <TARGET> <LINK_FLAGS> <OBJECTS>") - set(CMAKE_CXX_ARCHIVE_APPEND "<CMAKE_AR> rT <TARGET> <LINK_FLAGS> <OBJECTS>") - set(CMAKE_C_ARCHIVE_APPEND "<CMAKE_AR> rT <TARGET> <LINK_FLAGS> <OBJECTS>") +option(USE_THIN_ARCHIVES "Produce all static libraries as thin archives" ON) +if (USE_THIN_ARCHIVES) + execute_process(COMMAND ${CMAKE_AR} -V OUTPUT_VARIABLE AR_VERSION) + if ("${AR_VERSION}" MATCHES "^GNU ar") + set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> crT <TARGET> <LINK_FLAGS> <OBJECTS>") + set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> crT <TARGET> <LINK_FLAGS> <OBJECTS>") + set(CMAKE_CXX_ARCHIVE_APPEND "<CMAKE_AR> rT <TARGET> <LINK_FLAGS> <OBJECTS>") + set(CMAKE_C_ARCHIVE_APPEND "<CMAKE_AR> rT <TARGET> <LINK_FLAGS> <OBJECTS>") + endif () endif () set_property(GLOBAL PROPERTY USE_FOLDERS ON) -if (CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") +if (COMPILER_IS_GCC_OR_CLANG) set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fno-exceptions -fno-strict-aliasing") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-exceptions -fno-strict-aliasing -fno-rtti") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") endif () -if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" AND CMAKE_GENERATOR STREQUAL "Ninja") +if (COMPILER_IS_CLANG AND CMAKE_GENERATOR STREQUAL "Ninja") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fcolor-diagnostics") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fcolor-diagnostics") endif () @@ -68,10 +71,29 @@ endif () EXPOSE_VARIABLE_TO_BUILD(WTF_CPU_ARM64_CORTEXA53) +set(ARM_TRADITIONAL_DETECTED FALSE) +if (WTF_CPU_ARM) + set(ARM_THUMB2_TEST_SOURCE + " + #if !defined(thumb2) && !defined(__thumb2__) + #error \"Thumb2 instruction set isn't available\" + #endif + int main() {} + ") + + include(CheckCXXSourceCompiles) + CHECK_CXX_SOURCE_COMPILES("${ARM_THUMB2_TEST_SOURCE}" ARM_THUMB2_DETECTED) + if (NOT ARM_THUMB2_DETECTED) + set(ARM_TRADITIONAL_DETECTED TRUE) + # See https://bugs.webkit.org/show_bug.cgi?id=159880#c4 for details. + message(STATUS "Disabling GNU gold linker, because it doesn't support ARM instruction set properly.") + endif () +endif () + # Use ld.gold if it is available and isn't disabled explicitly include(CMakeDependentOption) CMAKE_DEPENDENT_OPTION(USE_LD_GOLD "Use GNU gold linker" ON - "NOT CXX_ACCEPTS_MFIX_CORTEX_A53_835769" OFF) + "NOT CXX_ACCEPTS_MFIX_CORTEX_A53_835769;NOT ARM_TRADITIONAL_DETECTED" OFF) if (USE_LD_GOLD) execute_process(COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version ERROR_QUIET OUTPUT_VARIABLE LD_VERSION) if ("${LD_VERSION}" MATCHES "GNU gold") @@ -104,7 +126,7 @@ if (DEBUG_FISSION) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gdb-index") endif () -if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") +if (COMPILER_IS_CLANG) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Qunused-arguments") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Qunused-arguments") endif () |