Support contravariant subtyping for function type arguments
[hiphop-php.git] / CMake / HPHPSetup.cmake
blob0194d689abc900dc6659d69c889086bb61c8cb76
1 include(Options)
3 set_property(GLOBAL PROPERTY DEBUG_CONFIGURATIONS Debug RelWithDebInfo)
5 # Do this until cmake has a define for ARMv8
6 INCLUDE(CheckCXXSourceCompiles)
7 CHECK_CXX_SOURCE_COMPILES("
8 #ifndef __x86_64__
9 #error Not x64
10 #endif
11 int main() { return 0; }" IS_X64)
13 CHECK_CXX_SOURCE_COMPILES("
14 #ifndef __AARCH64EL__
15 #error Not ARMv8
16 #endif
17 int main() { return 0; }" IS_AARCH64)
19 CHECK_CXX_SOURCE_COMPILES("
20 #ifndef __powerpc64__
21 #error Not PPC64
22 #endif
23 int main() { return 0; }" IS_PPC64)
25 set(HHVM_WHOLE_ARCHIVE_LIBRARIES
26     hphp_runtime_static
27     hphp_runtime_ext
28    )
30 if (ENABLE_ZEND_COMPAT)
31   list(APPEND HHVM_WHOLE_ARCHIVE_LIBRARIES hphp_ext_zend_compat)
32 endif()
34 if (LINUX)
35   set(HHVM_WRAP_SYMS -Wl,--wrap=pthread_create -Wl,--wrap=pthread_exit -Wl,--wrap=pthread_join)
36 else ()
37   set(HHVM_WRAP_SYMS)
38 endif ()
40 set(HHVM_LINK_LIBRARIES
41   ${HHVM_WRAP_SYMS}
42   hphp_analysis
43   hphp_system
44   hphp_parser
45   hphp_zend
46   hphp_util
47   hphp_hhbbc
48   jit_sort
49   ppc64-asm
50   vixl neo)
52 if(ENABLE_FASTCGI)
53   LIST(APPEND HHVM_LINK_LIBRARIES hphp_thrift)
54   LIST(APPEND HHVM_LINK_LIBRARIES hphp_proxygen)
55   include(CheckCXXSourceCompiles)
56   CHECK_CXX_SOURCE_COMPILES("#include <pthread.h>
57   int main() {
58     return pthread_mutex_timedlock();
59   }" PTHREAD_TIMEDLOCK)
60   if (NOT PTHREAD_TIMEDLOCK)
61     add_definitions(-DTHRIFT_MUTEX_EMULATE_PTHREAD_TIMEDLOCK)
62   endif()
63 endif()
65 if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
66   set(CMAKE_BUILD_TYPE "Release")
67   message(STATUS "Build type not specified: cmake build type Release.")
68 endif()
70 if(HHVM_DYNAMIC_EXTENSION_DIR)
71   add_definitions(-DHHVM_DYNAMIC_EXTENSION_DIR="${HHVM_DYNAMIC_EXTENSION_DIR}")
72 else()
73   if(UNIX)
74     add_definitions(-DHHVM_DYNAMIC_EXTENSION_DIR="${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/hhvm/extensions")
75   endif()
76 endif()
78 # Look for the chrpath tool so we can warn if it's not there
79 SET(FOUND_CHRPATH OFF)
80 IF(UNIX AND NOT APPLE)
81     find_program(CHRPATH chrpath)
82     IF (NOT CHRPATH STREQUAL "CHRPATH-NOTFOUND")
83         SET(FOUND_CHRPATH ON)
84     endif()
85 ENDIF(UNIX AND NOT APPLE)
87 LIST(APPEND CMAKE_PREFIX_PATH "$ENV{CMAKE_PREFIX_PATH}")
89 if(APPLE)
90   if(EXISTS "/opt/local/var/macports/")
91     LIST (APPEND CMAKE_PREFIX_PATH "/opt/local")
92     LIST (APPEND CMAKE_LIBRARY_PATH "/opt/local/lib/x86_64")
93   endif()
94 endif()
96 include(HPHPCompiler)
97 include(HPHPFunctions)
98 include(HPHPFindLibs)
100 # Ubuntu 15.10 and 14.04 have been failing to include a dependency on jemalloc
101 # as a these linked flags force the dependency to be recorded
102 if (JEMALLOC_ENABLED AND LINUX)
103   LIST(APPEND HHVM_LINK_LIBRARIES -Wl,--no-as-needed ${JEMALLOC_LIB} -Wl,--as-needed)
104 endif()
106 if (HHVM_VERSION_OVERRIDE)
107   parse_version("HHVM_VERSION_" ${HHVM_VERSION_OVERRIDE})
108   add_definitions("-DHHVM_VERSION_OVERRIDE")
109   add_definitions("-DHHVM_VERSION_MAJOR=${HHVM_VERSION_MAJOR}")
110   add_definitions("-DHHVM_VERSION_MINOR=${HHVM_VERSION_MINOR}")
111   add_definitions("-DHHVM_VERSION_PATCH=${HHVM_VERSION_PATCH}")
112   add_definitions("-DHHVM_VERSION_SUFFIX=\"${HHVM_VERSION_SUFFIX}\"")
113 endif()
115 # Weak linking on Linux, Windows, and OS X all work somewhat differently. The following test
116 # works well on Linux and Windows, but fails for annoying reasons on OS X, and even works
117 # differently on different releases of OS X, cf. http://glandium.org/blog/?p=2764. Getting
118 # the test to work properly on OS X would require an APPLE check anyways, so just hardcode
119 # OS X as "we know weak linking works".
120 if(APPLE)
121   set(FOLLY_HAVE_WEAK_SYMBOLS 1)
122 else()
123   # check for weak symbols
124   CHECK_CXX_SOURCE_COMPILES("
125       extern \"C\" void configure_link_extern_weak_test() __attribute__((weak));
126       int main(int argc, char** argv) {
127           return configure_link_extern_weak_test == nullptr;
128       }
129   "
130       FOLLY_HAVE_WEAK_SYMBOLS
131   )
132 endif()
134 if(FOLLY_HAVE_WEAK_SYMBOLS)
135   add_definitions(-DFOLLY_HAVE_WEAK_SYMBOLS=1)
136 else()
137   add_definitions(-DFOLLY_HAVE_WEAK_SYMBOLS=0)
138 endif()
140 include(CheckFunctionExists)
141 CHECK_FUNCTION_EXISTS(memrchr FOLLY_HAVE_MEMRCHR)
142 CHECK_FUNCTION_EXISTS(preadv FOLLY_HAVE_PREADV)
143 CHECK_FUNCTION_EXISTS(pwritev FOLLY_HAVE_PWRITEV)
144 if (FOLLY_HAVE_MEMRCHR)
145   add_definitions("-DFOLLY_HAVE_MEMRCHR=1")
146 else()
147   add_definitions("-DFOLLY_HAVE_MEMRCHR=0")
148 endif()
149 if (FOLLY_HAVE_PREADV)
150   add_definitions("-DFOLLY_HAVE_PREADV=1")
151 else()
152   add_definitions("-DFOLLY_HAVE_PREADV=0")
153 endif()
154 if (FOLLY_HAVE_PWRITEV)
155   add_definitions("-DFOLLY_HAVE_PWRITEV=1")
156 else()
157   add_definitions("-DFOLLY_HAVE_PWRITEV=0")
158 endif()
159 add_definitions(-DFOLLY_HAVE_LIBGFLAGS=0)
161 add_definitions(-D_REENTRANT=1 -D_PTHREADS=1 -D__STDC_FORMAT_MACROS)
163 if (LINUX)
164   add_definitions(-D_GNU_SOURCE)
165 endif()
167 # cygwin headers are easily confused
168 if(CYGWIN)
169   add_definitions(-D_GLIBCXX_USE_C99=1)
170 endif()
172 if(MSVC OR CYGWIN OR MINGW)
173   add_definitions(-DGLOG_NO_ABBREVIATED_SEVERITIES)
174   add_definitions(-DWIN32_LEAN_AND_MEAN)
175 endif()
177 if(CMAKE_CONFIGURATION_TYPES)
178   if(NOT MSVC)
179     message(FATAL_ERROR "Adding the appropriate defines for multi-config targets using anything other than MSVC is not yet supported!")
180   endif()
181   if (MSVC_NO_ASSERT_IN_DEBUG)
182     set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /D RELEASE=1 /D NDEBUG")
183     set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /D RELEASE=1 /D NDEBUG")
184   else()
185     set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /D DEBUG")
186     set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /D DEBUG")
187   endif()
188   foreach(flag_var
189       CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
190       CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
191     set(${flag_var} "${${flag_var}} /D RELEASE=1 /D NDEBUG")
192   endforeach()
193 elseif(${CMAKE_BUILD_TYPE} MATCHES "Debug")
194   add_definitions(-DDEBUG)
195   message("Generating DEBUG build")
196 else()
197   add_definitions(-DRELEASE=1)
198   add_definitions(-DNDEBUG)
199   message("Generating Release build")
200 endif()
202 if(ALWAYS_ASSERT)
203   add_definitions(-DALWAYS_ASSERT=1)
204 endif()
206 if(APPLE OR FREEBSD OR CYGWIN OR MSVC OR MINGW)
207   add_definitions(-DSKIP_USER_CHANGE=1)
208 endif()
210 if(ENABLE_TRACE)
211     add_definitions(-DUSE_TRACE=1)
212 endif()
214 if(APPLE)
215   # We have to be a little more permissive in some cases.
216   add_definitions(-fpermissive)
218   # Skip deprecation warnings in OpenSSL.
219   add_definitions(-DMAC_OS_X_VERSION_MIN_REQUIRED=MAC_OS_X_VERSION_10_6)
221   # Just assume we have sched.h
222   add_definitions(-DFOLLY_HAVE_SCHED_H=1)
224   # Enable weak linking
225   add_definitions(-DMACOSX_DEPLOYMENT_TARGET=10.6)
226 endif()
228 if(ENABLE_FASTCGI)
229   add_definitions(-DENABLE_FASTCGI=1)
230 endif ()
232 if(DISABLE_HARDWARE_COUNTERS OR NOT LINUX)
233   add_definitions(-DNO_HARDWARE_COUNTERS=1)
234 endif ()
236 # enable the OSS options if we have any
237 add_definitions(-DHPHP_OSS=1)
239 # later versions of binutils don't play well without automake
240 add_definitions(-DPACKAGE=hhvm -DPACKAGE_VERSION=Release)
242 add_definitions(-DDEFAULT_CONFIG_DIR="${DEFAULT_CONFIG_DIR}")
244 add_definitions(-DHAVE_INTTYPES_H)
245 add_definitions(-DNO_LIB_GFLAGS)
246 include_directories(${TP_DIR})
247 if (THIRD_PARTY_INCLUDE_PATHS)
248   include_directories(${THIRD_PARTY_INCLUDE_PATHS})
249   add_definitions(${THIRD_PARTY_DEFINITIONS})
250   include_directories(${HPHP_HOME}/hphp)
251   include_directories(${HPHP_HOME})
252 endif()