From c83a719e9de2d6f56f14e251d977a130dc2de0ae Mon Sep 17 00:00:00 2001 From: SeaSparrowOG Date: Mon, 12 Oct 2026 01:55:17 +0300 Subject: [PATCH 1/4] Bump version. Build optimizations. Github CI improvements. --- CMakeLists.txt | 122 ++++++++++++++++++++++++++++++++++++++++++++++++- vcpkg.json | 2 +- 2 files changed, 121 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ffd2b88..e27fee1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ option(COPY_PSC "Copies any script sources to the MO2 directory (if specified). # -------- Project ---------- project( PerkAdjuster - VERSION 2.0.1 + VERSION 2.0.2 LANGUAGES CXX ) @@ -36,6 +36,7 @@ add_compile_definitions(SKYRIM_AE) add_compile_definitions(SKYRIM_SUPPORT_AE) set(SKSE_COMMONLIBSSE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/External/CommonLibSSE") +set(SKSE_NO_INSTALL ON) if (GOG) add_compile_definitions(SKYRIM_GOG) @@ -71,6 +72,36 @@ target_include_directories( ${CLIB_UTIL_INCLUDE_DIRS} ) +if (MSVC) + target_compile_options( + ${PROJECT_NAME} + PRIVATE + /sdl # Enable Additional Security Checks + /utf-8 # Set Source and Executable character sets to UTF-8 + /Zi # Debug Information Format + + /permissive- # Standards conformance + /Zc:preprocessor # Enable preprocessor conformance mode + /Zc:__cplusplus + + /wd4200 # nonstandard extension used : zero-sized array in struct/union + /W4 # More warnings + /WX # Treat all warnings as errors + /external:anglebrackets # Ignore warnings for external resources. + /external:W0 # Same as above + + "$<$:>" + "$<$:/Zc:inline;/JMC-;/Ob3>" + ) + + target_link_options( + ${PROJECT_NAME} + PRIVATE + "$<$:/INCREMENTAL;/OPT:NOREF;/OPT:NOICF>" + "$<$:/INCREMENTAL:NO;/OPT:REF;/OPT:ICF;/DEBUG:FULL>" + ) +endif () + set(DATA_DIR "${PROJECT_SOURCE_DIR}/data") include(components.cmake) @@ -86,6 +117,40 @@ if(DEFINED ENV{SKYRIM_MODS_FOLDER} AND IS_DIRECTORY "$ENV{SKYRIM_MODS_FOLDER}") endif() endif() +# ---- Compile Papyrus Scripts and Pack Into Archive ---- +include(Papyrus) +include(BSArchive) + +if( + NOT SKIP_ARTIFACTS + AND Skyrim64Path + AND IS_DIRECTORY "${Skyrim64Path}/tools" + AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Data/Source/Scripts" +) + file(GLOB ${PROJECT_NAME}_SOURCES + LIST_DIRECTORIES false + CONFIGURE_DEPENDS + "Data/Source/Scripts/*.psc" + ) + + Papyrus_Add( + "Papyrus" + GAME ${Skyrim64Path} + IMPORTS ${CMAKE_CURRENT_SOURCE_DIR}/Data/Source/Scripts + SOURCES ${${PROJECT_NAME}_SOURCES} + OPTIMIZE ANONYMIZE + ) + + BSArchive_Add( + "BSA" + OUTPUT "${PROJECT_NAME}.bsa" + FORMAT SSE + FILES ${Papyrus_OUTPUT} + ) +else() + message(STATUS "No scripts to compile found, won't compress into BSA.") +endif() + # ---- Automatically copy artifacts to MO2 ---- if(DEFINED OUTPUT_FOLDER AND NOT SKIP_ARTIFACTS) set(DLL_FOLDER "${OUTPUT_FOLDER}/SKSE/Plugins") @@ -102,12 +167,65 @@ if(DEFINED OUTPUT_FOLDER AND NOT SKIP_ARTIFACTS) -DPROJECT_NAME="${PROJECT_NAME}" -P "${PROJECT_SOURCE_DIR}/CMake/Scripts/CMake-Copy-Artifacts.cmake" ) + + if(COPY_BSA) + add_custom_command( + TARGET "${PROJECT_NAME}" + POST_BUILD + COMMAND "${CMAKE_COMMAND}" + -DSRC_DIR="${PROJECT_SOURCE_DIR}/Data" + -DDST_DIR=${OUTPUT_FOLDER} + -DPROJECT_NAME=${PROJECT_NAME} + -DBINARY_DIR=${CMAKE_BINARY_DIR} + -P "${PROJECT_SOURCE_DIR}/CMake/Scripts/CMake-Copy-Archive.cmake" + VERBATIM + ) + endif() + + if(COPY_PEX) + add_custom_command( + TARGET "${PROJECT_NAME}" + POST_BUILD + COMMAND "${CMAKE_COMMAND}" + -DCOMPILED_SCRIPTS="${CMAKE_BINARY_DIR}/Scripts" + -DOUTPUT_FOLDER="${OUTPUT_FOLDER}" + -P "${PROJECT_SOURCE_DIR}/CMake/Scripts/CMake-Copy-Scripts.cmake" + VERBATIM + ) + endif() + + if(COPY_PSC) + add_custom_command( + TARGET "${PROJECT_NAME}" + POST_BUILD + COMMAND "${CMAKE_COMMAND}" + -DSOURCE_SCRIPTS="${PROJECT_SOURCE_DIR}/Data/Source/Scripts" + -DOUTPUT_FOLDER="${OUTPUT_FOLDER}" + -P "${PROJECT_SOURCE_DIR}/CMake/Scripts/CMake-Copy-Sources.cmake" + VERBATIM + ) + endif() endif() # ---- Github Release Stuff ---- install( FILES - "${DATA_DIR}/SKSE/Plugins/${PROJECT_NAME}.ini" + "$" + "$" DESTINATION "SKSE/Plugins" COMPONENT components +) + +install( + FILES + "${DATA_DIR}/Source/Scripts/SEA_PerkFunctions.psc" + DESTINATION "Source/Scripts" + COMPONENT components +) + +install( + FILES + "${DATA_DIR}/Scripts/SEA_PerkFunctions.pex" + DESTINATION "Scripts" + COMPONENT components ) \ No newline at end of file diff --git a/vcpkg.json b/vcpkg.json index ed46b85..ddb8d23 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,6 +1,6 @@ { "name": "perk-adjuster", - "version-string": "2.0.1", + "version-string": "2.0.2", "description": "Dynamically replaces perk descriptions.", "homepage": "https://github.com/SeaSparrowOG/PerkAdjuster", "license": "GPL-3.0", From 0dfd05ed851dcb71b5ae7404c5b0fd26c15f57ad Mon Sep 17 00:00:00 2001 From: SeaSparrowOG Date: Mon, 12 Oct 2026 01:55:34 +0300 Subject: [PATCH 2/4] Add loose files for release. --- Data/Scripts/SEA_PerkFunctions.pex | Bin 0 -> 954 bytes Data/Source/Scripts/SEA_PerkFunctions.psc | 6 ++++++ 2 files changed, 6 insertions(+) create mode 100644 Data/Scripts/SEA_PerkFunctions.pex create mode 100644 Data/Source/Scripts/SEA_PerkFunctions.psc diff --git a/Data/Scripts/SEA_PerkFunctions.pex b/Data/Scripts/SEA_PerkFunctions.pex new file mode 100644 index 0000000000000000000000000000000000000000..ce50ab12a14edd7e11e6d2dfd5e7bd6b29b3545d GIT binary patch literal 954 zcmb7CO-~d-5Ph?s?D8cjf{5CB;i8&BzJ_>q=Cnv!>KREgjygk4(taSJM{xRu`{ai*iRnl<1xdXCY8(Ko^Kv`A5 zHj_QlhBa99Zf(GSugDiY&|6C1FMsrAf+pvr3qgG%jwk(X~32XJ~agu7@5!am`ScpxNmZitWF* z(PVQi-7X}eT)U%P7k&93?T6!VA`*V=^7DN~lYfneiu;TXR7+4RLA?Zx61Wr|9_E~> zpyi?MTsMBQooDM^`_48|$3o#((ZC{>u#7uc!7A?ZyoWX1=jlcb>!on!v-~Era+B#o zO>E#np()lX6PpF}@DN*E=MhuYb?(!{WA