Skip to content

Commit a232328

Browse files
authored
[BUILD] Alternative way of exporting symbols (generating .def file) (#2476)
1 parent 8f88553 commit a232328

File tree

3 files changed

+120
-4
lines changed

3 files changed

+120
-4
lines changed

ext/src/dll/CMakeLists.txt

+45-4
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,55 @@ if(WITH_OTLP_HTTP)
5050
PRIVATE opentelemetry_exporter_otlp_http_log)
5151
endif()
5252

53+
find_program(
54+
_vswhere_tool
55+
NAMES vswhere
56+
PATHS "$ENV{ProgramFiles\(x86\)}/Microsoft Visual Studio/Installer")
57+
if(NOT ${vswhere})
58+
message(
59+
FATAL_ERROR "Could not locate vswhere.exe - unable to locate dumpbin.exe")
60+
endif()
61+
62+
execute_process(
63+
COMMAND "${_vswhere_tool}" -latest -find **/dumpbin.exe
64+
OUTPUT_VARIABLE DUMPBIN_PATHS
65+
RESULT_VARIABLE _vs_where_exitcode
66+
OUTPUT_STRIP_TRAILING_WHITESPACE)
67+
68+
message(STATUS "DUMPBIN PATHS: ${DUMPBIN_PATHS} ${RESULT_VARIABLE}")
69+
70+
string(REPLACE "\n" ";" DUMPBIN_PATHS_LIST ${DUMPBIN_PATHS})
71+
72+
list(POP_FRONT DUMPBIN_PATHS_LIST DUMPBIN_PATH)
73+
74+
message(STATUS "DUMPBIN PATH: ${DUMPBIN_PATH}")
75+
76+
# find Powershell executable find_program(DUMPBIN_PATH NAMES dumpbin REQUIRED)
77+
78+
# find Powershell executable
79+
find_program(POWERSHELL_PATH NAMES pwsh powershell REQUIRED)
80+
81+
set(OPENTELEMETRY_INPUT_DEF "${CMAKE_CURRENT_SOURCE_DIR}/input.txt")
82+
5383
add_custom_command(
54-
OUTPUT ${OPENTELEMETRY_EXPORT_DEF}
84+
OUTPUT ${OPENTELEMETRY_INPUT_DEF}
85+
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/input.src"
5586
COMMAND
5687
${CMAKE_CXX_COMPILER}
5788
"-D$<JOIN:$<TARGET_PROPERTY:opentelemetry_cpp,COMPILE_DEFINITIONS>,;-D>" /EP
58-
${CMAKE_CURRENT_SOURCE_DIR}/opentelemetry_cpp.src >
59-
${OPENTELEMETRY_EXPORT_DEF}
60-
COMMAND_EXPAND_LISTS VERBATIM)
89+
${CMAKE_CURRENT_SOURCE_DIR}/input.src > ${OPENTELEMETRY_INPUT_DEF}
90+
VERBATIM COMMAND_EXPAND_LISTS)
91+
92+
add_custom_command(
93+
OUTPUT ${OPENTELEMETRY_EXPORT_DEF}
94+
DEPENDS "${OPENTELEMETRY_INPUT_DEF}"
95+
"${CMAKE_CURRENT_SOURCE_DIR}/make_def.ps1"
96+
COMMAND
97+
${POWERSHELL_PATH} "-ExecutionPolicy" "Bypass" "-File"
98+
"${CMAKE_CURRENT_SOURCE_DIR}/make_def.ps1" "-dumpbin" "${DUMPBIN_PATH}"
99+
"-bindir" ${PROJECT_BINARY_DIR} "-inputfile" ${OPENTELEMETRY_INPUT_DEF}
100+
"-targetfile" ${OPENTELEMETRY_EXPORT_DEF}
101+
VERBATIM)
61102

62103
if(OPENTELEMETRY_INSTALL)
63104
install(

ext/src/dll/input.src

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
// clang-format off
5+
Create@OStreamSpanExporterFactory@trace@exporter@v1@opentelemetry
6+
Create@SimpleSpanProcessorFactory@trace@sdk@v1@opentelemetry
7+
Create@TracerProviderFactory@trace@sdk@v1@opentelemetry
8+
Create@LoggerProviderFactory@logs@sdk@v1@opentelemetry
9+
Create@BatchLogRecordProcessorFactory@logs@sdk@v1@opentelemetry
10+
Create@SimpleLogRecordProcessorFactory@logs@sdk@v1@opentelemetry
11+
Create@MultiLogRecordProcessorFactory@logs@sdk@v1@opentelemetry
12+
ForceFlush@TracerProvider@trace@sdk@v1@opentelemetry
13+
ForceFlush@LoggerProvider@logs@sdk@v1@opentelemetry
14+
OStreamLogRecordExporter@logs@exporter@v1@opentelemetry
15+
Create@OStreamMetricExporterFactory@metrics@exporter@v1@opentelemetry
16+
Create@PeriodicExportingMetricReaderFactory@metrics@sdk@v1@opentelemetry
17+
Create@MeterProviderFactory@metrics@sdk@v1@opentelemetry
18+
Create@MeterContextFactory@metrics@sdk@v1@opentelemetry
19+
Create@ViewFactory@metrics@sdk@v1@opentelemetry
20+
Create@MeterSelectorFactory@metrics@sdk@v1@opentelemetry
21+
Create@InstrumentSelectorFactory@metrics@sdk@v1@opentelemetry
22+
AddMetricReader@MeterContext@metrics@sdk@v1@opentelemetry
23+
AddMetricReader@MeterProvider@metrics@sdk@v1@opentelemetry
24+
AddView@MeterProvider@metrics@sdk@v1@opentelemetry
25+
26+
#if defined(WITH_OTLP_GRPC) || defined(WITH_OTLP_HTTP)
27+
GetOtlpDefaultTracesTimeout@otlp@exporter@v1@opentelemetry
28+
GetOtlpDefaultTracesHeaders@otlp@exporter@v1@opentelemetry
29+
GetOtlpDefaultLogsTimeout@otlp@exporter@v1@opentelemetry
30+
GetOtlpDefaultLogsHeaders@otlp@exporter@v1@opentelemetry
31+
GetOtlpDefaultMetricsTimeout@otlp@exporter@v1@opentelemetry
32+
GetOtlpDefaultMetricsHeaders@otlp@exporter@v1@opentelemetry
33+
GetOtlpDefaultTracesSslCertificatePath@otlp@exporter@v1@opentelemetry
34+
GetOtlpDefaultMetricsSslCertificatePath@otlp@exporter@v1@opentelemetry
35+
GetOtlpDefaultLogsSslCertificatePath@otlp@exporter@v1@opentelemetry
36+
GetOtlpDefaultTracesSslCertificateString@otlp@exporter@v1@opentelemetry
37+
GetOtlpDefaultMetricsSslCertificateString@otlp@exporter@v1@opentelemetry
38+
GetOtlpDefaultLogsSslCertificateString@otlp@exporter@v1@opentelemetry
39+
#endif // defined(WITH_OTLP_GRPC) || defined(WITH_OTLP_HTTP)
40+
41+
#if defined(WITH_OTLP_GRPC)
42+
Create@OtlpGrpcExporterFactory@otlp@exporter@v1@opentelemetry
43+
Create@OtlpGrpcMetricExporterFactory@otlp@exporter@v1@opentelemetry
44+
Create@OtlpGrpcLogRecordExporterFactory@otlp@exporter@v1@opentelemetry
45+
OtlpGrpcExporterOptions@otlp@exporter@v1@opentelemetry
46+
OtlpGrpcMetricExporterOptions@otlp@exporter@v1@opentelemetry
47+
OtlpGrpcLogRecordExporterOptions@otlp@exporter@v1@opentelemetry
48+
GetOtlpDefaultGrpcTracesEndpoint@otlp@exporter@v1@opentelemetry
49+
GetOtlpDefaultGrpcMetricsEndpoint@otlp@exporter@v1@opentelemetry
50+
GetOtlpDefaultGrpcLogsEndpoint@otlp@exporter@v1@opentelemetry
51+
GetOtlpDefaultGrpcTracesIsInsecure@otlp@exporter@v1@opentelemetry
52+
GetOtlpDefaultGrpcMetricsIsInsecure@otlp@exporter@v1@opentelemetry
53+
GetOtlpDefaultGrpcLogsIsInsecure@otlp@exporter@v1@opentelemetry
54+
#endif // defined(WITH_OTLP_GRPC)
55+
56+
#if defined(WITH_OTLP_HTTP)
57+
Create@OtlpHttpExporterFactory@otlp@exporter@v1@opentelemetry
58+
Create@OtlpHttpMetricExporterFactory@otlp@exporter@v1@opentelemetry
59+
Create@OtlpHttpLogRecordExporterFactory@otlp@exporter@v1@opentelemetry
60+
OtlpHttpExporterOptions@otlp@exporter@v1@opentelemetry
61+
OtlpHttpMetricExporterOptions@otlp@exporter@v1@opentelemetry
62+
OtlpHttpLogRecordExporterOptions@otlp@exporter@v1@opentelemetry
63+
GetOtlpDefaultHttpTracesEndpoint@otlp@exporter@v1@opentelemetry
64+
GetOtlpDefaultHttpMetricsEndpoint@otlp@exporter@v1@opentelemetry
65+
GetOtlpDefaultHttpLogsEndpoint@otlp@exporter@v1@opentelemetry
66+
#endif // defined(WITH_OTLP_HTTP)
67+
// clang-format on

ext/src/dll/make_def.ps1

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Copyright The OpenTelemetry Authors
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
param ($dumpbin, $bindir, $inputfile, $targetfile)
5+
6+
"LIBRARY opentelemetry_cpp`r`nEXPORTS`r`n" > $targetfile
7+
8+
Get-ChildItem -Verbose -Path $bindir/sdk/*,$bindir/exporters/* -Include *.lib -Recurse | % { & "$dumpbin" /SYMBOLS $_ | Select-String -Pattern @(Get-Content -Verbose -Path "$inputfile" | Where-Object { $_.Trim() -ne '' } | % { "External\s+\|\s+(\?+[0-9]?$_[^\s]*)\s+\((.*)\)$" }) | % { "; $($_.matches.groups[2])`r`n$($_.matches.groups[1])" } >> $targetfile }

0 commit comments

Comments
 (0)