|
| 1 | +CMAKE_MINIMUM_REQUIRED(VERSION 3.0) |
| 2 | + |
| 3 | +PROJECT(phpcpp) |
| 4 | + |
| 5 | +# Use CMake File with following options |
| 6 | +# PHPCPP_COMPILE_TS Set flag if PHP was compiled with thread safe |
| 7 | +# PHPCPP_MSVCRT_STATIC Set flag if you want to compile the MSVC runtime as a static library |
| 8 | +# PHPCPP_ARCH Set to "x86_64" if architecture and PHP was compiled under x64 or "x86" for 32 bit |
| 9 | +# PHPCPP_PHP_PATH The path to PHP sources |
| 10 | + |
| 11 | +LIST(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) |
| 12 | + |
| 13 | +IF(CMAKE_BUILD_TYPE MATCHES DEBUG) |
| 14 | + ADD_DEFINITIONS(-DZEND_DEBUG=1) |
| 15 | +ELSE() |
| 16 | + ADD_DEFINITIONS(-DZEND_DEBUG=0) |
| 17 | +ENDIF() |
| 18 | + |
| 19 | +IF (PHPCPP_COMPILE_TS) |
| 20 | + ADD_DEFINITIONS(-DZTS) |
| 21 | +ENDIF() |
| 22 | + |
| 23 | +ADD_DEFINITIONS(-D_MSC_STDINT_H_) |
| 24 | +ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS) |
| 25 | +ADD_DEFINITIONS(-DBUILDING_PHPCPP) |
| 26 | +ADD_DEFINITIONS(-DZEND_WIN32_KEEP_INLINE) |
| 27 | + |
| 28 | +IF (MSVC) |
| 29 | + # Should compile MSVC runtime static or dll |
| 30 | + IF (PHPCPP_MSVCRT_STATIC) |
| 31 | + MESSAGE("Compile PHPCPP with static runtime") |
| 32 | + |
| 33 | + SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") |
| 34 | + SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") |
| 35 | + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT") |
| 36 | + |
| 37 | + ELSE() |
| 38 | + MESSAGE("Compile PHPCPP with dynamic runtime") |
| 39 | + |
| 40 | + SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD") |
| 41 | + SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd") |
| 42 | + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MD") |
| 43 | + |
| 44 | + ENDIF() |
| 45 | + |
| 46 | + IF (${PHPCPP_ARCH} STREQUAL "x86_64") |
| 47 | + ADD_DEFINITIONS(-DPHP_WIN32 -DZEND_WIN32) |
| 48 | + ELSE() |
| 49 | + ADD_DEFINITIONS(-DPHP_WIN32 -DZEND_WIN32 -D_USE_32BIT_TIME_T) |
| 50 | + ENDIF() |
| 51 | + |
| 52 | + SET(ADDITIONAL_COMPILER_FLAGS "/W3") |
| 53 | + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ADDITIONAL_COMPILER_FLAGS}") |
| 54 | +ENDIF () |
| 55 | + |
| 56 | +INCLUDE_DIRECTORIES( |
| 57 | + "${PHPCPP_PHP_PATH}/" |
| 58 | + "${PHPCPP_PHP_PATH}/main" |
| 59 | + "${PHPCPP_PHP_PATH}/Zend" |
| 60 | + "${PHPCPP_PHP_PATH}/TSRM" |
| 61 | + "${PHPCPP_PHP_PATH}/ext" |
| 62 | + "${PHPCPP_PHP_PATH}/build/main" |
| 63 | + "${PHPCPP_PHP_PATH}/build/Zend" |
| 64 | +) |
| 65 | +SET(PHP_LIBS "php") |
| 66 | +SET(PHP_LIB_PATH "") |
| 67 | + |
| 68 | +IF (${PHPCPP_ARCH} STREQUAL "x86_64") |
| 69 | + SET(PHP_LIB_PATH "x64/") |
| 70 | +ENDIF() |
| 71 | + |
| 72 | +IF(CMAKE_BUILD_TYPE MATCHES DEBUG) |
| 73 | + IF (PHPCPP_COMPILE_TS) |
| 74 | + SET(PHP_LIBS ${PHP_LIBS} "php7ts_debug") |
| 75 | + SET(PHP_LIB_PATH "${PHP_LIB_PATH}Debug_TS") |
| 76 | + ELSE() |
| 77 | + SET(PHP_LIBS ${PHP_LIBS} "php7_debug") |
| 78 | + SET(PHP_LIB_PATH "${PHP_LIB_PATH}Debug") |
| 79 | + ENDIF() |
| 80 | +ELSE() |
| 81 | + IF (PHPCPP_COMPILE_TS) |
| 82 | + SET(PHP_LIBS ${PHP_LIBS} "php7ts") |
| 83 | + SET(PHP_LIB_PATH "${PHP_LIB_PATH}Release_TS") |
| 84 | + ELSE() |
| 85 | + SET(PHP_LIBS ${PHP_LIBS} "php7") |
| 86 | + SET(PHP_LIB_PATH "${PHP_LIB_PATH}Release") |
| 87 | + ENDIF() |
| 88 | +ENDIF() |
| 89 | + |
| 90 | +SET(PHPCPP_COMMON_SOURCES |
| 91 | + common/modifiers.cpp |
| 92 | + common/streambuf.cpp |
| 93 | +) |
| 94 | + |
| 95 | +SET(PHPCPP_COMMON_HEADERS |
| 96 | + common/extensionbase.h |
| 97 | + common/includes.h |
| 98 | + common/streambuf.h |
| 99 | +) |
| 100 | + |
| 101 | +ADD_LIBRARY(phpcpp-common STATIC |
| 102 | + ${PHPCPP_COMMON_HEADERS} |
| 103 | + ${PHPCPP_COMMON_SOURCES} |
| 104 | +) |
| 105 | + |
| 106 | +set_target_properties(phpcpp-common |
| 107 | + PROPERTIES |
| 108 | + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" |
| 109 | + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" |
| 110 | + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" |
| 111 | +) |
| 112 | + |
| 113 | +SET(PHPCPP_ZEND_SOURCES |
| 114 | + zend/base.cpp |
| 115 | + zend/callable.cpp |
| 116 | + zend/classbase.cpp |
| 117 | + zend/classimpl.cpp |
| 118 | + zend/constant.cpp |
| 119 | + zend/constantfuncs.cpp |
| 120 | + zend/eval.cpp |
| 121 | + zend/exception_handler.cpp |
| 122 | + zend/exists.cpp |
| 123 | + zend/extension.cpp |
| 124 | + zend/extensionimpl.cpp |
| 125 | + zend/fatalerror.cpp |
| 126 | + zend/file.cpp |
| 127 | + zend/function.cpp |
| 128 | + zend/functor.cpp |
| 129 | + zend/global.cpp |
| 130 | + zend/globals.cpp |
| 131 | + zend/hashmember.cpp |
| 132 | + zend/ini.cpp |
| 133 | + zend/inivalue.cpp |
| 134 | + zend/iteratorimpl.cpp |
| 135 | + zend/members.cpp |
| 136 | + zend/module.cpp |
| 137 | + zend/namespace.cpp |
| 138 | + zend/object.cpp |
| 139 | + zend/sapi.cpp |
| 140 | + zend/script.cpp |
| 141 | + zend/streambuf.cpp |
| 142 | + zend/streams.cpp |
| 143 | + zend/super.cpp |
| 144 | + zend/value.cpp |
| 145 | + zend/valueiterator.cpp |
| 146 | + zend/zendcallable.cpp |
| 147 | + zend/zval.cpp |
| 148 | +) |
| 149 | + |
| 150 | +SET(PHPCPP_ZEND_HEADERS |
| 151 | + zend/arithmetic.h |
| 152 | + zend/boolmember.h |
| 153 | + zend/callable.h |
| 154 | + zend/classimpl.h |
| 155 | + zend/compileroptions.h |
| 156 | + zend/constantimpl.h |
| 157 | + zend/delayedfree.h |
| 158 | + zend/executestate.h |
| 159 | + zend/extensionimpl.h |
| 160 | + zend/extensionpath.h |
| 161 | + zend/floatmember.h |
| 162 | + zend/functor.h |
| 163 | + zend/hashiterator.h |
| 164 | + zend/includes.h |
| 165 | + zend/init.h |
| 166 | + zend/invaliditerator.h |
| 167 | + zend/iteratorimpl.h |
| 168 | + zend/lowercase.h |
| 169 | + zend/member.h |
| 170 | + zend/method.h |
| 171 | + zend/module.h |
| 172 | + zend/nativefunction.h |
| 173 | + zend/notimplemented.h |
| 174 | + zend/nullmember.h |
| 175 | + zend/numericmember.h |
| 176 | + zend/objectimpl.h |
| 177 | + zend/opcodes.h |
| 178 | + zend/origexception.h |
| 179 | + zend/parametersimpl.h |
| 180 | + zend/property.h |
| 181 | + zend/string.h |
| 182 | + zend/stringmember.h |
| 183 | + zend/symbol.h |
| 184 | + zend/symbol.h |
| 185 | + zend/traverseiterator.h |
| 186 | + zend/valueiteratorimpl.h |
| 187 | +) |
| 188 | + |
| 189 | +SET(PHPCPP_HEADERS_INCLUDE |
| 190 | + include/argument.h |
| 191 | + include/array.h |
| 192 | + include/arrayaccess.h |
| 193 | + include/base.h |
| 194 | + include/byref.h |
| 195 | + include/byval.h |
| 196 | + include/call.h |
| 197 | + include/class.h |
| 198 | + include/classbase.h |
| 199 | + include/classtype.h |
| 200 | + include/constant.h |
| 201 | + include/countable.h |
| 202 | + include/deprecated.h |
| 203 | + include/errors.h |
| 204 | + include/exception.h |
| 205 | + include/extension.h |
| 206 | + include/fatalerror.h |
| 207 | + include/file.h |
| 208 | + include/function.h |
| 209 | + include/global.h |
| 210 | + include/globals.h |
| 211 | + include/hashmember.h |
| 212 | + include/hashparent.h |
| 213 | + include/ini.h |
| 214 | + include/inivalue.h |
| 215 | + include/interface.h |
| 216 | + include/iterator.h |
| 217 | + include/modifiers.h |
| 218 | + include/namespace.h |
| 219 | + include/noexcept.h |
| 220 | + include/object.h |
| 221 | + include/parameters.h |
| 222 | + include/platform.h |
| 223 | + include/script.h |
| 224 | + include/serializable.h |
| 225 | + include/streams.h |
| 226 | + include/super.h |
| 227 | + include/thread_local.h |
| 228 | + include/traversable.h |
| 229 | + include/type.h |
| 230 | + include/value.h |
| 231 | + include/valueiterator.h |
| 232 | + include/version.h |
| 233 | + include/visibility.h |
| 234 | + include/zendcallable.h |
| 235 | + include/zval.h |
| 236 | +) |
| 237 | + |
| 238 | +LINK_DIRECTORIES(${PHP_LIB_PATH}) |
| 239 | + |
| 240 | +IF (PHPCPP_SHARED) |
| 241 | + ADD_LIBRARY(phpcpp SHARED |
| 242 | + ${PHPCPP_HEADERS_INCLUDE} |
| 243 | + ${PHPCPP_ZEND_HEADERS} |
| 244 | + ${PHPCPP_ZEND_SOURCES} |
| 245 | + phpcpp.h |
| 246 | + ) |
| 247 | + |
| 248 | + TARGET_LINK_LIBRARIES(phpcpp phpcpp-common ${PHP_LIBS}) |
| 249 | +ELSE() |
| 250 | + ADD_LIBRARY(phpcpp STATIC |
| 251 | + ${PHPCPP_HEADERS_INCLUDE} |
| 252 | + ${PHPCPP_ZEND_HEADERS} |
| 253 | + ${PHPCPP_ZEND_SOURCES} |
| 254 | + phpcpp.h |
| 255 | + ) |
| 256 | + |
| 257 | + TARGET_LINK_LIBRARIES(phpcpp STATIC phpcpp-common ${PHP_LIBS}) |
| 258 | +ENDIF() |
| 259 | + |
| 260 | +SET_TARGET_PROPERTIES(phpcpp |
| 261 | + PROPERTIES |
| 262 | + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" |
| 263 | + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" |
| 264 | + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" |
| 265 | +) |
0 commit comments