forked from HewlettPackard/c-spiffe
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
158 lines (132 loc) · 5.49 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
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
151
152
153
154
155
156
157
158
# (C) Copyright 2020-2021 Hewlett Packard Enterprise Development LP
#
#
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
#
#
# http://www.apache.org/licenses/LICENSE-2.0
#
#
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
# Minimum CMake required
cmake_minimum_required(VERSION 3.13)
set(TARGET_NAME "c-spiffe")
set(C_SPIFFE_NAME "c-spiffe")
project(${TARGET_NAME} VERSION 0.0.1)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
set(CMAKE_CXX_STANDARD 14)
set(protobuf_MODULE_COMPATIBLE TRUE)
find_package(Protobuf 3.13.0 REQUIRED)
find_package(gRPC 1.34.0 REQUIRED)
message(STATUS "Using protobuf ${Protobuf_VERSION}")
set(_PROTOBUF_LIBPROTOBUF protobuf::libprotobuf)
set(_REFLECTION gRPC::grpc++_reflection)
if(CMAKE_CROSSCOMPILING)
find_program(_PROTOBUF_PROTOC protoc)
else()
set(_PROTOBUF_PROTOC $<TARGET_FILE:protobuf::protoc>)
endif()
# Find gRPC installation
# Looks for gRPCConfig.cmake file installed by gRPC's cmake installation.
find_package(gRPC CONFIG REQUIRED)
message(STATUS "Using gRPC ${gRPC_VERSION}")
set(_GRPC_GRPCPP gRPC::grpc++)
if(CMAKE_CROSSCOMPILING)
find_program(_GRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin)
else()
set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:gRPC::grpc_cpp_plugin>)
endif()
# Enable Coverage Tests
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage -g -O0")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage -g -O0")
# Add folders for headers
include_directories(${PROJECT_SOURCE_DIR}/include)
# Introduce variables:
# - CMAKE_INSTALL_LIBDIR
# - CMAKE_INSTALL_BINDIR
# - CMAKE_INSTALL_INCLUDEDIR
include(GNUInstallDirs)
# Set modules list
set(modules logger bundle internal spiffeid svid workload spiffetls federation examples)
# Add projects
foreach(module ${modules})
add_subdirectory(${module})
endforeach()
# Enable tests
option(ENABLE_TESTS "Enable unit testing" OFF)
if (ENABLE_TESTS)
find_package(Check REQUIRED)
find_package(GTest REQUIRED)
enable_testing()
add_subdirectory(${PROJECT_SOURCE_DIR}/logger/tests)
add_subdirectory(${PROJECT_SOURCE_DIR}/spiffeid/tests)
add_subdirectory(${PROJECT_SOURCE_DIR}/internal/cryptoutil/tests)
add_subdirectory(${PROJECT_SOURCE_DIR}/internal/jwtutil/tests)
add_subdirectory(${PROJECT_SOURCE_DIR}/internal/pemutil/tests)
add_subdirectory(${PROJECT_SOURCE_DIR}/internal/x509util/tests)
add_subdirectory(${PROJECT_SOURCE_DIR}/bundle/x509bundle/tests)
add_subdirectory(${PROJECT_SOURCE_DIR}/bundle/jwtbundle/tests)
add_subdirectory(${PROJECT_SOURCE_DIR}/bundle/spiffebundle/tests)
add_subdirectory(${PROJECT_SOURCE_DIR}/svid/x509svid/tests)
add_subdirectory(${PROJECT_SOURCE_DIR}/svid/jwtsvid/tests)
add_subdirectory(${PROJECT_SOURCE_DIR}/workload/tests)
add_subdirectory(${PROJECT_SOURCE_DIR}/spiffetls/tests)
add_subdirectory(${PROJECT_SOURCE_DIR}/spiffetls/tlsconfig/tests)
add_subdirectory(${PROJECT_SOURCE_DIR}/federation/tests)
# Add build target to generate Coverage Test Report to all compiled object files
find_program(GCOV gcov)
find_program(LCOV lcov)
find_program(GENHTML genhtml)
if(NOT GCOV)
message(FATAL_ERROR "gcov not found!")
endif()
if(NOT LCOV)
message(FATAL_ERROR "lcov not found!")
endif()
if(NOT GENHTML)
message(FATAL_ERROR "genhtml not found!")
endif()
add_custom_target(gcov
COMMAND mkdir -p Coverage
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Testing
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
add_custom_command(TARGET gcov POST_BUILD
COMMAND find .. -type f -name check_*.c.o -exec ${GCOV} {} "\;"
COMMAND echo "Command gcov - Coverage reports generated."
COMMAND echo "You can find them on ${CMAKE_BINARY_DIR}/Coverage"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/Coverage
COMMENT "Command gcov - Coverage Reports Generated"
)
add_custom_target(lcov
COMMAND mkdir -p Coverage/Reports
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Testing
COMMAND echo "Command lcov - Coverage reports generated."
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
add_custom_command(TARGET lcov POST_BUILD
COMMAND find .. -type f -name check_*.gcda -exec rm -r {} "\;"
COMMAND find .. -type f -name check_*.gcno -exec rm -r {} "\;"
COMMAND find .. -type f -name *pb.cc.gcda -exec rm -r {} "\;"
COMMAND find .. -type f -name *pb.cc.gcno -exec rm -r {} "\;"
COMMAND ${LCOV} --directory .. --capture -o lcov.info
COMMAND ${LCOV} --remove lcov.info -o lcov.info '/usr/*' '*/build/workload/*' '*/include/*' '*stb_ds*' '*/resources/*' '*picohttpparser*'
COMMAND echo "lcov.info generated."
COMMAND ${GENHTML} lcov.info --output-directory ${CMAKE_BINARY_DIR}/Coverage/Reports
COMMAND echo "Command lcov - Coverage reports generated."
COMMAND echo "You can find them on ${CMAKE_BINARY_DIR}/Coverage/Reports"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/Coverage
COMMENT "Command lcov - Coverage Reports Generated"
)
# Add 'Coverage' folder into clean target
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES Coverage)
endif(ENABLE_TESTS)