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()