option(ENABLE_VCPKG OFF) cmake_minimum_required(VERSION 3.21) message("Using toolchain file ${CMAKE_TOOLCHAIN_FILE}.") # Get current version file(READ "${CMAKE_SOURCE_DIR}/../../SKSE/Plugins/EnderalVersion.ini" CONFIG_CONTENT) string(REGEX MATCH "version[ \t]*=[ \t]*([0-9.]+)" _ ${CONFIG_CONTENT}) set(VERSION_NUMBER "${CMAKE_MATCH_1}") ######################################################################################################################## ## Define project ######################################################################################################################## project( EnderalSE VERSION ${VERSION_NUMBER} DESCRIPTION "Enderal SE DLL" LANGUAGES CXX ) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc @ONLY ) #include(GNUInstallDirs) file( GLOB_RECURSE sources ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp ${CMAKE_CURRENT_BINARY_DIR}/version.rc ) source_group( TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${headers} ${sources} ) ######################################################################################################################## ## Configure target DLL ######################################################################################################################## include(FetchContent) # DirectXMath FetchContent_Declare( DirectXMath URL "https://github.com/microsoft/DirectXMath/archive/refs/tags/apr2025.tar.gz" OVERRIDE_FIND_PACKAGE DOWNLOAD_EXTRACT_TIMESTAMP 1 EXCLUDE_FROM_ALL SYSTEM ) FetchContent_MakeAvailable(DirectXMath) add_library("Microsoft::DirectXMath" ALIAS "DirectXMath") # DirectXTK FetchContent_Declare( DirectXTK URL "https://github.com/microsoft/DirectXTK/archive/refs/tags/jul2025.tar.gz" DOWNLOAD_EXTRACT_TIMESTAMP 1 OVERRIDE_FIND_PACKAGE EXCLUDE_FROM_ALL SYSTEM ) FetchContent_MakeAvailable(DirectXTK) add_library("Microsoft::DirectXTK" ALIAS "DirectXTK") # simpleini FetchContent_Declare( simpleini URL "https://github.com/brofield/simpleini/archive/refs/tags/v4.22.tar.gz" DOWNLOAD_EXTRACT_TIMESTAMP 1 ) FetchContent_MakeAvailable(simpleini) INCLUDE_DIRECTORIES(${simpleini_SOURCE_DIR}) # rapidcsv FetchContent_Declare( rapidcsv URL "https://github.com/d99kris/rapidcsv/archive/refs/tags/v8.87.tar.gz" DOWNLOAD_EXTRACT_TIMESTAMP 1 OVERRIDE_FIND_PACKAGE ) FetchContent_MakeAvailable(rapidcsv) set(RAPIDCSV_INCLUDE_DIRS ${rapidcsv_SOURCE_DIR}/src) # spdlog set(SPDLOG_INSTALL ON CACHE INTERNAL "Install SPDLOG for CommonLibSSE") set(SPDLOG_USE_STD_FORMAT ON CACHE INTERNAL "Use std::format in SPDLOG, not fmt") FetchContent_Declare( spdlog URL "https://github.com/gabime/spdlog/archive/refs/tags/v1.15.3.tar.gz" DOWNLOAD_EXTRACT_TIMESTAMP 1 OVERRIDE_FIND_PACKAGE ) FetchContent_MakeAvailable(spdlog) # xbyak FetchContent_Declare( xbyak URL "https://github.com/herumi/xbyak/archive/v7.28.tar.gz" DOWNLOAD_EXTRACT_TIMESTAMP 1 ) FetchContent_MakeAvailable(xbyak) # CommonLibSSE set(SKSE_SUPPORT_XBYAK ON CACHE BOOL " " FORCE) set(ENABLE_SKYRIM_SE ON CACHE BOOL " " FORCE) set(ENABLE_SKYRIM_AE ON CACHE BOOL " " FORCE) set(ENABLE_SKYRIM_VR ON CACHE BOOL " " FORCE) set(BUILD_TESTS OFF CACHE BOOL " " FORCE) message(STATUS "Fetching CommonLibSSE-NG (5e5417e3585c9434295e919bdda27737244e9c5a)...") FetchContent_Declare( CommonLibSSE GIT_REPOSITORY https://github.com/eddoursul/CommonLibVR.git GIT_TAG 5e5417e3585c9434295e919bdda27737244e9c5a ) FetchContent_MakeAvailable(CommonLibSSE) get_target_property(COMMONLIB_SRC_DIR CommonLibSSE SOURCE_DIR) include(${COMMONLIB_SRC_DIR}/cmake/CommonLibSSE.cmake) add_commonlibsse_plugin(${PROJECT_NAME} SOURCES ${headers} ${sources}) add_library("${PROJECT_NAME}::${PROJECT_NAME}" ALIAS "${PROJECT_NAME}") target_link_libraries(CommonLibSSE PUBLIC DirectXTK xbyak ) target_link_libraries(${PROJECT_NAME} PUBLIC CommonLibSSE::CommonLibSSE spdlog Version.lib xbyak ) target_include_directories(${PROJECT_NAME} PRIVATE $ $ $ ) target_include_directories(${PROJECT_NAME} PUBLIC $ ) target_precompile_headers(${PROJECT_NAME} PRIVATE src/PCH.h ) install(TARGETS ${PROJECT_NAME} DESTINATION "${CMAKE_INSTALL_LIBDIR}") ######################################################################################################################## ## Automatic plugin deployment ######################################################################################################################## add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_SOURCE_DIR}/../../SKSE/Plugins/") add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $ "${CMAKE_CURRENT_SOURCE_DIR}/../../SKSE/Plugins/")