Skip to content
This repository was archived by the owner on Jul 31, 2023. It is now read-only.

Commit da71c62

Browse files
committed
Support install and find_package
Rewrites abseil and googletest to use targets and find_package Adds support for install target to opencensus
1 parent 9bfdd28 commit da71c62

File tree

8 files changed

+445
-177
lines changed

8 files changed

+445
-177
lines changed

CMakeLists.txt

Lines changed: 63 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,64 @@
1-
# Copyright 2018, OpenCensus Authors
2-
#
3-
# Licensed under the Apache License, Version 2.0 (the "License");
4-
# you may not use this file except in compliance with the License.
5-
# You may obtain a copy of the License at
6-
#
7-
# http://www.apache.org/licenses/LICENSE-2.0
8-
#
9-
# Unless required by applicable law or agreed to in writing, software
10-
# distributed under the License is distributed on an "AS IS" BASIS,
11-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12-
# See the License for the specific language governing permissions and
13-
# limitations under the License.
1+
# Copyright 2018, OpenCensus Authors
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
cmake_minimum_required(VERSION 3.5)
16+
17+
# Use ccache if it's present.
18+
find_program(CCACHE_PROGRAM ccache)
19+
if(CCACHE_PROGRAM)
20+
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
21+
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CCACHE_PROGRAM}")
22+
endif()
23+
24+
project(opencensus-cpp VERSION 0.3.0 LANGUAGES CXX)
25+
26+
set(CMAKE_CXX_STANDARD 11)
27+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
1428

15-
cmake_minimum_required(VERSION 3.5)
16-
17-
# Use ccache if it's present.
18-
find_program(CCACHE_PROGRAM ccache)
19-
if(CCACHE_PROGRAM)
20-
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
21-
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CCACHE_PROGRAM}")
22-
endif()
23-
24-
project(opencensus-cpp VERSION 0.3.0 LANGUAGES CXX)
25-
26-
set(CMAKE_CXX_STANDARD 11)
27-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
28-
29-
include(CTest) # Defines option BUILD_TESTING.
30-
enable_testing()
31-
32-
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
33-
include(OpenCensusDeps)
34-
35-
include(OpenCensusHelpers)
36-
37-
# OpenCensus code.
38-
add_subdirectory(opencensus)
39-
40-
# Example code only if testing is enabled.
41-
if(BUILD_TESTING)
42-
add_subdirectory(examples)
43-
endif()
29+
option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
30+
31+
IF(MSVC)
32+
add_definitions(-DNOMINMAX)
33+
ENDIF()
34+
35+
if(CMAKE_BUILD_TYPE STREQUAL "Release")
36+
option(INSTALL_HEADERS "Install header files" ON)
37+
else()
38+
option(INSTALL_HEADERS "Install header files" OFF)
39+
endif()
40+
41+
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
42+
43+
find_package(googletest REQUIRED)
44+
find_package(abseil REQUIRED)
45+
46+
include(CTest) # Defines option BUILD_TESTING.
47+
enable_testing()
48+
49+
include(OpenCensusHelpers)
50+
51+
# OpenCensus code.
52+
add_subdirectory(opencensus)
53+
54+
# Example code only if testing is enabled.
55+
if(BUILD_TESTING)
56+
add_subdirectory(examples)
57+
endif()
58+
59+
install(
60+
EXPORT opencensus-targets
61+
FILE opencensus-config.cmake
62+
NAMESPACE opencensus::
63+
DESTINATION share/opencensus
64+
)

cmake/Findabseil.cmake

Lines changed: 278 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,278 @@
1+
# Copyright 2018 The Cartographer Authors
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
cmake_minimum_required(VERSION 3.2)
16+
17+
if(NOT TARGET absl_base)
18+
set(prefix ${CMAKE_STATIC_LIBRARY_PREFIX})
19+
set(suffix ${CMAKE_STATIC_LIBRARY_SUFFIX})
20+
include(${CMAKE_ROOT}/Modules/ExternalProject.cmake)
21+
set(ABSEIL_PROJECT_NAME abseil)
22+
set(ABSEIL_PROJECT_SRC_DIR
23+
${CMAKE_CURRENT_BINARY_DIR}/${ABSEIL_PROJECT_NAME}/src/${ABSEIL_PROJECT_NAME})
24+
set(ABSEIL_PROJECT_BUILD_DIR
25+
${CMAKE_CURRENT_BINARY_DIR}/${ABSEIL_PROJECT_NAME}/src/${ABSEIL_PROJECT_NAME}-build)
26+
set(ABSEIL_INCLUDE_DIRS ${ABSEIL_PROJECT_SRC_DIR})
27+
28+
ExternalProject_Add(${ABSEIL_PROJECT_NAME}
29+
PREFIX ${ABSEIL_PROJECT_NAME}
30+
GIT_REPOSITORY https://github.com/abseil/abseil-cpp.git
31+
GIT_TAG 5441bbe1db5d0f2ca24b5b60166367b0966790af
32+
INSTALL_COMMAND ""
33+
BUILD_COMMAND ${CMAKE_COMMAND} --build "${ABSEIL_PROJECT_BUILD_DIR}"
34+
CMAKE_CACHE_ARGS "-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON;-DBUILD_TESTING:BOOL=OFF"
35+
BUILD_BYPRODUCTS "${ABSEIL_LIBRARY_PATH};${ABSEIL_DEPENDENT_LIBRARIES}"
36+
)
37+
38+
# absl_algorithm
39+
40+
add_library(absl_algorithm STATIC IMPORTED GLOBAL)
41+
set_target_properties(absl_algorithm
42+
PROPERTIES
43+
INTERFACE_INCLUDE_DIRECTORIES
44+
${ABSEIL_INCLUDE_DIRS}
45+
IMPORTED_LOCATION
46+
${ABSEIL_PROJECT_BUILD_DIR}/absl/algorithm/${prefix}absl_algorithm${suffix}
47+
)
48+
49+
# absl_base
50+
51+
add_library(absl_base STATIC IMPORTED GLOBAL)
52+
set_target_properties(absl_base
53+
PROPERTIES IMPORTED_LOCATION
54+
${ABSEIL_PROJECT_BUILD_DIR}/absl/base/${prefix}absl_base${suffix}
55+
INTERFACE_INCLUDE_DIRECTORIES
56+
${ABSEIL_PROJECT_SRC_DIR}
57+
)
58+
59+
set_property(TARGET absl_base
60+
PROPERTY INTERFACE_LINK_LIBRARIES
61+
${ABSEIL_PROJECT_BUILD_DIR}/absl/base/${prefix}absl_dynamic_annotations${suffix}
62+
${ABSEIL_PROJECT_BUILD_DIR}/absl/base/${prefix}absl_malloc_internal${suffix}
63+
${ABSEIL_PROJECT_BUILD_DIR}/absl/base/${prefix}absl_spinlock_wait${suffix}
64+
${ABSEIL_PROJECT_BUILD_DIR}/absl/base/${prefix}absl_throw_delegate${suffix}
65+
)
66+
67+
# absl_container
68+
69+
add_library(absl_container STATIC IMPORTED GLOBAL)
70+
set_target_properties(absl_container
71+
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
72+
${ABSEIL_INCLUDE_DIRS}
73+
IMPORTED_LOCATION
74+
${ABSEIL_PROJECT_BUILD_DIR}/absl/container/${prefix}absl_container${suffix}
75+
)
76+
set_property(TARGET absl_container
77+
PROPERTY INTERFACE_LINK_LIBRARIES
78+
${ABSEIL_PROJECT_BUILD_DIR}/absl/container/${prefix}test_instance_tracker_lib${suffix}
79+
)
80+
81+
# absl_debugging
82+
83+
add_library(absl_debugging STATIC IMPORTED GLOBAL)
84+
set_target_properties(absl_debugging
85+
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
86+
${ABSEIL_INCLUDE_DIRS}
87+
IMPORTED_LOCATION
88+
${ABSEIL_PROJECT_BUILD_DIR}/absl/debugging/${prefix}absl_debugging${suffix}
89+
)
90+
set_property(TARGET absl_debugging
91+
PROPERTY INTERFACE_LINK_LIBRARIES
92+
${ABSEIL_PROJECT_BUILD_DIR}/absl/debugging/${prefix}absl_symbolize${suffix}
93+
${ABSEIL_PROJECT_BUILD_DIR}/absl/debugging/${prefix}absl_examine_stack${suffix}
94+
${ABSEIL_PROJECT_BUILD_DIR}/absl/debugging/${prefix}absl_failure_signal_handler${suffix}
95+
${ABSEIL_PROJECT_BUILD_DIR}/absl/debugging/${prefix}absl_leak_check${suffix}
96+
${ABSEIL_PROJECT_BUILD_DIR}/absl/debugging/${prefix}absl_stack_consumption${suffix}
97+
${ABSEIL_PROJECT_BUILD_DIR}/absl/debugging/${prefix}absl_stacktrace${suffix}
98+
)
99+
100+
# absl_memory
101+
102+
add_library(absl_memory STATIC IMPORTED GLOBAL)
103+
set_target_properties(absl_memory
104+
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
105+
${ABSEIL_INCLUDE_DIRS}
106+
IMPORTED_LOCATION
107+
${ABSEIL_PROJECT_BUILD_DIR}/absl/memory/${prefix}absl_memory${suffix}
108+
)
109+
110+
# absl_meta
111+
112+
add_library(absl_meta STATIC IMPORTED GLOBAL)
113+
set_target_properties(absl_meta
114+
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
115+
${ABSEIL_INCLUDE_DIRS}
116+
IMPORTED_LOCATION
117+
${ABSEIL_PROJECT_BUILD_DIR}/absl/meta/${prefix}absl_meta${suffix}
118+
)
119+
120+
# absl_numeric
121+
122+
add_library(absl_numeric STATIC IMPORTED GLOBAL)
123+
set_target_properties(absl_numeric
124+
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
125+
${ABSEIL_INCLUDE_DIRS}
126+
IMPORTED_LOCATION
127+
${ABSEIL_PROJECT_BUILD_DIR}/absl/numeric/${prefix}absl_numeric${suffix}
128+
)
129+
set_property(TARGET absl_numeric
130+
PROPERTY INTERFACE_LINK_LIBRARIES
131+
${ABSEIL_PROJECT_BUILD_DIR}/absl/numeric/${prefix}absl_int128${suffix}
132+
)
133+
134+
# absl_strings
135+
136+
add_library(absl_strings STATIC IMPORTED GLOBAL)
137+
set_target_properties(absl_strings
138+
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
139+
${ABSEIL_INCLUDE_DIRS}
140+
IMPORTED_LOCATION
141+
${ABSEIL_PROJECT_BUILD_DIR}/absl/strings/${prefix}absl_strings${suffix}
142+
)
143+
set_property(TARGET absl_strings
144+
PROPERTY INTERFACE_LINK_LIBRARIES
145+
${ABSEIL_PROJECT_BUILD_DIR}/absl/strings/${prefix}str_format_internal${suffix}
146+
${ABSEIL_PROJECT_BUILD_DIR}/absl/strings/${prefix}str_format_extension_internal${suffix}
147+
${ABSEIL_PROJECT_BUILD_DIR}/absl/strings/${prefix}absl_str_format${suffix}
148+
)
149+
150+
# absl_synchronization
151+
152+
add_library(absl_synchronization STATIC IMPORTED GLOBAL)
153+
set_target_properties(absl_synchronization
154+
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
155+
${ABSEIL_INCLUDE_DIRS}
156+
IMPORTED_LOCATION
157+
${ABSEIL_PROJECT_BUILD_DIR}/absl/synchronization/${prefix}absl_synchronization${suffix}
158+
)
159+
160+
# absl_time
161+
162+
add_library(absl_time STATIC IMPORTED GLOBAL)
163+
set_target_properties(absl_time
164+
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
165+
${ABSEIL_INCLUDE_DIRS}
166+
IMPORTED_LOCATION
167+
${ABSEIL_PROJECT_BUILD_DIR}/absl/time/${prefix}absl_time${suffix}
168+
)
169+
170+
# absl_utility
171+
172+
add_library(absl_utility STATIC IMPORTED GLOBAL)
173+
set_target_properties(absl_utility
174+
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
175+
${ABSEIL_INCLUDE_DIRS}
176+
IMPORTED_LOCATION
177+
${ABSEIL_PROJECT_BUILD_DIR}/absl/utility/${prefix}absl_utility${suffix}
178+
)
179+
180+
# absl_span
181+
182+
add_library(absl_span STATIC IMPORTED GLOBAL)
183+
set_target_properties(absl_span
184+
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
185+
${ABSEIL_INCLUDE_DIRS}
186+
IMPORTED_LOCATION
187+
${ABSEIL_PROJECT_BUILD_DIR}/absl/types/${prefix}absl_span${suffix}
188+
)
189+
190+
# absl_optional
191+
192+
add_library(absl_optional STATIC IMPORTED GLOBAL)
193+
set_target_properties(absl_optional
194+
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
195+
${ABSEIL_INCLUDE_DIRS}
196+
IMPORTED_LOCATION
197+
${ABSEIL_PROJECT_BUILD_DIR}/absl/types/${prefix}absl_optional${suffix}
198+
)
199+
200+
# absl_variant
201+
202+
add_library(absl_variant STATIC IMPORTED GLOBAL)
203+
set_target_properties(absl_variant
204+
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
205+
${ABSEIL_INCLUDE_DIRS}
206+
IMPORTED_LOCATION
207+
${ABSEIL_PROJECT_BUILD_DIR}/absl/types/${prefix}absl_variant${suffix}
208+
)
209+
210+
211+
# missing: absl_hash "${ABSEIL_PROJECT_BUILD_DIR}/absl/hash/${prefix}absl_hash${suffix}"
212+
213+
# absl_types
214+
215+
#add_library(absl_types STATIC IMPORTED GLOBAL)
216+
#set_target_properties(absl_types
217+
# PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
218+
# ${ABSEIL_INCLUDE_DIRS}
219+
#)
220+
#set_target_properties(absl_types
221+
# PROPERTIES INTERFACE_LINK_LIBRRARIES
222+
# "${ABSEIL_PROJECT_BUILD_DIR}/absl/types/${prefix}absl_any${suffix}
223+
# ${ABSEIL_PROJECT_BUILD_DIR}/absl/types/${prefix}absl_bad_any_cast${suffix}
224+
# ${ABSEIL_PROJECT_BUILD_DIR}/absl/types/${prefix}absl_bad_optional_access${suffix}
225+
#
226+
#
227+
# "
228+
#)
229+
#add_dependencies(absl_types ${ABSEIL_PROJECT_NAME})
230+
#add_library(absl::types ALIAS absl_types)
231+
232+
target_link_libraries(absl_algorithm INTERFACE absl_base absl_meta)
233+
target_link_libraries(absl_container INTERFACE absl_algorithm absl_base absl_memory)
234+
target_link_libraries(absl_debugging INTERFACE absl_base)
235+
target_link_libraries(absl_memory INTERFACE absl_meta)
236+
target_link_libraries(absl_meta INTERFACE absl_base)
237+
target_link_libraries(absl_numeric INTERFACE absl_base)
238+
target_link_libraries(absl_strings INTERFACE absl_base absl_memory absl_meta absl_numeric)
239+
target_link_libraries(absl_synchronization INTERFACE absl_base absl_time absl_debugging)
240+
target_link_libraries(absl_time INTERFACE absl_base absl_numeric)
241+
target_link_libraries(absl_utility INTERFACE absl_base absl_meta)
242+
target_link_libraries(absl_span INTERFACE absl_base absl_utility absl_meta absl_algorithm absl_strings)
243+
target_link_libraries(absl_optional INTERFACE absl_utility absl_meta absl_algorithm absl_strings)
244+
target_link_libraries(absl_variant INTERFACE absl_utility absl_meta absl_algorithm absl_strings)
245+
246+
add_dependencies(absl_algorithm ${ABSEIL_PROJECT_NAME})
247+
add_dependencies(absl_base ${ABSEIL_PROJECT_NAME})
248+
add_dependencies(absl_container ${ABSEIL_PROJECT_NAME})
249+
add_dependencies(absl_debugging ${ABSEIL_PROJECT_NAME})
250+
add_dependencies(absl_memory ${ABSEIL_PROJECT_NAME})
251+
add_dependencies(absl_meta ${ABSEIL_PROJECT_NAME})
252+
add_dependencies(absl_numeric ${ABSEIL_PROJECT_NAME})
253+
add_dependencies(absl_strings ${ABSEIL_PROJECT_NAME})
254+
add_dependencies(absl_synchronization ${ABSEIL_PROJECT_NAME})
255+
add_dependencies(absl_time ${ABSEIL_PROJECT_NAME})
256+
add_dependencies(absl_utility ${ABSEIL_PROJECT_NAME})
257+
add_dependencies(absl_span ${ABSEIL_PROJECT_NAME})
258+
add_dependencies(absl_optional ${ABSEIL_PROJECT_NAME})
259+
add_dependencies(absl_variant ${ABSEIL_PROJECT_NAME})
260+
261+
add_library(absl::algorithm ALIAS absl_algorithm)
262+
add_library(absl::base ALIAS absl_base)
263+
add_library(absl::container ALIAS absl_container)
264+
add_library(absl::debugging ALIAS absl_debugging)
265+
add_library(absl::memory ALIAS absl_memory)
266+
add_library(absl::meta ALIAS absl_meta)
267+
add_library(absl::numeric ALIAS absl_numeric)
268+
add_library(absl::strings ALIAS absl_strings)
269+
add_library(absl::synchronization ALIAS absl_synchronization)
270+
add_library(absl::time ALIAS absl_time)
271+
add_library(absl::utility ALIAS absl_utility)
272+
add_library(absl::span ALIAS absl_span)
273+
add_library(absl::optional ALIAS absl_optional)
274+
add_library(absl::variant ALIAS absl_variant)
275+
276+
unset(prefix)
277+
unset(suffix)
278+
endif()

0 commit comments

Comments
 (0)