From 905da94b4013cd5850bd0e11cc9ac7cfdaf92f58 Mon Sep 17 00:00:00 2001 From: Luke Street Date: Mon, 31 Aug 2026 17:11:05 -0600 Subject: [PATCH] Fix game compile flags on Linux/GCC There was a conflict with per-target compile flags and the PCH. The PCH was causing the game code to be built without the inlining flags actually taking effect (internal `src/dusk` files did not use them), which caused mods to fail to resolve static functions for hooks. Fix: split Dusklight internals (`src/dusk/`) into a separate static library altogether, cleanly allowing us to disable inlining and patching flags only for internal code while also fixing the PCH flags issue. Additionally, this updates symgen to v1.3.4, which includes a fix for GCC function fragments and specializations getting resolved as display name aliases, conflicting with the actual functions. Aurora also updated to include https://github.com/encounter/aurora/pull/244 --- CMakeLists.txt | 30 +++++++++++++++++++----------- CMakePresets.json | 6 +++++- cmake/AndroidExports.cmake | 2 -- cmake/AppleExports.cmake | 2 -- cmake/SymbolManifest.cmake | 18 +++++++++--------- cmake/WindowsExports.cmake | 2 -- extern/aurora | 2 +- 7 files changed, 34 insertions(+), 28 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3ebfe29dc2..f826a1d86b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -384,20 +384,31 @@ if (CMAKE_CXX_LINK_GROUP_USING_RESCAN_SUPPORTED OR CMAKE_LINK_GROUP_USING_RESCAN set(JSYSTEM_LINK_LIBRARIES "$") endif () -set(DUSK_FILES src/dusk/main.cpp ${GAME_BASE_FILES} ${GAME_DEBUG_FILES} ${miniz_SOURCE_DIR}/miniz.c) +set(_dusklight_all_files src/dusk/main.cpp ${GAME_BASE_FILES} ${GAME_DEBUG_FILES}) +set(DUSK_INTERNAL_FILES ${_dusklight_all_files}) +list(FILTER DUSK_INTERNAL_FILES INCLUDE REGEX "^src/dusk/") +set(GAME_FILES ${_dusklight_all_files}) +list(FILTER GAME_FILES EXCLUDE REGEX "^src/dusk/") + +add_library(dusk_internal OBJECT ${DUSK_INTERNAL_FILES}) +if (ENABLE_ASAN) + target_sources(dusk_internal PRIVATE src/dusk/asan_options.c) +endif () +target_compile_definitions(dusk_internal PRIVATE ${GAME_COMPILE_DEFS}) +target_include_directories(dusk_internal PRIVATE ${miniz_SOURCE_DIR}) +target_link_libraries(dusk_internal PRIVATE aurora::main ${GAME_LIBS} ${JSYSTEM_LIBRARIES}) +target_precompile_headers(dusk_internal PRIVATE "$<$:${CMAKE_SOURCE_DIR}/include/dusk_pch.hpp>") + if(ANDROID) - add_library(dusklight SHARED ${DUSK_FILES}) + add_library(dusklight SHARED ${GAME_FILES} ${miniz_SOURCE_DIR}/miniz.c) else () - add_executable(dusklight ${DUSK_FILES}) + add_executable(dusklight ${GAME_FILES} ${miniz_SOURCE_DIR}/miniz.c) endif () borealis_configure_android_application(dusklight) -if (ENABLE_ASAN) - target_sources(dusklight PRIVATE src/dusk/asan_options.c) -endif () target_compile_definitions(dusklight PRIVATE ${GAME_COMPILE_DEFS}) target_include_directories(dusklight PRIVATE ${miniz_SOURCE_DIR}) -target_link_libraries(dusklight PRIVATE aurora::main ${GAME_LIBS} ${JSYSTEM_LINK_LIBRARIES}) +target_link_libraries(dusklight PRIVATE dusk_internal aurora::main ${GAME_LIBS} ${JSYSTEM_LINK_LIBRARIES}) target_precompile_headers(dusklight PRIVATE "$<$:${CMAKE_SOURCE_DIR}/include/dusk_pch.hpp>") if (DUSK_ENABLE_CODE_MODS) @@ -433,10 +444,7 @@ if (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU") endif () if (DUSK_GAME_ABI_INLINE_OPTIONS) - set(_game_abi_files ${GAME_BASE_FILES} ${GAME_DEBUG_FILES}) - list(FILTER _game_abi_files EXCLUDE REGEX "^src/dusk/") - set_property(SOURCE ${_game_abi_files} APPEND PROPERTY - COMPILE_OPTIONS ${DUSK_GAME_ABI_INLINE_OPTIONS}) + target_compile_options(dusklight PRIVATE ${DUSK_GAME_ABI_INLINE_OPTIONS}) foreach(jsystem_lib IN LISTS JSYSTEM_LIBRARIES) target_compile_options(${jsystem_lib} PRIVATE ${DUSK_GAME_ABI_INLINE_OPTIONS}) diff --git a/CMakePresets.json b/CMakePresets.json index 45a6522625..500fb5de77 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -19,7 +19,11 @@ "hidden": true, "cacheVariables": { "CMAKE_BUILD_TYPE": "RelWithDebInfo", - "CMAKE_MSVC_RUNTIME_LIBRARY": "MultiThreadedDLL" + "CMAKE_MSVC_RUNTIME_LIBRARY": "MultiThreadedDLL", + "TRACY_ENABLE": { + "type": "BOOL", + "value": false + } } }, { diff --git a/cmake/AndroidExports.cmake b/cmake/AndroidExports.cmake index 66e80d3f4a..a71c18a02b 100644 --- a/cmake/AndroidExports.cmake +++ b/cmake/AndroidExports.cmake @@ -39,8 +39,6 @@ function(setup_android_exports target) --format version-script --exclude cmake_pch --exclude miniz - --exclude asan_options - --exclude src/dusk # Resolved from the Java side; the SDL ones live in the statically-linked # SDL archive, outside the provenance scan. --extra-sym JNI_OnLoad diff --git a/cmake/AppleExports.cmake b/cmake/AppleExports.cmake index 2c78939811..6397e353a5 100644 --- a/cmake/AppleExports.cmake +++ b/cmake/AppleExports.cmake @@ -46,8 +46,6 @@ function(setup_apple_exports target) --out "${_exp}" --exclude cmake_pch --exclude miniz - --exclude asan_options - --exclude src/dusk ${_sdk_args} COMMENT "Generating dusklight exports" VERBATIM) diff --git a/cmake/SymbolManifest.cmake b/cmake/SymbolManifest.cmake index 48935acdf6..7c7e09eaa1 100644 --- a/cmake/SymbolManifest.cmake +++ b/cmake/SymbolManifest.cmake @@ -2,7 +2,7 @@ include_guard(GLOBAL) get_filename_component(_SYMBOL_MANIFEST_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY) -set(_SYMGEN_VERSION "1.3.3") +set(_SYMGEN_VERSION "1.3.4") set(_SYMGEN_RELEASE_BASE_URL "https://github.com/encounter/symgen/releases/download/v${_SYMGEN_VERSION}") set(SYMGEN_PATH "" CACHE FILEPATH "Path to a symgen executable; empty downloads the pinned release") mark_as_advanced(SYMGEN_PATH) @@ -15,32 +15,32 @@ function(symgen_host_asset out_name out_hash) if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin") if (_host_processor MATCHES "^(arm64|aarch64)$") set(_asset "symgen-macos-arm64") - set(_asset_hash "SHA256=e8420df1160242c83bd0e5197efeeb25ceb9fecc69dbc82bdc4927476381e948") + set(_asset_hash "SHA256=983ef6278d30bee38f240f451ca736fd294da0e5705ee15029accac5c7a33829") elseif (_host_processor MATCHES "^(x86_64|amd64)$") set(_asset "symgen-macos-x86_64") - set(_asset_hash "SHA256=e51d13bbf0e982d1519f56850ff3c7b5910ca5a7095dd5a82cd8e59750e2d013") + set(_asset_hash "SHA256=b6ab1720a4f04fadcf291f42d133e2ee68ef2e9a75d143e51584929e808af8a2") endif () elseif (CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") if (_host_processor MATCHES "^(aarch64|arm64)$") set(_asset "symgen-linux-aarch64") - set(_asset_hash "SHA256=331190dd21ecee12a52e857b7f90a8b3e0a114608173813f7df74a31cf783f70") + set(_asset_hash "SHA256=ba84486ff1ceb753973e6213c9bc5f195b5ff6f220f5d3322fd861966cdc791c") elseif (_host_processor MATCHES "^(x86_64|amd64)$") set(_asset "symgen-linux-x86_64") - set(_asset_hash "SHA256=d727e0ba43242f92a92865af1b69c47aa9d81a0242c4570ce53b90e1ecd15e84") + set(_asset_hash "SHA256=8b81a00a2ef8f5dd4b59adba1badfaca57e472bf272516bc12c4625cefb37718") elseif (_host_processor MATCHES "^(i[3-6]86|x86)$") set(_asset "symgen-linux-i686") - set(_asset_hash "SHA256=0c9f94d36b7fa46d15a199c9d0f1a633b73eb7d9c02621a6a76a676b83a135c7") + set(_asset_hash "SHA256=01aa85d84148a6806fdf69839dea7e962e6ac46956aed63b9ecb7d596f179f93") endif () elseif (CMAKE_HOST_WIN32) if (_host_processor MATCHES "^(arm64|aarch64)$") set(_asset "symgen-windows-arm64.exe") - set(_asset_hash "SHA256=c699192957e2086ed68912ed39fa77858e1ae894476ab8b557711804cf2aa7cb") + set(_asset_hash "SHA256=e116099f859177d7e29fc3444d67083596330e5c4fb3a0461b21402c89249d96") elseif (_host_processor MATCHES "^(x86_64|amd64)$") set(_asset "symgen-windows-x86_64.exe") - set(_asset_hash "SHA256=6d56a45617c75065ab7a3192d09ca52ff735baf5637b0899f446138d46acc310") + set(_asset_hash "SHA256=57ef1c2f563e33fa4915c40194c4ced540f985c48d9cf081047c6bbcb585fa37") elseif (_host_processor MATCHES "^(i[3-6]86|x86)$") set(_asset "symgen-windows-x86.exe") - set(_asset_hash "SHA256=6cccc3a8d29e7525a4d1ade1dc4d89327b7c3002a604ab1c7decb43eea6fd4ab") + set(_asset_hash "SHA256=cc0ba337c798d3f63d8acbb2d16d531d0c2da878fbdd2b6307702334ec880528") endif () endif () diff --git a/cmake/WindowsExports.cmake b/cmake/WindowsExports.cmake index 4596ac7b69..dae7f067c0 100644 --- a/cmake/WindowsExports.cmake +++ b/cmake/WindowsExports.cmake @@ -62,8 +62,6 @@ function(setup_windows_exports target) --out "${_def}" --exclude cmake_pch --exclude miniz - --exclude asan_options - --exclude src/dusk --max-exports 58000 ${_sdk_args} ${_forward_args} diff --git a/extern/aurora b/extern/aurora index 2c9c95cfed..f8573d34e6 160000 --- a/extern/aurora +++ b/extern/aurora @@ -1 +1 @@ -Subproject commit 2c9c95cfed9a06610addcb0c00ad5e366e4e8c0d +Subproject commit f8573d34e632aea81039526a728b34f373d247ef