2023-12-09 21:33:46 +00:00
|
|
|
cmake_minimum_required(VERSION 3.26)
|
|
|
|
|
2024-04-13 20:06:24 +00:00
|
|
|
# Additional paths to search for custom and third-party CMake modules
|
2024-05-16 20:56:50 +00:00
|
|
|
list(PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMake)
|
2024-04-13 20:06:24 +00:00
|
|
|
|
2024-05-17 01:18:01 +00:00
|
|
|
include(DefaultConfig)
|
2024-04-13 20:06:24 +00:00
|
|
|
|
2024-05-17 01:18:01 +00:00
|
|
|
include(BuildOptions)
|
|
|
|
include(BuildProperties)
|
2024-05-11 20:35:33 +00:00
|
|
|
|
2023-12-13 02:22:17 +00:00
|
|
|
project(Elemental
|
2024-05-17 03:02:35 +00:00
|
|
|
VERSION 0.0.6
|
2023-12-13 02:22:17 +00:00
|
|
|
LANGUAGES C CXX
|
|
|
|
# Save this for later:
|
|
|
|
# HOMEPAGE_URL <URL>
|
|
|
|
DESCRIPTION "A simple top-down strategy game"
|
|
|
|
)
|
2024-04-30 02:27:09 +00:00
|
|
|
|
|
|
|
check_and_set_linker()
|
|
|
|
|
2024-04-13 20:06:24 +00:00
|
|
|
include(CPM)
|
2023-12-13 02:22:17 +00:00
|
|
|
|
2024-04-13 20:06:24 +00:00
|
|
|
SET(${PROJECT_NAME}_CMAKE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
2023-12-09 21:33:46 +00:00
|
|
|
|
2024-04-17 02:19:58 +00:00
|
|
|
option(CI_BUILD "Mark this as a CI/CD system build. Defines a C++ preprocessor macro CI_BUILD=1.")
|
2023-12-27 15:12:36 +00:00
|
|
|
if (CI_BUILD)
|
|
|
|
add_compile_definitions(-DCI_BUILD=1)
|
|
|
|
endif()
|
|
|
|
|
2024-04-13 20:06:24 +00:00
|
|
|
# enable compile_commands.json generation for clangd
|
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS On)
|
|
|
|
|
2024-04-17 04:17:53 +00:00
|
|
|
IF(NOT CMAKE_BUILD_TYPE)
|
2024-04-25 13:22:01 +00:00
|
|
|
SET( CMAKE_BUILD_TYPE Debug )
|
2024-04-13 20:06:24 +00:00
|
|
|
ENDIF()
|
2023-12-09 19:41:42 +00:00
|
|
|
|
|
|
|
set(CMAKE_C_STANDARD 17)
|
2024-04-13 20:06:24 +00:00
|
|
|
set(CMAKE_CXX_STANDARD 20)
|
2023-12-09 19:41:42 +00:00
|
|
|
|
2024-04-13 20:06:24 +00:00
|
|
|
# Disable GNU compiler extensions
|
2023-12-09 21:33:46 +00:00
|
|
|
set(CMAKE_C_EXTENSIONS OFF)
|
|
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
|
|
|
2024-04-13 20:06:24 +00:00
|
|
|
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
|
2024-04-25 13:22:01 +00:00
|
|
|
"BUILD_TESTINGING OFF"
|
2024-04-13 20:06:24 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
if (TARGET Catch2)
|
|
|
|
set_target_properties(Catch2 PROPERTIES
|
|
|
|
CXX_STANDARD 20
|
|
|
|
)
|
|
|
|
endif()
|
|
|
|
if (TARGET Catch2WithMain)
|
|
|
|
set_target_properties(Catch2WithMain PROPERTIES
|
2024-04-25 13:22:01 +00:00
|
|
|
CXX_STANDARD 20
|
2024-04-13 20:06:24 +00:00
|
|
|
)
|
|
|
|
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()
|
2023-12-13 23:50:23 +00:00
|
|
|
endif()
|
|
|
|
|
2024-06-02 19:57:33 +00:00
|
|
|
CPMFindPackage(
|
|
|
|
NAME fmt
|
|
|
|
URL https://github.com/fmtlib/fmt/archive/refs/tags/10.2.1.zip
|
|
|
|
URL_HASH SHA256=d368f9c39a33a3aef800f5be372ec1df1c12ad57ada1f60adc62f24c0e348469
|
|
|
|
)
|
2024-04-25 13:22:01 +00:00
|
|
|
find_package(Qt6 COMPONENTS
|
2024-04-19 04:31:06 +00:00
|
|
|
Core REQUIRED
|
|
|
|
Widgets REQUIRED
|
|
|
|
Gui REQUIRED
|
2024-04-17 15:40:01 +00:00
|
|
|
)
|
2024-04-19 04:31:06 +00:00
|
|
|
qt_standard_project_setup()
|
2024-04-17 15:40:01 +00:00
|
|
|
|
2024-04-13 20:06:24 +00:00
|
|
|
# Set output directories for build targets
|
|
|
|
set_artifact_dir(${CMAKE_BINARY_DIR}/out)
|
2023-12-09 21:33:46 +00:00
|
|
|
|
|
|
|
# Initialize FetchContent
|
|
|
|
include(FetchContent)
|
2023-12-13 23:50:23 +00:00
|
|
|
include(CheckIncludeFile)
|
2023-12-09 19:41:42 +00:00
|
|
|
|
|
|
|
# Initialize pkgconf
|
2024-04-30 02:27:09 +00:00
|
|
|
find_package(Threads) # POSIX thread support
|
2023-12-13 02:22:17 +00:00
|
|
|
find_package(PkgConfig REQUIRED)
|
2023-12-09 19:41:42 +00:00
|
|
|
|
|
|
|
# Example: Find SDL2, SDL2_image, and SDL2_gfx using PkgConfig
|
|
|
|
# add IMPORTED_TARGET to enable fancy PkgConfig::SDL2 syntax
|
2023-12-13 05:07:50 +00:00
|
|
|
pkg_check_modules(SDL2 REQUIRED IMPORTED_TARGET sdl2)
|
2023-12-13 02:22:17 +00:00
|
|
|
pkg_check_modules(SDL2_IMAGE REQUIRED IMPORTED_TARGET SDL2_image)
|
|
|
|
pkg_check_modules(SDL2_GFX REQUIRED IMPORTED_TARGET SDL2_gfx)
|
2024-04-30 02:27:09 +00:00
|
|
|
|
2023-12-29 17:31:23 +00:00
|
|
|
SET(SDL2_COMBINED_INCLUDE_DIRS "")
|
2024-04-13 20:06:24 +00:00
|
|
|
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})
|
2023-12-29 17:31:23 +00:00
|
|
|
list(REMOVE_DUPLICATES SDL2_COMBINED_INCLUDE_DIRS)
|
2023-12-13 02:22:17 +00:00
|
|
|
|
2024-05-03 01:34:49 +00:00
|
|
|
include_directories(SYSTEM ${SDL2_COMBINED_INCLUDE_DIRS})
|
2024-04-30 02:27:09 +00:00
|
|
|
|
2023-12-29 17:31:23 +00:00
|
|
|
set(SDL2_COMBINED_LINK_DEPS
|
2023-12-13 02:22:17 +00:00
|
|
|
PkgConfig::SDL2
|
|
|
|
PkgConfig::SDL2_IMAGE
|
|
|
|
PkgConfig::SDL2_GFX
|
|
|
|
)
|
2023-12-09 19:41:42 +00:00
|
|
|
|
2023-12-28 04:18:02 +00:00
|
|
|
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
|
|
add_compile_definitions(-DDEBUG=1)
|
|
|
|
endif()
|
|
|
|
|
2023-12-09 19:41:42 +00:00
|
|
|
# Add subdirectories
|
2024-04-17 04:17:53 +00:00
|
|
|
add_subdirectory(Modules)
|
2024-05-16 20:56:50 +00:00
|
|
|
include_directories(BEFORE ${Elemental_CMAKE_SOURCE_DIR}/Modules)
|
2023-12-09 21:33:46 +00:00
|
|
|
|
2024-04-13 20:06:24 +00:00
|
|
|
if(BUILD_TESTING)
|
2024-04-17 04:17:53 +00:00
|
|
|
add_subdirectory(Tests)
|
2023-12-09 21:33:46 +00:00
|
|
|
endif()
|
|
|
|
|
2024-04-17 04:17:53 +00:00
|
|
|
add_subdirectory(Apps)
|
|
|
|
|
2024-05-03 01:34:49 +00:00
|
|
|
# vim: ts=4 sw=4 noet foldmethod=indent :
|