87 lines
4.1 KiB
CMake
87 lines
4.1 KiB
CMake
cmake_minimum_required(VERSION 3.20)
|
|
project(MoonWellWarcraftXL LANGUAGES CXX)
|
|
|
|
# WarcraftXL is an untouched upstream v1.1 submodule. Every project-specific
|
|
# feature below is built as a separately loaded Extensions/<name>/<name>.dll.
|
|
add_subdirectory(vendor/warcraftxl)
|
|
|
|
set(WXL_CORE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/vendor/warcraftxl")
|
|
set(WXL_EXTERNAL_MODULES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/vendor/modules")
|
|
set(WXL_LOCAL_MODULES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/modules")
|
|
|
|
function(wxl_add_external_extension extension_name extension_dir)
|
|
if(NOT CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
return()
|
|
endif()
|
|
|
|
file(GLOB_RECURSE extension_sources CONFIGURE_DEPENDS "${extension_dir}/src/*.cpp")
|
|
if(NOT extension_sources)
|
|
message(FATAL_ERROR "WarcraftXL extension '${extension_name}' has no sources in ${extension_dir}/src")
|
|
endif()
|
|
|
|
set(extension_shared_sources "")
|
|
if(extension_name STREQUAL "wxl-modern-m2")
|
|
file(GLOB_RECURSE extension_shared_sources CONFIGURE_DEPENDS
|
|
"${WXL_CORE_DIR}/src/engine/assets/shared/models/m2/*.cpp")
|
|
elseif(extension_name STREQUAL "wxl-modern-blp")
|
|
file(GLOB_RECURSE extension_shared_sources CONFIGURE_DEPENDS
|
|
"${WXL_CORE_DIR}/src/engine/assets/shared/textures/blp/*.cpp")
|
|
endif()
|
|
|
|
file(GLOB wxl_sdk_sources CONFIGURE_DEPENDS "${WXL_CORE_DIR}/src/game/*.cpp")
|
|
add_library(${extension_name} SHARED
|
|
${extension_sources}
|
|
${extension_shared_sources}
|
|
${wxl_sdk_sources})
|
|
set_target_properties(${extension_name} PROPERTIES
|
|
OUTPUT_NAME "${extension_name}"
|
|
PREFIX "")
|
|
target_include_directories(${extension_name} PRIVATE
|
|
"${extension_dir}/src"
|
|
"${WXL_CORE_DIR}/include"
|
|
"${WXL_CORE_DIR}/src")
|
|
target_compile_features(${extension_name} PRIVATE cxx_std_20)
|
|
target_compile_definitions(${extension_name} PRIVATE
|
|
WIN32_LEAN_AND_MEAN NOMINMAX _CRT_SECURE_NO_WARNINGS WXL_EXTENSION)
|
|
|
|
if(CLIENT_PATH)
|
|
add_custom_command(TARGET ${extension_name} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory
|
|
"${CLIENT_PATH}/Extensions/${extension_name}"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "$<TARGET_FILE:${extension_name}>"
|
|
"${CLIENT_PATH}/Extensions/${extension_name}/${extension_name}.dll"
|
|
COMMENT "Deploy ${extension_name}.dll -> Extensions/${extension_name}")
|
|
endif()
|
|
endfunction()
|
|
|
|
# Official WarcraftXL 1.1 extensions.
|
|
wxl_add_external_extension(wxl-db2 "${WXL_EXTERNAL_MODULES_DIR}/wxl-db2")
|
|
wxl_add_external_extension(wxl-modern-adt "${WXL_EXTERNAL_MODULES_DIR}/wxl-modern-adt")
|
|
wxl_add_external_extension(wxl-modern-blp "${WXL_LOCAL_MODULES_DIR}/wxl-modern-blp")
|
|
wxl_add_external_extension(wxl-modern-m2 "${WXL_EXTERNAL_MODULES_DIR}/wxl-modern-m2")
|
|
wxl_add_external_extension(wxl-modern-wmo "${WXL_EXTERNAL_MODULES_DIR}/wxl-modern-wmo")
|
|
wxl_add_external_extension(wxl-grasswind "${WXL_EXTERNAL_MODULES_DIR}/wxl-grasswind")
|
|
wxl_add_external_extension(wxl-unit-outline "${WXL_EXTERNAL_MODULES_DIR}/wxl-unit-outline")
|
|
|
|
# MoonWell-owned extensions. wxl-fdid-moonwell sorts after wxl-db2 and before
|
|
# the modern asset extensions, so it can layer custom CSV mappings over wxl.fdid.
|
|
wxl_add_external_extension(MoonWell "${WXL_LOCAL_MODULES_DIR}/moonwell")
|
|
wxl_add_external_extension(MoonwellCustomization
|
|
"${WXL_LOCAL_MODULES_DIR}/moonwell-customization")
|
|
wxl_add_external_extension(wxl-fdid-moonwell "${WXL_LOCAL_MODULES_DIR}/moonwell-fdid")
|
|
wxl_add_external_extension(wxl-moonwell-storage-fallback
|
|
"${WXL_LOCAL_MODULES_DIR}/moonwell-storage-fallback")
|
|
|
|
# Recovery loader retained for existing -NativeRenderer workflows. WarcraftXL
|
|
# 1.1 already ships a native D3D9 forwarding proxy as its standard renderer.
|
|
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()
|