sccache works with pch on clang! also better detection logic

This commit is contained in:
ConfiG 2024-02-13 03:21:42 +03:00
parent b78c6b1ff2
commit 8d332c8a17
No known key found for this signature in database
GPG key ID: 44DA1983F524C11B

View file

@ -1,61 +1,20 @@
cmake_minimum_required(VERSION 3.25 FATAL_ERROR)
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT Embedded)
cmake_policy(SET CMP0141 NEW)
if (CMAKE_GENERATOR MATCHES "Visual Studio")
# sccache does not work with msbuild,
# so no point in using it
set(GEODE_DISABLE_CACHE ON)
endif()
if (NOT DEFINED GEODE_DISABLE_CACHE)
set(GEODE_DISABLE_CACHE OFF)
endif()
if (NOT GEODE_DISABLE_CACHE AND
(NOT DEFINED CMAKE_C_COMPILER_LAUNCHER AND NOT DEFINED ENV{CMAKE_C_COMPILER_LAUNCHER} OR
NOT DEFINED CMAKE_CXX_COMPILER_LAUNCHER AND NOT DEFINED ENV{CMAKE_CXX_COMPILER_LAUNCHER}))
message(STATUS "Looking for ccache/sccache")
find_program(GEODE_CCACHE NAMES sccache ccache)
if (NOT GEODE_CCACHE)
message(STATUS "Looking for ccache/sccache - not found")
message(NOTICE "Not using a caching compiler (ccache/sccache). "
"It is recommended to install one to improve build times.")
message(NOTICE "We recommend sccache, check its README for installation instructions, "
"normally you can just use your usual package manager (e.g. 'scoop install sccache').")
if (NOT DEFINED GEODE_DISABLE_PRECOMPILED_HEADERS)
message(NOTICE "Because of this, PCH will be enabled.")
set(GEODE_DISABLE_PRECOMPILED_HEADERS OFF)
endif()
else()
message(STATUS "Looking for ccache/sccache - found")
message(NOTICE "Compiler launcher not set but ccache/sccache was found. "
"Setting compiler launcher to that")
set(CMAKE_C_COMPILER_LAUNCHER ${GEODE_CCACHE})
set(CMAKE_CXX_COMPILER_LAUNCHER ${GEODE_CCACHE})
endif()
endif()
if (GEODE_DISABLE_CACHE AND NOT DEFINED GEODE_DISABLE_PRECOMPILED_HEADERS)
set(GEODE_DISABLE_PRECOMPILED_HEADERS OFF)
endif()
if (NOT DEFINED GEODE_DISABLE_PRECOMPILED_HEADERS)
set(GEODE_DISABLE_PRECOMPILED_HEADERS ON)
endif()
if (DEFINED ENV{GEODE_CI})
message(STATUS "Building in CI")
endif()
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT Embedded)
cmake_policy(SET CMP0141 NEW)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build libraries static" FORCE)
# Docs flags
if (GEODE_BUILDING_DOCS)
set(GEODE_DISABLE_CLI_CALLS On)
set(CMAKE_EXPORT_COMPILE_COMMANDS On)
set(GEODE_DONT_BUILD_TEST_MODS On)
set(GEODE_DISABLE_CLI_CALLS ON)
set(GEODE_DISABLE_PRECOMPILED_HEADERS ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(GEODE_DONT_BUILD_TEST_MODS ON)
endif()
option(GEODE_USE_BREAKPAD "Enables the use of the Breakpad library for crash dumps." ON)
@ -131,6 +90,75 @@ endif()
project(geode-sdk VERSION ${GEODE_VERSION} LANGUAGES CXX C)
message(STATUS "Looking for ccache/sccache")
if (DEFINED CMAKE_C_COMPILER_LAUNCHER OR DEFINED CMAKE_CXX_COMPILER_LAUNCHER)
message(STATUS "Looking for ccache/sccache - detecting variant")
if (DEFINED CMAKE_C_COMPILER_LAUNCHER AND DEFINED CMAKE_CXX_COMPILER_LAUNCHER AND
CMAKE_C_COMPILER_LAUNCHER STREQUAL CMAKE_CXX_COMPILER_LAUNCHER)
if (CMAKE_CXX_COMPILER_LAUNCHER MATCHES "sccache(|.exe)$")
message(STATUS "Looking for ccache/sccache - detected sccache")
set(GEODE_CCACHE_VARIANT "sccache")
elseif(CMAKE_CXX_COMPILER_LAUNCHER MATCHES "ccache(|.exe)$")
message(STATUS "Looking for ccache/sccache - detected ccache")
set(GEODE_CCACHE_VARIANT "ccache")
else()
message(STATUS "Looking for ccache/sccache - none (custom compiler launcher: {CMAKE_C_COMPILER_LAUNCHER}, {CMAKE_CXX_COMPILER_LAUNCHER})")
endif()
else()
message(STATUS "Looking for ccache/sccache - skipped (custom compiler launcher: {CMAKE_C_COMPILER_LAUNCHER}, {CMAKE_CXX_COMPILER_LAUNCHER})")
endif()
elseif (CMAKE_GENERATOR MATCHES "Visual Studio")
message(STATUS "Looking for ccache/sccache - skipped (Visual Studio generator)")
else()
find_program(GEODE_CCACHE NAMES sccache ccache)
if (GEODE_CCACHE)
if (${GEODE_CCACHE} MATCHES "sccache(|.exe)$")
set(GEODE_CCACHE_VARIANT "sccache")
else()
set(GEODE_CCACHE_VARIANT "ccache")
endif()
message(STATUS "Looking for ccache/sccache - found ${GEODE_CCACHE_VARIANT}")
message(NOTICE "Compiler launcher not set but ccache/sccache was found. "
"Setting compiler launcher to that")
set(CMAKE_C_COMPILER_LAUNCHER ${GEODE_CCACHE})
set(CMAKE_CXX_COMPILER_LAUNCHER ${GEODE_CCACHE})
else()
message(STATUS "Looking for ccache/sccache - not found")
endif()
unset(GEODE_CCACHE)
endif()
if (DEFINED GEODE_CCACHE_VARIANT)
if (NOT DEFINED GEODE_DISABLE_PRECOMPILED_HEADERS AND
${GEODE_CCACHE_VARIANT} STREQUAL "sccache" AND
CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
message(NOTICE "Using sccache with Clang, PCH will be enabled.")
set(GEODE_DISABLE_PRECOMPILED_HEADERS OFF)
else()
message(NOTICE "Using ${GEODE_CCACHE_VARIANT} with ${CMAKE_CXX_COMPILER_ID}, PCH will be disabled.")
set(GEODE_DISABLE_PRECOMPILED_HEADERS ON)
endif()
else()
message(NOTICE "Not using a caching compiler (ccache/sccache). "
"It is recommended to install one to improve build times.")
message(NOTICE "We recommend sccache, check its README for installation instructions, "
"normally you can just use your usual package manager (e.g. 'scoop install sccache').")
if (NOT DEFINED GEODE_DISABLE_PRECOMPILED_HEADERS)
message(NOTICE "Because of this, PCH will be enabled.")
set(GEODE_DISABLE_PRECOMPILED_HEADERS OFF)
endif()
endif()
if (NOT DEFINED GEODE_DISABLE_PRECOMPILED_HEADERS)
set(GEODE_DISABLE_PRECOMPILED_HEADERS OFF)
endif()
if (GEODE_DISABLE_PRECOMPILED_HEADERS)
message(STATUS "Pre-compiled headers - OFF")
else()
message(STATUS "Pre-compiled headers - ON")
endif()
add_library(${PROJECT_NAME} INTERFACE)
# Rerun CMake on VERSION file change