Skip to content

Commit 640840d

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 9a96626 commit 640840d

File tree

5 files changed

+39
-19
lines changed

5 files changed

+39
-19
lines changed

CMakeLists.txt

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,14 @@ else()
325325
)
326326
endif()
327327

328+
set(UMF_OPTIONAL_SYMBOLS_LINUX "")
329+
set(UMF_OPTIONAL_SYMBOLS_WINDOWS "")
330+
331+
# Conditional configuration for Level Zero provider
332+
if(UMF_BUILD_LEVEL_ZERO_PROVIDER)
333+
add_optional_symbol(umfLevelZeroMemoryProviderOps)
334+
endif()
335+
328336
add_subdirectory(src)
329337

330338
if(UMF_BUILD_TESTS)
@@ -343,17 +351,6 @@ if(UMF_BUILD_EXAMPLES)
343351
endif()
344352
endif()
345353

346-
# Conditional configuration for Level Zero provider
347-
if(UMF_BUILD_LEVEL_ZERO_PROVIDER)
348-
set(OPTIONAL_SYMBOLS "umfLevelZeroMemoryProviderOps")
349-
else()
350-
set(OPTIONAL_SYMBOLS "")
351-
endif()
352-
353-
# Configure the DEF file based on whether Level Zero provider is built
354-
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/libumf.def.in"
355-
"${CMAKE_CURRENT_BINARY_DIR}/src/libumf.def" @ONLY)
356-
357354
if(UMF_FORMAT_CODE_STYLE)
358355
find_program(CLANG_FORMAT NAMES clang-format-15 clang-format-15.0
359356
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: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,27 @@ if(NOT UMF_DISABLE_HWLOC)
112112
provider/provider_os_memory_windows.c)
113113

114114
set(UMF_LIBS ${UMF_LIBS} ${LIBHWLOC_LIBRARIES})
115+
116+
add_optional_symbol(umfMemspaceCreateFromNumaArray)
117+
add_optional_symbol(umfMemspaceHighestBandwidthGet)
118+
add_optional_symbol(umfMemspaceHighestCapacityGet)
119+
add_optional_symbol(umfMemspaceHostAllGet)
120+
add_optional_symbol(umfMemspaceLowestLatencyGet)
121+
endif()
122+
123+
if(WINDOWS)
124+
message(STATUS "UMF_OPTIONAL_SYMBOLS: ${UMF_OPTIONAL_SYMBOLS_WINDOWS}")
125+
else()
126+
message(STATUS "UMF_OPTIONAL_SYMBOLS: ${UMF_OPTIONAL_SYMBOLS_LINUX}")
115127
endif()
116128

129+
# Configure the DEF file based on whether Level Zero provider is built
130+
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/libumf.def.in"
131+
"${CMAKE_CURRENT_BINARY_DIR}/libumf.def" @ONLY)
132+
133+
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/libumf.map.in"
134+
"${CMAKE_CURRENT_BINARY_DIR}/libumf.map" @ONLY)
135+
117136
set(UMF_PRIVATE_LIBRARY_DIRS ${UMF_PRIVATE_LIBRARY_DIRS}
118137
${LIBHWLOC_LIBRARY_DIRS})
119138

@@ -140,7 +159,7 @@ if(UMF_BUILD_SHARED_LIBRARY)
140159
TYPE SHARED
141160
SRCS ${UMF_SOURCES}
142161
LIBS ${UMF_LIBS} ${HWLOC_LIB}
143-
LINUX_MAP_FILE ${CMAKE_CURRENT_SOURCE_DIR}/libumf.map
162+
LINUX_MAP_FILE ${CMAKE_CURRENT_BINARY_DIR}/libumf.map
144163
WINDOWS_DEF_FILE ${CMAKE_CURRENT_BINARY_DIR}/libumf.def)
145164
set(UMF_COMMON_COMPILE_DEFINITIONS ${UMF_COMMON_COMPILE_DEFINITIONS}
146165
"UMF_SHARED_LIBRARY")

src/libumf.def.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,4 @@ EXPORTS
6262
umfProxyPoolOps
6363
umfPutIPCHandle
6464
umfScalablePoolOps
65-
@OPTIONAL_SYMBOLS@
65+
@UMF_OPTIONAL_SYMBOLS_WINDOWS@

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

Lines changed: 1 addition & 6 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,14 +34,9 @@ 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;
4842
umfOsMemoryProviderOps;
@@ -62,6 +56,7 @@ UMF_1.0 {
6256
umfProxyPoolOps;
6357
umfPutIPCHandle;
6458
umfScalablePoolOps;
59+
@UMF_OPTIONAL_SYMBOLS_LINUX@
6560
local:
6661
*;
6762
};

0 commit comments

Comments
 (0)