162 lines
4.2 KiB
CMake
162 lines
4.2 KiB
CMake
cmake_minimum_required(VERSION 3.26)
|
|
|
|
SET(IOCore_CMAKE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
|
|
|
# Additional paths to search for custom and third-party CMake modules
|
|
list(PREPEND CMAKE_MODULE_PATH ${IOCore_CMAKE_SOURCE_DIR}/CMake)
|
|
|
|
include(BuildProperties)
|
|
include(DefaultConfig)
|
|
|
|
project(IOCore
|
|
VERSION 0.2.25
|
|
LANGUAGES C CXX
|
|
# HOMEPAGE_URL <URL>
|
|
DESCRIPTION "A framework for application management, file IO, etc"
|
|
)
|
|
|
|
use_ccache()
|
|
check_and_set_linker()
|
|
|
|
include(CPM)
|
|
|
|
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 (UNIX AND NOT(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux"))
|
|
option(USE_BOOST_STACKTRACE "Use Boost::stacktrace for stack traces" OFF)
|
|
option(USE_EXECINFO_STACKTRACE "Use BSD/UNIX execinfo for stack traces" ON)
|
|
else()
|
|
option(USE_BOOST_STACKTRACE "Use Boost::stacktrace for stack traces" ON)
|
|
option(USE_EXECINFO_STACKTRACE "Use BSD/UNIX execinfo for stack traces" OFF)
|
|
endif()
|
|
|
|
# enable compile_commands.json generation for clangd
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS On)
|
|
|
|
# Initialize FetchContent
|
|
include(FetchContent)
|
|
|
|
# Initialize CHECK_INCLUDE_FILES
|
|
include(CheckIncludeFile)
|
|
|
|
# Initialize pkgconf
|
|
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)
|
|
|
|
if (USE_EXECINFO_STACKTRACE AND (NOT USE_BOOST_STACKTRACE))
|
|
CHECK_INCLUDE_FILE("execinfo.h" HAVE_EXECINFO_H)
|
|
|
|
if (HAVE_EXECINFO_H)
|
|
add_definitions(-DHAVE_EXECINFO_H=1)
|
|
endif()
|
|
|
|
find_library(LIB_EXEC_INFO
|
|
NAMES execinfo # Specify the library name without the 'lib' prefix or file extension
|
|
HINTS /usr/lib /usr/local/lib # Optional hint for the library location
|
|
)
|
|
if (LIB_EXEC_INFO)
|
|
message(STATUS "Found libexecinfo: ${LIB_EXEC_INFO}")
|
|
set(STACKTRACE_DEP_LIBS ${LIB_EXEC_INFO})
|
|
endif()
|
|
elseif((NOT USE_EXECINFO_STACKTRACE) AND USE_BOOST_STACKTRACE)
|
|
set(Boost_USE_STATIC_LIBS OFF)
|
|
set(Boost_USE_STATIC_RUNTIME OFF) # Do not require static C++ runtime
|
|
set(Boost_USE_MULTITHREADED ON)
|
|
find_package(Boost 1.82.0 COMPONENTS system filesystem REQUIRED)
|
|
|
|
if (Boost_FOUND)
|
|
add_definitions(-DBOOST_STACKTRACER=1)
|
|
add_definitions(-DBOOST_STACKTRACE_USE_ADDR2LINE=1)
|
|
|
|
include_directories(${Boost_INCLUDE_DIRS})
|
|
endif()
|
|
endif()
|
|
|
|
CPMFindPackage(
|
|
NAME fmt
|
|
URL https://github.com/fmtlib/fmt/archive/refs/tags/10.2.1.zip
|
|
URL_HASH SHA256=d368f9c39a33a3aef800f5be372ec1df1c12ad57ada1f60adc62f24c0e348469
|
|
)
|
|
if (fmt_DIR)
|
|
list(APPEND CMAKE_MODULE_PATH ${fmt_DIR})
|
|
endif()
|
|
|
|
CPMFindPackage(NAME tomlplusplus
|
|
URL https://github.com/marzer/tomlplusplus/archive/refs/tags/v3.4.0.zip
|
|
URL_HASH SHA256=ad2a4cd786e25305d802e7490ea65a2531195e5834bf6b4fa5a323421fd81f9b
|
|
)
|
|
if (tomlplusplus_DIR)
|
|
list(APPEND CMAKE_MODULE_PATH ${tomlplusplus_DIR})
|
|
endif()
|
|
|
|
CPMFindPackage(NAME nlohmann_json
|
|
URL https://github.com/nlohmann/json/archive/refs/tags/v3.11.3.zip
|
|
URL_HASH SHA256=04022b05d806eb5ff73023c280b68697d12b93e1b7267a0b22a1a39ec7578069
|
|
)
|
|
if (nlohmann_json_DIR)
|
|
list(APPEND CMAKE_MODULE_PATH ${nlohmann_json_DIR})
|
|
endif()
|
|
|
|
|
|
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()
|
|
|
|
# Set output directories for build targets
|
|
set_artifact_dir(${CMAKE_BINARY_DIR}/out)
|
|
|
|
# Add subdirectories
|
|
add_subdirectory(src)
|
|
|
|
if(BUILD_TESTING)
|
|
add_subdirectory(tests)
|
|
endif()
|
|
|
|
|
|
# vim: ts=4 sw=4 noet foldmethod=indent :
|