106 lines
3.2 KiB
CMake
106 lines
3.2 KiB
CMake
cmake_minimum_required(VERSION 3.28)
|
|
|
|
project(OpenRA3 VERSION 0.0.1 LANGUAGES CXX)
|
|
|
|
set(CMAKE_CXX_STANDARD 26)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
|
|
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
|
|
endif()
|
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
|
|
|
option(OPENRA3_WERROR "Treat warnings as errors" OFF)
|
|
|
|
function(openra3_target_defaults target)
|
|
target_compile_options(${target} PRIVATE -Wall -Wextra -Wpedantic)
|
|
if(OPENRA3_WERROR)
|
|
target_compile_options(${target} PRIVATE -Werror)
|
|
endif()
|
|
endfunction()
|
|
|
|
# --- engine core: fundamental types, math, strings, random, message stream ---
|
|
add_library(ra3_core STATIC)
|
|
target_sources(ra3_core
|
|
PUBLIC FILE_SET CXX_MODULES FILES
|
|
src/core/ra3.core.cppm
|
|
)
|
|
openra3_target_defaults(ra3_core)
|
|
|
|
# --- game logic: objects, players, teams, spatial partition, game loop ---
|
|
add_library(ra3_logic STATIC)
|
|
target_sources(ra3_logic
|
|
PUBLIC FILE_SET CXX_MODULES FILES
|
|
src/logic/ra3.logic.cppm
|
|
)
|
|
target_link_libraries(ra3_logic PUBLIC ra3_core)
|
|
openra3_target_defaults(ra3_logic)
|
|
|
|
# --- client: headless display/input abstraction and the client facade ---
|
|
add_library(ra3_client STATIC)
|
|
target_sources(ra3_client
|
|
PUBLIC FILE_SET CXX_MODULES FILES
|
|
src/client/ra3.client.cppm
|
|
)
|
|
target_link_libraries(ra3_client PUBLIC ra3_core ra3_logic)
|
|
openra3_target_defaults(ra3_client)
|
|
|
|
# --- RA3 game definitions: factions, player templates, science, special powers ---
|
|
add_library(ra3_game STATIC)
|
|
target_sources(ra3_game
|
|
PUBLIC FILE_SET CXX_MODULES FILES
|
|
src/game/ra3.game.cppm
|
|
)
|
|
target_link_libraries(ra3_game PUBLIC ra3_core ra3_logic)
|
|
openra3_target_defaults(ra3_game)
|
|
|
|
# --- filesystem: BIG4 archives, RefPack codec, local install locator ---
|
|
add_library(ra3_fs STATIC)
|
|
target_sources(ra3_fs
|
|
PUBLIC FILE_SET CXX_MODULES FILES
|
|
src/fs/ra3.fs.cppm
|
|
)
|
|
target_link_libraries(ra3_fs PUBLIC ra3_core)
|
|
openra3_target_defaults(ra3_fs)
|
|
|
|
# --- map discovery/loading (real .big data, user's local install) ---
|
|
add_library(ra3_map STATIC)
|
|
target_sources(ra3_map
|
|
PUBLIC FILE_SET CXX_MODULES FILES
|
|
src/map/ra3.map.cppm
|
|
)
|
|
target_link_libraries(ra3_map PUBLIC ra3_core ra3_fs)
|
|
openra3_target_defaults(ra3_map)
|
|
|
|
# --- minimal headless skirmish simulation ---
|
|
add_library(ra3_skirmish STATIC)
|
|
target_sources(ra3_skirmish
|
|
PUBLIC FILE_SET CXX_MODULES FILES
|
|
src/skirmish/ra3.skirmish.cppm
|
|
)
|
|
target_link_libraries(ra3_skirmish PUBLIC ra3_core ra3_logic ra3_game ra3_map)
|
|
openra3_target_defaults(ra3_skirmish)
|
|
|
|
# --- umbrella module re-exporting the whole SDK ---
|
|
add_library(ra3 STATIC)
|
|
target_sources(ra3
|
|
PUBLIC FILE_SET CXX_MODULES FILES
|
|
src/ra3.cppm
|
|
)
|
|
target_link_libraries(ra3 PUBLIC ra3_core ra3_logic ra3_client ra3_game ra3_fs ra3_map ra3_skirmish)
|
|
openra3_target_defaults(ra3)
|
|
|
|
# --- the headless game executable ---
|
|
add_executable(openra3 apps/openra3/main.cpp)
|
|
target_link_libraries(openra3 PRIVATE ra3)
|
|
openra3_target_defaults(openra3)
|
|
|
|
# --- unit tests ---
|
|
enable_testing()
|
|
add_executable(ra3_tests tests/ra3_tests.cpp)
|
|
target_link_libraries(ra3_tests PRIVATE ra3)
|
|
openra3_target_defaults(ra3_tests)
|
|
add_test(NAME ra3_tests COMMAND ra3_tests)
|