forked from google/orbit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
189 lines (158 loc) · 7.23 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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# Copyright (c) 2020 The Orbit Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
cmake_minimum_required(VERSION 3.15)
project(Orbit C CXX)
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(STRICT_COMPILE_FLAGS -Werror=all
-Werror=float-conversion
-Werror=format=2
-Werror=inconsistent-missing-override
-Werror=old-style-cast
-Werror=unused-parameter
-Werror=unused-variable)
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(STRICT_COMPILE_FLAGS -Werror=all
-Werror=float-conversion
-Werror=format=2
-Werror=old-style-cast
-Werror=unused-parameter
-Werror=unused-variable)
endif()
include(cmake/strip.cmake)
include(cmake/tests.cmake)
enable_testing()
option(WITH_GUI "Setting this option will enable the Qt-based UI client." ON)
set(CRASHDUMP_SERVER "" CACHE STRING "Setting this option will enable uploading crash dumps to the url specified.")
set(CMAKE_CXX_STANDARD 17)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
conan_basic_setup(TARGETS)
if (NOT WIN32)
# Make all executables position independent on Linux
# Note that we need to have both. If we omit "-pie"
# option executables are built as ET_EXEC, if we
# omit set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# Ninja configuration stops working because for
# some reason in config stage it compile code for tests
# without -fPIC but tries to link them with -pie
string(APPEND CMAKE_EXE_LINKER_FLAGS " -pie")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif()
# This line is necessary to pick up the cmake-config-files
# generated by conan first.
list(PREPEND CMAKE_PREFIX_PATH "${CMAKE_BINARY_DIR}")
# This line is necessary to pick up the cmake-config-files
# generated by conan under cross compilation conditions.
list(PREPEND CMAKE_FIND_ROOT_PATH "${CMAKE_BINARY_DIR}")
# This line is necessary to pick up package-provided cmake-
# scripts in a cross compilation environment.
list(APPEND CMAKE_FIND_ROOT_PATH "${CONAN_CMAKE_MODULE_PATH}")
# Temporary workaround for GRPC and Protobuf as long as
# conan does not support library components yet.
# This ensures that cmake will use the library-provided
# cmake config files instead of the conan-generated ones.
list(PREPEND CMAKE_PREFIX_PATH "${CONAN_GRPC_ROOT}")
list(PREPEND CMAKE_PREFIX_PATH "${CONAN_PROTOBUF_ROOT}")
list(PREPEND CMAKE_FIND_ROOT_PATH "${CONAN_GRPC_ROOT}")
list(PREPEND CMAKE_FIND_ROOT_PATH "${CONAN_PROTOBUF_ROOT}")
if(NOT WIN32 AND WITH_GUI)
find_package(X11 REQUIRED)
endif()
find_package(OpenSSL CONFIG REQUIRED)
find_package(Threads REQUIRED)
find_package(cereal CONFIG REQUIRED)
find_package(xxHash REQUIRED)
find_package(multicore REQUIRED)
find_package(concurrentqueue REQUIRED)
find_package(gte REQUIRED)
find_package(Protobuf CONFIG REQUIRED)
find_package(gRPC CONFIG REQUIRED)
if(WITH_GUI)
find_package(freetype CONFIG REQUIRED)
find_package(freetype-gl CONFIG REQUIRED)
find_package(OpenGL REQUIRED)
find_package(glew CONFIG REQUIRED)
find_package(imgui CONFIG REQUIRED)
find_package(libssh2 CONFIG REQUIRED)
endif()
find_package(oqpi REQUIRED)
find_package(stb REQUIRED)
find_package(capstone CONFIG REQUIRED)
if(WITH_GUI)
find_package(freeglut CONFIG REQUIRED)
find_package(Qt5 CONFIG REQUIRED COMPONENTS Core Network Widgets)
find_package(qtpropertybrowser REQUIRED)
endif()
find_package(abseil CONFIG REQUIRED)
find_package(llvm_object CONFIG REQUIRED)
find_package(Outcome CONFIG REQUIRED)
if(NOT WIN32)
find_package(libunwindstack CONFIG REQUIRED)
endif()
find_package(asio CONFIG REQUIRED)
find_package(crashpad CONFIG REQUIRED)
find_package(GTest REQUIRED)
find_package(GMock REQUIRED)
find_package(Filesystem REQUIRED)
if(WIN32)
find_package(minhook REQUIRED)
find_package(peparse REQUIRED)
endif()
# Set preprocessor defines These are only necessary for windows, but we will
# define them on all platforms, to keep the builds similar as possible.
add_definitions(-DNOMINMAX)
add_definitions(-DUNICODE -D_UNICODE)
if(WIN32)
add_definitions(-DWIN32)
add_subdirectory(OrbitDll)
add_subdirectory(OrbitAsm)
else()
# Hack: Some parts on linux depend on headers in OrbitAsm, but OrbitAsm is not
# available for Windows.
add_library(OrbitAsm INTERFACE)
target_include_directories(OrbitAsm INTERFACE OrbitAsm/)
add_subdirectory(OrbitLinuxTracing)
add_subdirectory(OrbitService)
endif()
add_subdirectory(OrbitBase)
add_subdirectory(OrbitCore)
add_subdirectory(OrbitTest)
add_subdirectory(protos)
if(WITH_GUI)
add_subdirectory(OrbitGgp)
add_subdirectory(OrbitSsh)
add_subdirectory(OrbitSshQt)
add_subdirectory(OrbitGl)
add_subdirectory(OrbitQt)
endif()
if(WIN32)
# Startup Project
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT
"OrbitQt")
endif()
# Collecting third-party licenses
file(COPY third_party/concurrentqueue/LICENSE.md DESTINATION ${CMAKE_BINARY_DIR}/licenses/concurrentqueue/)
file(COPY third_party/minhook/LICENSE.txt DESTINATION ${CMAKE_BINARY_DIR}/licenses/minhook/)
file(COPY third_party/multicore/LICENSE DESTINATION ${CMAKE_BINARY_DIR}/licenses/multicore/)
file(COPY third_party/peparse/LICENSE.txt DESTINATION ${CMAKE_BINARY_DIR}/licenses/peparse/)
file(COPY third_party/xxHash-r42/LICENSE DESTINATION ${CMAKE_BINARY_DIR}/licenses/xxhash/)
file(COPY third_party/gte/LICENSE_1_0.txt DESTINATION ${CMAKE_BINARY_DIR}/licenses/gte/)
file(COPY third_party/oqpi/LICENSE DESTINATION ${CMAKE_BINARY_DIR}/licenses/oqpi/)
file(COPY third_party/Qt/LICENSE.LGPLv3 DESTINATION ${CMAKE_BINARY_DIR}/licenses/Qt/)
file(COPY third_party/Outcome/LICENCE DESTINATION ${CMAKE_BINARY_DIR}/licenses/Outcome/licenses/)
file(COPY third_party/capstone/LICENSE.TXT DESTINATION ${CMAKE_BINARY_DIR}/licenses/capstone/licenses/)
file(COPY third_party/LLVM/LICENSE.TXT DESTINATION ${CMAKE_BINARY_DIR}/licenses/LLVM/licenses/)
file(COPY third_party/libunwindstack/LICENSE DESTINATION ${CMAKE_BINARY_DIR}/licenses/libunwindstack/licenses/)
file(COPY third_party/lzma_sdk/LICENSE DESTINATION ${CMAKE_BINARY_DIR}/licenses/lzma_sdk/licenses/)
file(COPY third_party/freetype-gl/LICENSE DESTINATION ${CMAKE_BINARY_DIR}/licenses/freetype-gl/licenses/)
file(COPY third_party/fonts/VERA-COPYRIGHT DESTINATION ${CMAKE_BINARY_DIR}/licenses/fonts/)
file(COPY third_party/OpenSSL/LICENSE DESTINATION ${CMAKE_BINARY_DIR}/licenses/openssl/licenses/)
file(COPY third_party/qtpropertybrowser/LICENSE.txt DESTINATION ${CMAKE_BINARY_DIR}/licenses/qtpropertybrowser/licenses/)
file(COPY third_party/conan/LICENSE.md DESTINATION ${CMAKE_BINARY_DIR}/licenses/conan/licenses/)
file(COPY third_party/stb/LICENSE DESTINATION ${CMAKE_BINARY_DIR}/licenses/stb/licenses/)
file(REMOVE ${CMAKE_BINARY_DIR}/licenses/freetype/licenses/LICENSE.TXT)
file(REMOVE ${CMAKE_BINARY_DIR}/licenses/freetype/licenses/GPLv2.TXT)
include("cmake/collect_licenses.cmake")
GenerateThirdPartyLicenseFile("${CMAKE_BINARY_DIR}/NOTICE" "${CMAKE_BINARY_DIR}/licenses/")