Browse Source

CMake: Use the mold linker where available

Linking a debug build:

GNU LD: 1.82s
Mold: 0.03s
pull/4992/head
Gleb Mazovetskiy 4 years ago committed by Anders Jenbo
parent
commit
2a7f771bd8
  1. 33
      CMake/MoldLinker.cmake
  2. 2
      CMakeLists.txt

33
CMake/MoldLinker.cmake

@ -0,0 +1,33 @@
if(NOT CMAKE_CROSSCOMPILING)
find_program(
LD_MOLD_PATH
ld
PATHS
${CMAKE_INSTALL_PREFIX}/libexec/mold
ENV LD_MOLD_PATH
NO_DEFAULT_PATH
)
if(NOT LD_MOLD_PATH STREQUAL "LD_MOLD_PATH-NOTFOUND")
set(_have_ld_mold ON)
else()
set(_have_ld_mold OFF)
endif()
endif()
option(USE_LD_MOLD "Use mold linker" ${_have_ld_mold})
if(USE_LD_MOLD)
message("-- Using Mold linker (pass -DUSE_LD_MOLD=OFF to disable)")
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12)
if (_have_ld_mold)
get_filename_component(_mold_dir ${LD_MOLD_PATH} DIRECTORY)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -B${_mold_dir}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -B${_mold_dir}")
else()
message(WARNING "Cannot use mold linker: mold ld directory not found")
endif()
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fuse-ld=mold")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=mold")
endif()
endif()

2
CMakeLists.txt

@ -124,6 +124,8 @@ cmake_dependent_option(DEVILUTIONX_DISABLE_RTTI "Disable RTTI" ON "NONET" OFF)
cmake_dependent_option(DEVILUTIONX_DISABLE_EXCEPTIONS "Disable exceptions" ON "NONET" OFF)
RELEASE_OPTION(DEVILUTIONX_STATIC_CXX_STDLIB "Link C++ standard library statically (if available)")
include(MoldLinker)
# Memory / performance trade-off options
option(DISABLE_STREAMING_MUSIC "Disable streaming music (to work around broken platform implementations)" OFF)
mark_as_advanced(DISABLE_STREAMING_MUSIC)

Loading…
Cancel
Save