forked from kbengine/kbengine
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
82 lines (60 loc) · 2.23 KB
/
Copy pathCMakeLists.txt
File metadata and controls
82 lines (60 loc) · 2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
cmake_minimum_required(VERSION 3.21)
project(KBEngine LANGUAGES C CXX)
include(CTest)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
if(MSVC AND NOT DEFINED CMAKE_MSVC_RUNTIME_LIBRARY)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
endif()
if(MSVC)
add_compile_definitions(KBE_CMAKE_MANAGED_MSVC_RUNTIME=1)
endif()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
set(KBE_USING_VCPKG OFF)
if(DEFINED CMAKE_TOOLCHAIN_FILE AND CMAKE_TOOLCHAIN_FILE MATCHES "vcpkg[\\\\/]scripts[\\\\/]buildsystems[\\\\/]vcpkg\\.cmake$")
set(KBE_USING_VCPKG ON)
elseif(DEFINED VCPKG_TARGET_TRIPLET)
set(KBE_USING_VCPKG ON)
endif()
include(KBEngineOptions)
if(KBE_ENABLE_CODE_COVERAGE)
message(STATUS "KBEngine: code coverage enabled")
# Add coverage flags for C and C++
add_compile_options(
$<$<COMPILE_LANGUAGE:C,CXX>:-fprofile-arcs>
$<$<COMPILE_LANGUAGE:C,CXX>:-ftest-coverage>
$<$<COMPILE_LANGUAGE:C,CXX>:-fprofile-update=atomic>
)
add_link_options(-fprofile-arcs)
# Remove optimization flags that interfere with coverage
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
# Disable garbage collection and unused functions for better coverage
add_compile_definitions(
__NO_INLINE__
)
# For coverage, we need to ensure the runtime can find the .gcda files
# Set GCOV_PREFIX_STRIP to avoid absolute paths in .gcda files
if(NOT DEFINED GCOV_PREFIX_STRIP)
set(GCOV_PREFIX_STRIP 0)
endif()
message(STATUS "KBEngine: coverage flags set for C/C++ with atomic updates")
endif()
if(KBE_USING_VCPKG)
message(STATUS "KBEngine: vcpkg toolchain detected")
endif()
if(MSVC)
add_compile_options(/utf-8)
endif()
set(KBE_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(KBE_SOURCE_DIR "${KBE_ROOT_DIR}/kbe/src")
set(KBE_LIB_OUTPUT_DIR "${KBE_SOURCE_DIR}/libs")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${KBE_LIB_OUTPUT_DIR}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${KBE_LIB_OUTPUT_DIR}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${KBE_ROOT_DIR}/kbe/bin/server")
include(KBEngineDependencies)
add_subdirectory(kbe/src)
if(BUILD_TESTING AND KBE_ENABLE_TESTING)
add_subdirectory(tests)
endif()