Skip to content

Commit 91b8f76

Browse files
committed
Avoid using non-existing symbols in .map
to fix: "ld.lld: error: version script assignment of 'UMF_1.0' to symbol 'umfLevelZeroMemoryProviderOps' failed: symbol not defined" when using lld linker
1 parent 148a837 commit 91b8f76

File tree

5 files changed

+45
-21
lines changed

5 files changed

+45
-21
lines changed

CMakeLists.txt

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,18 @@ else()
390390
)
391391
endif()
392392

393+
set(UMF_OPTIONAL_SYMBOLS_LINUX "")
394+
set(UMF_OPTIONAL_SYMBOLS_WINDOWS "")
395+
396+
# Conditional configuration for Level Zero provider
397+
if(UMF_BUILD_LEVEL_ZERO_PROVIDER)
398+
add_optional_symbol(umfLevelZeroMemoryProviderOps)
399+
endif()
400+
401+
if(NOT UMF_DISABLE_HWLOC)
402+
add_optional_symbol(umfOsMemoryProviderOps)
403+
endif()
404+
393405
add_subdirectory(src)
394406

395407
if(UMF_BUILD_TESTS)
@@ -408,17 +420,6 @@ if(UMF_BUILD_EXAMPLES)
408420
endif()
409421
endif()
410422

411-
# Conditional configuration for Level Zero provider
412-
if(UMF_BUILD_LEVEL_ZERO_PROVIDER)
413-
set(OPTIONAL_SYMBOLS "umfLevelZeroMemoryProviderOps")
414-
else()
415-
set(OPTIONAL_SYMBOLS "")
416-
endif()
417-
418-
# Configure the DEF file based on whether Level Zero provider is built
419-
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/libumf.def.in"
420-
"${CMAKE_CURRENT_BINARY_DIR}/src/libumf.def" @ONLY)
421-
422423
if(UMF_FORMAT_CODE_STYLE)
423424
find_program(CLANG_FORMAT NAMES clang-format-15 clang-format-15.0
424425
clang-format)

cmake/helpers.cmake

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,3 +417,12 @@ macro(add_sanitizer_flag flag)
417417

418418
set(CMAKE_REQUIRED_FLAGS ${SAVED_CMAKE_REQUIRED_FLAGS})
419419
endmacro()
420+
421+
function(add_optional_symbol symbol)
422+
set(UMF_OPTIONAL_SYMBOLS_WINDOWS
423+
"${UMF_OPTIONAL_SYMBOLS_WINDOWS} \n ${symbol}"
424+
PARENT_SCOPE)
425+
set(UMF_OPTIONAL_SYMBOLS_LINUX
426+
"${UMF_OPTIONAL_SYMBOLS_LINUX} \n ${symbol};"
427+
PARENT_SCOPE)
428+
endfunction()

src/CMakeLists.txt

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,29 @@ if(NOT UMF_DISABLE_HWLOC)
112112
provider/provider_os_memory_windows.c)
113113

114114
set(UMF_LIBS ${UMF_LIBS} ${LIBHWLOC_LIBRARIES})
115+
116+
if(NOT WINDOWS)
117+
add_optional_symbol(umfMemspaceCreateFromNumaArray)
118+
add_optional_symbol(umfMemspaceHighestBandwidthGet)
119+
add_optional_symbol(umfMemspaceHighestCapacityGet)
120+
add_optional_symbol(umfMemspaceHostAllGet)
121+
add_optional_symbol(umfMemspaceLowestLatencyGet)
122+
endif()
115123
endif()
116124

125+
if(WINDOWS)
126+
message(STATUS "UMF_OPTIONAL_SYMBOLS: ${UMF_OPTIONAL_SYMBOLS_WINDOWS}")
127+
else()
128+
message(STATUS "UMF_OPTIONAL_SYMBOLS: ${UMF_OPTIONAL_SYMBOLS_LINUX}")
129+
endif()
130+
131+
# Configure the DEF file based on whether Level Zero provider is built
132+
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/libumf.def.in"
133+
"${CMAKE_CURRENT_BINARY_DIR}/libumf.def" @ONLY)
134+
135+
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/libumf.map.in"
136+
"${CMAKE_CURRENT_BINARY_DIR}/libumf.map" @ONLY)
137+
117138
set(UMF_PRIVATE_LIBRARY_DIRS ${UMF_PRIVATE_LIBRARY_DIRS}
118139
${LIBHWLOC_LIBRARY_DIRS})
119140

@@ -140,7 +161,7 @@ if(UMF_BUILD_SHARED_LIBRARY)
140161
TYPE SHARED
141162
SRCS ${UMF_SOURCES}
142163
LIBS ${UMF_LIBS} ${HWLOC_LIB}
143-
LINUX_MAP_FILE ${CMAKE_CURRENT_SOURCE_DIR}/libumf.map
164+
LINUX_MAP_FILE ${CMAKE_CURRENT_BINARY_DIR}/libumf.map
144165
WINDOWS_DEF_FILE ${CMAKE_CURRENT_BINARY_DIR}/libumf.def)
145166
set(UMF_COMMON_COMPILE_DEFINITIONS ${UMF_COMMON_COMPILE_DEFINITIONS}
146167
"UMF_SHARED_LIBRARY")

src/libumf.def.in

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ EXPORTS
4545
umfMemspaceMemtargetGet
4646
umfMemtargetGetType
4747
umfOpenIPCHandle
48-
umfOsMemoryProviderOps
4948
umfPoolAlignedMalloc
5049
umfPoolByPtr
5150
umfPoolCalloc
@@ -62,4 +61,4 @@ EXPORTS
6261
umfProxyPoolOps
6362
umfPutIPCHandle
6463
umfScalablePoolOps
65-
@OPTIONAL_SYMBOLS@
64+
@UMF_OPTIONAL_SYMBOLS_WINDOWS@

src/libumf.map renamed to src/libumf.map.in

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ UMF_1.0 {
1111
umfFree;
1212
umfGetIPCHandle;
1313
umfGetLastFailedMemoryProvider;
14-
umfLevelZeroMemoryProviderOps;
1514
umfMemoryTrackerGetAllocInfo;
1615
umfMemoryProviderAlloc;
1716
umfMemoryProviderAllocationMerge;
@@ -35,17 +34,11 @@ UMF_1.0 {
3534
umfMempolicyDestroy;
3635
umfMempolicySetCustomSplitPartitions;
3736
umfMempolicySetInterleavePartSize;
38-
umfMemspaceCreateFromNumaArray;
3937
umfMemspaceDestroy;
4038
umfMemspaceMemtargetNum;
4139
umfMemspaceMemtargetGet;
42-
umfMemspaceHighestBandwidthGet;
43-
umfMemspaceHighestCapacityGet;
44-
umfMemspaceHostAllGet;
45-
umfMemspaceLowestLatencyGet;
4640
umfMemtargetGetType;
4741
umfOpenIPCHandle;
48-
umfOsMemoryProviderOps;
4942
umfPoolAlignedMalloc;
5043
umfPoolByPtr;
5144
umfPoolCalloc;
@@ -62,6 +55,7 @@ UMF_1.0 {
6255
umfProxyPoolOps;
6356
umfPutIPCHandle;
6457
umfScalablePoolOps;
58+
@UMF_OPTIONAL_SYMBOLS_LINUX@
6559
local:
6660
*;
6761
};

0 commit comments

Comments
 (0)