IOCore/CMakeLists.txt
S David 3eba83e7a8
All checks were successful
buildbot/IOCore-linux-builder Build done.
buildbot/IOCore-macos-builder Build done.
buildbot/IOCore-freebsd-builder Build done.
[CMakeTools] Use latest; no longer calls git submodule update on every configure call
2024-08-04 15:59:18 -04:00

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 :