summaryrefslogtreecommitdiff
path: root/lib/CMakeLists.txt
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2025-05-16 16:13:14 +0200
committerFelix Morgner <felix.morgner@gmail.com>2025-05-16 16:13:14 +0200
commitd30e905b18bbde6918cd813ce57625f4ec955f1b (patch)
treec62a040de451c83604e4a2fbc2c0fd860074d85e /lib/CMakeLists.txt
parentef5297c13b0035db7703995ed14dbd2dd747d6be (diff)
downloadturns-d30e905b18bbde6918cd813ce57625f4ec955f1b.tar.xz
turns-d30e905b18bbde6918cd813ce57625f4ec955f1b.zip
lib: convert to sub project
Diffstat (limited to 'lib/CMakeLists.txt')
-rw-r--r--lib/CMakeLists.txt123
1 files changed, 82 insertions, 41 deletions
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index ceb4d5c..c4b1a0f 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -1,3 +1,48 @@
+cmake_minimum_required(VERSION "4.0.0")
+
+project("libturns"
+ LANGUAGES C CXX
+ DESCRIPTION "The core library for 'Turns, the simple turn order tracker'"
+ VERSION "1.0.0"
+)
+
+include("FetchContent")
+include("GlibMkenums")
+
+find_package("PkgConfig" REQUIRED)
+
+#Dependencies
+
+pkg_check_modules("glib"
+ IMPORTED_TARGET
+ REQUIRED
+ "glib-2.0>=${TURNS_GLIB_MINIMUM_VERSION}"
+ "gio-2.0>=${TURNS_GLIB_MINIMUM_VERSION}"
+ "gobject-2.0>=${TURNS_GLIB_MINIMUM_VERSION}"
+)
+
+pkg_check_modules("glibmm"
+ IMPORTED_TARGET
+ REQUIRED
+ "giomm-2.68>=${TURNS_GLIB_MINIMUM_VERSION}"
+ "glibmm-2.68>=${TURNS_GLIB_MINIMUM_VERSION}"
+)
+
+# Testing Dependencies
+
+FetchContent_Declare(
+ "Catch2"
+ URL "https://github.com/catchorg/Catch2/archive/refs/tags/v3.6.0.tar.gz"
+ URL_HASH "SHA256=485932259a75c7c6b72d4b874242c489ea5155d17efa345eb8cc72159f49f356"
+ EXCLUDE_FROM_ALL
+ SYSTEM
+ FIND_PACKAGE_ARGS
+)
+
+FetchContent_MakeAvailable("Catch2")
+
+include("Catch")
+
# Library
set(HEADERS
@@ -14,10 +59,7 @@ set(SOURCES
"src/turns-turn-order.cpp"
)
-add_library("lib"
- ${SOURCES}
-)
-
+add_library("lib" ${SOURCES})
add_library("turns::lib" ALIAS "lib")
target_sources("lib" PUBLIC
@@ -28,29 +70,34 @@ target_sources("lib" PUBLIC
)
target_compile_options("lib" PUBLIC
+ "$<$<C_COMPILER_ID:GNU,Clang>:-Wall>"
+ "$<$<C_COMPILER_ID:GNU,Clang>:-Wextra>"
+ "$<$<C_COMPILER_ID:GNU,Clang>:-Werror>"
+ "$<$<C_COMPILER_ID:GNU,Clang>:-pedantic-errors>"
"$<$<CXX_COMPILER_ID:GNU,Clang>:-Wall>"
"$<$<CXX_COMPILER_ID:GNU,Clang>:-Wextra>"
"$<$<CXX_COMPILER_ID:GNU,Clang>:-Werror>"
"$<$<CXX_COMPILER_ID:GNU,Clang>:-pedantic-errors>"
)
-target_include_directories("lib" PUBLIC
- "src"
+target_compile_features("lib" PUBLIC
+ "c_std_23"
+ "cxx_std_23"
)
-target_link_libraries("lib" PUBLIC
- "PkgConfig::gio"
- "PkgConfig::gobject"
-)
+target_include_directories("lib" PUBLIC "src")
-target_compile_definitions("lib" PUBLIC
- "$<$<NOT:$<BOOL:TURNS_USE_INSTALLED_SCHEMA_FILES>>:TURNS_SETTINGS_SCHEMA_DIR=\"${CMAKE_CURRENT_BINARY_DIR}\">"
+target_link_libraries("lib" PUBLIC
+ "PkgConfig::glib"
)
set_target_properties("lib" PROPERTIES
OUTPUT_NAME "turns"
SOVERSION "${PROJECT_VERSION_MAJOR}"
VERSION "${PROJECT_VERSION}"
+ INTERPROCEDURAL_OPTIMIZATION "${TURNS_CAN_DO_IPO}"
+ C_EXTENSIONS OFF
+ CXX_EXTENSIONS OFF
)
target_add_glib_enums("lib"
@@ -62,9 +109,7 @@ target_add_glib_enums("lib"
enable_coverage("lib")
-install(TARGETS "lib"
- FILE_SET HEADERS DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/turns"
-)
+install(TARGETS "lib" FILE_SET HEADERS DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/turns")
# C++ Wrapper
@@ -86,10 +131,7 @@ set(CXX_SOURCES
"src/turnsmm/turn-order.cpp"
)
-add_library("libmm"
- ${CXX_SOURCES}
-)
-
+add_library("libmm" ${CXX_SOURCES})
add_library("turns::mm" ALIAS "libmm")
target_sources("libmm" PUBLIC
@@ -106,14 +148,10 @@ target_compile_options("libmm" PUBLIC
"$<$<CXX_COMPILER_ID:GNU,Clang>:-pedantic-errors>"
)
-target_include_directories("libmm" PUBLIC
- "src"
-)
+target_include_directories("libmm" PUBLIC "src")
target_link_libraries("libmm" PUBLIC
- "PkgConfig::giomm"
"PkgConfig::glibmm"
-
"turns::lib"
)
@@ -121,16 +159,19 @@ set_target_properties("libmm" PROPERTIES
OUTPUT_NAME "turnsmm"
SOVERSION "${PROJECT_VERSION_MAJOR}"
VERSION "${PROJECT_VERSION}"
+ INTERPROCEDURAL_OPTIMIZATION "${TURNS_CAN_DO_IPO}"
+ C_EXTENSIONS OFF
+ CXX_EXTENSIONS OFF
)
enable_coverage("libmm")
-install(TARGETS "libmm"
- FILE_SET HEADERS DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/turnsmm"
-)
+install(TARGETS "libmm" FILE_SET HEADERS DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/turnsmm")
# Tests
+enable_testing()
+
add_executable("lib-tests"
"tests/runtime_init.cpp"
"tests/turns-participant.cpp"
@@ -139,18 +180,23 @@ add_executable("lib-tests"
target_link_libraries("lib-tests" PRIVATE
"Catch2::Catch2WithMain"
-
"turns::lib"
)
-target_link_options("lib-tests" PRIVATE
- "$<$<AND:$<CXX_COMPILER_ID:GNU,Clang>,$<CONFIG:Debug>>:--coverage>"
+target_link_options("lib-tests" PRIVATE "$<$<AND:$<CXX_COMPILER_ID:GNU,Clang>,$<CONFIG:Debug>>:--coverage>")
+
+set_target_properties("lib-tests" PROPERTIES
+ INTERPROCEDURAL_OPTIMIZATION "${TURNS_CAN_DO_IPO}"
+ C_EXTENSIONS OFF
+ CXX_EXTENSIONS OFF
)
catch_discover_tests("lib-tests")
# C++ Wrapper Tests
+enable_testing()
+
add_executable("libmm-tests"
"tests/turnsmm/runtime_init.cpp"
"tests/turnsmm/participant.cpp"
@@ -159,20 +205,15 @@ add_executable("libmm-tests"
target_link_libraries("libmm-tests" PRIVATE
"Catch2::Catch2WithMain"
-
"turns::mm"
)
-target_link_options("libmm-tests" PRIVATE
- "$<$<AND:$<CXX_COMPILER_ID:GNU,Clang>,$<CONFIG:Debug>>:--coverage>"
+target_link_options("libmm-tests" PRIVATE "$<$<AND:$<CXX_COMPILER_ID:GNU,Clang>,$<CONFIG:Debug>>:--coverage>")
+
+set_target_properties("libmm-tests" PROPERTIES
+ INTERPROCEDURAL_OPTIMIZATION "${TURNS_CAN_DO_IPO}"
+ C_EXTENSIONS OFF
+ CXX_EXTENSIONS OFF
)
catch_discover_tests("libmm-tests")
-
-# file(GLOB_RECURSE TEST_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/tests" CONFIGURE_DEPENDS "*.trns")
-
-# target_add_glib_resources("core-tests"
-# PREFIX "/ch/arknet/Turns/core-tests/"
-# WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/tests"
-# CSS_FILES ${TEST_FILES}
-# )