-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
103 lines (81 loc) · 4.36 KB
/
CMakeLists.txt
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#--------------------------------------------------------------------------------
# CMake version
#--------------------------------------------------------------------------------
cmake_minimum_required(VERSION 3.25.0 FATAL_ERROR)
#--------------------------------------------------------------------------------
# Project directories
#--------------------------------------------------------------------------------
set(MODULE_CORE_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(MODULE_CORE_LIST_DIR "${CMAKE_CURRENT_LIST_DIR}")
set(MODULE_CORE_CMAKE_DIR "${MODULE_CORE_ROOT_DIR}/cmake_modules")
set(MODULE_CORE_LIB_DIR "${MODULE_CORE_ROOT_DIR}/lib")
set(MODULE_CORE_BIN_DIR "${CMAKE_SOURCE_DIR}/bin")
#--------------------------------------------------------------------------------
# Include CMake modules
#--------------------------------------------------------------------------------
include("${MODULE_CORE_CMAKE_DIR}/options.cmake")
include("${MODULE_CORE_CMAKE_DIR}/project_metadata.cmake")
include("${MODULE_CORE_CMAKE_DIR}/set_output_dir.cmake")
include("${MODULE_CORE_CMAKE_DIR}/set_compile_definitions.cmake")
include("${MODULE_CORE_CMAKE_DIR}/enable_cxx17.cmake")
include("${MODULE_CORE_CMAKE_DIR}/enable_coverage.cmake")
include("${MODULE_CORE_CMAKE_DIR}/modules/create_object_library.cmake")
include("${MODULE_CORE_CMAKE_DIR}/modules/create_interface.cmake")
include("${MODULE_CORE_CMAKE_DIR}/modules/logger.cmake")
include("${MODULE_CORE_CMAKE_DIR}/modules/compiler/clang/create_library.cmake")
include("${MODULE_CORE_CMAKE_DIR}/modules/compiler/emscripten/setup.cmake")
include("${MODULE_CORE_CMAKE_DIR}/modules/compiler/emscripten/create_library.cmake")
include("${MODULE_CORE_CMAKE_DIR}/modules/compiler/emscripten/gen_target_name.cmake")
include("${MODULE_CORE_CMAKE_DIR}/modules/compiler/emscripten/set_optimization.cmake")
include("${MODULE_CORE_CMAKE_DIR}/modules/compiler/emscripten/set_environment.cmake")
include("${MODULE_CORE_CMAKE_DIR}/modules/compiler/emscripten/set_compilation.cmake")
include("${MODULE_CORE_CMAKE_DIR}/modules/compiler/emscripten/set_modularize.cmake")
#--------------------------------------------------------------------------------
# Options
#--------------------------------------------------------------------------------
set_glob_options()
option(MODULE_CORE_LIB_TYPE "Build type library" OFF)
option(MODULE_CORE_ALL_EXPORT "" OFF)
option(MODULE_CORE_ENVIRONMENT "Environment variable" OFF)
option(MODULE_CORE_COMPILATION "Compilation variable" OFF)
option(MODULE_CORE_ENABLE_COVERAGE "Enable coverage builds" OFF)
option(MODULE_CORE_ENABLE_TESTS "Enable test builds" OFF)
#--------------------------------------------------------------------------------
# [EMSCRIPTEN]: Setup
#--------------------------------------------------------------------------------
if(GLOB_EMSCRIPTEN_PLATFORM)
emscripten_setup()
endif()
#--------------------------------------------------------------------------------
# Project
#--------------------------------------------------------------------------------
project_metadata("core" 0.2.6)
project(${MODULE_CORE_PROJ_NAME} VERSION ${MODULE_CORE_VERSION} LANGUAGES CXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=default -fPIE")
#--------------------------------------------------------------------------------
# Coverage
#--------------------------------------------------------------------------------
if(MODULE_CORE_ENABLE_COVERAGE)
enable_coverage()
endif()
create_logger()
#--------------------------------------------------------------------------------
# Executable output path
#--------------------------------------------------------------------------------
set_output_dir(${MODULE_CORE_BIN_DIR})
#--------------------------------------------------------------------------------
# Library
#--------------------------------------------------------------------------------
add_subdirectory(lib/cxx)
#--------------------------------------------------------------------------------
# Tests
#--------------------------------------------------------------------------------
if(MODULE_CORE_ENABLE_TESTS)
if(${MODULE_CORE_LIB_TYPE} MATCHES "static")
message(STATUS "[${MODULE_CORE_PROJ_NAME}]: Tests have been enabled")
add_subdirectory(lib/cxx/tests/google)
# add_dependencies(module_core_tests module_core)
else()
message(FATAL_ERROR "[${MODULE_CORE_PROJ_NAME}]: Tests are only allowed with a static lib")
endif()
endif()