Enderal SE
https://mod.pub/enderal-se/38-enderal-se
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
473 lines
8.5 KiB
473 lines
8.5 KiB
cmake_minimum_required(VERSION 3.18)
|
|
|
|
# ---- Project ----
|
|
|
|
include(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/versioning.cmake)
|
|
|
|
project(
|
|
skse64
|
|
VERSION ${SKSE_VERSION_MAJOR}.${SKSE_VERSION_MINOR}.${SKSE_VERSION_PATCH}
|
|
LANGUAGES CXX
|
|
)
|
|
|
|
# ---- Include guards ----
|
|
|
|
if(PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)
|
|
message(
|
|
FATAL_ERROR
|
|
"In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there."
|
|
)
|
|
endif()
|
|
|
|
# ---- Build options ----
|
|
|
|
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
|
|
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_DEBUG OFF)
|
|
|
|
# ---- Dependencies ----
|
|
|
|
if (NOT TARGET skse64_common)
|
|
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../skse64_common skse64_common) # bundled
|
|
endif()
|
|
|
|
if (NOT TARGET xbyak)
|
|
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../xbyak xbyak) # bundled
|
|
endif()
|
|
|
|
find_package(common REQUIRED CONFIG)
|
|
|
|
# ---- Add source files ----
|
|
|
|
include(cmake/headerlist.cmake)
|
|
include(cmake/sourcelist.cmake)
|
|
|
|
source_group(
|
|
${PROJECT_NAME}
|
|
FILES
|
|
skse64.cpp
|
|
skse64.def
|
|
skse_version.rc
|
|
)
|
|
|
|
source_group(
|
|
${PROJECT_NAME}/api
|
|
FILES
|
|
GameAPI.cpp
|
|
GameAPI.h
|
|
GameBSExtraData.cpp
|
|
GameBSExtraData.h
|
|
GameCamera.cpp
|
|
GameCamera.h
|
|
GameData.cpp
|
|
GameData.h
|
|
GameEvents.cpp
|
|
GameEvents.h
|
|
GameExtraData.cpp
|
|
GameExtraData.h
|
|
GameFormComponents.cpp
|
|
GameFormComponents.h
|
|
GameForms.cpp
|
|
GameForms.h
|
|
GameHandlers.cpp
|
|
GameHandlers.h
|
|
GameInput.cpp
|
|
GameInput.h
|
|
GameMenus.cpp
|
|
GameMenus.h
|
|
GameObjects.cpp
|
|
GameObjects.h
|
|
GamePathing.cpp
|
|
GameReferences.cpp
|
|
GameReferences.h
|
|
GameResources.cpp
|
|
GameResources.h
|
|
GameRTTI.cpp
|
|
GameRTTI.h
|
|
GameRTTI.inl
|
|
GameSettings.cpp
|
|
GameSettings.h
|
|
GameStreams.cpp
|
|
GameStreams.h
|
|
GameThreads.cpp
|
|
GameThreads.h
|
|
GameTypes.cpp
|
|
GameTypes.h
|
|
GameUtilities.cpp
|
|
GameUtilities.h
|
|
ObScript.cpp
|
|
ObScript.h
|
|
)
|
|
|
|
source_group(
|
|
${PROJECT_NAME}/hooks
|
|
FILES
|
|
Hooks_Camera.cpp
|
|
Hooks_Camera.h
|
|
Hooks_Data.cpp
|
|
Hooks_Data.h
|
|
Hooks_Debug.cpp
|
|
Hooks_Debug.h
|
|
Hooks_Diagnostics.cpp
|
|
Hooks_Diagnostics.h
|
|
Hooks_DirectInput8Create.cpp
|
|
Hooks_DirectInput8Create.h
|
|
Hooks_Event.cpp
|
|
Hooks_Event.h
|
|
Hooks_Gameplay.cpp
|
|
Hooks_Gameplay.h
|
|
Hooks_Handlers.cpp
|
|
Hooks_Handlers.h
|
|
Hooks_Memory.cpp
|
|
Hooks_Memory.h
|
|
Hooks_NetImmerse.cpp
|
|
Hooks_NetImmerse.h
|
|
Hooks_ObScript.cpp
|
|
Hooks_ObScript.h
|
|
Hooks_Papyrus.cpp
|
|
Hooks_Papyrus.h
|
|
Hooks_SaveLoad.cpp
|
|
Hooks_SaveLoad.h
|
|
Hooks_Scaleform.cpp
|
|
Hooks_Scaleform.h
|
|
Hooks_Threads.cpp
|
|
Hooks_Threads.h
|
|
Hooks_UI.cpp
|
|
Hooks_UI.h
|
|
)
|
|
|
|
source_group(
|
|
${PROJECT_NAME}/internal
|
|
FILES
|
|
Colors.cpp
|
|
Colors.h
|
|
CustomMenu.cpp
|
|
CustomMenu.h
|
|
GlobalLocks.cpp
|
|
GlobalLocks.h
|
|
HashUtil.cpp
|
|
HashUtil.h
|
|
InputMap.cpp
|
|
InputMap.h
|
|
InternalSerialization.cpp
|
|
InternalSerialization.h
|
|
InternalTasks.cpp
|
|
InternalTasks.h
|
|
PluginAPI.h
|
|
PluginLoadErrorDialog.rc
|
|
PluginManager.cpp
|
|
PluginManager.h
|
|
Serialization.cpp
|
|
Serialization.h
|
|
Translation.cpp
|
|
Translation.h
|
|
)
|
|
|
|
source_group(
|
|
${PROJECT_NAME}/netimmerse
|
|
FILES
|
|
BSModelDB.cpp
|
|
BSModelDB.h
|
|
NiAdditionalGeometryData.cpp
|
|
NiAdditionalGeometryData.h
|
|
NiControllers.cpp
|
|
NiControllers.h
|
|
NiExtraData.cpp
|
|
NiExtraData.h
|
|
NiGeometry.cpp
|
|
NiGeometry.h
|
|
NiInterpolators.cpp
|
|
NiInterpolators.h
|
|
NiLight.cpp
|
|
NiLight.h
|
|
NiMaterial.cpp
|
|
NiMaterial.h
|
|
NiNodes.cpp
|
|
NiNodes.h
|
|
NiObjects.cpp
|
|
NiObjects.h
|
|
NiProperties.cpp
|
|
NiProperties.h
|
|
NiRenderer.cpp
|
|
NiRenderer.h
|
|
NiRTTI.cpp
|
|
NiRTTI.h
|
|
NiSerialization.cpp
|
|
NiSerialization.h
|
|
NiTextures.cpp
|
|
NiTextures.h
|
|
NiTypes.cpp
|
|
NiTypes.h
|
|
)
|
|
|
|
source_group(
|
|
${PROJECT_NAME}/papyrus/functions
|
|
FILES
|
|
PapyrusActiveMagicEffect.cpp
|
|
PapyrusActiveMagicEffect.h
|
|
PapyrusActor.cpp
|
|
PapyrusActor.h
|
|
PapyrusActorBase.cpp
|
|
PapyrusActorBase.h
|
|
PapyrusActorValueInfo.cpp
|
|
PapyrusActorValueInfo.h
|
|
PapyrusAlias.cpp
|
|
PapyrusAlias.h
|
|
PapyrusAmmo.cpp
|
|
PapyrusAmmo.h
|
|
PapyrusArmor.cpp
|
|
PapyrusArmor.h
|
|
PapyrusArmorAddon.cpp
|
|
PapyrusArmorAddon.h
|
|
PapyrusArt.cpp
|
|
PapyrusArt.h
|
|
PapyrusBook.cpp
|
|
PapyrusBook.h
|
|
PapyrusCamera.cpp
|
|
PapyrusCamera.h
|
|
PapyrusCell.cpp
|
|
PapyrusCell.h
|
|
PapyrusClass.cpp
|
|
PapyrusClass.h
|
|
PapyrusColorForm.cpp
|
|
PapyrusColorForm.h
|
|
PapyrusCombatStyle.cpp
|
|
PapyrusCombatStyle.h
|
|
PapyrusConstructibleObject.cpp
|
|
PapyrusConstructibleObject.h
|
|
PapyrusDefaultObjectManager.cpp
|
|
PapyrusDefaultObjectManager.h
|
|
PapyrusEnchantment.cpp
|
|
PapyrusEnchantment.h
|
|
PapyrusEquipSlot.cpp
|
|
PapyrusEquipSlot.h
|
|
PapyrusFaction.cpp
|
|
PapyrusFaction.h
|
|
PapyrusFlora.cpp
|
|
PapyrusFlora.h
|
|
PapyrusForm.cpp
|
|
PapyrusForm.h
|
|
PapyrusFormList.cpp
|
|
PapyrusFormList.h
|
|
PapyrusGame.cpp
|
|
PapyrusGame.h
|
|
PapyrusGameData.cpp
|
|
PapyrusGameData.h
|
|
PapyrusHeadPart.cpp
|
|
PapyrusHeadPart.h
|
|
PapyrusIngredient.cpp
|
|
PapyrusIngredient.h
|
|
PapyrusInput.cpp
|
|
PapyrusInput.h
|
|
PapyrusKeyword.cpp
|
|
PapyrusKeyword.h
|
|
PapyrusLeveledActor.cpp
|
|
PapyrusLeveledActor.h
|
|
PapyrusLeveledItem.cpp
|
|
PapyrusLeveledItem.h
|
|
PapyrusLeveledSpell.cpp
|
|
PapyrusLeveledSpell.h
|
|
PapyrusLocation.cpp
|
|
PapyrusLocation.h
|
|
PapyrusMagicEffect.cpp
|
|
PapyrusMagicEffect.h
|
|
PapyrusMath.cpp
|
|
PapyrusMath.h
|
|
PapyrusMisc.cpp
|
|
PapyrusMisc.h
|
|
PapyrusModEvent.cpp
|
|
PapyrusModEvent.h
|
|
PapyrusNetImmerse.cpp
|
|
PapyrusNetImmerse.h
|
|
PapyrusObjectReference.cpp
|
|
PapyrusObjectReference.h
|
|
PapyrusPerk.cpp
|
|
PapyrusPerk.h
|
|
PapyrusPotion.cpp
|
|
PapyrusPotion.h
|
|
PapyrusQuest.cpp
|
|
PapyrusQuest.h
|
|
PapyrusRace.cpp
|
|
PapyrusRace.h
|
|
PapyrusReferenceAlias.cpp
|
|
PapyrusReferenceAlias.h
|
|
PapyrusScroll.cpp
|
|
PapyrusScroll.h
|
|
PapyrusShout.cpp
|
|
PapyrusShout.h
|
|
PapyrusSKSE.cpp
|
|
PapyrusSKSE.h
|
|
PapyrusSound.cpp
|
|
PapyrusSound.h
|
|
PapyrusSoundDescriptor.cpp
|
|
PapyrusSoundDescriptor.h
|
|
PapyrusSpawnerTask.cpp
|
|
PapyrusSpawnerTask.h
|
|
PapyrusSpell.cpp
|
|
PapyrusSpell.h
|
|
PapyrusStringUtil.cpp
|
|
PapyrusStringUtil.h
|
|
PapyrusTextureSet.cpp
|
|
PapyrusTextureSet.h
|
|
PapyrusTree.cpp
|
|
PapyrusTree.h
|
|
PapyrusUI.cpp
|
|
PapyrusUI.h
|
|
PapyrusUICallback.cpp
|
|
PapyrusUICallback.h
|
|
PapyrusUtility.cpp
|
|
PapyrusUtility.h
|
|
PapyrusWeapon.cpp
|
|
PapyrusWeapon.h
|
|
PapyrusWeather.cpp
|
|
PapyrusWeather.h
|
|
PapyrusWornObject.cpp
|
|
PapyrusWornObject.h
|
|
)
|
|
|
|
source_group(
|
|
${PROJECT_NAME}/papyrus/vm
|
|
FILES
|
|
PapyrusArgs.cpp
|
|
PapyrusArgs.h
|
|
PapyrusDelayFunctors.cpp
|
|
PapyrusDelayFunctors.h
|
|
PapyrusEventFunctor.h
|
|
PapyrusEvents.cpp
|
|
PapyrusEvents.h
|
|
PapyrusInterfaces.cpp
|
|
PapyrusInterfaces.h
|
|
PapyrusNativeFunctionDef.inl
|
|
PapyrusNativeFunctionDef_Base.inl
|
|
PapyrusNativeFunctions.cpp
|
|
PapyrusNativeFunctions.h
|
|
PapyrusObjects.cpp
|
|
PapyrusObjects.h
|
|
PapyrusValue.cpp
|
|
PapyrusValue.h
|
|
PapyrusVM.cpp
|
|
PapyrusVM.h
|
|
)
|
|
|
|
source_group(
|
|
${PROJECT_NAME}/scaleform
|
|
FILES
|
|
ScaleformAPI.cpp
|
|
ScaleformAPI.h
|
|
ScaleformCallbacks.cpp
|
|
ScaleformCallbacks.h
|
|
ScaleformExtendedData.cpp
|
|
ScaleformExtendedData.h
|
|
ScaleformLoader.cpp
|
|
ScaleformLoader.h
|
|
ScaleformMovie.cpp
|
|
ScaleformMovie.h
|
|
ScaleformState.cpp
|
|
ScaleformState.h
|
|
ScaleformTypes.cpp
|
|
ScaleformTypes.h
|
|
ScaleformValue.cpp
|
|
ScaleformValue.h
|
|
ScaleformVM.cpp
|
|
ScaleformVM.h
|
|
)
|
|
|
|
# ---- Create library ----
|
|
|
|
add_library(
|
|
${PROJECT_NAME}
|
|
SHARED
|
|
${headers}
|
|
${sources}
|
|
skse64.def
|
|
${skse64_common_SOURCE_DIR}/skse_version.rc
|
|
PluginLoadErrorDialog.rc
|
|
)
|
|
|
|
add_library(skse64::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
|
|
|
|
include(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/configuration.cmake)
|
|
|
|
set_target_properties(
|
|
${PROJECT_NAME}
|
|
PROPERTIES
|
|
OUTPUT_NAME "${PROJECT_NAME}_${RUNTIME_VERSION_MAJOR}_${RUNTIME_VERSION_MINOR}_${RUNTIME_VERSION_PATCH}"
|
|
)
|
|
|
|
target_compile_definitions(
|
|
${PROJECT_NAME}
|
|
PRIVATE
|
|
RUNTIME
|
|
RUNTIME_VERSION=${RUNTIME_VERSION_PACKED}
|
|
)
|
|
|
|
target_compile_features(
|
|
${PROJECT_NAME}
|
|
PUBLIC
|
|
cxx_std_11
|
|
)
|
|
|
|
target_include_directories(
|
|
${PROJECT_NAME}
|
|
PUBLIC
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
|
|
$<INSTALL_INTERFACE:include>
|
|
)
|
|
|
|
target_link_libraries(
|
|
${PROJECT_NAME}
|
|
PUBLIC
|
|
skse64::skse64_common
|
|
Xbyak::xbyak
|
|
xse::common
|
|
)
|
|
|
|
# ---- Configure all targets ----
|
|
|
|
set_target_properties(
|
|
${PROJECT_NAME}
|
|
skse64_common
|
|
PROPERTIES
|
|
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
|
|
)
|
|
|
|
# ---- Create an installable target ----
|
|
|
|
include(GNUInstallDirs)
|
|
|
|
install(
|
|
TARGETS
|
|
${PROJECT_NAME}
|
|
EXPORT
|
|
${PROJECT_NAME}-targets
|
|
)
|
|
|
|
install(
|
|
FILES
|
|
${headers}
|
|
DESTINATION
|
|
${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
|
|
)
|
|
|
|
configure_file(
|
|
cmake/config.cmake.in
|
|
${PROJECT_NAME}-config.cmake
|
|
@ONLY
|
|
)
|
|
|
|
install(
|
|
FILES
|
|
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake
|
|
DESTINATION
|
|
${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
|
|
)
|
|
|
|
install(
|
|
EXPORT
|
|
${PROJECT_NAME}-targets
|
|
NAMESPACE
|
|
skse64::
|
|
DESTINATION
|
|
${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
|
|
)
|
|
|
|
include(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/installation.cmake)
|
|
|