elemental-game/CMakeLists.txt
S David f01a0b0b7d
All checks were successful
buildbot/elemental-game-linux-builder Build done.
buildbot/elemental-game-macos-builder Build done.
buildbot/elemental-game-freebsd-builder Build done.
Minor formatting changes; removed commented-out code
2024-08-07 22:46:23 -04:00

137 lines
3.2 KiB
CMake

cmake_minimum_required(VERSION 3.26)
# Additional paths to search for custom and third-party CMake modules
list(PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMake)
include(DefaultConfig)
include(BuildOptions)
include(BuildProperties)
project(Elemental
VERSION 0.0.6
LANGUAGES C CXX
# Save this for later:
# HOMEPAGE_URL <URL>
DESCRIPTION "A simple top-down strategy game"
)
check_and_set_linker()
include(CPM)
SET(${PROJECT_NAME}_CMAKE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
option(CI_BUILD "Mark this as a CI/CD system build. Defines a C++ preprocessor macro CI_BUILD=1.")
if (CI_BUILD)
add_compile_definitions(-DCI_BUILD=1)
endif()
# enable compile_commands.json generation for clangd
set(CMAKE_EXPORT_COMPILE_COMMANDS On)
IF(NOT CMAKE_BUILD_TYPE)
SET( CMAKE_BUILD_TYPE Debug )
ENDIF()
set(CMAKE_C_STANDARD 17)
set(CMAKE_CXX_STANDARD 20)
# Disable GNU compiler extensions
set(CMAKE_C_EXTENSIONS OFF)
set(CMAKE_CXX_EXTENSIONS OFF)
if (BUILD_TESTING)
CPMFindPackage(NAME Catch2
GITHUB_REPOSITORY catchorg/Catch2
VERSION 3.4.0
OPTIONS
"CATCH_DEVELOPMENT_BUILD OFF"
"CATCH_BUILD_TESTING OFF"
)
CPMFindPackage(NAME FakeIt
GITHUB_REPOSITORY eranpeer/FakeIt
GIT_TAG 2.4.0
OPTIONS
"BUILD_TESTINGING OFF"
)
if (TARGET Catch2)
set_target_properties(Catch2 PROPERTIES
CXX_STANDARD 20
)
endif()
if (TARGET Catch2WithMain)
set_target_properties(Catch2WithMain PROPERTIES
CXX_STANDARD 20
)
endif()
if (Catch2_ADDED)
list(APPEND CMAKE_MODULE_PATH ${Catch2_SOURCE_DIR}/extras)
else()
if (Catch2_DIR)
list(APPEND CMAKE_MODULE_PATH ${Catch2_DIR})
endif()
endif()
endif()
CPMFindPackage(
NAME fmt
URL https://github.com/fmtlib/fmt/archive/refs/tags/10.2.1.zip
URL_HASH SHA256=d368f9c39a33a3aef800f5be372ec1df1c12ad57ada1f60adc62f24c0e348469
)
find_package(Qt6 COMPONENTS
Core REQUIRED
Widgets REQUIRED
Gui REQUIRED
)
qt_standard_project_setup()
# Set output directories for build targets
set_artifact_dir(${CMAKE_BINARY_DIR}/out)
# Initialize FetchContent
include(FetchContent)
include(CheckIncludeFile)
# Initialize pkgconf
find_package(Threads) # POSIX thread support
find_package(PkgConfig REQUIRED)
# Example: Find SDL2, SDL2_image, and SDL2_gfx using PkgConfig
# add IMPORTED_TARGET to enable fancy PkgConfig::SDL2 syntax
pkg_check_modules(SDL2 REQUIRED IMPORTED_TARGET sdl2)
pkg_check_modules(SDL2_IMAGE REQUIRED IMPORTED_TARGET SDL2_image)
pkg_check_modules(SDL2_GFX REQUIRED IMPORTED_TARGET SDL2_gfx)
SET(SDL2_COMBINED_INCLUDE_DIRS "")
list(APPEND SDL2_COMBINED_INCLUDE_DIRS ${SDL2_INCLUDE_DIRS})
list(APPEND SDL2_COMBINED_INCLUDE_DIRS ${SDL2_IMAGE_INCLUDE_DIRS})
list(APPEND SDL2_COMBINED_INCLUDE_DIRS ${SDL2_GFX_INCLUDE_DIRS})
list(REMOVE_DUPLICATES SDL2_COMBINED_INCLUDE_DIRS)
include_directories(SYSTEM ${SDL2_COMBINED_INCLUDE_DIRS})
set(SDL2_COMBINED_LINK_DEPS
PkgConfig::SDL2
PkgConfig::SDL2_IMAGE
PkgConfig::SDL2_GFX
)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
add_compile_definitions(-DDEBUG=1)
endif()
# Add subdirectories
add_subdirectory(Modules)
include_directories(BEFORE ${Elemental_CMAKE_SOURCE_DIR}/Modules)
if(BUILD_TESTING)
add_subdirectory(Tests)
endif()
add_subdirectory(Apps)
# vim: ts=4 sw=4 noet foldmethod=indent :