Updating submodules
[hiphop-php.git] / third-party / thrift / CMakeLists.txt
blob4ac6e016b6134c9eba095c9bb9cc7127074f4655
1 include(ExternalProject)
2 include(HPHPFunctions)
4 get_target_property(BOOST_INCLUDE_DIR boost INTERFACE_INCLUDE_DIRECTORIES)
5 get_target_property(BOOST_LIBRARIES boost INTERFACE_LINK_LIBRARIES)
6 list(GET BOOST_LIBRARIES 0 FIRST_LIB)
7 if("${FIRST_LIB}" MATCHES ".+/${CMAKE_STATIC_LIBRARY_PREFIX}boost_.+${CMAKE_STATIC_LIBRARY_SUFFIX}$")
8   set(Boost_USE_STATIC_LIBS ON)
9 else()
10   set(Boost_USE_STATIC_LIBS OFF)
11 endif()
12 get_filename_component(BOOST_LIBRARY_DIR "${FIRST_LIB}" DIRECTORY)
13 get_target_property(ZSTD_INCLUDE_DIR zstd INTERFACE_INCLUDE_DIRECTORIES)
14 get_target_property(ZSTD_LIBRARY zstd INTERFACE_LINK_LIBRARIES)
15 get_target_property(JEMALLOC_INCLUDE_DIR jemalloc INTERFACE_INCLUDE_DIRECTORIES)
17 find_package(FLEX REQUIRED)
18 # Thrift uses `%code`, which isn't in 2.x
19 find_package(BISON 3.0 REQUIRED)
22 ExternalProject_Add(
23   bundled_thrift
24   SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/
25   BUILD_ALWAYS ON
26   CMAKE_ARGS
27     "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}"
28     -DCMAKE_MODULE_PATH=${CMAKE_SOURCE_DIR}/CMake
29     -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
30     -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
32     -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
33     -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
34     -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
35     -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}
37     -DFLEX_EXECUTABLE=${FLEX_EXECUTABLE}
38     -DBISON_EXECUTABLE=${BISON_EXECUTABLE}
40     -DOPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR}
41     -DOPENSSL_CRYPTO_LIBRARY=${OPENSSL_CRYPTO_LIBRARY}
42     -DBoost_NO_SYSTEM_PATHS=ON
43     -DBoost_NO_BOOST_CMAKE=ON
44     -DBoost_USE_STATIC_LIBS=${Boost_USE_STATIC_LIBS}
45     -DBoost_INCLUDE_DIR=${BOOST_INCLUDE_DIR}
46     "-DBOOST_LIBRARYDIR=${BOOST_LIBRARY_DIR}"
47     "-DLIBGLOG_INCLUDE_DIR=${GLOG_INCLUDE_DIR}"
48     "-DLIBGLOG_LIBRARY=${GLOG_LIBRARY}"
49     "-DZSTD_INCLUDE_DIRS=${ZSTD_INCLUDE_DIR}"
50     "-DZSTD_LIBRARIES=${ZSTD_LIBRARY}"
52     "-Dfizz_DIR=${FIZZ_INSTALL_DIR}/lib/cmake/fizz"
53     "-Dfmt_DIR=${fmt_DIR}"
54     "-Dfolly_DIR=${FOLLY_INSTALL_DIR}/lib/cmake/folly"
55     "-Dwangle_DIR=${WANGLE_INSTALL_DIR}/lib/cmake/wangle"
57     "-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}"
58     "-DCMAKE_CXX_FLAGS=-I${JEMALLOC_INCLUDE_DIR} ${CMAKE_CXX_FLAGS}"
60 ExternalProject_Get_property(bundled_thrift INSTALL_DIR)
62 set(
63   THRIFT_DEPS
64   fizz
65   fmt
66   folly
67   proxygen
68   wangle
69   zstd
71 add_dependencies(bundled_thrift ${THRIFT_DEPS})
72 add_library(thrift INTERFACE)
73 add_dependencies(thrift bundled_thrift)
74 target_include_directories(thrift INTERFACE "${INSTALL_DIR}/include")
75 target_link_libraries(thrift INTERFACE ${THRIFT_DEPS} ${OPENSSL_LIBRARIES})
76 set(THRIFT_INSTALL_DIR "${INSTALL_DIR}" PARENT_SCOPE)
78 # ----- Export a single 'thrift' library target -----
80 # Usage: thrift_lib NAME [DEP1 [DEP2...]]
81 macro(thrift_lib NAME)
82   set(DEPENDENCIES)
83   foreach(DEP ${ARGN})
84     list(APPEND DEPENDENCIES "thrift_lib_${DEP}")
85   endforeach()
86   add_library("thrift_lib_${NAME}" STATIC IMPORTED)
87   set_target_properties(
88     "thrift_lib_${NAME}"
89     PROPERTIES
90     IMPORTED_LOCATION
91     "${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}${NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}"
92   )
94   if(DEPENDENCIES)
95     # On newer versions of CMake, we can use `target_link_libraries()`, but this isn't supported
96     # on `IMPORTED` targets in the oldest versions we currently support.
97     set_target_properties(
98       "thrift_lib_${NAME}"
99       PROPERTIES
100       INTERFACE_LINK_LIBRARIES
101       "${DEPENDENCIES}"
102     )
103   endif()
105   target_link_libraries(thrift INTERFACE "thrift_lib_${NAME}")
106 endmacro()
108 thrift_lib(concurrency)
109 thrift_lib(rpcmetadata)
110 thrift_lib(thrift-core)
111 thrift_lib(thriftmetadata)
112 thrift_lib(thriftannotation)
113 thrift_lib(thrifttype)
114 thrift_lib(thrifttyperep thriftannotation)
115 thrift_lib(thriftanyrep thriftannotation thrifttype)
117 thrift_lib(transport concurrency thrift-core rpcmetadata)
118 thrift_lib(async concurrency transport)
119 thrift_lib(thriftprotocol thrift-core)
120 thrift_lib(thriftfrozen2 thriftmetadata thriftprotocol)
121 thrift_lib(thriftcpp2 rpcmetadata thriftmetadata thriftannotation thriftanyrep thrifttyperep thriftfrozen2 thriftprotocol transport async)
123 # ----- Export the thrift compiler as a target -----
125 add_executable(thrift1 IMPORTED GLOBAL)
126 add_dependencies(thrift1 INTERFACE bundled_thrift)
127 set_target_properties(
128   thrift1
129   PROPERTIES
130   IMPORTED_LOCATION "${INSTALL_DIR}/bin/thrift1${CMAKE_EXECUTABLE_SUFFIX}"