-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
150 lines (125 loc) · 3.98 KB
/
Copy pathCMakeLists.txt
File metadata and controls
150 lines (125 loc) · 3.98 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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
cmake_minimum_required(VERSION 3.16)
project(starpc VERSION 1.0.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
find_program(CCACHE_PROGRAM ccache)
if(CCACHE_PROGRAM)
message(STATUS "Using ccache: ${CCACHE_PROGRAM}")
set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_PROGRAM}")
endif()
# Options
option(STARPC_BUILD_TESTS "Build starpc tests" ON)
option(STARPC_BUILD_EXAMPLES "Build starpc examples" ON)
# Find Threads (always available on most systems)
find_package(Threads REQUIRED)
# Set variables for vendored dependencies
set(VENDOR_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vendor/github.com/aperturerobotics)
set(ABSEIL_DIR ${VENDOR_DIR}/abseil-cpp)
set(PROTOBUF_DIR ${VENDOR_DIR}/protobuf)
# Configure abseil options before add_subdirectory
set(ABSL_PROPAGATE_CXX_STD ON CACHE BOOL "" FORCE)
set(ABSL_BUILD_TESTING OFF CACHE BOOL "" FORCE)
set(ABSL_ENABLE_INSTALL OFF CACHE BOOL "" FORCE)
# Add abseil-cpp from vendored sources
add_subdirectory(${ABSEIL_DIR} ${CMAKE_BINARY_DIR}/abseil-cpp EXCLUDE_FROM_ALL)
# Configure protobuf options before add_subdirectory
set(protobuf_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(protobuf_BUILD_CONFORMANCE OFF CACHE BOOL "" FORCE)
set(protobuf_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(protobuf_BUILD_PROTOC_BINARIES OFF CACHE BOOL "" FORCE)
set(protobuf_BUILD_LIBPROTOC OFF CACHE BOOL "" FORCE)
set(protobuf_BUILD_LIBUPB OFF CACHE BOOL "" FORCE)
set(protobuf_INSTALL OFF CACHE BOOL "" FORCE)
set(protobuf_ABSL_PROVIDER "package" CACHE STRING "" FORCE)
# Add protobuf from vendored sources
add_subdirectory(${PROTOBUF_DIR} ${CMAKE_BINARY_DIR}/protobuf EXCLUDE_FROM_ALL)
# Include paths for vendored dependencies and Go-style imports
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/vendor
${PROTOBUF_DIR}/src
${PROTOBUF_DIR}/third_party/utf8_range
${ABSEIL_DIR}
)
# Core starpc library sources
set(STARPC_SOURCES
srpc/packet.cpp
srpc/common-rpc.cpp
srpc/client-rpc.cpp
srpc/server-rpc.cpp
srpc/mux.cpp
srpc/client.cpp
rpcstream/rpcstream.cpp
)
# Generated protobuf sources
set(STARPC_PROTO_SOURCES
srpc/rpcproto.pb.cc
)
# Create the library
add_library(starpc ${STARPC_SOURCES} ${STARPC_PROTO_SOURCES})
target_include_directories(starpc PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/vendor
${PROTOBUF_DIR}/src
)
target_link_libraries(starpc PUBLIC
libprotobuf
Threads::Threads
)
# Echo example library (protobuf messages)
if(STARPC_BUILD_EXAMPLES OR STARPC_BUILD_TESTS)
set(ECHO_PROTO_SOURCES
echo/echo.pb.cc
rpcstream/rpcstream.pb.cc
)
add_library(echo_proto ${ECHO_PROTO_SOURCES})
target_include_directories(echo_proto PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/vendor
${PROTOBUF_DIR}/src
)
target_link_libraries(echo_proto PUBLIC libprotobuf)
endif()
# Tests
if(STARPC_BUILD_TESTS)
enable_testing()
# Echo E2E test executable
add_executable(echo_e2e_test
echo/echo_e2e_test.cpp
echo/echo_srpc.pb.cpp
)
target_link_libraries(echo_e2e_test PRIVATE
starpc
echo_proto
)
add_test(NAME echo_e2e_test COMMAND echo_e2e_test)
# Cross-language integration test server
add_executable(cpp-integration-server
integration/cross-language/cpp-server.cpp
echo/echo_srpc.pb.cpp
)
target_link_libraries(cpp-integration-server PRIVATE
starpc
echo_proto
)
# Cross-language integration test client
add_executable(cpp-integration-client
integration/cross-language/cpp-client.cpp
echo/echo_srpc.pb.cpp
)
target_link_libraries(cpp-integration-client PRIVATE
starpc
echo_proto
)
endif()
# Install targets
install(TARGETS starpc
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
)
install(DIRECTORY srpc/
DESTINATION include/srpc
FILES_MATCHING PATTERN "*.hpp"
)