diff --git a/.github/workflows/build_deploy.yml b/.github/workflows/build_deploy.yml index de44844aca8..67095bd0174 100644 --- a/.github/workflows/build_deploy.yml +++ b/.github/workflows/build_deploy.yml @@ -70,7 +70,7 @@ jobs: - name: Install build dependencies # Rust + Cargo are needed for Cryptography - run: apk add git gcc g++ musl-dev libffi-dev openssl-dev bash rust cargo make cmake + run: apk add git gcc g++ musl-dev libffi-dev openssl-dev bash rust cargo make cmake patchelf - name: Check source package run: | diff --git a/.github/workflows/build_python_3.yml b/.github/workflows/build_python_3.yml index 654cab91cc6..48da704a2fd 100644 --- a/.github/workflows/build_python_3.yml +++ b/.github/workflows/build_python_3.yml @@ -84,7 +84,7 @@ jobs: fi CIBW_BEFORE_ALL_WINDOWS: rustup target add i686-pc-windows-msvc CIBW_BEFORE_ALL_MACOS: rustup target add aarch64-apple-darwin - CIBW_ENVIRONMENT_LINUX: PATH=$HOME/.cargo/bin:$PATH CMAKE_BUILD_PARALLEL_LEVEL=24 + CIBW_ENVIRONMENT_LINUX: PATH=$HOME/.cargo/bin:$PATH CMAKE_BUILD_PARALLEL_LEVEL=24 CMAKE_ARGS="-DNATIVE_TESTING=OFF" CIBW_REPAIR_WHEEL_COMMAND_LINUX: | mkdir ./tempwheelhouse && unzip -l {wheel} | grep '\.so' && @@ -122,11 +122,11 @@ jobs: fi CIBW_BEFORE_ALL_WINDOWS: rustup target add i686-pc-windows-msvc CIBW_BEFORE_ALL_MACOS: rustup target add aarch64-apple-darwin - CIBW_ENVIRONMENT_LINUX: PATH=$HOME/.cargo/bin:$PATH CMAKE_BUILD_PARALLEL_LEVEL=24 + CIBW_ENVIRONMENT_LINUX: PATH=$HOME/.cargo/bin:$PATH CMAKE_BUILD_PARALLEL_LEVEL=24 CMAKE_ARGS="-DNATIVE_TESTING=OFF" # SYSTEM_VERSION_COMPAT is a workaround for versioning issue, a.k.a. # `platform.mac_ver()` reports incorrect MacOS version at 11.0 # See: https://stackoverflow.com/a/65402241 - CIBW_ENVIRONMENT_MACOS: CMAKE_BUILD_PARALLEL_LEVEL=24 SYSTEM_VERSION_COMPAT=0 + CIBW_ENVIRONMENT_MACOS: CMAKE_BUILD_PARALLEL_LEVEL=24 SYSTEM_VERSION_COMPAT=0 CMAKE_ARGS="-DNATIVE_TESTING=OFF" CIBW_REPAIR_WHEEL_COMMAND_LINUX: | mkdir ./tempwheelhouse && unzip -l {wheel} | grep '\.so' && diff --git a/.github/workflows/system-tests.yml b/.github/workflows/system-tests.yml index 5748e0dd518..b9fab621154 100644 --- a/.github/workflows/system-tests.yml +++ b/.github/workflows/system-tests.yml @@ -35,6 +35,8 @@ jobs: SYSTEM_TESTS_AWS_ACCESS_KEY_ID: ${{ secrets.IDM_AWS_ACCESS_KEY_ID }} SYSTEM_TESTS_AWS_SECRET_ACCESS_KEY: ${{ secrets.IDM_AWS_SECRET_ACCESS_KEY }} steps: + - name: Install Dependencies + run: sudo apt-get install -y patchelf - name: Checkout system tests uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 @@ -271,6 +273,9 @@ jobs: env: TEST_LIBRARY: python steps: + - name: Install Dependencies + run: sudo apt-get install -y patchelf + - name: Checkout system tests uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: @@ -316,4 +321,4 @@ jobs: run: exit 0 - name: Fails if anything else failed if: needs.parametric.result != 'success' || needs.system-tests.result != 'success' - run: exit 1 \ No newline at end of file + run: exit 1 diff --git a/.gitlab/benchmarks/bp-runner.microbenchmarks.fail-on-breach.yml b/.gitlab/benchmarks/bp-runner.microbenchmarks.fail-on-breach.yml index d1ac93dd8f9..56b7ce9c8f5 100644 --- a/.gitlab/benchmarks/bp-runner.microbenchmarks.fail-on-breach.yml +++ b/.gitlab/benchmarks/bp-runner.microbenchmarks.fail-on-breach.yml @@ -10,27 +10,27 @@ experiments: - name: coreapiscenario-context_with_data_listeners thresholds: - execution_time < 0.02 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: coreapiscenario-context_with_data_no_listeners thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: coreapiscenario-context_with_data_only_all_listeners thresholds: - execution_time < 0.02 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: coreapiscenario-get_item_exists thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: coreapiscenario-get_item_missing thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: coreapiscenario-set_item thresholds: - execution_time < 0.03 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB # djangosimple - name: djangosimple-appsec @@ -122,7 +122,7 @@ experiments: - name: flasksimple-iast-get thresholds: - execution_time < 2.00 ms - - max_rss_usage < 45.00 MB + - max_rss_usage < 49.00 MB - name: flasksimple-appsec-get thresholds: - execution_time < 4.75 ms @@ -154,627 +154,627 @@ experiments: - name: httppropagationextract-all_styles_all_headers thresholds: - execution_time < 0.10 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-b3_headers thresholds: - execution_time < 0.02 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-b3_single_headers thresholds: - execution_time < 0.02 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-datadog_tracecontext_tracestate_not_propagated_on_trace_id_no_match thresholds: - execution_time < 0.08 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-datadog_tracecontext_tracestate_propagated_on_trace_id_match thresholds: - execution_time < 0.08 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-empty_headers thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-full_t_id_datadog_headers thresholds: - execution_time < 0.03 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-invalid_priority_header thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-invalid_span_id_header thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-invalid_tags_header thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-invalid_trace_id_header thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-large_header_no_matches thresholds: - execution_time < 0.03 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-large_valid_headers_all thresholds: - execution_time < 0.04 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-medium_header_no_matches thresholds: - execution_time < 0.02 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-medium_valid_headers_all thresholds: - execution_time < 0.02 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-none_propagation_style thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-tracecontext_headers thresholds: - execution_time < 0.04 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-valid_headers_all thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-valid_headers_basic thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-wsgi_empty_headers thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-wsgi_invalid_priority_header thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-wsgi_invalid_span_id_header thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-wsgi_invalid_tags_header thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-wsgi_invalid_trace_id_header thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-wsgi_large_header_no_matches thresholds: - execution_time < 0.04 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-wsgi_large_valid_headers_all thresholds: - execution_time < 0.04 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-wsgi_medium_header_no_matches thresholds: - execution_time < 0.02 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-wsgi_medium_valid_headers_all thresholds: - execution_time < 0.02 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-wsgi_valid_headers_all thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationextract-wsgi_valid_headers_basic thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB # httppropagationinject - name: httppropagationinject-ids_only thresholds: - execution_time < 0.03 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationinject-with_all thresholds: - execution_time < 0.04 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationinject-with_dd_origin thresholds: - execution_time < 0.03 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationinject-with_priority_and_origin thresholds: - execution_time < 0.04 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationinject-with_sampling_priority thresholds: - execution_time < 0.03 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationinject-with_tags thresholds: - execution_time < 0.04 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationinject-with_tags_invalid thresholds: - execution_time < 0.04 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB - name: httppropagationinject-with_tags_max_size thresholds: - execution_time < 0.04 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 33.00 MB # iast_aspects - name: iast_aspects-re_expand_aspect thresholds: - execution_time < 0.04 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 38.50 MB - name: iast_aspects-re_expand_noaspect thresholds: - execution_time < 0.04 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 38.50 MB - name: iast_aspects-re_findall_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 38.50 MB - name: iast_aspects-re_findall_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 38.50 MB - name: iast_aspects-re_finditer_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 38.50 MB - name: iast_aspects-re_finditer_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 38.50 MB - name: iast_aspects-re_fullmatch_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 38.50 MB - name: iast_aspects-re_fullmatch_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 38.50 MB - name: iast_aspects-re_group_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 38.50 MB - name: iast_aspects-re_group_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 38.50 MB - name: iast_aspects-re_groups_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 38.50 MB - name: iast_aspects-re_groups_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 38.50 MB - name: iast_aspects-re_match_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 38.50 MB - name: iast_aspects-re_match_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 38.50 MB - name: iast_aspects-re_search_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 38.50 MB - name: iast_aspects-re_search_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 38.50 MB - name: iast_aspects-re_sub_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 38.50 MB - name: iast_aspects-re_sub_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 38.50 MB - name: iast_aspects-re_subn_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 38.50 MB - name: iast_aspects-re_subn_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 38.50 MB # iastaspects - name: iastaspects-add_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-add_inplace_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-add_inplace_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-add_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-bytearray_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-bytearray_extend_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-bytearray_extend_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-bytearray_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-bytes_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-bytes_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-bytesio_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-bytesio_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-capitalize_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-capitalize_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-casefold_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-casefold_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-decode_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-decode_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-encode_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-encode_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-format_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-format_map_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-format_map_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-format_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-index_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-index_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-join_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-join_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-ljust_aspect thresholds: - execution_time < 0.02 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 39.00 MB - name: iastaspects-ljust_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 39.00 MB - name: iastaspects-lower_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 39.00 MB - name: iastaspects-lower_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-lstrip_aspect thresholds: - execution_time < 0.02 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 39.00 MB - name: iastaspects-lstrip_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-modulo_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-modulo_aspect_for_bytearray_bytearray thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-modulo_aspect_for_bytes thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-modulo_aspect_for_bytes_bytearray thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-modulo_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-replace_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-replace_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 39.00 MB - name: iastaspects-repr_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-repr_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-rstrip_aspect thresholds: - execution_time < 0.02 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 39.00 MB - name: iastaspects-rstrip_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-slice_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-slice_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-stringio_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-stringio_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-strip_aspect thresholds: - execution_time < 0.02 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 39.00 MB - name: iastaspects-strip_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-swapcase_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-swapcase_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-title_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-title_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-translate_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-translate_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-upper_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspects-upper_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB # iastaspectsospath - name: iastaspectsospath-ospathbasename_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspectsospath-ospathbasename_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspectsospath-ospathjoin_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspectsospath-ospathjoin_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspectsospath-ospathnormcase_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspectsospath-ospathnormcase_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspectsospath-ospathsplit_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspectsospath-ospathsplit_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspectsospath-ospathsplitdrive_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspectsospath-ospathsplitdrive_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspectsospath-ospathsplitext_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspectsospath-ospathsplitext_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB # iastaspectssplit - name: iastaspectssplit-rsplit_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspectssplit-rsplit_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspectssplit-split_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspectssplit-split_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspectssplit-splitlines_aspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastaspectssplit-splitlines_noaspect thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB # iastpropagation - name: iastpropagation-no-propagation thresholds: - execution_time < 0.06 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 39.00 MB - name: iastpropagation-propagation_enabled thresholds: - execution_time < 0.16 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 39.00 MB - name: iastpropagation-propagation_enabled_100 thresholds: - execution_time < 1.80 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: iastpropagation-propagation_enabled_1000 thresholds: - execution_time < 30.55 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 39.00 MB # otelsdkspan - name: otelsdkspan-add-event thresholds: - execution_time < 42.00 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: otelsdkspan-add-link thresholds: - execution_time < 38.55 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: otelsdkspan-add-metrics thresholds: - execution_time < 232.00 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: otelsdkspan-add-tags thresholds: - execution_time < 221.60 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: otelsdkspan-get-context thresholds: - execution_time < 31.30 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: otelsdkspan-is-recording thresholds: - execution_time < 31.00 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: otelsdkspan-record-exception thresholds: - execution_time < 65.85 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: otelsdkspan-set-status thresholds: - execution_time < 34.15 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: otelsdkspan-start thresholds: - execution_time < 30.15 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: otelsdkspan-start-finish thresholds: - execution_time < 35.35 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: otelsdkspan-start-finish-telemetry thresholds: - execution_time < 35.45 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB - name: otelsdkspan-update-name thresholds: - execution_time < 33.40 ms - - max_rss_usage < 35.00 MB + - max_rss_usage < 39.00 MB # otelspan - name: otelspan-add-event thresholds: - execution_time < 47.15 ms - - max_rss_usage < 42.50 MB + - max_rss_usage < 46.50 MB - name: otelspan-add-metrics thresholds: - execution_time < 344.80 ms @@ -786,35 +786,35 @@ experiments: - name: otelspan-get-context thresholds: - execution_time < 92.35 ms - - max_rss_usage < 38.00 MB + - max_rss_usage < 46.50 MB - name: otelspan-is-recording thresholds: - execution_time < 44.50 ms - - max_rss_usage < 42.00 MB + - max_rss_usage < 46.50 MB - name: otelspan-record-exception thresholds: - execution_time < 67.65 ms - - max_rss_usage < 38.00 MB + - max_rss_usage < 46.50 MB - name: otelspan-set-status thresholds: - execution_time < 50.40 ms - - max_rss_usage < 42.00 MB + - max_rss_usage < 46.50 MB - name: otelspan-start thresholds: - execution_time < 43.45 ms - - max_rss_usage < 42.00 MB + - max_rss_usage < 46.50 MB - name: otelspan-start-finish thresholds: - execution_time < 88.00 ms - - max_rss_usage < 32.00 MB + - max_rss_usage < 46.50 MB - name: otelspan-start-finish-telemetry thresholds: - execution_time < 89.00 ms - - max_rss_usage < 32.00 MB + - max_rss_usage < 46.50 MB - name: otelspan-update-name thresholds: - execution_time < 45.15 ms - - max_rss_usage < 42.50 MB + - max_rss_usage < 46.50 MB # packagespackageforrootmodulemapping - name: packagespackageforrootmodulemapping-cache_off @@ -830,185 +830,185 @@ experiments: - name: packagesupdateimporteddependencies-import_many thresholds: - execution_time < 0.17 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 38.50 MB - name: packagesupdateimporteddependencies-import_many_cached thresholds: - execution_time < 0.13 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 38.50 MB - name: packagesupdateimporteddependencies-import_many_stdlib thresholds: - execution_time < 1.75 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 38.50 MB - name: packagesupdateimporteddependencies-import_many_stdlib_cached thresholds: - execution_time < 1.10 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 38.50 MB - name: packagesupdateimporteddependencies-import_many_unknown thresholds: - execution_time < 0.89 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 38.50 MB - name: packagesupdateimporteddependencies-import_many_unknown_cached thresholds: - execution_time < 0.87 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 38.50 MB - name: packagesupdateimporteddependencies-import_one thresholds: - execution_time < 0.03 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 38.50 MB - name: packagesupdateimporteddependencies-import_one_cache thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 38.50 MB - name: packagesupdateimporteddependencies-import_one_stdlib thresholds: - execution_time < 0.02 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 38.50 MB - name: packagesupdateimporteddependencies-import_one_stdlib_cache thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 38.50 MB - name: packagesupdateimporteddependencies-import_one_unknown thresholds: - execution_time < 0.05 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 38.50 MB - name: packagesupdateimporteddependencies-import_one_unknown_cache thresholds: - execution_time < 0.01 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 38.50 MB # ratelimiter - name: ratelimiter-defaults thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: ratelimiter-high_rate_limit thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: ratelimiter-long_window thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: ratelimiter-low_rate_limit thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: ratelimiter-no_rate_limit thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: ratelimiter-short_window thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB # recursivecomputation - name: recursivecomputation-deep thresholds: - execution_time < 320.95 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: recursivecomputation-deep-profiled thresholds: - execution_time < 359.15 ms - - max_rss_usage < 35.50 MB + - max_rss_usage < 39.00 MB - name: recursivecomputation-medium thresholds: - execution_time < 7.40 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: recursivecomputation-shallow thresholds: - execution_time < 1.05 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB # samplingrules - name: samplingrules-average_match thresholds: - execution_time < 0.35 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: samplingrules-high_match thresholds: - execution_time < 0.55 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: samplingrules-low_match thresholds: - execution_time < 0.19 ms - - max_rss_usage < 432.50 MB + - max_rss_usage < 450.00 MB - name: samplingrules-very_low_match thresholds: - execution_time < 9.15 ms - - max_rss_usage < 55.00 MB + - max_rss_usage < 60.00 MB # sethttpmeta - name: sethttpmeta-all-disabled thresholds: - execution_time < 0.02 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: sethttpmeta-all-enabled thresholds: - execution_time < 0.05 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: sethttpmeta-collectipvariant_exists thresholds: - execution_time < 0.05 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: sethttpmeta-no-collectipvariant thresholds: - execution_time < 0.05 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: sethttpmeta-no-useragentvariant thresholds: - execution_time < 0.05 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: sethttpmeta-obfuscation-no-query thresholds: - execution_time < 0.05 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: sethttpmeta-obfuscation-regular-case-explicit-query thresholds: - execution_time < 0.09 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: sethttpmeta-obfuscation-regular-case-implicit-query thresholds: - execution_time < 0.09 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: sethttpmeta-obfuscation-send-querystring-disabled thresholds: - execution_time < 0.17 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: sethttpmeta-obfuscation-worst-case-explicit-query thresholds: - execution_time < 0.16 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: sethttpmeta-obfuscation-worst-case-implicit-query thresholds: - execution_time < 0.17 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: sethttpmeta-useragentvariant_exists_1 thresholds: - execution_time < 0.05 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: sethttpmeta-useragentvariant_exists_2 thresholds: - execution_time < 0.05 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: sethttpmeta-useragentvariant_exists_3 thresholds: - execution_time < 0.05 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: sethttpmeta-useragentvariant_not_exists_1 thresholds: - execution_time < 0.05 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: sethttpmeta-useragentvariant_not_exists_2 thresholds: - execution_time < 0.05 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB # span - name: span-add-event thresholds: - execution_time < 26.20 ms - - max_rss_usage < 49.00 MB + - max_rss_usage < 53.00 MB - name: span-add-metrics thresholds: - execution_time < 98.35 ms @@ -1020,116 +1020,116 @@ experiments: - name: span-get-context thresholds: - execution_time < 23.70 ms - - max_rss_usage < 47.50 MB + - max_rss_usage < 53.00 MB - name: span-is-recording thresholds: - execution_time < 23.90 ms - - max_rss_usage < 47.50 MB + - max_rss_usage < 53.00 MB - name: span-record-exception thresholds: - execution_time < 44.50 ms - - max_rss_usage < 40.50 MB + - max_rss_usage < 53.00 MB - name: span-set-status thresholds: - execution_time < 26.00 ms - - max_rss_usage < 47.50 MB + - max_rss_usage < 53.00 MB - name: span-start thresholds: - execution_time < 23.50 ms - - max_rss_usage < 47.50 MB + - max_rss_usage < 53.00 MB - name: span-start-finish thresholds: - execution_time < 55.50 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: span-start-finish-telemetry thresholds: - execution_time < 58.30 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: span-start-finish-traceid128 thresholds: - execution_time < 58.05 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: span-start-traceid128 thresholds: - execution_time < 24.60 ms - - max_rss_usage < 47.50 MB + - max_rss_usage < 53.00 MB - name: span-update-name thresholds: - execution_time < 24.10 ms - - max_rss_usage < 48.00 MB + - max_rss_usage < 53.00 MB # telemetryaddmetric - name: telemetryaddmetric-1-count-metric-1-times thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: telemetryaddmetric-1-count-metrics-100-times thresholds: - execution_time < 0.24 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: telemetryaddmetric-1-distribution-metric-1-times thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: telemetryaddmetric-1-distribution-metrics-100-times thresholds: - execution_time < 0.21 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: telemetryaddmetric-1-gauge-metric-1-times thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: telemetryaddmetric-1-gauge-metrics-100-times thresholds: - execution_time < 0.14 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: telemetryaddmetric-1-rate-metric-1-times thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: telemetryaddmetric-1-rate-metrics-100-times thresholds: - execution_time < 0.23 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: telemetryaddmetric-100-count-metrics-100-times thresholds: - execution_time < 22.50 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: telemetryaddmetric-100-distribution-metrics-100-times thresholds: - execution_time < 2.10 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: telemetryaddmetric-100-gauge-metrics-100-times thresholds: - execution_time < 1.40 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: telemetryaddmetric-100-rate-metrics-100-times thresholds: - execution_time < 2.40 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: telemetryaddmetric-flush-1-metric thresholds: - execution_time < 0.01 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: telemetryaddmetric-flush-100-metrics thresholds: - execution_time < 0.20 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: telemetryaddmetric-flush-1000-metrics thresholds: - execution_time < 2.35 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB # tracer - name: tracer-large thresholds: - execution_time < 32.95 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: tracer-medium thresholds: - execution_time < 3.20 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB - name: tracer-small thresholds: - execution_time < 0.37 ms - - max_rss_usage < 31.00 MB + - max_rss_usage < 34.00 MB diff --git a/build_libnative.py b/build_libnative.py new file mode 100644 index 00000000000..3b42b6416fb --- /dev/null +++ b/build_libnative.py @@ -0,0 +1,97 @@ +import argparse +import os +from pathlib import Path +import platform +import subprocess +import sys +from typing import List +from typing import Optional + + +def is_installed(bin_file): + for path in os.environ.get("PATH", "").split(os.pathsep): + if os.path.isfile(os.path.join(path, bin_file)): + return True + + return False + + +def install_dedup_headers(): + if not is_installed("dedup_headers"): + subprocess.run( + ["cargo", "install", "--git", "https://github.com/DataDog/libdatadog", "--bin", "dedup_headers", "tools"], + check=True, + ) + + +def build_crate(crate_dir: Path, release: bool, features: Optional[List[str]] = None): + env = os.environ.copy() + abs_dir = crate_dir.absolute() + target_dir = abs_dir / "target" + env["CARGO_TARGET_DIR"] = str(target_dir) + + build_cmd = ["cargo", "build"] + + if release: + build_cmd.append("--release") + + if features: + cmd_features = ", ".join(features) + build_cmd += ["--features", cmd_features] + + # Check if we're on Windows and if Python is 32-bit + if platform.system() == "Windows" and sys.maxsize <= 2**32: + # We're building for 32-bit Windows, use the i686 target + build_cmd += ["--target", "i686-pc-windows-msvc"] + + subprocess.run( + build_cmd, + cwd=str(crate_dir), + check=True, + env=env, + ) + + if features and "profiling" in features: + install_dedup_headers() + + # Add cargo binary folder to PATH + home = os.path.expanduser("~") + cargo_bin = os.path.join(home, ".cargo", "bin") + dedup_env = os.environ.copy() + dedup_env["PATH"] = cargo_bin + os.pathsep + env["PATH"] + + subprocess.run( + ["dedup_headers", "common.h", "crashtracker.h", "profiling.h"], + cwd=str(target_dir / "include" / "datadog"), + check=True, + env=dedup_env, + ) + + +def clean_crate(crate_dir: Path): + target_dir = crate_dir.absolute() / "target" + if target_dir.exists(): + subprocess.run( + ["cargo", "clean"], + cwd=str(crate_dir), + check=True, + ) + + +def main(): + try: + parser = argparse.ArgumentParser(description="Build Rust module") + parser.add_argument("--crate", required=True, help="Rust crate location") + parser.add_argument("--release", action="store_true", help="Release profile") + parser.add_argument("--features", nargs="*", help="List of features") + + args = parser.parse_args() + + build_crate(Path(args.crate), args.release, args.features) + except Exception as e: + print(f"Error: {e}") + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/ddtrace/appsec/_iast/_taint_tracking/CMakeLists.txt b/ddtrace/appsec/_iast/_taint_tracking/CMakeLists.txt index 139e0926140..d2e1f76d5d0 100644 --- a/ddtrace/appsec/_iast/_taint_tracking/CMakeLists.txt +++ b/ddtrace/appsec/_iast/_taint_tracking/CMakeLists.txt @@ -3,7 +3,11 @@ include(FetchContent) set(APP_NAME _native) option(BUILD_MACOS "Build for MacOS" OFF) -option(NATIVE_TESTING "Load test subdirectories and targets" ON) +if(DEFINED ENV{CIBUILDWHEEL} OR DEFINED ENV{CIBW_BUILD}) + option(NATIVE_TESTING "Disable test subdirectories and targets" OFF) +else() + option(NATIVE_TESTING "Load test subdirectories and targets" ON) +endif() project(${APP_NAME}) @@ -74,14 +78,22 @@ file( # ${ICU_LIBRARIES}) # Debug messages -message(STATUS "PYTHON_LIBRARIES = ${Python_LIBRARIES}") -message(STATUS "PYTHON_EXECUTABLE = ${Python_EXECUTABLE}") +message(STATUS "PYTHON_LIBRARIES = ${PYTHON_LIBRARIES}") +message(STATUS "PYTHON_EXECUTABLE = ${PYTHON_EXECUTABLE}") message(STATUS "PYTHON_INCLUDE_DIRS = ${PYTHON_INCLUDE_DIRS}") -message(STATUS "Python_EXECUTABLE = ${Python_EXECUTABLE}") # message(STATUS "ICU_LIBRARIES = ${ICU_LIBRARIES}") message(STATUS "ICU_INCLUDE_DIRS = ${ICU_INCLUDE_DIRS}") add_subdirectory(_vendor/pybind11) if(NATIVE_TESTING) + find_package( + Python3 + COMPONENTS Interpreter Development + REQUIRED) + # Legacy variables expected elsewhere in the project/tests + set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) + set(PYTHON_INCLUDE_DIRS ${Python3_INCLUDE_DIRS}) + set(PYTHON_LIBRARIES ${Python3_LIBRARIES}) + add_subdirectory(tests EXCLUDE_FROM_ALL) endif() diff --git a/ddtrace/internal/datadog/profiling/build_standalone.sh b/ddtrace/internal/datadog/profiling/build_standalone.sh index c7bc4c14af9..335a118a278 100755 --- a/ddtrace/internal/datadog/profiling/build_standalone.sh +++ b/ddtrace/internal/datadog/profiling/build_standalone.sh @@ -365,6 +365,12 @@ add_target() { esac } +#Build rust dependencies +build_rust() { + echo "Building Rust dependencies" + python3 build_libnative.py --crate ./src/native --release --features profiling +} + ### ENTRYPOINT # Check for basic input validity @@ -383,6 +389,8 @@ print_cmake_args print_ctest_args +build_rust + # Run cmake for target in "${targets[@]}"; do run_cmake $target diff --git a/ddtrace/internal/datadog/profiling/cmake/FindLibNative.cmake b/ddtrace/internal/datadog/profiling/cmake/FindLibNative.cmake new file mode 100644 index 00000000000..8fddc212a37 --- /dev/null +++ b/ddtrace/internal/datadog/profiling/cmake/FindLibNative.cmake @@ -0,0 +1,31 @@ +find_package(Python3) + +if(DEFINED NATIVE_EXTENSION_LOCATION) + set(SOURCE_LIB_DIR ${NATIVE_EXTENSION_LOCATION}) +else() + set(SOURCE_LIB_DIR ${CMAKE_SOURCE_DIR}/../../../../../src/native/target/release) +endif() + +if(DEFINED EXTENSION_SUFFIX) + set(LIBRARY_NAME _native${EXTENSION_SUFFIX}) +else() + set(LIBRARY_NAME lib_native.so) +endif() + +message(WARNING "SOURCE_LIB_DIR: ${SOURCE_LIB_DIR}") +message(WARNING "LIBRARY_NAME: ${LIBRARY_NAME}") + +set(SOURCE_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/../../../../../src/native/target/include) + +set(DEST_LIB_DIR ${CMAKE_CURRENT_BINARY_DIR}) +set(DEST_INCLUDE_DIR ${DEST_LIB_DIR}/include) + +file(COPY ${SOURCE_INCLUDE_DIR} DESTINATION ${DEST_LIB_DIR}) + +file(GLOB LIB_FILES "${SOURCE_LIB_DIR}/${LIBRARY_NAME}") + +message(WARNING "LIB_FILES LOCATION: ${LIB_FILES}") + +add_library(_native SHARED IMPORTED GLOBAL) +set_target_properties(_native PROPERTIES IMPORTED_LOCATION ${SOURCE_LIB_DIR}/${LIBRARY_NAME} + INTERFACE_INCLUDE_DIRECTORIES ${DEST_INCLUDE_DIR}) diff --git a/ddtrace/internal/datadog/profiling/cmake/FindLibdatadog.cmake b/ddtrace/internal/datadog/profiling/cmake/FindLibdatadog.cmake deleted file mode 100644 index 1e9ac42b6d1..00000000000 --- a/ddtrace/internal/datadog/profiling/cmake/FindLibdatadog.cmake +++ /dev/null @@ -1,117 +0,0 @@ -# Only proceed if Datadog::Profiling (provided by libdatadog) isn't already defined -if(TARGET Datadog::Profiling) - return() -endif() - -# Set the FetchContent paths early -set(FETCHCONTENT_BASE_DIR - "${CMAKE_CURRENT_BINARY_DIR}/_deps" - CACHE PATH "FetchContent base directory") -set(FETCHCONTENT_DOWNLOADS_DIR - "${FETCHCONTENT_BASE_DIR}/downloads" - CACHE PATH "FetchContent downloads directory") - -include_guard(GLOBAL) -include(FetchContent) - -# Set version if not already set -if(NOT DEFINED TAG_LIBDATADOG) - set(TAG_LIBDATADOG - "v19.1.0" - CACHE STRING "libdatadog github tag") -endif() - -if(NOT DEFINED DD_CHECKSUMS) - set(DD_CHECKSUMS - "7c69a37cb335260610b61ae956192a6dbd104d05a8278c8ff894dbfebc2efd53 libdatadog-aarch64-alpine-linux-musl.tar.gz" - "b992a11b90ec5927646a0c96b74fe9fcd63e7e471307e74a670ddf42fc10eaf9 libdatadog-aarch64-apple-darwin.tar.gz" - "606b23f4de7defacd5d4a381816f8d7bfe26112c97fcdf21ec2eb998a6c5fbbd libdatadog-aarch64-unknown-linux-gnu.tar.gz" - "2008886021ddee573c0d539626d1d58d41e2a7dbc8deca22b3662da52de6f4d9 libdatadog-x86_64-alpine-linux-musl.tar.gz" - "6a12ef60fd7b00544343c2b6761ef801ad2e1237075711bd16dfb7247464bc43 libdatadog-x86_64-apple-darwin.tar.gz" - "4e5b05515ab180aec0819608aa5d277ff710055819654147a9d69caea27a0dbc libdatadog-x86_64-unknown-linux-gnu.tar.gz") -endif() - -# Determine platform-specific tarball name in a way that conforms to the libdatadog naming scheme in Github releases -if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64") - set(DD_ARCH "aarch64") -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64") - set(DD_ARCH "x86_64") -else() - message(FATAL_ERROR "Unsupported architecture: ${CMAKE_SYSTEM_PROCESSOR}") -endif() - -set(DD_EXT "tar.gz") -set(DD_HASH_ALGO "SHA256") - -if(APPLE) - set(DD_PLATFORM "apple-darwin") -elseif(UNIX) - execute_process( - COMMAND ldd --version - OUTPUT_VARIABLE LDD_OUTPUT - ERROR_VARIABLE LDD_OUTPUT - OUTPUT_STRIP_TRAILING_WHITESPACE) - - if(LDD_OUTPUT MATCHES "musl") - set(DD_PLATFORM "alpine-linux-musl") - else() - set(DD_PLATFORM "unknown-linux-gnu") - endif() -else() - message(FATAL_ERROR "Unsupported operating system") -endif() - -set(DD_TARBALL "libdatadog-${DD_ARCH}-${DD_PLATFORM}.${DD_EXT}") - -# Make sure we can get the checksum for the tarball -foreach(ENTRY IN LISTS DD_CHECKSUMS) - if(ENTRY MATCHES "^([a-fA-F0-9]+) ${DD_TARBALL}$") - set(DD_HASH "${CMAKE_MATCH_1}") - break() - endif() -endforeach() - -if(NOT DEFINED DD_HASH) - message(FATAL_ERROR "Could not find checksum for ${DD_TARBALL}") -endif() - -# Clean up any existing downloads if they exist -set(TARBALL_PATH "${FETCHCONTENT_DOWNLOADS_DIR}/${DD_TARBALL}") - -set(LIBDATADOG_URL "https://github.com/DataDog/libdatadog/releases/download/${TAG_LIBDATADOG}/${DD_TARBALL}") - -if(EXISTS "${TARBALL_PATH}") - file(${DD_HASH_ALGO} "${TARBALL_PATH}" EXISTING_HASH) - - if(NOT EXISTING_HASH STREQUAL DD_HASH) - file(REMOVE "${TARBALL_PATH}") - - # Also remove the subbuild directory to force a fresh download - file(REMOVE_RECURSE "${CMAKE_CURRENT_BINARY_DIR}/_deps/libdatadog-subbuild") - endif() -endif() - -# Use FetchContent to download and extract the library -FetchContent_Declare( - libdatadog - URL ${LIBDATADOG_URL} - URL_HASH ${DD_HASH_ALGO}=${DD_HASH} - DOWNLOAD_DIR "${FETCHCONTENT_DOWNLOADS_DIR}" SOURCE_DIR "${FETCHCONTENT_BASE_DIR}/libdatadog-src") - -# Make the content available -FetchContent_MakeAvailable(libdatadog) - -# Set up paths -get_filename_component(Datadog_ROOT "${libdatadog_SOURCE_DIR}" ABSOLUTE) -set(ENV{Datadog_ROOT} "${Datadog_ROOT}") -set(Datadog_DIR "${Datadog_ROOT}/cmake") - -# Configure library preferences (static over shared) -set(CMAKE_FIND_LIBRARY_SUFFIXES_BACKUP ${CMAKE_FIND_LIBRARY_SUFFIXES}) -set(CMAKE_FIND_LIBRARY_SUFFIXES .a) - -# Find the package -find_package(Datadog REQUIRED) - -# Restore library preferences -set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_BACKUP}) diff --git a/ddtrace/internal/datadog/profiling/crashtracker/CMakeLists.txt b/ddtrace/internal/datadog/profiling/crashtracker/CMakeLists.txt index fe9ec9886f3..43185e18372 100644 --- a/ddtrace/internal/datadog/profiling/crashtracker/CMakeLists.txt +++ b/ddtrace/internal/datadog/profiling/crashtracker/CMakeLists.txt @@ -81,7 +81,7 @@ if(LIB_INSTALL_DIR) endif() # Crashtracker receiver binary -add_executable(crashtracker_exe src/crashtracker.cpp) +add_executable(crashtracker_exe python_runtime_stub.c src/crashtracker.cpp) target_include_directories(crashtracker_exe PRIVATE .. ${Datadog_INCLUDE_DIRS}) # The CRASHTRACKER_EXE_TARGET_NAME should have been set by dd_wrapper diff --git a/ddtrace/internal/datadog/profiling/crashtracker/python_runtime_stub.c b/ddtrace/internal/datadog/profiling/crashtracker/python_runtime_stub.c new file mode 100644 index 00000000000..776010048ce --- /dev/null +++ b/ddtrace/internal/datadog/profiling/crashtracker/python_runtime_stub.c @@ -0,0 +1,80 @@ +__attribute__((weak)) void* PyObject_Repr = 0; +__attribute__((weak)) void* PyExc_ValueError = 0; +__attribute__((weak)) void* PyErr_GetRaisedException = 0; +__attribute__((weak)) void* PyLong_FromSsize_t = 0; +__attribute__((weak)) void* PyObject_GenericGetDict = 0; +__attribute__((weak)) void* PyType_GetName = 0; +__attribute__((weak)) void* PyBool_Type = 0; +__attribute__((weak)) void* PyObject_GetAttr = 0; +__attribute__((weak)) void* _Py_TrueStruct = 0; +__attribute__((weak)) void* PyObject_Str = 0; +__attribute__((weak)) void* PyType_FromSpec = 0; +__attribute__((weak)) void* PyType_IsSubtype = 0; +__attribute__((weak)) void* PyDict_SetItem = 0; +__attribute__((weak)) void* PyTuple_New = 0; +__attribute__((weak)) void* PyObject_SetAttr = 0; +__attribute__((weak)) void* PyEval_RestoreThread = 0; +__attribute__((weak)) void* _Py_NoneStruct = 0; +__attribute__((weak)) void* PyExc_AttributeError = 0; +__attribute__((weak)) void* PyException_SetTraceback = 0; +__attribute__((weak)) void* PyList_Append = 0; +__attribute__((weak)) void* PyInterpreterState_GetID = 0; +__attribute__((weak)) void* PyBytes_FromStringAndSize = 0; +__attribute__((weak)) void* PyUnicode_EqualToUTF8AndSize = 0; +__attribute__((weak)) void* PyDict_Next = 0; +__attribute__((weak)) void* PyException_GetTraceback = 0; +__attribute__((weak)) void* PyErr_SetObject = 0; +__attribute__((weak)) void* PyType_GenericAlloc = 0; +__attribute__((weak)) void* PyType_GetModuleName = 0; +__attribute__((weak)) void* PyFloat_FromDouble = 0; +__attribute__((weak)) void* PyFloat_AsDouble = 0; +__attribute__((weak)) void* _Py_Dealloc = 0; +__attribute__((weak)) void* PyList_New = 0; +__attribute__((weak)) void* PyType_GetQualName = 0; +__attribute__((weak)) void* PyBytes_Size = 0; +__attribute__((weak)) void* PyObject_DelItem = 0; +__attribute__((weak)) void* PyErr_PrintEx = 0; +__attribute__((weak)) void* PyDict_New = 0; +__attribute__((weak)) void* PyErr_SetString = 0; +__attribute__((weak)) void* PyExc_Exception = 0; +__attribute__((weak)) void* PyObject_SetItem = 0; +__attribute__((weak)) void* PyUnicode_InternInPlace = 0; +__attribute__((weak)) void* PyErr_SetRaisedException = 0; +__attribute__((weak)) void* PyObject_SetAttrString = 0; +__attribute__((weak)) void* PyGILState_Release = 0; +__attribute__((weak)) void* PyExc_RuntimeError = 0; +__attribute__((weak)) void* PyExc_BaseException = 0; +__attribute__((weak)) void* PyBytes_AsString = 0; +__attribute__((weak)) void* PyObject_GenericSetDict = 0; +__attribute__((weak)) void* PyBaseObject_Type = 0; +__attribute__((weak)) void* PyObject_GetItem = 0; +__attribute__((weak)) void* PyExc_TypeError = 0; +__attribute__((weak)) void* PyEval_SaveThread = 0; +__attribute__((weak)) void* PyObject_GC_UnTrack = 0; +__attribute__((weak)) void* PyErr_WriteUnraisable = 0; +__attribute__((weak)) void* PyModule_Create2 = 0; +__attribute__((weak)) void* PyTraceBack_Print = 0; +__attribute__((weak)) void* PyUnicode_AsEncodedString = 0; +__attribute__((weak)) void* PyErr_NewExceptionWithDoc = 0; +__attribute__((weak)) void* PyFloat_Type = 0; +__attribute__((weak)) void* PyObject_CallNoArgs = 0; +__attribute__((weak)) void* PyExc_SystemError = 0; +__attribute__((weak)) void* PyExc_ImportError = 0; +__attribute__((weak)) void* PyInterpreterState_Get = 0; +__attribute__((weak)) void* PyUnicode_AsUTF8AndSize = 0; +__attribute__((weak)) void* PyGILState_Ensure = 0; +__attribute__((weak)) void* PyException_GetCause = 0; +__attribute__((weak)) void* PyCMethod_New = 0; +__attribute__((weak)) void* PyErr_Print = 0; +__attribute__((weak)) void* PyImport_Import = 0; +__attribute__((weak)) void* PyException_SetCause = 0; +__attribute__((weak)) void* PyErr_GivenExceptionMatches = 0; +__attribute__((weak)) void* Py_IsInitialized = 0; +__attribute__((weak)) void* PyUnicode_FromStringAndSize = 0; +__attribute__((weak)) void* PyErr_NormalizeException = 0; +__attribute__((weak)) void* PyErr_Restore = 0; +__attribute__((weak)) void* PyErr_Fetch = 0; +__attribute__((weak)) void* PyObject_CallObject = 0; +__attribute__((weak)) void* PyMem_Malloc = 0; +__attribute__((weak)) void* PyCFunction_NewEx = 0; +__attribute__((weak)) void* PyObject_Free = 0; diff --git a/ddtrace/internal/datadog/profiling/dd_wrapper/CMakeLists.txt b/ddtrace/internal/datadog/profiling/dd_wrapper/CMakeLists.txt index 92b3b9f678f..e5f555ef9f8 100644 --- a/ddtrace/internal/datadog/profiling/dd_wrapper/CMakeLists.txt +++ b/ddtrace/internal/datadog/profiling/dd_wrapper/CMakeLists.txt @@ -18,8 +18,7 @@ include(FindCppcheck) include(FindInfer) include(CheckSymbolExists) -# Load libdatadog -include(FindLibdatadog) +find_package(LibNative) # Set verbose mode so compiler and args are shown set(CMAKE_VERBOSE_MAKEFILE ON) @@ -61,7 +60,7 @@ add_ddup_config(dd_wrapper) target_include_directories(dd_wrapper PRIVATE include ${Datadog_INCLUDE_DIRS}) -target_link_libraries(dd_wrapper PRIVATE Datadog::Profiling Threads::Threads) +target_link_libraries(dd_wrapper PRIVATE _native Threads::Threads) # Figure out the suffix. Try to approximate the cpython way of doing things. check_symbol_exists(__GLIBC__ "features.h" HAVE_GLIBC) @@ -83,9 +82,28 @@ string(TOLOWER ${PLATFORM_SUFFIX} PLATFORM_SUFFIX) # target output name should combine the system name and the processor this won't necessarily match the cpython way 1-1, # but as long as it encodes the major moving parts, it's fine -set(DD_WRAPPER_TARGET_NAME "dd_wrapper-${PLATFORM_SUFFIX}") + +if(DEFINED EXTENSION_SUFFIX) + set(DD_WRAPPER_TARGET_NAME "dd_wrapper${EXTENSION_SUFFIX}") +else() + set(DD_WRAPPER_TARGET_NAME "dd_wrapper-${PLATFORM_SUFFIX}") +endif() set_target_properties(dd_wrapper PROPERTIES OUTPUT_NAME "${DD_WRAPPER_TARGET_NAME}") +if(APPLE) + set_target_properties(dd_wrapper PROPERTIES BUILD_RPATH "@loader_path/../../native" INSTALL_RPATH + "@loader_path/../../native") + # Add a post-build step to fix the library dependency to use @rpath + add_custom_command( + TARGET dd_wrapper + POST_BUILD + COMMAND install_name_tool -change "_native${EXTENSION_SUFFIX}" "@rpath/_native${EXTENSION_SUFFIX}" + $ + COMMENT "Fixing library dependency to use @rpath") +else() + # To make sure that dd_wrapper finds _native.so for real + set_target_properties(dd_wrapper PROPERTIES INSTALL_RPATH "$ORIGIN/../../../internal/native") +endif() # The name of the crashtracker executable has to be propagated to a a few different targets, and it needs to be inferred # at runtime, so we set it here. Any component which used dd_wrapper will have access to a uniform name. diff --git a/ddtrace/internal/datadog/profiling/dd_wrapper/test/CMakeLists.txt b/ddtrace/internal/datadog/profiling/dd_wrapper/test/CMakeLists.txt index 51bc54a799f..e5fcaef782d 100644 --- a/ddtrace/internal/datadog/profiling/dd_wrapper/test/CMakeLists.txt +++ b/ddtrace/internal/datadog/profiling/dd_wrapper/test/CMakeLists.txt @@ -1,3 +1,4 @@ +include(FetchContent) FetchContent_Declare( googletest GIT_REPOSITORY https://github.com/google/googletest.git @@ -12,6 +13,8 @@ FetchContent_MakeAvailable(googletest) include(GoogleTest) include(AnalysisFunc) +find_package(Python3 COMPONENTS Interpreter Development) + if(DO_VALGRIND) find_program( VALGRIND_EXECUTABLE @@ -33,8 +36,9 @@ endif() function(dd_wrapper_add_test name) add_executable(${name} ${ARGN}) target_include_directories(${name} PRIVATE ../include) - target_link_libraries(${name} PRIVATE gmock gtest_main dd_wrapper) + target_link_libraries(${name} PRIVATE gmock gtest_main dd_wrapper ${Python3_LIBRARIES}) add_ddup_config(${name}) + target_link_options(${name} PRIVATE -Wl,--no-as-needed) gtest_discover_tests( ${name} diff --git a/ddtrace/internal/datadog/profiling/ddup/CMakeLists.txt b/ddtrace/internal/datadog/profiling/ddup/CMakeLists.txt index 29aa42fc2d9..7fa62fdace2 100644 --- a/ddtrace/internal/datadog/profiling/ddup/CMakeLists.txt +++ b/ddtrace/internal/datadog/profiling/ddup/CMakeLists.txt @@ -69,8 +69,8 @@ if(APPLE) elseif(UNIX) set_target_properties(${EXTENSION_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN/..") endif() -target_include_directories(${EXTENSION_NAME} PRIVATE ../dd_wrapper/include ${Datadog_INCLUDE_DIRS} - ${Python3_INCLUDE_DIRS}) +target_include_directories(${EXTENSION_NAME} PRIVATE ../dd_wrapper/include ../../../../../src/native/target/include/ + ${Datadog_INCLUDE_DIRS} ${Python3_INCLUDE_DIRS}) target_link_libraries(${EXTENSION_NAME} PRIVATE dd_wrapper) diff --git a/pyproject.toml b/pyproject.toml index 65ef83f8351..5af6688fd95 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,11 @@ [build-system] -requires = ["setuptools_scm[toml]>=4", "cython", "cmake>=3.24.2,<3.28; python_version>='3.8'", "setuptools-rust<2"] +requires = [ + "setuptools_scm[toml]>=4", + "cython", + "cmake>=3.24.2,<3.28; python_version>='3.8'", + "setuptools-rust<2", + "patchelf>=0.17.0.0; sys_platform == 'linux'", +] build-backend = "setuptools.build_meta" [project] diff --git a/setup.py b/setup.py index f0983a3875c..b34d6814222 100644 --- a/setup.py +++ b/setup.py @@ -19,7 +19,7 @@ from setuptools_rust import build_rust -from setuptools import Extension, find_packages, setup # isort: skip +from setuptools import Distribution, Extension, find_packages, setup # isort: skip from setuptools.command.build_ext import build_ext # isort: skip from setuptools.command.build_py import build_py as BuildPyCommand # isort: skip from pathlib import Path # isort: skip @@ -45,6 +45,13 @@ from urllib.request import urlretrieve +# workaround for ModuleNotFound. +sys.path.insert(0, str(Path(__file__).parent.resolve())) + +from build_libnative import build_crate +from build_libnative import clean_crate + + HERE = Path(__file__).resolve().parent COMPILE_MODE = "Release" @@ -76,6 +83,7 @@ DDUP_DIR = HERE / "ddtrace" / "internal" / "datadog" / "profiling" / "ddup" CRASHTRACKER_DIR = HERE / "ddtrace" / "internal" / "datadog" / "profiling" / "crashtracker" STACK_V2_DIR = HERE / "ddtrace" / "internal" / "datadog" / "profiling" / "stack_v2" +NATIVE_CRATE = HERE / "src" / "native" BUILD_PROFILING_NATIVE_TESTS = os.getenv("DD_PROFILING_NATIVE_TESTS", "0").lower() in ("1", "yes", "on", "true") @@ -176,6 +184,22 @@ def is_64_bit_python(): return sys.maxsize > (1 << 32) +class PatchedDistribution(Distribution): + def __init__(self, attrs=None): + super().__init__(attrs) + # Tell ext_hashes about your manually-built Rust artifact + self.rust_extensions = [ + RustExtension( + # The Python import path of your extension: + "ddtrace.internal.native._native", + # Path to your Cargo.toml so setuptools-rust can infer names + path=str(Path(__file__).parent / "src" / "native" / "Cargo.toml"), + # Use no-binding if you don't need PyO3 bindings + binding=Binding.NoBinding, + ) + ] + + class ExtensionHashes(build_ext): def run(self): try: @@ -199,14 +223,7 @@ def run(self): hash_digest = sources_hash.hexdigest() entries: t.List[t.Tuple[str, str, str]] = [] - - if isinstance(ext, RustExtension): - entries.extend( - (module, hash_digest, str(Path(module.replace(".", os.sep) + ".*-*-*").resolve())) - for module in ext.target.values() - ) - else: - entries.append((ext.name, hash_digest, str(Path(self.get_ext_fullpath(ext.name))))) + entries.append((ext.name, hash_digest, str(Path(self.get_ext_fullpath(ext.name))))) # Include any dependencies that might have been built alongside # the extension. @@ -386,14 +403,88 @@ def remove_artifacts(): shutil.rmtree(LIBDDWAF_DOWNLOAD_DIR, True) shutil.rmtree(IAST_DIR / "*.so", True) + @staticmethod + def remove_rust(): + clean_crate(NATIVE_CRATE) + def run(self): + CleanLibraries.remove_rust() CleanLibraries.remove_artifacts() CleanCommand.run(self) -class CMakeBuild(build_ext): +class CustomBuildExt(build_ext): INCREMENTAL = os.getenv("DD_CMAKE_INCREMENTAL_BUILD", "1").lower() in ("1", "yes", "on", "true") + def run(self): + self.build_rust() + super().run() + for ext in self.extensions: + self.build_extension(ext) + + def build_rust(self): + is_release = True + build_crate(NATIVE_CRATE, is_release, native_features) + + target_dir = NATIVE_CRATE / "target" + if sys.platform == "win32" and not is_64_bit_python(): + target_dir = target_dir / "i686-pc-windows-msvc" + if is_release: + target_dir = target_dir / "release" + else: + target_dir = target_dir / "debug" + + library = None + link_file = None + if sys.platform == "win32": + try: + (library,) = target_dir.glob("_native.dll") + except StopIteration: + raise RuntimeError(f"Could not find _native.dll in {target_dir}") + + try: + link_file = next(target_dir.glob("_native.dll.lib")) + except StopIteration: + raise RuntimeError(f"Could not find _native.dll.lib in {target_dir}") + elif sys.platform == "darwin": + library = next(target_dir.glob("lib_native.dylib")) + else: + library = next(target_dir.glob("lib_native.so")) + + if not library: + raise RuntimeError("Not able to find native library") + + self.suffix = sysconfig.get_config_var("EXT_SUFFIX") + native_name = f"_native{self.suffix}" + + # Set SONAME (needed for auditwheel) + if sys.platform.startswith("linux"): + subprocess.run(["patchelf", "--set-soname", native_name, str(library)], check=True) + elif sys.platform == "darwin": + subprocess.run(["install_name_tool", "-id", native_name, str(library)], check=True) + + if IS_EDITABLE or getattr(self, "inplace", False): + self.output_dir = Path(__file__).parent / "ddtrace" / "internal" / "native" + else: + self.output_dir = Path(__file__).parent / Path(self.build_lib) / "ddtrace" / "internal" / "native" + + destination = self.output_dir / native_name + self.output_dir.mkdir(parents=True, exist_ok=True) + shutil.copy2(library, destination) + + # Rename .lib file so it has the same base name as the dll. + self.windows_link_file = None + if link_file is not None: + new_link_file = (target_dir / native_name).with_suffix(".lib") + shutil.copy2(link_file, new_link_file) + self.windows_link_file = new_link_file + + @staticmethod + def is_installed(bin_file): + for path in os.environ.get("PATH", "").split(os.pathsep): + return os.path.isfile(os.path.join(path, bin_file)) + return False + @staticmethod def try_strip_symbols(so_file): if CURRENT_OS == "Linux" and shutil.which("strip") is not None: @@ -465,7 +556,8 @@ def build_extension_cmake(self, ext: "CMakeExtension") -> None: # We need to copy the binary where setuptools expects it full_path.parent.mkdir(parents=True, exist_ok=True) - shutil.copy(ext_path, full_path) + if ext_path.resolve() != full_path.resolve(): + shutil.copy(ext_path, full_path) return else: @@ -490,8 +582,15 @@ def build_extension_cmake(self, ext: "CMakeExtension") -> None: "-DCMAKE_BUILD_TYPE={}".format(ext.build_type), "-DLIB_INSTALL_DIR={}".format(output_dir), "-DEXTENSION_NAME={}".format(extension_basename), + "-DEXTENSION_SUFFIX={}".format(self.suffix), + "-DNATIVE_EXTENSION_LOCATION={}".format(self.output_dir), ] + if self.windows_link_file is not None: + cmake_args += [ + "-DNATIVE_IMPLIB={}".format(self.windows_link_file), + ] + if BUILD_PROFILING_NATIVE_TESTS: cmake_args += ["-DBUILD_TESTING=ON"] @@ -587,7 +686,7 @@ def dump_metadata(cls): ("DD_COMPILE_MODE", COMPILE_MODE), ("DD_USE_SCCACHE", SCCACHE_COMPILE), ("DD_FAST_BUILD", FAST_BUILD), - ("DD_CMAKE_INCREMENTAL_BUILD", CMakeBuild.INCREMENTAL), + ("DD_CMAKE_INCREMENTAL_BUILD", CustomBuildExt.INCREMENTAL), ]: print(f"\t{n}: {v}", file=f) f.write("Extension build times:\n") @@ -623,7 +722,7 @@ def wrapper(self, ext, *args, **kwargs): if DebugMetadata.enabled: DebugMetadata.start_ns = time.time_ns() - CMakeBuild.build_extension = debug_build_extension(CMakeBuild.build_extension) + CustomBuildExt.build_extension = debug_build_extension(CustomBuildExt.build_extension) build_rust.build_extension = debug_build_extension(build_rust.build_extension) atexit.register(DebugMetadata.dump_metadata) @@ -654,7 +753,7 @@ def __init__( def get_sources(self, cmd: build_ext) -> t.List[Path]: """ Returns the list of source files for this extension. - This is used by the CMakeBuild class to determine if the extension needs to be rebuilt. + This is used by the CustomBuildExt class to determine if the extension needs to be rebuilt. """ full_path = Path(cmd.get_ext_fullpath(self.name)) @@ -744,6 +843,7 @@ def get_exts_for(name): if not IS_PYSTON: + native_features = [] ext_modules: t.List[t.Union[Extension, Cython.Distutils.Extension, RustExtension]] = [ Extension( "ddtrace.profiling.collector._memalloc", @@ -801,6 +901,7 @@ def get_exts_for(name): ) if CURRENT_OS in ("Linux", "Darwin") and is_64_bit_python(): + native_features.append("profiling") ext_modules.append( CMakeExtension( "ddtrace.internal.datadog.profiling.ddup._ddup", @@ -844,6 +945,7 @@ def get_exts_for(name): else: ext_modules = [] + native_features = [] interpose_sccache() setup( @@ -863,7 +965,7 @@ def get_exts_for(name): # enum34 is an enum backport for earlier versions of python # funcsigs backport required for vendored debtcollector cmdclass={ - "build_ext": CMakeBuild, + "build_ext": CustomBuildExt, "build_py": LibraryDownloader, "build_rust": build_rust, "clean": CleanLibraries, @@ -932,13 +1034,5 @@ def get_exts_for(name): compiler_directives={"language_level": "3"}, ) + get_exts_for("psutil"), - rust_extensions=[ - RustExtension( - "ddtrace.internal.native._native", - path="src/native/Cargo.toml", - py_limited_api="auto", - binding=Binding.PyO3, - debug=os.getenv("_DD_RUSTC_DEBUG") == "1", - ), - ], + distclass=PatchedDistribution, ) diff --git a/src/native/.cargo/config.toml b/src/native/.cargo/config.toml new file mode 100644 index 00000000000..c9882cd5c14 --- /dev/null +++ b/src/native/.cargo/config.toml @@ -0,0 +1,13 @@ +[build] +rustflags = ["-C", "relocation-model=pic"] + +[target.'cfg(target_os = "windows")'] +rustflags = [ + "-C", "target-feature=+crt-static" +] + +[target.x86_64-unknown-linux-musl] +rustflags = ["-C", "target-feature=-crt-static"] + +[target.aarch64-unknown-linux-musl] +rustflags = ["-C", "target-feature=-crt-static"] diff --git a/src/native/Cargo.lock b/src/native/Cargo.lock index 3fe89462f21..99c2483d1fe 100644 --- a/src/native/Cargo.lock +++ b/src/native/Cargo.lock @@ -2,6 +2,101 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +dependencies = [ + "anstyle", + "once_cell", + "windows-sys 0.59.0", +] + [[package]] name = "anyhow" version = "1.0.97" @@ -14,12 +109,115 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +[[package]] +name = "aws-lc-rs" +version = "1.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dabb68eb3a7aa08b46fddfd59a3d55c978243557a90ab804769f7e20e67d2b01" +dependencies = [ + "aws-lc-sys", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77926887776171ced7d662120a75998e444d3750c951abfe07f90da130514b1f" +dependencies = [ + "bindgen", + "cc", + "cmake", + "dunce", + "fs_extra", +] + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bindgen" +version = "0.69.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "itertools", + "lazy_static", + "lazycell", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn", + "which", +] + [[package]] name = "bitflags" version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +[[package]] +name = "bitmaps" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d084b0137aaa901caf9f1e8b21daa6aa24d41cd806e111335541eff9683bd6" + +[[package]] +name = "blazesym" +version = "0.2.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86d5caf72227115ce486e764e9199d6eab3437c51dacd78c3fae78ca1340c27d" +dependencies = [ + "cpp_demangle", + "gimli", + "libc", + "memmap2", + "miniz_oxide", + "rustc-demangle", +] + +[[package]] +name = "build_common" +version = "19.1.0" +source = "git+https://github.com/DataDog/libdatadog?rev=v19.1.0#81b0e5a640cde084836c374e73b2e176498cbe06" +dependencies = [ + "cbindgen", + "serde", + "serde_json", +] + +[[package]] +name = "bumpalo" +version = "3.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" + [[package]] name = "byteorder" version = "1.5.0" @@ -32,6 +230,45 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +[[package]] +name = "cbindgen" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "975982cdb7ad6a142be15bdf84aea7ec6a9e5d4d797c004d43185b24cfe4e684" +dependencies = [ + "clap", + "heck", + "indexmap", + "log", + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn", + "tempfile", + "toml", +] + +[[package]] +name = "cc" +version = "1.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -39,368 +276,2015 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "datadog-ddsketch" -version = "19.1.0" -source = "git+https://github.com/DataDog/libdatadog?rev=v19.1.0#81b0e5a640cde084836c374e73b2e176498cbe06" +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +version = "0.4.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" dependencies = [ - "prost", + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-link", ] [[package]] -name = "datadog-library-config" -version = "0.0.2" -source = "git+https://github.com/DataDog/libdatadog?rev=v19.1.0#81b0e5a640cde084836c374e73b2e176498cbe06" +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ - "anyhow", - "memfd", - "rand", - "rmp", - "rmp-serde", - "serde", - "serde_yaml", + "glob", + "libc", + "libloading", ] [[package]] -name = "ddtrace-native" -version = "0.1.0" +name = "clap" +version = "4.5.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eccb054f56cbd38340b380d4a8e69ef1f02f1af43db2f0cc817a4774d80ae071" dependencies = [ - "datadog-ddsketch", - "datadog-library-config", - "pyo3", - "pyo3-build-config", + "clap_builder", ] [[package]] -name = "either" -version = "1.15.0" +name = "clap_builder" +version = "4.5.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "efd9466fac8543255d3b1fcad4762c5e116ffe808c8a3043d4263cd4fd4862a2" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] [[package]] -name = "equivalent" -version = "1.0.2" +name = "clap_lex" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] -name = "errno" -version = "0.3.10" +name = "cmake" +version = "0.1.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" dependencies = [ - "libc", - "windows-sys", + "cc", ] [[package]] -name = "getrandom" -version = "0.2.15" +name = "colorchoice" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + +[[package]] +name = "common-multipart-rfc7578" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f08d53b5e0c302c5830cfa7511ba0edc3f241c691a95c0d184dfb761e11a6cc2" dependencies = [ - "cfg-if", - "libc", - "wasi", + "bytes", + "futures-core", + "futures-util", + "http", + "mime", + "mime_guess", + "rand", + "thiserror", ] [[package]] -name = "hashbrown" -version = "0.15.2" +name = "const_format" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] [[package]] -name = "heck" -version = "0.5.0" +name = "const_format_proc_macros" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] [[package]] -name = "indexmap" -version = "2.8.0" +name = "core-foundation" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" dependencies = [ - "equivalent", - "hashbrown", + "core-foundation-sys", + "libc", ] [[package]] -name = "indoc" -version = "2.0.6" +name = "core-foundation-sys" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] -name = "itertools" -version = "0.10.5" +name = "cpp_demangle" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "96e58d342ad113c2b878f16d5d034c03be492ae460cdbc02b7f0f2284d310c7d" dependencies = [ - "either", + "cfg-if", ] [[package]] -name = "itoa" -version = "1.0.15" +name = "crossbeam-queue" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "datadog-alloc" +version = "19.1.0" +source = "git+https://github.com/DataDog/libdatadog?rev=v19.1.0#81b0e5a640cde084836c374e73b2e176498cbe06" +dependencies = [ + "allocator-api2", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "datadog-crashtracker" +version = "19.1.0" +source = "git+https://github.com/DataDog/libdatadog?rev=v19.1.0#81b0e5a640cde084836c374e73b2e176498cbe06" +dependencies = [ + "anyhow", + "backtrace", + "blazesym", + "cc", + "chrono", + "ddcommon", + "ddtelemetry", + "http", + "libc", + "nix", + "num-derive", + "num-traits", + "os_info", + "page_size", + "portable-atomic", + "rand", + "schemars", + "serde", + "serde_json", + "symbolic-common", + "symbolic-demangle", + "thiserror", + "tokio", + "uuid", + "windows", +] + +[[package]] +name = "datadog-crashtracker-ffi" +version = "19.1.0" +source = "git+https://github.com/DataDog/libdatadog?rev=v19.1.0#81b0e5a640cde084836c374e73b2e176498cbe06" +dependencies = [ + "anyhow", + "build_common", + "datadog-crashtracker", + "ddcommon", + "ddcommon-ffi", + "function_name", + "libc", + "serde", + "serde_json", + "symbolic-common", + "symbolic-demangle", + "windows", +] + +[[package]] +name = "datadog-ddsketch" +version = "19.1.0" +source = "git+https://github.com/DataDog/libdatadog?rev=v19.1.0#81b0e5a640cde084836c374e73b2e176498cbe06" +dependencies = [ + "prost", +] + +[[package]] +name = "datadog-library-config" +version = "0.0.2" +source = "git+https://github.com/DataDog/libdatadog?rev=v19.1.0#81b0e5a640cde084836c374e73b2e176498cbe06" +dependencies = [ + "anyhow", + "memfd", + "rand", + "rmp", + "rmp-serde", + "serde", + "serde_yaml", +] + +[[package]] +name = "datadog-profiling" +version = "19.1.0" +source = "git+https://github.com/DataDog/libdatadog?rev=v19.1.0#81b0e5a640cde084836c374e73b2e176498cbe06" +dependencies = [ + "anyhow", + "bitmaps", + "byteorder", + "bytes", + "chrono", + "datadog-alloc", + "datadog-profiling-protobuf", + "ddcommon", + "futures", + "http", + "http-body-util", + "hyper", + "hyper-multipart-rfc7578", + "indexmap", + "lz4_flex", + "mime", + "prost", + "rustc-hash", + "serde", + "serde_json", + "target-triple", + "tokio", + "tokio-util", +] + +[[package]] +name = "datadog-profiling-ffi" +version = "19.1.0" +source = "git+https://github.com/DataDog/libdatadog?rev=v19.1.0#81b0e5a640cde084836c374e73b2e176498cbe06" +dependencies = [ + "anyhow", + "build_common", + "datadog-crashtracker-ffi", + "datadog-profiling", + "ddcommon", + "ddcommon-ffi", + "function_name", + "futures", + "http-body-util", + "hyper", + "libc", + "serde_json", + "tokio-util", +] + +[[package]] +name = "datadog-profiling-protobuf" +version = "19.1.0" +source = "git+https://github.com/DataDog/libdatadog?rev=v19.1.0#81b0e5a640cde084836c374e73b2e176498cbe06" +dependencies = [ + "prost", +] + +[[package]] +name = "ddcommon" +version = "19.1.0" +source = "git+https://github.com/DataDog/libdatadog?rev=v19.1.0#81b0e5a640cde084836c374e73b2e176498cbe06" +dependencies = [ + "anyhow", + "cc", + "const_format", + "futures", + "futures-core", + "futures-util", + "hex", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "libc", + "nix", + "pin-project", + "regex", + "rustls", + "rustls-native-certs", + "serde", + "static_assertions", + "thiserror", + "tokio", + "tokio-rustls", + "tower-service", + "windows-sys 0.52.0", +] + +[[package]] +name = "ddcommon-ffi" +version = "19.1.0" +source = "git+https://github.com/DataDog/libdatadog?rev=v19.1.0#81b0e5a640cde084836c374e73b2e176498cbe06" +dependencies = [ + "anyhow", + "build_common", + "chrono", + "crossbeam-queue", + "ddcommon", + "hyper", + "serde", +] + +[[package]] +name = "ddtelemetry" +version = "19.1.0" +source = "git+https://github.com/DataDog/libdatadog?rev=v19.1.0#81b0e5a640cde084836c374e73b2e176498cbe06" +dependencies = [ + "anyhow", + "base64", + "datadog-ddsketch", + "ddcommon", + "futures", + "hashbrown", + "http", + "http-body-util", + "hyper", + "hyper-util", + "serde", + "serde_json", + "sys-info", + "tokio", + "tokio-util", + "tracing", + "uuid", +] + +[[package]] +name = "ddtrace-native" +version = "0.1.0" +dependencies = [ + "build_common", + "datadog-ddsketch", + "datadog-library-config", + "datadog-profiling-ffi", + "ddcommon", + "pyo3", + "pyo3-build-config", +] + +[[package]] +name = "debugid" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" +dependencies = [ + "uuid", +] + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + +[[package]] +name = "function_name" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1ab577a896d09940b5fe12ec5ae71f9d8211fff62c919c03a3750a9901e98a7" +dependencies = [ + "function_name-proc-macro", +] + +[[package]] +name = "function_name-proc-macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673464e1e314dd67a0fd9544abc99e8eb28d0c7e3b69b033bcff9b2d00b87333" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +dependencies = [ + "fallible-iterator", + "indexmap", + "stable_deref_trait", +] + +[[package]] +name = "glob" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "http" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hyper" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-multipart-rfc7578" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a60fb748074dd040c8d05d8a002725200fb594e0ffcfa0b83fb8f64616b50267" +dependencies = [ + "bytes", + "common-multipart-rfc7578", + "futures-core", + "http", + "hyper", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +dependencies = [ + "futures-util", + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-native-certs", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.61.0", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "indexmap" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "indoc" +version = "2.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "libc" +version = "0.2.171" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" + +[[package]] +name = "libloading" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +dependencies = [ + "cfg-if", + "windows-targets 0.52.6", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "linux-raw-sys" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" + +[[package]] +name = "log" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "lz4_flex" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a8cbbb2831780bc3b9c15a41f5b49222ef756b6730a95f3decfdd15903eb5a3" +dependencies = [ + "twox-hash", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memfd" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" +dependencies = [ + "rustix 0.38.44", +] + +[[package]] +name = "memmap2" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +dependencies = [ + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + +[[package]] +name = "msvc-demangler" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4c25a3bb7d880e8eceab4822f3141ad0700d20f025991c1f03bd3d00219a5fc" +dependencies = [ + "bitflags", +] + +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags", + "cfg-if", + "cfg_aliases", + "libc", + "memoffset", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75b0bedcc4fe52caa0e03d9f1151a323e4aa5e2d78ba3580400cd3c9e2bc4bc" + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "os_info" +version = "3.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a604e53c24761286860eba4e2c8b23a0161526476b1de520139d69cdb85a6b5" +dependencies = [ + "log", + "serde", + "windows-sys 0.52.0", +] + +[[package]] +name = "page_size" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d5b2194ed13191c1999ae0704b7839fb18384fa22e49b57eeaa97d79ce40da" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "portable-atomic" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" +dependencies = [ + "serde", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "prettyplease" +version = "0.2.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5316f57387668042f561aae71480de936257848f9c43ce528e311d89a07cadeb" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro2" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pyo3" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5203598f366b11a02b13aa20cab591229ff0a89fd121a308a5df751d5fc9219" +dependencies = [ + "cfg-if", + "indoc", + "libc", + "memoffset", + "once_cell", + "portable-atomic", + "pyo3-build-config", + "pyo3-ffi", + "pyo3-macros", + "unindent", +] + +[[package]] +name = "pyo3-build-config" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99636d423fa2ca130fa5acde3059308006d46f98caac629418e53f7ebb1e9999" +dependencies = [ + "once_cell", + "target-lexicon", +] + +[[package]] +name = "pyo3-ffi" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78f9cf92ba9c409279bc3305b5409d90db2d2c22392d443a87df3a1adad59e33" +dependencies = [ + "libc", + "pyo3-build-config", +] + +[[package]] +name = "pyo3-macros" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b999cb1a6ce21f9a6b147dcf1be9ffedf02e0043aec74dc390f3007047cecd9" +dependencies = [ + "proc-macro2", + "pyo3-macros-backend", + "quote", + "syn", +] + +[[package]] +name = "pyo3-macros-backend" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "822ece1c7e1012745607d5cf0bcb2874769f0f7cb34c4cde03b9358eb9ef911a" +dependencies = [ + "heck", + "proc-macro2", + "pyo3-build-config", + "quote", + "syn", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rmp" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustix" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys 0.9.4", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustls" +version = "0.23.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "822ee9188ac4ec04a2f0531e55d035fb2de73f18b41a63c70c2712503b6fb13c" +dependencies = [ + "aws-lc-rs", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pki-types" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" + +[[package]] +name = "rustls-webpki" +version = "0.103.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03" +dependencies = [ + "aws-lc-rs", + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn", +] + +[[package]] +name = "security-framework" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" + +[[package]] +name = "socket2" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "symbolic-common" +version = "12.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23eae23242dffa2e8e66c0e20f4ca1e28391f64e361db1e921a209c9bc70ec3a" +dependencies = [ + "debugid", + "memmap2", + "stable_deref_trait", + "uuid", +] + +[[package]] +name = "symbolic-demangle" +version = "12.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "153faacda0d58dc1eb3e8bbd5dab998041e95bd7f4ab2caeeadc89410617f144" +dependencies = [ + "cpp_demangle", + "msvc-demangler", + "rustc-demangle", + "symbolic-common", +] + +[[package]] +name = "syn" +version = "2.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sys-info" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b3a0d0aba8bf96a0e1ddfdc352fc53b3df7f39318c71854910c3c4b024ae52c" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "target-lexicon" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e502f78cdbb8ba4718f566c418c52bc729126ffd16baee5baa718cf25dd5a69a" + +[[package]] +name = "target-triple" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ac9aa371f599d22256307c24a9d748c041e548cbf599f35d890f9d365361790" + +[[package]] +name = "tempfile" +version = "3.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" +dependencies = [ + "fastrand", + "getrandom 0.3.2", + "once_cell", + "rustix 1.0.5", + "windows-sys 0.59.0", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio" +version = "1.44.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "tokio-macros", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-macros" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] [[package]] -name = "libc" -version = "0.2.171" +name = "tower-service" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] -name = "linux-raw-sys" -version = "0.4.15" +name = "tracing" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "pin-project-lite", + "tracing-core", +] [[package]] -name = "memfd" -version = "0.6.4" +name = "tracing-core" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ - "rustix", + "once_cell", ] [[package]] -name = "memoffset" -version = "0.9.1" +name = "try-lock" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] -name = "num-traits" -version = "0.2.19" +name = "twox-hash" +version = "1.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ - "autocfg", + "cfg-if", + "static_assertions", ] [[package]] -name = "once_cell" -version = "1.21.2" +name = "unicase" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2806eaa3524762875e21c3dcd057bc4b7bfa01ce4da8d46be1cd43649e1cc6b" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] -name = "paste" -version = "1.0.15" +name = "unicode-ident" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] -name = "portable-atomic" -version = "1.11.0" +name = "unicode-xid" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] -name = "ppv-lite86" -version = "0.2.21" +name = "unindent" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] +checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3" [[package]] -name = "proc-macro2" -version = "1.0.94" +name = "unsafe-libyaml" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" -dependencies = [ - "unicode-ident", -] +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" [[package]] -name = "prost" -version = "0.13.5" +name = "untrusted" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" -dependencies = [ - "bytes", - "prost-derive", -] +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] -name = "prost-derive" -version = "0.13.5" +name = "utf8parse" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn", + "getrandom 0.3.2", + "serde", ] [[package]] -name = "pyo3" -version = "0.24.0" +name = "want" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f1c6c3591120564d64db2261bec5f910ae454f01def849b9c22835a84695e86" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "cfg-if", - "indoc", - "libc", - "memoffset", - "once_cell", - "portable-atomic", - "pyo3-build-config", - "pyo3-ffi", - "pyo3-macros", - "unindent", + "try-lock", ] [[package]] -name = "pyo3-build-config" -version = "0.24.0" +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9b6c2b34cf71427ea37c7001aefbaeb85886a074795e35f161f5aecc7620a7a" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" dependencies = [ - "once_cell", - "target-lexicon", + "wit-bindgen-rt", ] [[package]] -name = "pyo3-ffi" -version = "0.24.0" +name = "wasm-bindgen" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5507651906a46432cdda02cd02dd0319f6064f1374c9147c45b978621d2c3a9c" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ - "libc", - "pyo3-build-config", + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", ] [[package]] -name = "pyo3-macros" -version = "0.24.0" +name = "wasm-bindgen-backend" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0d394b5b4fd8d97d48336bb0dd2aebabad39f1d294edd6bcd2cccf2eefe6f42" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ + "bumpalo", + "log", "proc-macro2", - "pyo3-macros-backend", "quote", "syn", + "wasm-bindgen-shared", ] [[package]] -name = "pyo3-macros-backend" -version = "0.24.0" +name = "wasm-bindgen-macro" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd72da09cfa943b1080f621f024d2ef7e2773df7badd51aa30a2be1f8caa7c8e" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ - "heck", - "proc-macro2", - "pyo3-build-config", "quote", - "syn", + "wasm-bindgen-macro-support", ] [[package]] -name = "quote" -version = "1.0.40" +name = "wasm-bindgen-macro-support" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", ] [[package]] -name = "rand" -version = "0.8.5" +name = "wasm-bindgen-shared" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" dependencies = [ - "libc", - "rand_chacha", - "rand_core", + "unicode-ident", ] [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "which" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" dependencies = [ - "ppv-lite86", - "rand_core", + "either", + "home", + "once_cell", + "rustix 0.38.44", ] [[package]] -name = "rand_core" -version = "0.6.4" +name = "winapi" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ - "getrandom", + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", ] [[package]] -name = "rmp" -version = "0.8.14" +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" -dependencies = [ - "byteorder", - "num-traits", - "paste", -] +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] -name = "rmp-serde" -version = "1.3.0" +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" -dependencies = [ - "byteorder", - "rmp", - "serde", -] +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "rustix" -version = "0.38.44" +name = "windows" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +checksum = "7f919aee0a93304be7f62e8e5027811bbba96bcb1de84d6618be56e43f8a32a1" dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys", + "windows-core 0.59.0", + "windows-targets 0.53.0", ] [[package]] -name = "ryu" -version = "1.0.20" +name = "windows-core" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "810ce18ed2112484b0d4e15d022e5f598113e220c53e373fb31e67e21670c1ce" +dependencies = [ + "windows-implement 0.59.0", + "windows-interface", + "windows-result", + "windows-strings 0.3.1", + "windows-targets 0.53.0", +] [[package]] -name = "serde" -version = "1.0.219" +name = "windows-core" +version = "0.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" dependencies = [ - "serde_derive", + "windows-implement 0.60.0", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings 0.4.0", ] [[package]] -name = "serde_derive" -version = "1.0.219" +name = "windows-implement" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "83577b051e2f49a058c308f17f273b570a6a758386fc291b5f6a934dd84e48c1" dependencies = [ "proc-macro2", "quote", @@ -408,58 +2292,68 @@ dependencies = [ ] [[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" +name = "windows-implement" +version = "0.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ - "indexmap", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "syn" -version = "2.0.100" +name = "windows-interface" +version = "0.59.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "unicode-ident", + "syn", ] [[package]] -name = "target-lexicon" -version = "0.13.2" +name = "windows-link" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e502f78cdbb8ba4718f566c418c52bc729126ffd16baee5baa718cf25dd5a69a" +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" [[package]] -name = "unicode-ident" -version = "1.0.18" +name = "windows-result" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +dependencies = [ + "windows-link", +] [[package]] -name = "unindent" -version = "0.2.4" +name = "windows-strings" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3" +checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" +dependencies = [ + "windows-link", +] [[package]] -name = "unsafe-libyaml" -version = "0.2.11" +name = "windows-strings" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" +checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +dependencies = [ + "windows-link", +] [[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +name = "windows-sys" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] [[package]] name = "windows-sys" @@ -467,7 +2361,7 @@ version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -476,14 +2370,30 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" +dependencies = [ + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", ] [[package]] @@ -492,48 +2402,114 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + +[[package]] +name = "winnow" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63d3fcd9bba44b03821e7d699eeee959f3126dcc4aa8e4ae18ec617c2a5cea10" +dependencies = [ + "memchr", +] + +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags", +] + [[package]] name = "zerocopy" version = "0.8.24" @@ -553,3 +2529,9 @@ dependencies = [ "quote", "syn", ] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/src/native/Cargo.toml b/src/native/Cargo.toml index 08c4ca8e915..7486bda2267 100644 --- a/src/native/Cargo.toml +++ b/src/native/Cargo.toml @@ -2,20 +2,34 @@ name = "ddtrace-native" version = "0.1.0" edition = "2021" +resolver = "2" [profile.release] lto = true strip = "debuginfo" -opt-level = 3 +opt-level = 's' +codegen-units = 1 + +[features] +profiling = ["dep:datadog-profiling-ffi"] [dependencies] pyo3 = { version = "0.24", features = ["extension-module"] } datadog-ddsketch = { git = "https://github.com/DataDog/libdatadog", rev = "v19.1.0" } datadog-library-config = { git = "https://github.com/DataDog/libdatadog", rev = "v19.1.0" } +ddcommon = { git = "https://github.com/DataDog/libdatadog", rev = "v19.1.0" } +datadog-profiling-ffi = { git = "https://github.com/DataDog/libdatadog", rev = "v19.1.0", optional = true, features = [ + "cbindgen", + "crashtracker-collector", + "crashtracker-receiver", + "demangler", +] } [build-dependencies] pyo3-build-config = "0.24" - +build_common = { git = "https://github.com/DataDog/libdatadog", rev = "v19.1.0", features = [ + "cbindgen", +] } [lib] name = "_native" diff --git a/src/native/lib.rs b/src/native/lib.rs index 64396a867a8..100f3e43565 100644 --- a/src/native/lib.rs +++ b/src/native/lib.rs @@ -1,9 +1,15 @@ +#[cfg(feature = "profiling")] +pub use datadog_profiling_ffi::*; mod ddsketch; mod library_config; use pyo3::prelude::*; use pyo3::wrap_pyfunction; +/// Dummy function to check if imported lib is generated on windows builds. +#[no_mangle] +pub extern "C" fn ddtrace_force_export_for_windows() {} + #[pymodule] fn _native(m: &Bound<'_, PyModule>) -> PyResult<()> { m.add_class::()?;