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 # +----------------------------------------------------------------------+
20 if ("$ENV{USE_HHVM}" STREQUAL "1")
24 ADD_DEFINITIONS("-DHHVM -DHHVM_BINARY=1 -DHHVM_PATH=\\\"${HPHP_HOME}/src/hhvm/hhvm\\\"")
25 set(RECURSIVE_SOURCE_SUBDIRS runtime/base runtime/eval runtime/ext runtime/ext_hhvm runtime/vm system/gen system/lib util)
27 if ("$ENV{USE_HPHPC}" STREQUAL "1")
28 message(FATAL_ERROR "Both USE_HHVM and USE_HPHPC are set, you may only select one")
33 ADD_DEFINITIONS("-DHHVM_PATH=\"\"")
34 set(RECURSIVE_SOURCE_SUBDIRS runtime/base runtime/eval runtime/ext runtime/vm system/gen system/lib util)
36 if (NOT "$ENV{USE_HPHPC}" STREQUAL "1")
37 message(FATAL_ERROR "You must select which version of HipHop to build by setting either USE_HHVM=1 or USE_HPHPC=1 in your environment")
42 foreach (dir ${RECURSIVE_SOURCE_SUBDIRS})
44 auto_sources(files "*.cpp" "RECURSE" "${CMAKE_CURRENT_SOURCE_DIR}/${dir}")
45 list(APPEND CXX_SOURCES ${files})
47 auto_sources(files "*.c" "RECURSE" "${CMAKE_CURRENT_SOURCE_DIR}/${dir}")
48 list(APPEND C_SOURCES ${files})
50 endforeach(dir ${RECURSIVE_SOURCE_SUBDIRS})
52 # Disable hardware counters off of Linux
54 add_definitions(-DNO_HARDWARE_COUNTERS)
55 list(REMOVE_ITEM CXX_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/runtime/base/hardware_counter.cpp)
58 # remove ext_hhvm and util/tests
59 foreach (file ${CXX_SOURCES})
60 if (${file} MATCHES "ext_hhvm")
61 list(REMOVE_ITEM CXX_SOURCES ${file})
63 if (${file} MATCHES "util/tests")
64 list(REMOVE_ITEM CXX_SOURCES ${file})
66 endforeach(file ${CXX_SOURCES})
68 # remove ext/sep for hhvm
70 foreach (file ${CXX_SOURCES})
71 if (${file} MATCHES "ext/sep")
72 list(REMOVE_ITEM CXX_SOURCES ${file})
74 endforeach(file ${CXX_SOURCES})
78 if (EXISTS "${hphp_SOURCE_DIR}/HPHP_EXCLUDE_FILES.txt")
79 FILE(READ ${hphp_SOURCE_DIR}/HPHP_EXCLUDE_FILES.txt HPHP_EXCLUDE_FILES)
80 STRING(REGEX REPLACE "[\n\r]" ";" HPHP_EXCLUDE_FILES "${HPHP_EXCLUDE_FILES}")
82 SET(HPHP_EXCLUDE_FILES)
85 foreach (t ${HPHP_EXCLUDE_FILES})
86 string(SUBSTRING ${t} 0 1 T_FIRST_CHAR)
87 if (${T_FIRST_CHAR} STREQUAL "D")
89 string(REGEX REPLACE "^[D]" "" SKIP_DIR "${t}")
90 file(TO_CMAKE_PATH "${hphp_SOURCE_DIR}/${SKIP_DIR}" SKIP_DIR)
91 string(LENGTH "${SKIP_DIR}" SKIP_DIR_LENGTH)
93 message(STATUS "Let's remove ${SKIP_DIR}")
95 foreach (file ${CXX_SOURCES})
96 string(LENGTH "${file}" FILE_LENGTH)
97 if (${FILE_LENGTH} GREATER ${SKIP_DIR_LENGTH})
98 string(SUBSTRING ${file} 0 ${SKIP_DIR_LENGTH} FILE_PATH)
99 if (${FILE_PATH} STREQUAL ${SKIP_DIR})
100 list(REMOVE_ITEM CXX_SOURCES ${file})
103 endforeach(file ${CXX_SOURCES})
105 elseif (${T_FIRST_CHAR} STREQUAL "#")
107 # doing nothing since this is a comment
110 list(FIND CXX_SOURCES "${hphp_SOURCE_DIR}/${t}" FOUND_T)
111 if (FOUND_T GREATER -1)
112 LIST(REMOVE_AT CXX_SOURCES ${FOUND_T})
115 endforeach(t ${HPHP_EXCLUDE_FILES})
117 #FLEX_TARGET(HphpScanner ${CMAKE_CURRENT_SOURCE_DIR}/runtime/eval/parser/hphp.x ${CMAKE_CURRENT_SOURCE_DIR}/runtime/eval/parser/lex.eval_.cpp COMPILE_FLAGS " -w -i -Peval_")
118 #BISON_TARGET(HphpParser ${CMAKE_CURRENT_SOURCE_DIR}/runtime/eval/parser/hphp.y ${CMAKE_CURRENT_SOURCE_DIR}/runtime/eval/parser/hphp.tab.cpp COMPILE_FLAGS " -v -d -p eval_")
119 #ADD_FLEX_BISON_DEPENDENCY(HphpScanner HphpParser)
121 #Â required to remove warning when a file is there twice
122 #list(REMOVE_ITEM CXX_SOURCES ${FLEX_HphpScanner_OUTPUTS} ${BISON_HphpParser_OUTPUTS})
123 #list(APPEND CXX_SOURCES ${FLEX_HphpScanner_OUTPUTS} ${BISON_HphpParser_OUTPUTS})
125 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin")
126 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin")
128 #add_library(sqlite3 STATIC "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libsqlite3/sqlite3.c")
130 #auto_sources(TIMELIB_SOURCES "*.c" "RECURSE" "${CMAKE_CURRENT_SOURCE_DIR}/third_party/timelib")
131 #add_library(timelib STATIC ${TIMELIB_SOURCES})
133 if (NOT SKIP_BUNDLED_XHP)
134 add_subdirectory(third_party/xhp/xhp)
137 add_subdirectory(third_party/libafdt)
138 add_subdirectory(third_party/libmbfl)
139 add_subdirectory(third_party/libsqlite3)
140 add_subdirectory(third_party/timelib)
141 add_subdirectory(third_party/lz4)
143 foreach (CXX_FILE ${CXX_SOURCES})
144 if(${CXX_FILE} MATCHES ".no.cpp$")
145 SET_SOURCE_FILES_PROPERTIES(
154 OUTPUT runtime/base/compiler_id.h
155 COMMAND bin/generate_compiler_id.sh
156 DEPENDS ${CXX_SOURCES} ${C_SOURCES}
157 WORKING_DIRECTORY ${HPHP_HOME}
158 COMMENT "Generating Compiler ID"
162 OUTPUT runtime/vm/repo_schema.h
163 COMMAND bin/generate_repo_schema.sh
164 DEPENDS ${CXX_SOURCES} ${C_SOURCES}
165 WORKING_DIRECTORY ${HPHP_HOME}
166 COMMENT "Generating Repo Schema ID"
169 ADD_LIBRARY(hphp_runtime_static STATIC runtime/vm/repo_schema.h runtime/base/compiler_id.h ${CXX_SOURCES} ${C_SOURCES})
170 #ADD_LIBRARY(hphp_runtime SHARED ${C_SOURCES} ${CXX_SOURCES})
171 SET_TARGET_PROPERTIES(hphp_runtime_static PROPERTIES OUTPUT_NAME "hphp_runtime")
172 SET_TARGET_PROPERTIES(hphp_runtime_static PROPERTIES PREFIX "lib")
173 #SET_TARGET_PROPERTIES(hphp_runtime PROPERTIES CLEAN_DIRECT_OUTPUT 1)
174 SET_TARGET_PROPERTIES(hphp_runtime_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
176 SET(CMAKE_CXX_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
178 hphp_link(hphp_runtime_static)
180 add_subdirectory(compiler)
183 add_subdirectory(runtime/ext_hhvm)
186 add_subdirectory(hphp)
188 add_subdirectory(test)