diff --git a/CMakeLists.txt b/CMakeLists.txt index d16ce42a..29d64a90 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,8 +3,19 @@ cmake_minimum_required(VERSION 3.25 FATAL_ERROR) set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT Embedded) cmake_policy(SET CMP0141 NEW) -if (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}) +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) @@ -22,6 +33,14 @@ if (NOT DEFINED CMAKE_C_COMPILER_LAUNCHER AND NOT DEFINED ENV{CMAKE_C_COMPILER_L 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() @@ -203,6 +222,12 @@ target_link_libraries(GeodeFilesystemImpl PUBLIC ghc_filesystem) add_subdirectory(${GEODE_BINDINGS_REPO_PATH} ${CMAKE_BINARY_DIR}/bindings) +if (NOT GEODE_DISABLE_PRECOMPILED_HEADERS) + target_precompile_headers(GeodeBindings INTERFACE + "${GEODE_LOADER_PATH}/include/Geode/Bindings.hpp" + ) +endif() + target_include_directories(GeodeBindings PUBLIC ${GEODE_LOADER_PATH}/include ${GEODE_LOADER_PATH}/include/Geode/cocos/include @@ -233,8 +258,15 @@ if (PROJECT_IS_TOP_LEVEL) if (SUPPORTS_W_NO_EVERYTHING) target_compile_options(geode-loader PRIVATE -Wno-inconsistent-missing-override) endif() -elseif(EXISTS ${GEODE_PLATFORM_BIN_PATH}) +elseif (EXISTS ${GEODE_PLATFORM_BIN_PATH}) target_link_libraries(${PROJECT_NAME} INTERFACE "${GEODE_PLATFORM_BIN_PATH}") + if (NOT GEODE_DISABLE_PRECOMPILED_HEADERS) + target_precompile_headers(${PROJECT_NAME} INTERFACE + "${GEODE_LOADER_PATH}/include/Geode/DefaultInclude.hpp" + "${GEODE_LOADER_PATH}/include/Geode/Geode.hpp" + # please stop adding modify here its not here because it makes windows compilation take longer than geode 1.0 release date + ) + endif() else() message(FATAL_ERROR "No valid loader binary to link to! Install pre-built binaries with `geode sdk install-binaries`, " diff --git a/loader/CMakeLists.txt b/loader/CMakeLists.txt index f2506fe6..1c9faa09 100644 --- a/loader/CMakeLists.txt +++ b/loader/CMakeLists.txt @@ -268,6 +268,13 @@ if (MSVC) target_link_options(${PROJECT_NAME} PRIVATE /DELAYLOAD:libcocos2d.dll /DELAYLOAD:libExtensions.dll) endif() +# Use precompiled headers for faster builds +if (NOT GEODE_DISABLE_PRECOMPILED_HEADERS) + target_precompile_headers(${PROJECT_NAME} PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}/include/Geode/Geode.hpp" + ) +endif() + # Create launcher if (APPLE) set_target_properties(geode-loader PROPERTIES