72 lines
2.9 KiB
CMake
72 lines
2.9 KiB
CMake
cmake_minimum_required(VERSION 3.20)
|
|
project(MoonWellWarcraftXL LANGUAGES CXX)
|
|
|
|
# WarcraftXL remains an upstream submodule. MoonWell modules are attached to
|
|
# its aggregate DLL target here, so updating the framework does not mix our
|
|
# client-specific offsets and policy into the upstream checkout.
|
|
add_subdirectory(vendor/warcraftxl)
|
|
|
|
set(WXL_EXTERNAL_MODULES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/vendor/modules")
|
|
|
|
function(wxl_collect_sources output)
|
|
file(GLOB_RECURSE collected CONFIGURE_DEPENDS ${ARGN})
|
|
set(${output} "${collected}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
if(TARGET WarcraftXL)
|
|
wxl_collect_sources(WXL_MODERN_ASSETS_RUNTIME
|
|
"${WXL_EXTERNAL_MODULES_DIR}/wxl-modern-assets/src/*.cpp"
|
|
"${WXL_EXTERNAL_MODULES_DIR}/wxl-modern-assets/shared/*.cpp")
|
|
if(WXL_MODERN_ASSETS_EXCLUDE_REGEX)
|
|
list(FILTER WXL_MODERN_ASSETS_RUNTIME EXCLUDE REGEX
|
|
"${WXL_MODERN_ASSETS_EXCLUDE_REGEX}")
|
|
endif()
|
|
wxl_collect_sources(WXL_MODERN_RENDER_RUNTIME
|
|
"${WXL_EXTERNAL_MODULES_DIR}/wxl-modern-render/src/*.cpp")
|
|
wxl_collect_sources(WXL_UNIT_OUTLINE_RUNTIME
|
|
"${WXL_EXTERNAL_MODULES_DIR}/wxl-unit-outline/src/*.cpp")
|
|
wxl_collect_sources(WXL_MODERN_ADT_RUNTIME
|
|
"${WXL_EXTERNAL_MODULES_DIR}/wxl-modern-adt/src/*.cpp"
|
|
"${WXL_EXTERNAL_MODULES_DIR}/wxl-modern-adt/shared/*.cpp")
|
|
|
|
target_sources(WarcraftXL PRIVATE
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/modules/moonwell/src/MoonWell.cpp"
|
|
${WXL_MODERN_ASSETS_RUNTIME}
|
|
${WXL_MODERN_RENDER_RUNTIME}
|
|
${WXL_UNIT_OUTLINE_RUNTIME}
|
|
${WXL_MODERN_ADT_RUNTIME})
|
|
|
|
# wxl-modern-render needs its module-root includes and D3D12 import library.
|
|
include("${WXL_EXTERNAL_MODULES_DIR}/wxl-modern-render/module.cmake")
|
|
endif()
|
|
|
|
if(TARGET WarcraftXLHost)
|
|
wxl_collect_sources(WXL_MODERN_ASSETS_HOST
|
|
"${WXL_EXTERNAL_MODULES_DIR}/wxl-modern-assets/host/*.cpp"
|
|
"${WXL_EXTERNAL_MODULES_DIR}/wxl-modern-assets/shared/*.cpp")
|
|
if(WXL_MODERN_ASSETS_EXCLUDE_REGEX)
|
|
list(FILTER WXL_MODERN_ASSETS_HOST EXCLUDE REGEX
|
|
"${WXL_MODERN_ASSETS_EXCLUDE_REGEX}")
|
|
endif()
|
|
wxl_collect_sources(WXL_MODERN_ADT_HOST
|
|
"${WXL_EXTERNAL_MODULES_DIR}/wxl-modern-adt/host/*.cpp"
|
|
"${WXL_EXTERNAL_MODULES_DIR}/wxl-modern-adt/shared/*.cpp")
|
|
|
|
target_sources(WarcraftXLHost PRIVATE
|
|
${WXL_MODERN_ASSETS_HOST}
|
|
${WXL_MODERN_ADT_HOST})
|
|
endif()
|
|
|
|
# Minimal native-D3D9 proxy retained as a recovery renderer. The regular
|
|
# package uses WarcraftXL's D3D9On12 proxy required by wxl-modern-render.
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
add_library(MoonWellLoader SHARED
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/loader/d3d9.cpp"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/loader/d3d9.def")
|
|
set_target_properties(MoonWellLoader PROPERTIES
|
|
OUTPUT_NAME "d3d9-native"
|
|
PREFIX ""
|
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/artifacts")
|
|
target_compile_definitions(MoonWellLoader PRIVATE WIN32_LEAN_AND_MEAN NOMINMAX)
|
|
endif()
|