2024-05-16 23:14:41 +00:00
|
|
|
# BuildOptions.cmake
|
|
|
|
# License: Unlicense (https://unlicense.org)
|
|
|
|
option(USE_CCACHE "Use ccache compiler cache to speed up builds" ON)
|
|
|
|
option(USE_MOLD "Use the mold/sold parallel linker for faster builds" ON)
|
2024-05-18 14:58:12 +00:00
|
|
|
option(BUILD_TESTING "Build unit tests" ON)
|
2024-05-16 22:56:21 +00:00
|
|
|
|
|
|
|
function(use_ccache)
|
|
|
|
if (USE_CCACHE)
|
|
|
|
message(CHECK_START "Detecting cacche")
|
|
|
|
|
|
|
|
find_program(CCACHE_PATH ccache)
|
|
|
|
if(CCACHE_PATH)
|
|
|
|
message(CHECK_PASS("found"))
|
|
|
|
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_PATH})
|
|
|
|
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE_PATH})
|
|
|
|
endif()
|
|
|
|
|
|
|
|
list(APPEND CMAKE_MESSAGE_INDENT " ")
|
|
|
|
message(STATUS "(set -DUSE_CCACHE=Off to disable)")
|
|
|
|
list(POP_BACK CMAKE_MESSAGE_INDENT)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
function(check_and_set_linker)
|
|
|
|
if(USE_MOLD)
|
|
|
|
# Determine if the compiler is GCC or Clang
|
|
|
|
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
|
|
|
|
message(STATUS "Detected GCC/Clang, checking for mold/sold linker...")
|
|
|
|
|
|
|
|
# Check for mold linker on general systems and ld64.mold on macOS
|
|
|
|
if(APPLE)
|
|
|
|
find_program(MOLD_LINKER ld64.mold)
|
|
|
|
set(CMAKE_LINKER_TYPE SOLD)
|
|
|
|
else()
|
|
|
|
find_program(MOLD_LINKER mold)
|
|
|
|
set(CMAKE_LINKER_TYPE MOLD)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(MOLD_LINKER)
|
|
|
|
message(STATUS "LINKER_TYPE set to ${CMAKE_LINKER_TYPE} for faster builds")
|
|
|
|
list(APPEND CMAKE_MESSAGE_INDENT " ")
|
|
|
|
message(STATUS "(set -DUSE_MOLD=OFF to disable)")
|
|
|
|
list(POP_BACK CMAKE_MESSAGE_INDENT)
|
|
|
|
else()
|
|
|
|
message(STATUS " -- No suitable mold linker found. Using default linker.")
|
|
|
|
endif()
|
|
|
|
else()
|
|
|
|
message(STATUS "Compiler is neither GCC nor Clang. Skipping mold linker check.")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
endfunction()
|