blob: 43b73e498bef36bff8084c0446d6fba348fa7591 [file] [log] [blame]
Pascal Bachd5f87e12014-12-12 15:59:17 +01001#
2# Licensed to the Apache Software Foundation (ASF) under one
3# or more contributor license agreements. See the NOTICE file
4# distributed with this work for additional information
5# regarding copyright ownership. The ASF licenses this file
6# to you under the Apache License, Version 2.0 (the
7# "License"); you may not use this file except in compliance
8# with the License. You may obtain a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing,
13# software distributed under the License is distributed on an
14# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15# KIND, either express or implied. See the License for the
16# specific language governing permissions and limitations
17# under the License.
18#
19
20
21include(CMakeDependentOption)
22
Nobuaki Sukegawaca939362015-11-14 00:23:40 +090023set(THRIFT_COMPILER "" CACHE FILEPATH "External Thrift compiler to use during build")
24
Pascal Bachd5f87e12014-12-12 15:59:17 +010025# Additional components
26option(BUILD_COMPILER "Build Thrift compiler" ON)
Nobuaki Sukegawaca939362015-11-14 00:23:40 +090027
28if(BUILD_COMPILER OR EXISTS ${THRIFT_COMPILER})
29 set(HAVE_COMPILER ON)
30endif()
31CMAKE_DEPENDENT_OPTION(BUILD_TESTING "Build with unit tests" ON "HAVE_COMPILER" OFF)
32CMAKE_DEPENDENT_OPTION(BUILD_EXAMPLES "Build examples" ON "HAVE_COMPILER" OFF)
33CMAKE_DEPENDENT_OPTION(BUILD_TUTORIALS "Build Thrift tutorials" ON "HAVE_COMPILER" OFF)
Marco Molteni7f477922015-04-15 20:46:48 +020034option(BUILD_LIBRARIES "Build Thrift libraries" ON)
Pascal Bachd5f87e12014-12-12 15:59:17 +010035
36# Libraries to build
37
38# Each language library can be enabled or disabled using the WITH_<LANG> flag.
39# By default CMake checks if the required dependencies for a language are present
40# and enables the library if all are found. This means the default is to build as
41# much as possible but leaving out libraries if their dependencies are not met.
42
James E. King, III82ae9572017-08-05 12:23:54 -040043option(WITH_BOOST_FUNCTIONAL "Use boost/tr1/functional.hpp even under C++11 or later" OFF)
44if (WITH_BOOST_FUNCTIONAL)
45 add_definitions(-DFORCE_BOOST_FUNCTIONAL)
46endif()
47
48option(WITH_BOOST_SMART_PTR "Use boost/smart_ptr.hpp even under C++11 or later" OFF)
49if (WITH_BOOST_SMART_PTR)
50 add_definitions(-DFORCE_BOOST_SMART_PTR)
51endif()
52
James E. King, III07f59972017-03-10 06:18:33 -050053option(WITH_BOOST_STATIC "Build with Boost static link library" OFF)
Nobuaki Sukegawa11da87e2016-09-10 14:02:19 +090054set(Boost_USE_STATIC_LIBS ${WITH_BOOST_STATIC})
55if (NOT WITH_BOOST_STATIC)
56 add_definitions(-DBOOST_ALL_DYN_LINK)
57 add_definitions(-DBOOST_TEST_DYN_LINK)
58endif()
59
Pascal Bachd5f87e12014-12-12 15:59:17 +010060# C++
Roger Meier3b99c972015-04-20 22:49:48 +020061option(WITH_CPP "Build C++ Thrift library" ON)
Nobuaki Sukegawa33744b02016-01-03 14:24:39 +090062if(WITH_CPP)
63 find_package(Boost 1.53 QUIET)
64 # NOTE: Currently the following options are C++ specific,
65 # but in future other libraries might reuse them.
66 # So they are not dependent on WITH_CPP but setting them without WITH_CPP currently
67 # has no effect.
68 if(ZLIB_LIBRARY)
69 # FindZLIB.cmake does not normalize path so we need to do it ourselves.
70 file(TO_CMAKE_PATH ${ZLIB_LIBRARY} ZLIB_LIBRARY)
71 endif()
72 find_package(ZLIB QUIET)
73 CMAKE_DEPENDENT_OPTION(WITH_ZLIB "Build with ZLIB support" ON
74 "ZLIB_FOUND" OFF)
75 find_package(Libevent QUIET)
76 CMAKE_DEPENDENT_OPTION(WITH_LIBEVENT "Build with libevent support" ON
77 "Libevent_FOUND" OFF)
78 find_package(Qt4 QUIET COMPONENTS QtCore QtNetwork)
79 CMAKE_DEPENDENT_OPTION(WITH_QT4 "Build with Qt4 support" ON
80 "QT4_FOUND" OFF)
81 find_package(Qt5 QUIET COMPONENTS Core Network)
82 CMAKE_DEPENDENT_OPTION(WITH_QT5 "Build with Qt5 support" ON
83 "Qt5_FOUND" OFF)
84 if(${WITH_QT4} AND ${WITH_QT5} AND ${CMAKE_MAJOR_VERSION} LESS 3)
85 # cmake < 3.0.0 causes conflict when building both Qt4 and Qt5
86 set(WITH_QT4 OFF)
87 endif()
88 find_package(OpenSSL QUIET)
89 CMAKE_DEPENDENT_OPTION(WITH_OPENSSL "Build with OpenSSL support" ON
90 "OPENSSL_FOUND" OFF)
cyyc109e012019-01-05 13:45:07 +080091 option(WITH_STDTHREADS "Build with C++ std::thread support" ON)
Nobuaki Sukegawa33744b02016-01-03 14:24:39 +090092endif()
Roger Meier3b99c972015-04-20 22:49:48 +020093CMAKE_DEPENDENT_OPTION(BUILD_CPP "Build C++ library" ON
94 "BUILD_LIBRARIES;WITH_CPP;Boost_FOUND" OFF)
James E. King, III71eba642017-01-25 20:41:06 -050095CMAKE_DEPENDENT_OPTION(WITH_PLUGIN "Build compiler plugin support" OFF
Nobuaki Sukegawa11da87e2016-09-10 14:02:19 +090096 "BUILD_COMPILER;BUILD_CPP" OFF)
Pascal Bachd5f87e12014-12-12 15:59:17 +010097
98# C GLib
Roger Meier3b99c972015-04-20 22:49:48 +020099option(WITH_C_GLIB "Build C (GLib) Thrift library" ON)
Nobuaki Sukegawa33744b02016-01-03 14:24:39 +0900100if(WITH_C_GLIB)
101 find_package(GLIB QUIET COMPONENTS gobject)
102endif()
Roger Meier3b99c972015-04-20 22:49:48 +0200103CMAKE_DEPENDENT_OPTION(BUILD_C_GLIB "Build C (GLib) library" ON
104 "BUILD_LIBRARIES;WITH_C_GLIB;GLIB_FOUND" OFF)
Nobuaki Sukegawa33744b02016-01-03 14:24:39 +0900105
Nobuaki Sukegawa11da87e2016-09-10 14:02:19 +0900106if(BUILD_CPP)
107 set(boost_components)
cyyc109e012019-01-05 13:45:07 +0800108 if(BUILD_TESTING)
Nobuaki Sukegawa11da87e2016-09-10 14:02:19 +0900109 list(APPEND boost_components system thread)
110 endif()
111 if(BUILD_TESTING)
112 list(APPEND boost_components unit_test_framework filesystem chrono program_options)
113 endif()
114 if(boost_components)
115 find_package(Boost 1.53 REQUIRED COMPONENTS ${boost_components})
116 endif()
117elseif(BUILD_C_GLIB AND BUILD_TESTING)
118 find_package(Boost 1.53 REQUIRED)
119endif()
120
Pascal Bachd5f87e12014-12-12 15:59:17 +0100121# Java
Roger Meier3b99c972015-04-20 22:49:48 +0200122option(WITH_JAVA "Build Java Thrift library" ON)
Nobuaki Sukegawaca939362015-11-14 00:23:40 +0900123if(ANDROID)
124 find_package(Gradle QUIET)
125 CMAKE_DEPENDENT_OPTION(BUILD_JAVA "Build Java library" ON
126 "BUILD_LIBRARIES;WITH_JAVA;GRADLE_FOUND" OFF)
127else()
Alex Volanis7004a612018-01-24 10:30:13 -0500128 find_package(Gradlew QUIET)
Pascal Bach665844e2015-12-01 11:02:14 +0100129 find_package(Java QUIET)
Nobuaki Sukegawaca939362015-11-14 00:23:40 +0900130 CMAKE_DEPENDENT_OPTION(BUILD_JAVA "Build Java library" ON
Alex Volanis7004a612018-01-24 10:30:13 -0500131 "BUILD_LIBRARIES;WITH_JAVA;JAVA_FOUND;GRADLEW_FOUND" OFF)
Nobuaki Sukegawaca939362015-11-14 00:23:40 +0900132endif()
Roger Meier26593812015-04-12 16:10:35 +0200133
134# Python
Roger Meier3b99c972015-04-20 22:49:48 +0200135option(WITH_PYTHON "Build Python Thrift library" ON)
136find_package(PythonInterp QUIET) # for Python executable
137find_package(PythonLibs QUIET) # for Python.h
138CMAKE_DEPENDENT_OPTION(BUILD_PYTHON "Build Python library" ON
Nobuaki Sukegawabf9fa902016-09-04 18:49:21 +0900139 "BUILD_LIBRARIES;WITH_PYTHON;PYTHONLIBS_FOUND" OFF)
Pascal Bachd5f87e12014-12-12 15:59:17 +0100140
Nobuaki Sukegawa27378fa2015-10-29 00:41:39 +0900141# Haskell
142option(WITH_HASKELL "Build Haskell Thrift library" ON)
143find_package(GHC QUIET)
144find_package(Cabal QUIET)
145CMAKE_DEPENDENT_OPTION(BUILD_HASKELL "Build GHC library" ON
146 "BUILD_LIBRARIES;WITH_HASKELL;GHC_FOUND;CABAL_FOUND" OFF)
147
Pascal Bachd5f87e12014-12-12 15:59:17 +0100148# Common library options
149option(WITH_SHARED_LIB "Build shared libraries" ON)
150option(WITH_STATIC_LIB "Build static libraries" ON)
Jim King9de9b1f2015-04-30 16:03:34 -0400151if (NOT WITH_SHARED_LIB AND NOT WITH_STATIC_LIB)
152 message(FATAL_ERROR "Cannot build with both shared and static outputs disabled!")
153endif()
Pascal Bachd5f87e12014-12-12 15:59:17 +0100154
155#NOTE: C++ compiler options are defined in the lib/cpp/CMakeLists.txt
156
157# Visual Studio only options
158if(MSVC)
Jim King9de9b1f2015-04-30 16:03:34 -0400159option(WITH_MT "Build using MT instead of MD (MSVC only)" OFF)
Pascal Bachd5f87e12014-12-12 15:59:17 +0100160endif(MSVC)
161
Roger Meier3b99c972015-04-20 22:49:48 +0200162macro(MESSAGE_DEP flag summary)
163if(NOT ${flag})
164 message(STATUS " - ${summary}")
165endif()
166endmacro(MESSAGE_DEP flag summary)
167
Pascal Bachd5f87e12014-12-12 15:59:17 +0100168macro(PRINT_CONFIG_SUMMARY)
169message(STATUS "----------------------------------------------------------")
Antonio Di Monaco796667b2016-01-04 23:05:19 +0100170message(STATUS "Thrift version: ${thrift_VERSION} (${thrift_VERSION_MAJOR}.${thrift_VERSION_MINOR}.${thrift_VERSION_PATCH})")
171message(STATUS "Thrift package version: ${PACKAGE_VERSION}")
Pascal Bachd5f87e12014-12-12 15:59:17 +0100172message(STATUS "Build configuration Summary")
Antonio Di Monaco796667b2016-01-04 23:05:19 +0100173message(STATUS " Build Thrift compiler: ${BUILD_COMPILER}")
Nobuaki Sukegawa11da87e2016-09-10 14:02:19 +0900174message(STATUS " Build compiler plugin support: ${WITH_PLUGIN}")
Antonio Di Monaco796667b2016-01-04 23:05:19 +0100175message(STATUS " Build with unit tests: ${BUILD_TESTING}")
Nobuaki Sukegawaca939362015-11-14 00:23:40 +0900176MESSAGE_DEP(HAVE_COMPILER "Disabled because BUILD_THRIFT=OFF and no valid THRIFT_COMPILER is given")
Antonio Di Monaco796667b2016-01-04 23:05:19 +0100177message(STATUS " Build examples: ${BUILD_EXAMPLES}")
Nobuaki Sukegawaca939362015-11-14 00:23:40 +0900178MESSAGE_DEP(HAVE_COMPILER "Disabled because BUILD_THRIFT=OFF and no valid THRIFT_COMPILER is given")
Antonio Di Monaco796667b2016-01-04 23:05:19 +0100179message(STATUS " Build Thrift libraries: ${BUILD_LIBRARIES}")
Pascal Bachd5f87e12014-12-12 15:59:17 +0100180message(STATUS " Language libraries:")
Antonio Di Monaco796667b2016-01-04 23:05:19 +0100181message(STATUS " Build C++ library: ${BUILD_CPP}")
James E. King, IIIc9877fb2016-11-14 10:20:52 -0500182MESSAGE_DEP(WITH_CPP "Disabled by WITH_CPP=OFF")
Roger Meier3b99c972015-04-20 22:49:48 +0200183MESSAGE_DEP(Boost_FOUND "Boost headers missing")
James E. King, III43e959b2017-04-04 13:04:29 -0400184message(STATUS " C++ Language Level: ${CXX_LANGUAGE_LEVEL}")
Antonio Di Monaco796667b2016-01-04 23:05:19 +0100185message(STATUS " Build C (GLib) library: ${BUILD_C_GLIB}")
James E. King, IIIc9877fb2016-11-14 10:20:52 -0500186MESSAGE_DEP(WITH_C_GLIB "Disabled by WITH_C_GLIB=OFF")
Roger Meier3b99c972015-04-20 22:49:48 +0200187MESSAGE_DEP(GLIB_FOUND "GLib missing")
Antonio Di Monaco796667b2016-01-04 23:05:19 +0100188message(STATUS " Build Java library: ${BUILD_JAVA}")
James E. King, IIIc9877fb2016-11-14 10:20:52 -0500189MESSAGE_DEP(WITH_JAVA "Disabled by WITH_JAVA=OFF")
Nobuaki Sukegawaca939362015-11-14 00:23:40 +0900190if(ANDROID)
191 MESSAGE_DEP(GRADLE_FOUND "Gradle missing")
192else()
193 MESSAGE_DEP(JAVA_FOUND "Java Runtime missing")
Alex Volanis7004a612018-01-24 10:30:13 -0500194 MESSAGE_DEP(GRADLEW_FOUND "Gradle Wrapper missing")
Nobuaki Sukegawaca939362015-11-14 00:23:40 +0900195endif()
Antonio Di Monaco796667b2016-01-04 23:05:19 +0100196message(STATUS " Build Python library: ${BUILD_PYTHON}")
James E. King, IIIc9877fb2016-11-14 10:20:52 -0500197MESSAGE_DEP(WITH_PYTHON "Disabled by WITH_PYTHON=OFF")
Roger Meier3b99c972015-04-20 22:49:48 +0200198MESSAGE_DEP(PYTHONLIBS_FOUND "Python libraries missing")
Antonio Di Monaco796667b2016-01-04 23:05:19 +0100199message(STATUS " Build Haskell library: ${BUILD_HASKELL}")
James E. King, IIIc9877fb2016-11-14 10:20:52 -0500200MESSAGE_DEP(WITH_HASKELL "Disabled by WITH_HASKELL=OFF")
Nobuaki Sukegawa27378fa2015-10-29 00:41:39 +0900201MESSAGE_DEP(GHC_FOUND "GHC missing")
202MESSAGE_DEP(CABAL_FOUND "Cabal missing")
Pascal Bachd5f87e12014-12-12 15:59:17 +0100203message(STATUS " Library features:")
Antonio Di Monaco796667b2016-01-04 23:05:19 +0100204message(STATUS " Build shared libraries: ${WITH_SHARED_LIB}")
205message(STATUS " Build static libraries: ${WITH_STATIC_LIB}")
James E. King, III07f59972017-03-10 06:18:33 -0500206message(STATUS " Build with Boost static link library: ${WITH_BOOST_STATIC}")
James E. King, III82ae9572017-08-05 12:23:54 -0400207message(STATUS " Build with boost/tr1/functional (forced) ${WITH_BOOST_FUNCTIONAL}")
208message(STATUS " Build with boost/smart_ptr (forced) ${WITH_BOOST_SMART_PTR}")
Antonio Di Monaco796667b2016-01-04 23:05:19 +0100209message(STATUS " Build with C++ std::thread support: ${WITH_STDTHREADS}")
James E. King, III07f59972017-03-10 06:18:33 -0500210message(STATUS " Build with libevent support: ${WITH_LIBEVENT}")
211message(STATUS " Build with OpenSSL support: ${WITH_OPENSSL}")
212message(STATUS " Build with Qt4 support: ${WITH_QT4}")
213message(STATUS " Build with Qt5 support: ${WITH_QT5}")
214message(STATUS " Build with ZLIB support: ${WITH_ZLIB}")
Pascal Bachd5f87e12014-12-12 15:59:17 +0100215message(STATUS "----------------------------------------------------------")
216endmacro(PRINT_CONFIG_SUMMARY)