2 # +----------------------------------------------------------------------+
4 # +----------------------------------------------------------------------+
5 # | Copyright (c) 2010 Facebook, Inc. (http://www.facebook.com) |
6 # | Copyright (c) 1997-2010 The PHP Group |
7 # +----------------------------------------------------------------------+
8 # | This source file is subject to version 3.01 of the PHP license, |
9 # | that is bundled with this package in the file LICENSE, and is |
10 # | available through the world-wide-web at the following url: |
11 # | http://www.php.net/license/3_01.txt |
12 # | If you did not receive a copy of the PHP license and are unable to |
13 # | obtain it through the world-wide-web, please send a note to |
14 # | license@php.net so we can mail you a copy immediately. |
15 # +----------------------------------------------------------------------+
18 add_definitions("-DHHVM")
20 if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/facebook")
21 # I'm sorry, but facebook's internal repo has the top level dir stored inside
22 # of hphp/, so we need to pull that one in first if it exists
23 CMAKE_MINIMUM_REQUIRED(VERSION 2.8.7 FATAL_ERROR)
24 get_filename_component(HPHP_HOME "${CMAKE_CURRENT_SOURCE_DIR}/.." ABSOLUTE)
25 set(ENABLE_EXTENSION_PGSQL OFF CACHE INTERNAL "" FORCE)
26 set(TP_DIR "${HPHP_HOME}/hphp/public_tld/third-party/")
27 set(TP_BUILD_DIR "${TP_DIR}")
28 set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/facebook/CMake"
29 "${CMAKE_CURRENT_SOURCE_DIR}/public_tld/CMake"
36 include(HHVMExtensionConfig)
37 add_custom_target(generated_systemlib)
38 # Before we do anything else, we'll configure the extensions,
39 # so that the defines take effect globally.
40 file(GLOB subdirs ${CMAKE_CURRENT_SOURCE_DIR}/runtime/ext/*)
41 foreach (dir ${subdirs})
42 if (IS_DIRECTORY ${dir})
43 if (EXISTS "${dir}/config.cmake")
44 set(HRE_CURRENT_EXT_PATH "${dir}")
45 include("${dir}/config.cmake")
49 HHVM_EXTENSION_RESOLVE_DEPENDENCIES()
51 if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/facebook")
57 include(HHVMGenerateConfig)
58 HHVM_GENERATE_CONFIG("${CMAKE_CURRENT_BINARY_DIR}/util/hphp-config.h")
60 # Link against this target if you `#include "hphp/runtime/base/foo.h"`; it
61 # brings in all the transitive dependencies (e.g. rust FFI, folly, boost)
63 # It's currently really the wrong way around: we should declare all the
64 # dependencies directly against this target without using `hphp_link()`, then
65 # `hphp_link()` should be changed to link against this target. Done like this
66 # for now to minimize risk while unblocking adding new dependencies.
68 # Even that's wrong: given improvements in CMake over the years, we don't need
69 # and should remove many of the HPHP/hphp/HHVM CMake macros, including
70 # hphp_link, and just use target_link_libraries throughout.
71 add_library(hhvm_base_headers INTERFACE)
72 hphp_link(hhvm_base_headers INTERFACE)
73 target_include_directories(hhvm_base_headers INTERFACE ${CMAKE_SOURCE_DIR})
77 FIND_PATH(LIBC_INCLUDE_PATH stdlib.h)
79 # Detect the architecture-specific include directory
80 IF("${CMAKE_LIBRARY_ARCHITECTURE}" STREQUAL "")
81 # For CentOS/Red Hat where they store it directly in /usr/include
82 SET(ARCH_INCLUDE_PATH "${LIBC_INCLUDE_PATH}/bits")
84 FIND_PATH(ARCH_INCLUDE_PATH ${CMAKE_LIBRARY_ARCHITECTURE})
85 SET(ARCH_INCLUDE_PATH "${ARCH_INCLUDE_PATH}/${CMAKE_LIBRARY_ARCHITECTURE}")
88 set_property(DIRECTORY
89 PROPERTY COTIRE_PREFIX_HEADER_IGNORE_PATH
90 "${LIBC_INCLUDE_PATH}/stdlib.h"
91 "${LIBC_INCLUDE_PATH}/string.h"
92 "${LIBC_INCLUDE_PATH}/ansidecl.h"
93 "${LIBC_INCLUDE_PATH}/bfd.h"
94 "${LIBC_INCLUDE_PATH}/libelf.h"
95 "${LIBC_INCLUDE_PATH}/elf.h"
96 "${LIBC_INCLUDE_PATH}/gelf.h"
97 "${LIBC_INCLUDE_PATH}/resolv.h"
98 "${ARCH_INCLUDE_PATH}"
99 "${CCLIENT_INCLUDE_PATH}"
100 "${LIBPNG_INCLUDE_DIRS}/png.h"
101 "${LDAP_INCLUDE_DIR}/ldap.h"
102 "${LIBSQLITE3_INCLUDE_DIR}/sqlite3ext.h"
103 "${CMAKE_SOURCE_DIR}"
104 "${CMAKE_BINARY_DIR}")
106 # XED headers need to be wrapped in extern "C"
108 if (LibXed_INCLUDE_DIR)
109 set_property(DIRECTORY
110 APPEND PROPERTY COTIRE_PREFIX_HEADER_IGNORE_PATH
111 "${LibXed_INCLUDE_DIR}")
113 set_property(DIRECTORY
114 APPEND PROPERTY COTIRE_PREFIX_HEADER_IGNORE_PATH
115 "${TP_DIR}/xed/xed/build/include/xed")
120 # Only thing to do directly in tools is install this one script. Tools also has
121 # its own Makefile, so just do it here instead of dealing with moving that all
123 install(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/tools/oss-repo-mode
124 RENAME hhvm-repo-mode
128 add_definitions("-DUSE_CMAKE")
132 if (NOT PCRE_LIBRARY)
136 add_subdirectory(tools/hfsort)
137 add_subdirectory(tools/version)
138 add_subdirectory(tools/tc-print)
140 add_subdirectory(compiler)
141 add_subdirectory(hack)
142 add_subdirectory(hhbbc)
143 add_subdirectory(neo)
145 add_subdirectory(runtime)
146 add_subdirectory(runtime/ext)
148 # The runtime/test binary require GTest and GMock to be installed globally
149 option(RUNTIME_TEST_BIN "Create the HHVM runtime/test binary" OFF)
150 if (RUNTIME_TEST_BIN)
151 add_subdirectory(runtime/test)
154 add_subdirectory(system)
155 add_subdirectory(util)
156 add_subdirectory(vixl)
157 add_subdirectory(zend)
159 add_subdirectory(hhvm)
161 option(TEST_BIN "Create the HHVM test binary" OFF)
163 add_subdirectory(test)
166 add_subdirectory(tools/gdb)
168 include(test/dso_test/dso_test.cmake)
171 add_subdirectory(tools/hphpize)