1 # Functions for use when building extensions dynamically
3 # These functions also exist in CMake/EXTFunctions.cmake
4 # Their signatures should be kept consistent, though their behavior
5 # will differ slightly.
7 function(HHVM_LINK_LIBRARIES EXTNAME)
8 target_link_libraries(${EXTNAME} ${ARGN})
11 function(HHVM_ADD_INCLUDES EXTNAME)
12 include_directories(${ARGN})
16 function(HHVM_EXTENSION EXTNAME)
17 set(EXTENSION_NAME ${EXTNAME} CACHE INTERNAL "")
18 add_library(${EXTNAME} SHARED ${ARGN})
19 set_target_properties(${EXTNAME} PROPERTIES PREFIX "")
20 set_target_properties(${EXTNAME} PROPERTIES SUFFIX ".so")
22 get_target_property(LOC ${EXTNAME} LOCATION)
23 get_target_property(TY ${EXTNAME} TYPE)
24 # Don't install via target, because it triggers a re-link that doesn't
25 # run the POST_BUILD custom command that embeds the systemlib on Linux.
26 install(CODE "FILE(INSTALL DESTINATION \"\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/hhvm/extensions/${HHVM_VERSION_BRANCH}\" TYPE ${TY} FILES \"${LOC}\")")
29 function(embed_systemlibs TARGET DEST)
31 target_link_libraries(${TARGET} ${${TARGET}_SLIBS})
33 message(FATAL_ERROR "Shared extensions are not supported on Windows")
35 add_custom_command(TARGET ${TARGET} POST_BUILD
37 ARGS ${${TARGET}_SLIBS} ${DEST}
38 COMMENT "Embedding php in ${TARGET}")
40 endfunction(embed_systemlibs)
42 function(HHVM_SYSTEMLIB EXTNAME)
43 foreach (SLIB ${ARGN})
44 embed_systemlib_byname(${EXTNAME} ${SLIB})
46 embed_systemlibs(${EXTNAME} "${EXTNAME}.so")
49 function(HHVM_DEFINE EXTNAME)
50 add_definitions(${ARGN})