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) add_compile_definitions(NOMINMAX _USE_MATH_DEFINES WIN32_LEAN_AND_MEAN) add_definitions(-DUNICODE -D_UNICODE) add_compile_options(/Zc:preprocessor /EHsc) 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.25.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.90.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 BOOL " " FORCE) set(SPDLOG_USE_STD_FORMAT ON CACHE BOOL " " FORCE) FetchContent_Declare( spdlog URL "https://github.com/gabime/spdlog/archive/refs/tags/v1.17.0.tar.gz" DOWNLOAD_EXTRACT_TIMESTAMP 1 OVERRIDE_FIND_PACKAGE ) FetchContent_MakeAvailable(spdlog) # xbyak FetchContent_Declare( xbyak URL "https://github.com/herumi/xbyak/archive/v7.30.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...") FetchContent_Declare( CommonLibSSE GIT_REPOSITORY https://github.com/alandtse/CommonLibVR GIT_TAG aacbd76c01bff9381e253ffdfcb4f9d5f263f1df ) 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/")