Arquivos
hhvm/hphp/runtime/ext_hhvm/CMakeLists.txt
T
Sara Golemon fc37017a7e Allow building ext_zend_compat extensions
By default, zend source compatability remains disabled,
however you can now explicitly request compilation of the
infrastructure and the extensions it supports via:

  cmake -DENABLE_ZEND_COMPAT=ON .

Note that CMake caches -D defines between runs, so a later call
without ENABLE_ZEND_COMPAT will still retain the option enabled.
Either explicitly set it to OFF, or delete CMakeCache.txt if
switching between the two.
2013-12-07 08:43:32 -08:00

92 linhas
3.2 KiB
CMake

set(files)
set(CXX_SOURCES)
set(C_SOURCES)
set(CXX_HEADERS)
set(EXT_HHVM_ARCH "x64")
set(EXT_HHVM_OS "linux")
exec_program("uname -m" OUTPUT_VARIABLE UNAME_M)
if (UNAME_M STREQUAL "aarch64")
set(EXT_HHVM_ARCH "arm")
endif()
if (APPLE)
set(EXT_HHVM_OS "darwin")
endif()
macro(EXT_HHVM_FILE SOURCES HEADERS REL EHHVM_OS EHHVM_ARCH)
set(f_SRC "${HPHP_HOME}/hphp/runtime/${REL}")
set(f_OBJ "${HPHP_HOME}/hphp/runtime/CMakeFiles/hphp_runtime_static.dir/${REL}.o")
list(APPEND ${SOURCES} "${f_SRC}.ext_hhvm.cpp")
list(APPEND ${HEADERS} "${f_SRC}.ext_hhvm.h")
add_custom_command(OUTPUT "${f_SRC}.ext_hhvm.cpp" "${f_SRC}.ext_hhvm.h"
DEPENDS ${f_SRC} gen-ext-hhvm
COMMAND "${HPHP_HOME}/hphp/tools/bootstrap/gen-ext-hhvm.sh"
ARGS ${EHHVM_OS} ${EHHVM_ARCH} ${f_OBJ}
"${f_SRC}.ext_hhvm.cpp" "${f_SRC}.ext_hhvm.h"
WORKING_DIRECTORY "${HPHP_HOME}/hphp/tools/bootstrap"
COMMENT "Generating ext_hhvm wrapper for ${REL}")
endmacro()
macro(EXT_HHVM_DIR SOURCES HEADERS DIR)
string(LENGTH "${HPHP_HOME}/hphp/runtime/" HPHP_DIR_LEN)
auto_sources(files "*.cpp" "RECURSE" "${DIR}")
foreach (f ${files})
if (NOT ${f} MATCHES "(.ext_hhvm.cpp|/(old-)?tests?/)")
string(LENGTH ${f} f_LEN)
math(EXPR f_REL_LEN "${f_LEN} - ${HPHP_DIR_LEN}")
string(SUBSTRING ${f} ${HPHP_DIR_LEN} ${f_REL_LEN} f_REL)
EXT_HHVM_FILE(${SOURCES} ${HEADERS} ${f_REL} ${EXT_HHVM_OS} ${EXT_HHVM_ARCH})
endif()
endforeach()
endmacro()
# Generate ext_hhvm stubs for ext/*.cpp
EXT_HHVM_DIR(CXX_SOURCES CXX_HEADERS "${HPHP_HOME}/hphp/runtime/ext")
# ...and explicitly for builtin-functions.cpp
EXT_HHVM_FILE(CXX_SOURCES CXX_HEADERS "base/builtin-functions.cpp" ${EXT_HHVM_OS} ${EXT_HHVM_ARCH})
# Pick up relevant zend_ext_compat stubs
if (ZEND_COMPAT_BUILD_DIRS)
foreach (dir ${ZEND_COMPAT_BUILD_DIRS})
EXT_HHVM_DIR(CXX_SOURCES CXX_HEADERS ${dir})
endforeach()
list(APPEND CXX_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/ext_zend_compat.cpp")
endif()
#
## ext_hhvm_infotabs
#
set(INFOTABS_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/ext_hhvm_infotabs.h")
set(INFOTABS_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/ext_hhvm_infotabs.cpp")
auto_sources(HPHP_IDLS "*.idl.json" "RECURSE" "${HPHP_HOME}/hphp/system/idl")
ZEND_COMPAT_STRIP_IDLS(HPHP_IDLS ${ZEND_COMPAT_EXCLUDE_IDLS})
# Generate ext_hhvm_infotabs.h based on ext_hhvm files being generated
file(WRITE ${INFOTABS_HEADER} "")
foreach (header ${CXX_HEADERS})
file(APPEND ${INFOTABS_HEADER} "#include \"${header}\"\n")
endforeach()
# Generate ext_hhvm_infotabs.cpp
add_custom_command(OUTPUT ${INFOTABS_SOURCE}
DEPENDS ${CXX_HEADERS} gen-infotabs
COMMAND "${HPHP_HOME}/hphp/tools/bootstrap/gen-infotabs"
ARGS ${INFOTABS_SOURCE} ${HPHP_IDLS})
list(APPEND CXX_SOURCES ${INFOTABS_SOURCE})
#
## Actual library
#
ADD_LIBRARY(ext_hhvm_static STATIC ${CXX_SOURCES})
target_link_libraries(ext_hhvm_static hphp_runtime_static)
SET_TARGET_PROPERTIES(ext_hhvm_static PROPERTIES OUTPUT_NAME "ext_hhvm")
SET_TARGET_PROPERTIES(ext_hhvm_static PROPERTIES PREFIX "lib")
SET_TARGET_PROPERTIES(ext_hhvm_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)