-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
126 lines (103 loc) · 3.84 KB
/
CMakeLists.txt
File metadata and controls
126 lines (103 loc) · 3.84 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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# @file CMakeLists.txt
# @author Gaspard Kirira
#
# Copyright 2026, Gaspard Kirira.
# All rights reserved.
# https://github.com/vixcpp/webrpc
#
# Use of this source code is governed by a MIT license
# that can be found in the LICENSE file.
#
# Vix.cpp
cmake_minimum_required(VERSION 3.20)
project(vix_webrpc VERSION 0.1.0 LANGUAGES CXX)
include(GNUInstallDirs)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# ======================================================
# Dependency policy
# ======================================================
option(VIX_WEBRPC_FETCH_JSON "Auto-fetch vix::json if missing" ON)
if (DEFINED VIX_UMBRELLA_BUILD AND VIX_UMBRELLA_BUILD)
set(VIX_WEBRPC_FETCH_JSON OFF CACHE BOOL "Auto-fetch vix::json if missing" FORCE)
endif()
if (DEFINED VIX_UMBRELLA_BUILD AND VIX_UMBRELLA_BUILD)
if (NOT TARGET vix::json)
message(FATAL_ERROR "[webrpc] Umbrella build: vix::json must be provided before webrpc.")
endif()
else()
if (NOT TARGET vix::json)
if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/../json/CMakeLists.txt")
message(STATUS "[webrpc] Adding json from sibling module: ../json")
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/../json" "json")
elseif (VIX_WEBRPC_FETCH_JSON)
include(FetchContent)
message(STATUS "[webrpc] Fetching vix::json via FetchContent")
FetchContent_Declare(vix_json
GIT_REPOSITORY https://github.com/vixcpp/json.git
GIT_TAG dev
)
FetchContent_MakeAvailable(vix_json)
else()
message(FATAL_ERROR
"vix::json not found.\n"
"Enable VIX_WEBRPC_FETCH_JSON=ON or provide the target before webrpc."
)
endif()
endif()
endif()
if (NOT TARGET vix::json)
message(FATAL_ERROR "[webrpc] Required dependency target vix::json is still missing.")
endif()
# ======================================================
# Target (header-only)
# ======================================================
add_library(vix_webrpc INTERFACE)
add_library(vix::webrpc ALIAS vix_webrpc)
target_compile_features(vix_webrpc INTERFACE cxx_std_20)
target_include_directories(vix_webrpc INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
target_link_libraries(vix_webrpc INTERFACE
vix::json
)
# Install target + headers
install(TARGETS vix_webrpc
EXPORT VixTargets
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(DIRECTORY include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
FILES_MATCHING PATTERN "*.hpp" PATTERN "*.h"
)
# ======================================================
# Tests
# ======================================================
option(VIX_WEBRPC_BUILD_TESTS "Build webrpc module tests" OFF)
if (VIX_WEBRPC_BUILD_TESTS)
include(CTest)
enable_testing()
add_subdirectory(tests)
endif()
# ======================================================
# Examples
# ======================================================
option(VIX_WEBRPC_BUILD_EXAMPLES "Build webrpc module examples" OFF)
if (VIX_WEBRPC_BUILD_EXAMPLES)
add_subdirectory(examples)
endif()
# ======================================================
# Summary
# ======================================================
message(STATUS "------------------------------------------------------")
message(STATUS "vix::webrpc configured (${PROJECT_VERSION})")
message(STATUS "Mode: HEADER-ONLY")
message(STATUS "JSON target: vix::json")
message(STATUS "Include dir: ${CMAKE_CURRENT_SOURCE_DIR}/include")
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
message(STATUS "Build tests: ${VIX_WEBRPC_BUILD_TESTS}")
message(STATUS "Build examples: ${VIX_WEBRPC_BUILD_EXAMPLES}")
message(STATUS "Fetch json: ${VIX_WEBRPC_FETCH_JSON}")
message(STATUS "------------------------------------------------------")