|
| 1 | +include(ExternalProject) |
| 2 | + |
| 3 | +set(CARGO_BUILD_CMD "cargo build") |
| 4 | +set(CARGO_BUILD_ENV "") # Initialize to empty |
| 5 | + |
| 6 | + |
| 7 | +if(CMAKE_BUILD_TYPE STREQUAL "Release") |
| 8 | + set(CARGO_BUILD_CMD "${CARGO_BUILD_CMD} --release") |
| 9 | +elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") |
| 10 | + set(CARGO_BUILD_CMD "${CARGO_BUILD_CMD} --release") |
| 11 | + set(CARGO_BUILD_ENV "RUSTFLAGS='-C debuginfo=2'") |
| 12 | +endif() |
| 13 | + |
| 14 | +set(LIBDATADOG_DIR "${CMAKE_SOURCE_DIR}/../libdatadog") |
| 15 | +set(LIBDATADOG_STAMP_FILE "${CMAKE_BINARY_DIR}/libdatadog.stamp") |
| 16 | +add_custom_target(libdatadog_stamp |
| 17 | + COMMAND ${CMAKE_COMMAND} -E touch ${LIBDATADOG_STAMP_FILE} #XXX: use a script to find modifications |
| 18 | + BYPRODUCT ${LIBDATADOG_STAMP_FILE} |
| 19 | +) |
| 20 | + |
| 21 | +set(EXPORTS_FILE "${CMAKE_BINARY_DIR}/exports.version") |
| 22 | +add_custom_target(ddtrace_exports |
| 23 | + COMMAND bash -c "{ echo -e '{\\nglobal:'; sed 's/$/;/' '${CMAKE_SOURCE_DIR}'/../ddtrace.sym; echo -e 'local:\\n*;\\n};'; } > '${EXPORTS_FILE}'" |
| 24 | + BYPRODUCT ${EXPORTS_FILE} |
| 25 | + DEPENDS ${CMAKE_SOURCE_DIR}/../ddtrace.sym |
| 26 | + VERBATIM |
| 27 | +) |
| 28 | + |
| 29 | +ExternalProject_Add(components_rs_proj |
| 30 | + PREFIX ${CMAKE_BINARY_DIR}/components_rs |
| 31 | + SOURCE_DIR ${CMAKE_SOURCE_DIR}/../components-rs |
| 32 | + CONFIGURE_COMMAND "" |
| 33 | + BUILD_COMMAND RUSTC_BOOTSTRAP=1 ${CARGO_BUILD_ENV} cargo build --target-dir=${CMAKE_BINARY_DIR}/components_rs |
| 34 | + INSTALL_COMMAND "" |
| 35 | + DEPENDS libdatadog_stamp |
| 36 | + BUILD_IN_SOURCE TRUE |
| 37 | +) |
| 38 | + |
| 39 | +add_library(components_rs STATIC IMPORTED) |
| 40 | +if(CMAKE_BUILD_TYPE STREQUAL "Debug") |
| 41 | + set(CARGO_BUILD_LOCATION ${CMAKE_BINARY_DIR}/components_rs/debug) |
| 42 | +else() |
| 43 | + set(CARGO_BUILD_LOCATION ${CMAKE_BINARY_DIR}/components_rs/release) |
| 44 | +endif() |
| 45 | +set_property(TARGET components_rs PROPERTY IMPORTED_LOCATION ${CARGO_BUILD_LOCATION}/libddtrace_php.a) |
| 46 | +add_dependencies(components_rs components_rs_proj) |
| 47 | + |
| 48 | + |
| 49 | +execute_process( |
| 50 | + COMMAND ${PhpConfig_EXECUTABLE} --vernum |
| 51 | + RESULT_VARIABLE PhpConfig_VERNUM_RESULT |
| 52 | + OUTPUT_VARIABLE PhpConfig_VERNUM |
| 53 | + OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND_ERROR_IS_FATAL ANY) |
| 54 | + |
| 55 | +file(GLOB_RECURSE FILES_DDTRACE |
| 56 | + CONFIGURE_DEPENDS |
| 57 | + "${CMAKE_SOURCE_DIR}/../ext/*.c" |
| 58 | + "${CMAKE_SOURCE_DIR}/../ext/**/*.c" |
| 59 | + "${CMAKE_SOURCE_DIR}/../zend_abstract_interface/*.c" |
| 60 | + "${CMAKE_SOURCE_DIR}/../zend_abstract_interface/**/*.c" |
| 61 | +) |
| 62 | + |
| 63 | +list(APPEND FILES_DDTRACE |
| 64 | + "${CMAKE_SOURCE_DIR}/../src/dogstatsd/client.c" |
| 65 | + "${CMAKE_SOURCE_DIR}/../components/container_id/container_id.c" |
| 66 | + "${CMAKE_SOURCE_DIR}/../components/log/log.c" |
| 67 | + "${CMAKE_SOURCE_DIR}/../components/sapi/sapi.c" |
| 68 | + "${CMAKE_SOURCE_DIR}/../components/string_view/string_view.c" |
| 69 | +) |
| 70 | +if (PhpConfig_VERNUM GREATER_EQUAL 80000) |
| 71 | + list(REMOVE_ITEM FILES_DDTRACE "${CMAKE_SOURCE_DIR}/../ext/handlers_curl_php7.c" |
| 72 | + "${CMAKE_SOURCE_DIR}/../zend_abstract_interface/interceptor/php7/interceptor.c" |
| 73 | + "${CMAKE_SOURCE_DIR}/../zend_abstract_interface/interceptor/php7/resolver.c" |
| 74 | + "${CMAKE_SOURCE_DIR}/../zend_abstract_interface/sandbox/php7/sandbox.c") |
| 75 | +else() # PHP 7 |
| 76 | + list(REMOVE_ITEM FILES_DDTRACE "${CMAKE_SOURCE_DIR}/../ext/handlers_curl.c" |
| 77 | + "${CMAKE_SOURCE_DIR}/../ext/hook/uhook_attributes.c" |
| 78 | + "${CMAKE_SOURCE_DIR}/../zend_abstract_interface/interceptor/php8/interceptor.c" |
| 79 | + "${CMAKE_SOURCE_DIR}/../zend_abstract_interface/interceptor/php8/resolver.c" |
| 80 | + "${CMAKE_SOURCE_DIR}/../zend_abstract_interface/interceptor/php8/resolver_pre-8_2.c" |
| 81 | + "${CMAKE_SOURCE_DIR}/../zend_abstract_interface/jit_utils/jit_blacklist.c" |
| 82 | + "${CMAKE_SOURCE_DIR}/../zend_abstract_interface/sandbox/php8/sandbox.c") |
| 83 | +endif() |
| 84 | +if (PhpConfig_VERNUM LESS 80200) |
| 85 | + list(REMOVE_ITEM FILES_DDTRACE "${CMAKE_SOURCE_DIR}/../ext/weakrefs.c") |
| 86 | + list(REMOVE_ITEM FILES_DDTRACE "${CMAKE_SOURCE_DIR}/../zend_abstract_interface/interceptor/php8/resolver.c") |
| 87 | +else() # PHP 8.2+ |
| 88 | + list(REMOVE_ITEM FILES_DDTRACE "${CMAKE_SOURCE_DIR}/../zend_abstract_interface/interceptor/php8/resolver_pre-8_2.c") |
| 89 | +endif() |
| 90 | +if (PhpConfig_VERNUM LESS 80100) |
| 91 | + list(REMOVE_ITEM FILES_DDTRACE "${CMAKE_SOURCE_DIR}/../ext/handlers_fiber.c") |
| 92 | +endif() |
| 93 | + |
| 94 | +find_package(CURL REQUIRED) |
| 95 | + |
| 96 | +add_library(ddtrace SHARED ${FILES_DDTRACE}) |
| 97 | +set_target_properties(ddtrace PROPERTIES |
| 98 | + C_VISIBILITY_PRESET hidden |
| 99 | + OUTPUT_NAME ddtrace |
| 100 | + DEBUG_POSTFIX "" |
| 101 | + PREFIX "") |
| 102 | +target_compile_options(ddtrace PRIVATE -fms-extensions) |
| 103 | +target_link_options(ddtrace PRIVATE "-Wl,--version-script=${EXPORTS_FILE}") |
| 104 | +target_link_libraries(ddtrace PRIVATE PhpConfig components_rs ${CURL_LIBRARIES}) |
| 105 | +if(CURL_DEFINITIONS) |
| 106 | + target_compile_definitions(ddtrace PRIVATE ${CURL_DEFINITIONS}) |
| 107 | +endif() |
| 108 | +target_compile_definitions(ddtrace PRIVATE ZEND_ENABLE_STATIC_TSRMLS_CACHE=1 COMPILE_DL_DDTRACE=1) |
| 109 | +target_include_directories(ddtrace PRIVATE |
| 110 | + ${CURL_INCLUDE_DIRS} |
| 111 | + ${CMAKE_SOURCE_DIR}/.. |
| 112 | + ${CMAKE_SOURCE_DIR}/../src/dogstatsd |
| 113 | + ${CMAKE_SOURCE_DIR}/../zend_abstract_interface |
| 114 | + ${CMAKE_SOURCE_DIR}/../ext |
| 115 | + ${CMAKE_SOURCE_DIR}/../ext/vendor |
| 116 | + ${CMAKE_SOURCE_DIR}/../ext/vendor/mt19937 |
| 117 | +) |
| 118 | +add_dependencies(ddtrace ddtrace_exports) |
| 119 | + |
| 120 | +patch_away_libc(ddtrace) |
0 commit comments