blob: e8479bc73ef96cc9556b81a919688d40e59c1d7a [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
James E. King, III07f59972017-03-10 06:18:33 -050020# Uncomment this to show some basic cmake variables about platforms
21# include (NewPlatformDebug)
Pascal Bachd5f87e12014-12-12 15:59:17 +010022
23# Visual Studio specific options
24if(MSVC)
25 #For visual studio the library naming is as following:
26 # Dynamic libraries:
Jim King9de9b1f2015-04-30 16:03:34 -040027 # - thrift.dll for release library
Pascal Bachd5f87e12014-12-12 15:59:17 +010028 # - thriftd.dll for debug library
29 #
30 # Static libraries:
31 # - thriftmd.lib for /MD release build
32 # - thriftmt.lib for /MT release build
33 #
34 # - thriftmdd.lib for /MD debug build
35 # - thriftmtd.lib for /MT debug build
36 #
37 # the same holds for other libraries like libthriftz etc.
38
39 # For Debug build types, append a "d" to the library names.
40 set(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "Set debug library postfix" FORCE)
41 set(CMAKE_RELEASE_POSTFIX "" CACHE STRING "Set release library postfix" FORCE)
Jim King94d4f3e2016-11-10 16:31:28 -050042 set(CMAKE_RELWITHDEBINFO_POSTFIX "" CACHE STRING "Set release library postfix" FORCE)
Pascal Bachd5f87e12014-12-12 15:59:17 +010043
Pascal Bachd5f87e12014-12-12 15:59:17 +010044 # Build using /MT option instead of /MD if the WITH_MT options is set
45 if(WITH_MT)
46 set(CompilerFlags
47 CMAKE_CXX_FLAGS
48 CMAKE_CXX_FLAGS_DEBUG
49 CMAKE_CXX_FLAGS_RELEASE
Jim King94d4f3e2016-11-10 16:31:28 -050050 CMAKE_CXX_FLAGS_RELWITHDEBINFO
Pascal Bachd5f87e12014-12-12 15:59:17 +010051 CMAKE_C_FLAGS
52 CMAKE_C_FLAGS_DEBUG
53 CMAKE_C_FLAGS_RELEASE
Jim King94d4f3e2016-11-10 16:31:28 -050054 CMAKE_C_FLAGS_RELWITHDEBINFO
Pascal Bachd5f87e12014-12-12 15:59:17 +010055 )
56 foreach(CompilerFlag ${CompilerFlags})
57 string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
58 endforeach()
59 set(STATIC_POSTFIX "mt" CACHE STRING "Set static library postfix" FORCE)
60 else(WITH_MT)
61 set(STATIC_POSTFIX "md" CACHE STRING "Set static library postfix" FORCE)
62 endif(WITH_MT)
Jim King1673adf2015-04-13 12:25:35 -040063
Jim King9de9b1f2015-04-30 16:03:34 -040064 # Disable Windows.h definition of macros for min and max
65 add_definitions("-DNOMINMAX")
66
67 # Disable boost auto linking pragmas - cmake includes the right files
68 add_definitions("-DBOOST_ALL_NO_LIB")
69
70 # Windows build does not know how to make a shared library yet
71 # as there are no __declspec(dllexport) or exports files in the project.
72 if (WITH_SHARED_LIB)
Roger Meier86fded22015-05-15 12:01:38 +020073 message (FATAL_ERROR "Windows build does not support shared library output yet, please set -DWITH_SHARED_LIB=off")
Jim King9de9b1f2015-04-30 16:03:34 -040074 endif()
75
James E. King, III7edc8fa2017-01-20 10:11:41 -050076 add_definitions("/MP") # parallel build
77 add_definitions("/W3") # warning level 3
78
79 # VS2010 does not provide inttypes which we need for "PRId64" used in many places
80 find_package(Inttypes)
81 if (Inttypes_FOUND)
82 include_directories(${INTTYPES_INCLUDE_DIRS})
83 # OpenSSL conflicts with the definition of PRId64 unless it is defined first
84 add_definitions("/FIinttypes.h")
85 endif ()
Jim King1673adf2015-04-13 12:25:35 -040086elseif(UNIX)
Roger Meier446a3192015-05-09 23:40:54 +020087 find_program( MEMORYCHECK_COMMAND valgrind )
88 set( MEMORYCHECK_COMMAND_OPTIONS "--gen-suppressions=all --leak-check=full" )
89 set( MEMORYCHECK_SUPPRESSIONS_FILE "${PROJECT_SOURCE_DIR}/test/valgrind.suppress" )
Jim King1673adf2015-04-13 12:25:35 -040090endif()
Pascal Bachd5f87e12014-12-12 15:59:17 +010091
James E. King, III7edc8fa2017-01-20 10:11:41 -050092add_definitions("-D__STDC_FORMAT_MACROS")
93
Roger Meiera6b66332015-05-15 15:21:50 +020094# WITH_*THREADS selects which threading library to use
95if(WITH_BOOSTTHREADS)
96 add_definitions("-DUSE_BOOST_THREAD=1")
97elseif(WITH_STDTHREADS)
98 add_definitions("-DUSE_STD_THREAD=1")
99endif()
100
James E. King, III07f59972017-03-10 06:18:33 -0500101# GCC and Clang: use C++11
Marco Molteni83494252015-04-16 13:50:20 +0200102if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
James E. King, IIIbf9b6972017-03-22 15:07:23 -0400103 if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "4.6.4")
James E. King, III07f59972017-03-10 06:18:33 -0500104 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
Marco Molteni83494252015-04-16 13:50:20 +0200105 endif()
James E. King, III07f59972017-03-10 06:18:33 -0500106 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wall -Wextra -pedantic")
Pascal Bachd5f87e12014-12-12 15:59:17 +0100107endif()
James E. King, IIIc9877fb2016-11-14 10:20:52 -0500108
James E. King, III71eba642017-01-25 20:41:06 -0500109# If gcc older than 4.8 is detected and plugin support was requested, fail fast
James E. King, IIIc9877fb2016-11-14 10:20:52 -0500110if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8" AND WITH_PLUGIN)
James E. King, III71eba642017-01-25 20:41:06 -0500111 message(SEND_ERROR "Thrift compiler plug-in support is not possible with older gcc ( < 4.8 ) compiler")
James E. King, IIIc9877fb2016-11-14 10:20:52 -0500112endif()
113