Skip to content

Commit 40e1e58

Browse files
authored
Fix DLL symbol name pre/postfixing on Windows
1 parent 51c244a commit 40e1e58

1 file changed

Lines changed: 31 additions & 3 deletions

File tree

CMakeLists.txt

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,16 @@ set(SYMBOLPREFIX "" CACHE STRING "Add a prefix to all exported symbol names in
7777

7878
set(SYMBOLSUFFIX "" CACHE STRING "Add a suffix to all exported symbol names in the shared library, e.g. _64 for INTERFACE64 builds" )
7979

80+
if (CMAKE_SYSTEM_NAME MATCHES "Windows" AND BUILD_SHARED_LIBS AND NOT (${SYMBOLPREFIX}${SYMBOLSUFFIX} STREQUAL ""))
81+
if (NOT BUILD_STATIC_LIBS)
82+
message (STATUS "forcing build of a temporary static library for symbol renaming")
83+
set (BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared library" FORCE)
84+
set (BUILD_STATIC_LIBS ON CACHE BOOL "Build static library" FORCE)
85+
set (DELETE_STATIC_LIBS 1)
86+
endif ()
87+
endif()
88+
89+
8090
#######
8191
if(BUILD_WITHOUT_LAPACK)
8292
set(NO_LAPACK 1)
@@ -379,7 +389,7 @@ if (BUILD_SHARED_LIBS AND BUILD_RELAPACK)
379389
endif()
380390
endif()
381391

382-
if (BUILD_SHARED_LIBS AND NOT ${SYMBOLPREFIX}${SYMBOLSUFFIX} STREQUAL "")
392+
if (BUILD_SHARED_LIBS OR DELETE_STATIC_LIBS AND NOT ${SYMBOLPREFIX}${SYMBOLSUFFIX} STREQUAL "")
383393
if (NOT DEFINED ARCH)
384394
set(ARCH_IN "x86_64")
385395
else()
@@ -467,10 +477,27 @@ if (BUILD_SHARED_LIBS AND NOT ${SYMBOLPREFIX}${SYMBOLSUFFIX} STREQUAL "")
467477
else ()
468478
set (BZ 0)
469479
endif()
480+
481+
if (CMAKE_SYSTEM_NAME MATCHES "Windows")
482+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
483+
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
484+
#if (NOT USE_PERL)
485+
message(STATUS "adding postbuild instruction to rename syms")
486+
add_custom_command(TARGET ${OpenBLAS_LIBNAME}_static POST_BUILD
487+
#COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_OUTPUT_PATH}/${OpenBLAS_LIBNAME}.lib ${PROJECT_BINARY_DIR}/${OpenBLAS_LIBNAME}.lib
488+
COMMAND sh ${PROJECT_SOURCE_DIR}/exports/gensymbol "win2k" "${ARCH}" "${BU}" "${EXPRECISION_IN}" "${NO_CBLAS_IN}" "${NO_LAPACK_IN}" "${NO_LAPACKE_IN}" "${NEED2UNDERSCORES_IN}" "${ONLY_CBLAS_IN}" \"${SYMBOLPREFIX}\" \"${SYMBOLSUFFIX}\" "${BLD}" "${BBF16}" "${BS}" "${BD}" "${BC}" "${BZ}" > ${PROJECT_BINARY_DIR}/renamesyms.def
489+
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAGS} -I${PROJECT_SOURCE_DIR} -I${PROJECT_BINARY_DIR} -c -o ${PROJECT_BINARY_DIR}/dllinit.o ${PROJECT_SOURCE_DIR}/exports/dllinit.c
490+
COMMAND lld-link ${CMAKE_LINKER_FLAGS} -def:${PROJECT_BINARY_DIR}/renamesyms.def ${PROJECT_BINARY_DIR}/dllinit.o -wholearchive:${PROJECT_BINARY_DIR}/lib/${OpenBLAS_LIBNAME}.lib -dll -out:${PROJECT_BINARY_DIR}/lib/${OpenBLAS_LIBNAME}.dll -implib:${PROJECT_BINARY_DIR}/lib/${OpenBLAS_LIBNAME}.dll.a ${FEXTRALIB} -nodefaultlib:libcmt -defaultlib:msvcrt
491+
if (${REMOVE_STATIC_LIB})
492+
file (REMOVE ${PROJECT_BINARY_DIR}/lib/${OpenBLAS_LIBNAME}.lib)
493+
endif ()
494+
)
495+
#endif ()
496+
else ()
470497
if (NOT USE_PERL)
471498
add_custom_command(TARGET ${OpenBLAS_LIBNAME}_shared POST_BUILD
472-
COMMAND ${PROJECT_SOURCE_DIR}/exports/gensymbol "objcopy" "${ARCH}" "${BU}" "${EXPRECISION_IN}" "${NO_CBLAS_IN}" "${NO_LAPACK_IN}" "${NO_LAPACKE_IN}" "${NEED2UNDERSCORES_IN}" "${ONLY_CBLAS_IN}" \"${SYMBOLPREFIX}\" \"${SYMBOLSUFFIX}\" "${BLD}" "${BBF16}" "${BS}" "${BD}" "${BC}" "${BZ}" > ${PROJECT_BINARY_DIR}/objcopy.def
473-
COMMAND objcopy -v --redefine-syms ${PROJECT_BINARY_DIR}/objcopy.def ${PROJECT_BINARY_DIR}/lib/lib${OpenBLAS_LIBNAME}.so
499+
COMMAND sh ${PROJECT_SOURCE_DIR}/exports/gensymbol "objcopy" "${ARCH}" "${BU}" "${EXPRECISION_IN}" "${NO_CBLAS_IN}" "${NO_LAPACK_IN}" "${NO_LAPACKE_IN}" "${NEED2UNDERSCORES_IN}" "${ONLY_CBLAS_IN}" \"${SYMBOLPREFIX}\" \"${SYMBOLSUFFIX}\" "${BLD}" "${BBF16}" "${BS}" "${BD}" "${BC}" "${BZ}" > ${PROJECT_BINARY_DIR}/objcopy.def
500+
COMMAND objcopy -v --redefine-syms ${PROJECT_BINARY_DIR}/objcopy.def ${PROJECT_BINARY_DIR}/lib/${OpenBLAS_LIBNAME}.so
474501
COMMENT "renaming symbols"
475502
)
476503
else()
@@ -481,6 +508,7 @@ if (BUILD_SHARED_LIBS AND NOT ${SYMBOLPREFIX}${SYMBOLSUFFIX} STREQUAL "")
481508
)
482509
endif()
483510
endif()
511+
endif()
484512
485513
if (BUILD_BENCHMARKS)
486514
#find_package(OpenMP REQUIRED)

0 commit comments

Comments
 (0)