diff --git a/CMakeLists.txt b/CMakeLists.txt index f826a1d86b..83118beb1b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -91,7 +91,7 @@ option(DUSK_SELECTED_OPT "If on, selected parts of the project will be compiled option(DUSK_MOVIE_SUPPORT "If on, compile against libjpeg-turbo to enable THP file decoding" ON) option(DUSK_PACKAGE_INSTALL "Install Dusklight with a Linux-native file structure" OFF) option(DUSK_GFX_DEBUG_GROUPS "Report debug groups to the native graphics API" ${DUSK_GFX_DEBUG_GROUPS_DEFAULT}) -option(DUSK_ENABLE_CODE_MODS "Enable code mods" OFF) +option(DUSK_ENABLE_CODE_MODS "Enable code mods" ON) set(DUSK_HAS_FUNCHOOK OFF) if (DUSK_ENABLE_CODE_MODS AND (NOT APPLE OR CMAKE_SYSTEM_NAME STREQUAL "Darwin")) @@ -424,73 +424,75 @@ endif () # Hook reliability: prevent auto-inlining, guarantee patchable function entries, # and disable identical-code folding for game functions. -set(DUSK_GAME_ABI_INLINE_OPTIONS) -if (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU") - if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - list(APPEND DUSK_GAME_ABI_INLINE_OPTIONS - $<$:-finline-hint-functions>) - elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - list(APPEND DUSK_GAME_ABI_INLINE_OPTIONS - $<$:-flive-patching=inline-clone> - $<$:-fno-inline-functions> - $<$:-fno-inline-small-functions> - $<$:-fno-inline-functions-called-once> - $<$:-fno-early-inlining> - $<$:-fno-ipa-cp> - $<$:-fno-ipa-cp-clone> - $<$:-fno-ipa-sra> - $<$:-fno-partial-inlining>) - endif () -endif () - -if (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}) - endforeach() - foreach(_sdk_lib aurora_card aurora_core aurora_dvd aurora_gd aurora_gx aurora_mtx - aurora_os aurora_pad aurora_si aurora_vi) - if (TARGET ${_sdk_lib}) - get_target_property(_sdk_lib_imported ${_sdk_lib} IMPORTED) - if (NOT _sdk_lib_imported) - target_compile_options(${_sdk_lib} PRIVATE ${DUSK_GAME_ABI_INLINE_OPTIONS}) - endif () +if (DUSK_ENABLE_CODE_MODS) + set(DUSK_GAME_ABI_INLINE_OPTIONS) + if (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU") + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + list(APPEND DUSK_GAME_ABI_INLINE_OPTIONS + $<$:-finline-hint-functions>) + elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + list(APPEND DUSK_GAME_ABI_INLINE_OPTIONS + $<$:-flive-patching=inline-clone> + $<$:-fno-inline-functions> + $<$:-fno-inline-small-functions> + $<$:-fno-inline-functions-called-once> + $<$:-fno-early-inlining> + $<$:-fno-ipa-cp> + $<$:-fno-ipa-cp-clone> + $<$:-fno-ipa-sra> + $<$:-fno-partial-inlining>) endif () - endforeach () -endif () + endif () -if (MSVC) - if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - set(DUSK_PATCHABLE_ENTRY_FLAG $<$:/hotpatch>) - endif () - if (CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64") - target_link_options(dusklight PRIVATE /FUNCTIONPADMIN:16 /OPT:NOICF) - else () - target_link_options(dusklight PRIVATE /FUNCTIONPADMIN /OPT:NOICF) - endif () -elseif (CMAKE_CXX_COMPILER_ID MATCHES "^(AppleClang|Clang|GNU)$") - if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64|aarch64)$" OR CMAKE_OSX_ARCHITECTURES MATCHES "arm64") - set(DUSK_PATCHABLE_ENTRY_FLAG $<$:-fpatchable-function-entry=2,1>) - else () - set(DUSK_PATCHABLE_ENTRY_FLAG $<$:-fpatchable-function-entry=10,4>) - endif () -endif () + if (DUSK_GAME_ABI_INLINE_OPTIONS) + target_compile_options(dusklight PRIVATE ${DUSK_GAME_ABI_INLINE_OPTIONS}) -if (DEFINED DUSK_PATCHABLE_ENTRY_FLAG) - target_compile_options(dusklight PRIVATE ${DUSK_PATCHABLE_ENTRY_FLAG}) - foreach(jsystem_lib IN LISTS JSYSTEM_LIBRARIES) - target_compile_options(${jsystem_lib} PRIVATE ${DUSK_PATCHABLE_ENTRY_FLAG}) - endforeach() - foreach(_sdk_lib aurora_card aurora_core aurora_dvd aurora_gd aurora_gx aurora_mtx - aurora_os aurora_pad aurora_si aurora_vi) - if (TARGET ${_sdk_lib}) - get_target_property(_sdk_lib_imported ${_sdk_lib} IMPORTED) - if (NOT _sdk_lib_imported) - target_compile_options(${_sdk_lib} PRIVATE ${DUSK_PATCHABLE_ENTRY_FLAG}) + foreach(jsystem_lib IN LISTS JSYSTEM_LIBRARIES) + target_compile_options(${jsystem_lib} PRIVATE ${DUSK_GAME_ABI_INLINE_OPTIONS}) + endforeach() + foreach(_sdk_lib aurora_card aurora_core aurora_dvd aurora_gd aurora_gx aurora_mtx + aurora_os aurora_pad aurora_si aurora_vi) + if (TARGET ${_sdk_lib}) + get_target_property(_sdk_lib_imported ${_sdk_lib} IMPORTED) + if (NOT _sdk_lib_imported) + target_compile_options(${_sdk_lib} PRIVATE ${DUSK_GAME_ABI_INLINE_OPTIONS}) + endif () endif () + endforeach () + endif () + + if (MSVC) + if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(DUSK_PATCHABLE_ENTRY_FLAG $<$:/hotpatch>) endif () - endforeach () + if (CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64") + target_link_options(dusklight PRIVATE /FUNCTIONPADMIN:16 /OPT:NOICF) + else () + target_link_options(dusklight PRIVATE /FUNCTIONPADMIN /OPT:NOICF) + endif () + elseif (CMAKE_CXX_COMPILER_ID MATCHES "^(AppleClang|Clang|GNU)$") + if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64|aarch64)$" OR CMAKE_OSX_ARCHITECTURES MATCHES "arm64") + set(DUSK_PATCHABLE_ENTRY_FLAG $<$:-fpatchable-function-entry=2,1>) + else () + set(DUSK_PATCHABLE_ENTRY_FLAG $<$:-fpatchable-function-entry=10,4>) + endif () + endif () + + if (DEFINED DUSK_PATCHABLE_ENTRY_FLAG) + target_compile_options(dusklight PRIVATE ${DUSK_PATCHABLE_ENTRY_FLAG}) + foreach(jsystem_lib IN LISTS JSYSTEM_LIBRARIES) + target_compile_options(${jsystem_lib} PRIVATE ${DUSK_PATCHABLE_ENTRY_FLAG}) + endforeach() + foreach(_sdk_lib aurora_card aurora_core aurora_dvd aurora_gd aurora_gx aurora_mtx + aurora_os aurora_pad aurora_si aurora_vi) + if (TARGET ${_sdk_lib}) + get_target_property(_sdk_lib_imported ${_sdk_lib} IMPORTED) + if (NOT _sdk_lib_imported) + target_compile_options(${_sdk_lib} PRIVATE ${DUSK_PATCHABLE_ENTRY_FLAG}) + endif () + endif () + endforeach () + endif () endif () if (WIN32) diff --git a/CMakePresets.json b/CMakePresets.json index 45a6522625..849e4161cd 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -60,11 +60,7 @@ "type": "BOOL", "value": false }, - "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install", - "DUSK_ENABLE_CODE_MODS": { - "type": "BOOL", - "value": true - } + "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install" }, "vendor": { "microsoft.com/VisualStudioSettings/CMake/1.0": { @@ -151,10 +147,6 @@ "CMAKE_C_COMPILER": "cl", "CMAKE_CXX_COMPILER": "cl", "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install", - "DUSK_ENABLE_CODE_MODS": { - "type": "BOOL", - "value": true - }, "CMAKE_DISABLE_FIND_PACKAGE_PkgConfig": { "type": "BOOL", "value": true @@ -254,11 +246,7 @@ "type": "BOOL", "value": false }, - "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install", - "DUSK_ENABLE_CODE_MODS": { - "type": "BOOL", - "value": true - } + "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install" }, "vendor": { "microsoft.com/VisualStudioSettings/CMake/1.0": { @@ -323,10 +311,6 @@ "type": "BOOL", "value": false }, - "DUSK_ENABLE_CODE_MODS": { - "type": "BOOL", - "value": true - }, "CMAKE_DISABLE_FIND_PACKAGE_PkgConfig": { "type": "BOOL", "value": true @@ -372,10 +356,6 @@ "type": "BOOL", "value": false }, - "DUSK_ENABLE_CODE_MODS": { - "type": "BOOL", - "value": true - }, "CMAKE_DISABLE_FIND_PACKAGE_PkgConfig": { "type": "BOOL", "value": true @@ -406,10 +386,6 @@ "type": "BOOL", "value": false }, - "DUSK_ENABLE_CODE_MODS": { - "type": "BOOL", - "value": true - }, "CMAKE_DISABLE_FIND_PACKAGE_PkgConfig": { "type": "BOOL", "value": true