CmakeTools/BuildOptions.cmake

53 lines
1.7 KiB
CMake
Raw Permalink Normal View History

# 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)
option(BUILD_TESTING "Build unit tests" ON)
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()