IR translation for IncStat
[hiphop-php.git] / src / CMakeLists.txt
blob8ba6074113da1f17deb8d38f69f5f2f3a2a8ec11
2 #   +----------------------------------------------------------------------+
3 #   | HipHop for PHP                                                       |
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 include(HPHPSetup)
20 if ("$ENV{USE_HHVM}" STREQUAL "1")
21         # HHVM Build
22         SET(USE_HHVM TRUE)
23         SET(ENV{HHVM} 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")
29         endif()
30 else()
31         # HPHPc Build
32         SET(USE_HHVM FALSE)
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")
38         endif()
39 endif()
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
53 if(NOT LINUX)
54         add_definitions(-DNO_HARDWARE_COUNTERS)
55         list(REMOVE_ITEM CXX_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/runtime/base/hardware_counter.cpp)
56 endif()
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})
62         endif()
63         if (${file} MATCHES "util/tests")
64                 list(REMOVE_ITEM CXX_SOURCES ${file})
65         endif()
66 endforeach(file ${CXX_SOURCES})
68 # remove ext/sep for hhvm
69 if (USE_HHVM)
70         foreach (file ${CXX_SOURCES})
71                 if (${file} MATCHES "ext/sep")
72                         list(REMOVE_ITEM CXX_SOURCES ${file})
73                 endif()
74         endforeach(file ${CXX_SOURCES})
75 endif(USE_HHVM)
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}")
81 else ()
82         SET(HPHP_EXCLUDE_FILES)
83 endif ()
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)
92                 
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})
101                                 endif ()
102                         endif ()
103                 endforeach(file ${CXX_SOURCES})
105         elseif (${T_FIRST_CHAR} STREQUAL "#")
107                 # doing nothing since this is a comment
109         else ()
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})
113                 endif()
114         endif ()
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)
135 endif()
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(
146                         ${CXX_FILE}
147                         PROPERTIES
148                         COMPILE_FLAGS -O0
149                 )
150         endif()
151 endforeach()
153 add_custom_command(
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"
159   VERBATIM)
161 add_custom_command(
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"
167   VERBATIM)
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)
182 if (USE_HHVM)
183         add_subdirectory(runtime/ext_hhvm)
184 endif(USE_HHVM)
186 add_subdirectory(hphp)
188 add_subdirectory(test)