BillySheet/CMakeLists.txt

129 lines
3.9 KiB
CMake
Raw Normal View History

2022-01-08 20:02:04 +01:00
cmake_minimum_required(VERSION 3.19 FATAL_ERROR)
2024-10-29 23:14:09 +01:00
project(BillySheet LANGUAGES CXX)
2022-01-08 20:02:04 +01:00
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
include(FetchContent)
2024-10-29 23:14:09 +01:00
file(GLOB_RECURSE SOURCE_HEADERS include/*.h include/*.hpp)
2022-01-08 23:40:31 +01:00
2024-10-29 23:14:09 +01:00
file(GLOB_RECURSE SOURCE_FILES src/*.cpp)
set(SOURCES
2024-10-29 23:14:09 +01:00
${SOURCE_HEADERS}
${SOURCE_FILES}
)
find_package(PkgConfig REQUIRED)
pkg_check_modules(Jemalloc REQUIRED IMPORTED_TARGET jemalloc)
2022-01-08 23:40:31 +01:00
find_program(CCACHE_FOUND ccache)
if (CCACHE_FOUND)
2024-01-28 21:10:36 +01:00
message(STATUS "ccache found !")
set_property(GLOBAL PROPERTY C_COMPILER_LAUNCHER ccache)
set_property(GLOBAL PROPERTY C_LINKER_LAUNCHER ccache)
set_property(GLOBAL PROPERTY CXX_COMPILER_LAUNCHER ccache)
set_property(GLOBAL PROPERTY CXX_LINKER_LAUNCHER ccache)
2022-01-08 23:40:31 +01:00
else ()
2024-01-28 21:10:36 +01:00
message(STATUS "ccache not found")
2022-01-08 23:40:31 +01:00
endif ()
fetchcontent_declare(json URL https://github.com/nlohmann/json/releases/download/v3.11.3/json.tar.xz)
set(JSON_BuildTests OFF CACHE INTERNAL "")
2022-06-09 21:52:49 +02:00
option(JSON_ImplicitConversions "Enable implicit conversions." OFF)
option(JSON_SystemInclude "Include as system headers (skip for clang-tidy)." ON)
fetchcontent_makeavailable(json)
option(CATCH_INSTALL_DOCS "Install documentation alongside library" OFF)
option(CATCH_INSTALL_EXTRAS "Install extras alongside library" OFF)
add_subdirectory(external/catch2)
2022-01-08 23:40:31 +01:00
set(COMPILE_FLAGS
2024-10-29 23:14:09 +01:00
-pipe
-march=znver3 # change to native or your architecture.
-mtune=znver3 # same as above
-mrdseed # be careful about this, this is linked to the x86 architecture.
-mrdrnd # same as above
-Wall
-Wextra
-Wpedantic
# -Wpadded
-pedantic
$<$<CONFIG:Release>:-ffunction-sections -fdata-sections>
-fuse-ld=gold
-funroll-loops
-fdevirtualize-at-ltrans
-fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free
2024-01-28 20:31:50 +01:00
)
2022-01-08 23:40:31 +01:00
set(LINKER_OPTIONS
2024-10-29 23:14:09 +01:00
-Wl,--sort-common,--as-needed$<$<CONFIG:Release>:,--gc-sections,--strip-all>
-fuse-ld=gold
-fdevirtualize-at-ltrans
2024-01-28 20:31:50 +01:00
)
2022-01-08 23:40:31 +01:00
option(ENABLE_COVERAGE "Enabling coverage" OFF)
if (${ENABLE_COVERAGE})
2024-01-28 21:10:36 +01:00
message(STATUS "Coverage enabled")
list(APPEND COMPILE_FLAGS --coverage)
list(APPEND LINKER_OPTIONS --coverage)
list(APPEND LINKER_FLAGS gcov)
endif ()
2024-10-29 23:14:09 +01:00
add_library(BillySheet SHARED ${SOURCES})
target_include_directories(BillySheet
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INDLUDEDIR}/billySheet>
)
set_target_properties(BillySheet PROPERTIES
2024-10-29 23:14:09 +01:00
CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF
INTERPROCEDURAL_OPTIMIZATION ON
UNITY_BUILD ON
PUBLIC_HEADER "include/billy_objects.hpp;include/character_sheet.hpp;include/generic_object.hpp;include/characteristic.hpp"
2024-01-28 20:31:50 +01:00
)
2022-01-20 22:47:08 +01:00
target_compile_definitions(BillySheet PRIVATE
2024-10-29 23:14:09 +01:00
$<$<CONFIG:Debug>:_GLIBCXX_DEBUG>
)
2022-01-20 22:47:08 +01:00
2022-01-08 23:40:31 +01:00
target_compile_options(BillySheet PRIVATE ${COMPILE_FLAGS})
target_link_options(BillySheet PRIVATE ${LINKER_OPTIONS})
target_link_libraries(BillySheet PUBLIC
2024-10-29 23:14:09 +01:00
nlohmann_json::nlohmann_json
PkgConfig::Jemalloc
)
install(TARGETS BillySheet nlohmann_json
EXPORT billySheetTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/billySheet"
)
install(EXPORT billySheetTargets
FILE billySheetTargets.cmake
NAMESPACE billySheet::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/billySheet
)
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/billySheetConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/billySheet
)
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/billySheetConfig.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/billySheet
2024-02-29 12:04:09 +01:00
)
2024-10-30 17:04:49 +01:00
add_subdirectory("Unit testing")