From c9920e8aaf29a2fd4306d1072689e1de21f4e7ed Mon Sep 17 00:00:00 2001 From: Mats Taraldsvik Date: Fri, 5 Jan 2024 07:30:17 +0100 Subject: [PATCH] [opentelemetry_cpp dll] new procedure for exporting symbols (generate .def file) --- ext/src/dll/CMakeLists.txt | 36 +++++++++++++++++-- ext/src/dll/input.src | 73 ++++++++++++++++++++++++++++++++++++++ ext/src/dll/make_def.ps1 | 5 +++ 3 files changed, 111 insertions(+), 3 deletions(-) create mode 100644 ext/src/dll/input.src create mode 100644 ext/src/dll/make_def.ps1 diff --git a/ext/src/dll/CMakeLists.txt b/ext/src/dll/CMakeLists.txt index 687d55e01f..6dc9777530 100644 --- a/ext/src/dll/CMakeLists.txt +++ b/ext/src/dll/CMakeLists.txt @@ -50,14 +50,44 @@ if(WITH_OTLP_HTTP) PRIVATE opentelemetry_exporter_otlp_http_log) endif() + +# find Powershell executable +find_program(DUMPBIN_PATH NAMES dumpbin) + +# find Powershell executable +find_program(POWERSHELL_PATH NAMES pwsh powershell) + +set(OPENTELEMETRY_INPUT_DEF + "${CMAKE_CURRENT_SOURCE_DIR}/input.txt") + add_custom_command( - OUTPUT ${OPENTELEMETRY_EXPORT_DEF} + OUTPUT ${OPENTELEMETRY_INPUT_DEF} + DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/input.src" COMMAND ${CMAKE_CXX_COMPILER} "-D$,;-D>" /EP - ${CMAKE_CURRENT_SOURCE_DIR}/opentelemetry_cpp.src > + ${CMAKE_CURRENT_SOURCE_DIR}/input.src > + ${OPENTELEMETRY_INPUT_DEF} + VERBATIM) + +add_custom_command( + OUTPUT ${OPENTELEMETRY_EXPORT_DEF} + DEPENDS "${OPENTELEMETRY_INPUT_DEF}" "${CMAKE_CURRENT_SOURCE_DIR}/make_def.ps1" + COMMAND + ${POWERSHELL_PATH} + "-ExecutionPolicy" + "Bypass" + "-File" + "${CMAKE_CURRENT_SOURCE_DIR}/make_def.ps1" + "-dumpbin" + ${DUMPBIN_PATH} + "-bindir" + ${PROJECT_BINARY_DIR} + "-inputfile" + ${OPENTELEMETRY_INPUT_DEF} + "-targetfile" ${OPENTELEMETRY_EXPORT_DEF} - COMMAND_EXPAND_LISTS VERBATIM) + VERBATIM) if(OPENTELEMETRY_INSTALL) install( diff --git a/ext/src/dll/input.src b/ext/src/dll/input.src new file mode 100644 index 0000000000..137a09658e --- /dev/null +++ b/ext/src/dll/input.src @@ -0,0 +1,73 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// clang-format off +External\s+\|\s+(\?Create@OStreamSpanExporterFactory@trace@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?Create@SimpleSpanProcessorFactory@trace@sdk@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?Create@TracerProviderFactory@trace@sdk@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?Create@LoggerProviderFactory@logs@sdk@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?Create@BatchLogRecordProcessorFactory@logs@sdk@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?Create@SimpleLogRecordProcessorFactory@logs@sdk@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?Create@MultiLogRecordProcessorFactory@logs@sdk@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?ForceFlush@TracerProvider@trace@sdk@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?ForceFlush@LoggerProvider@logs@sdk@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\??0OStreamLogRecordExporter@logs@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?Create@OStreamMetricExporterFactory@metrics@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?Create@PeriodicExportingMetricReaderFactory@metrics@sdk@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?Create@MeterProviderFactory@metrics@sdk@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?Create@MeterContextFactory@metrics@sdk@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?Create@MeterProviderFactory@metrics@sdk@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?Create@ViewFactory@metrics@sdk@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?Create@MeterSelectorFactory@metrics@sdk@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?Create@InstrumentSelectorFactory@metrics@sdk@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?AddMetricReader@MeterContext@metrics@sdk@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?AddView@MeterProvider@metrics@sdk@v1@opentelemetry[^\s]*)\s+\((.*)\)$ + +#if defined(WITH_OTLP_GRPC) || defined(WITH_OTLP_HTTP) +External\s+\|\s+(\?GetOtlpDefaultTracesTimeout@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultTracesHeaders@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultLogsTimeout@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultLogsHeaders@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultMetricsTimeout@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultMetricsHeaders@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultTracesSslCertificatePath@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultMetricsSslCertificatePath@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultLogsSslCertificatePath@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultTracesSslCertificateString@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultMetricsSslCertificateString@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultLogsSslCertificateString@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +#endif // defined(WITH_OTLP_GRPC) || defined(WITH_OTLP_HTTP) + +#if defined(WITH_OTLP_GRPC) +External\s+\|\s+(\?Create@OtlpGrpcExporterFactory@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?Create@OtlpGrpcMetricExporterFactory@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?Create@OtlpGrpcLogRecordExporterFactory@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?\?0OtlpGrpcExporterOptions@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?\?1OtlpGrpcExporterOptions@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?\?0OtlpGrpcMetricExporterOptions@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?\?1OtlpGrpcMetricExporterOptions@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?\?0OtlpGrpcLogRecordExporterOptions@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?\?1OtlpGrpcLogRecordExporterOptions@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultGrpcTracesEndpoint@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultGrpcMetricsEndpoint@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultGrpcLogsEndpoint@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultGrpcTracesIsInsecure@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultGrpcMetricsIsInsecure@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultGrpcLogsIsInsecure@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +#endif // defined(WITH_OTLP_GRPC) + +#if defined(WITH_OTLP_HTTP) +External\s+\|\s+(\?Create@OtlpHttpExporterFactory@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?Create@OtlpHttpMetricExporterFactory@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?Create@OtlpHttpLogRecordExporterFactory@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?\?0OtlpHttpExporterOptions@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?\?1OtlpHttpExporterOptions@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?\?0OtlpHttpMetricExporterOptions@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?\?1OtlpHttpMetricExporterOptions@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?\?0OtlpHttpLogRecordExporterOptions@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?\?1OtlpHttpLogRecordExporterOptions@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultHttpTracesEndpoint@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultHttpMetricsEndpoint@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +External\s+\|\s+(\?GetOtlpDefaultHttpLogsEndpoint@otlp@exporter@v1@opentelemetry[^\s]*)\s+\((.*)\)$ +#endif // defined(WITH_OTLP_HTTP) +// clang-format on \ No newline at end of file diff --git a/ext/src/dll/make_def.ps1 b/ext/src/dll/make_def.ps1 new file mode 100644 index 0000000000..b2b14c0be6 --- /dev/null +++ b/ext/src/dll/make_def.ps1 @@ -0,0 +1,5 @@ + param ($dumpbin, $bindir, $inputfile, $targetfile) + + "LIBRARY opentelemetry_cpp`r`nEXPORTS`r`n" > $targetfile + + Get-ChildItem -Verbose -Path $bindir/*.lib -Recurse | % { & "$dumpbin" /SYMBOLS $_ | Select-String -Pattern @(Get-Content -Verbose -Path "$inputfile" | Where-Object { $_.Trim() -ne '' }) | % { "; $($_.matches.groups[2])`r`n$($_.matches.groups[1])" } >> $targetfile }