diff --git a/CMakeLists.txt b/CMakeLists.txt index 055adca18..1c28c2577 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,7 +55,7 @@ option(COVERAGE OFF) option(SANITIZER OFF) option(ENABLE_LTO "Use LTO if available" ON) option(ENABLE_FUZZING "Fuzz testing using LLVM's libFuzzer" OFF) -option(ENABLE_GOLD_LINKER "Use ld.gold if available" ON) +option(ENABLE_GOLD_LINKER "Use GNU gold linker if available" ON) include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}/include/) include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/include/) @@ -118,9 +118,16 @@ if(CMAKE_BUILD_TYPE MATCHES Debug) endif() endif() -check_cxx_compiler_flag("-Wl,-fuse-ld=gold" GOLD_AVAILABLE) -if (ENABLE_GOLD_LINKER AND GOLD_AVAILABLE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-fuse-ld=gold") +if(ENABLE_GOLD_LINKER) + execute_process(COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version ERROR_QUIET OUTPUT_VARIABLE LD_VERSION) + if("${LD_VERSION}" MATCHES "GNU gold") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold -Wl,--disable-new-dtags") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold -Wl,--disable-new-dtags") + message(STATUS "Using GNU gold as linker.") + else() + message(WARNING "GNU gold linker isn't available.") + set(ENABLE_GOLD_LINKER OFF) + endif() endif() if(CMAKE_BUILD_TYPE MATCHES Release)