-
Notifications
You must be signed in to change notification settings - Fork 610
/
CMakeLists.txt
168 lines (147 loc) · 5.13 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
# Copyright (c) Meta Platforms, Inc. and affiliates.
#
# 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.
cmake_minimum_required(VERSION 3.1.3 FATAL_ERROR)
# Package information.
if (NOT DEFINED PACKAGE_VERSION)
set(PACKAGE_VERSION 1.0.0)
endif ()
project(THRIFT VERSION ${PACKAGE_VERSION} LANGUAGES CXX)
if (NOT DEFINED CPACK_GENERATOR)
set(CPACK_GENERATOR RPM)
endif ()
set(CPACK_RPM_PACKAGE_PROVIDES thrift)
include(CPack)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(BIN_INSTALL_DIR bin CACHE STRING
"The subdirectory where the compiler binary should be installed")
set(INCLUDE_INSTALL_DIR include CACHE STRING
"The subdirectory where include files should be installed")
set(LIB_INSTALL_DIR lib CACHE STRING
"The subdirectory where libraries should be installed")
set(CMAKE_INSTALL_DIR lib/cmake/fbthrift CACHE STRING
"The subdirectory where CMake package config files should be installed")
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
# Add root dir so qualified includes work, e.g. #include "thrift/compiler/*.h".
include_directories(.)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
# Set directory of the Find$x.cmake files to properly include dependencies.
set(CMAKE_STD_MODULE_PATH ${CMAKE_MODULE_PATH})
set(CMAKE_MODULE_PATH
${CMAKE_CURRENT_SOURCE_DIR}/thrift/cmake
# For in-fbsource builds:
${CMAKE_CURRENT_SOURCE_DIR}/../opensource/fbcode_builder/CMake
# For shipit-transformed builds:
${CMAKE_CURRENT_SOURCE_DIR}/build/fbcode_builder/CMake
${CMAKE_MODULE_PATH})
# Find required dependencies.
find_package(Boost REQUIRED filesystem)
find_package(fmt CONFIG REQUIRED)
find_package(OpenSSL REQUIRED)
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
message(STATUS "setting C++ standard to C++${CMAKE_CXX_STANDARD}")
endif()
set(CMAKE_CXX_EXTENSIONS OFF)
# Explicitly enable coroutine support, since GCC does not enable it
# by default when targeting C++17.
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fcoroutines>)
endif()
# Enable modular builds.
option(THRIFT_COMPILER_ONLY "Build the Thrift compiler only" OFF)
option(THRIFT_LIB_ONLY "Build the Thrift libraries only" OFF)
if (THRIFT_COMPILER_ONLY OR THRIFT_LIB_ONLY)
set(build_all OFF)
else ()
set(build_all ON)
endif ()
set(
thriftpy AUTO
CACHE BOOL
"Install the thrift/lib/py library as an FB Python archive manifest"
)
set_property(CACHE thriftpy PROPERTY STRINGS ON OFF AUTO)
option(thriftpy3
"Include thrift-py3 library and extensions in the build, requires Cython"
OFF
)
# Find required dependencies for the Thrift compiler.
if (THRIFT_COMPILER_ONLY OR build_all)
include_directories(${OPENSSL_INCLUDE_DIR})
set(THRIFT1 thrift1)
set(THRIFTCPP2 thriftcpp2)
include(ThriftLibrary.cmake)
install(FILES ThriftLibrary.cmake DESTINATION ${INCLUDE_INSTALL_DIR}/thrift)
endif ()
# Find required dependencies for thrift/lib
if (THRIFT_LIB_ONLY OR build_all)
find_package(Gflags REQUIRED)
find_package(Glog REQUIRED)
find_package(folly CONFIG REQUIRED)
find_package(fizz CONFIG REQUIRED)
find_package(wangle CONFIG REQUIRED)
find_package(ZLIB REQUIRED)
find_package(Zstd REQUIRED)
find_package(Xxhash REQUIRED)
find_package(mvfst CONFIG REQUIRED)
# https://cmake.org/cmake/help/v3.9/module/FindThreads.html
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads)
include_directories(
${LIBGFLAGS_INCLUDE_DIR}
${GLOG_INCLUDE_DIRS}
${OPENSSL_INCLUDE_DIR}
${ZSTD_INCLUDE_DIRS}
${Xxhash_INCLUDE_DIR}
)
add_definitions("-DTHRIFT_HAVE_LIBSNAPPY=0")
if (THRIFT_LIB_ONLY)
find_program(THRIFT1 thrift1)
include(${THRIFT_COMPILER_INCLUDE}/thrift/ThriftLibrary.cmake)
endif ()
endif ()
if(thriftpy3)
find_package(PythonInterp 3.6 REQUIRED)
find_package(PythonLibs 3 REQUIRED)
find_package(Cython 0.28 REQUIRED)
endif()
# Add the test dependencies
# To run tests: `make test`
if(enable_tests)
find_package(PythonInterp REQUIRED)
find_package(GTest REQUIRED)
find_package(GMock REQUIRED)
include_directories(
${GTEST_INCLUDE_DIRS}
${GMOCK_INCLUDE_DIRS}
)
enable_testing()
endif(enable_tests)
# Create a generalized function for tests
function(thrift_gtest tname srcfile)
add_executable("${tname}-t" ${srcfile})
target_link_libraries(
"${tname}-t"
${ARGN}
${GTEST_BOTH_LIBRARIES}
${GMOCK_BOTH_LIBRARIES}
pthread
)
gtest_add_tests("${tname}-t" "" ${srcfile})
endfunction(thrift_gtest)
add_subdirectory(thrift)