@@ -77,6 +77,16 @@ set(SYMBOLPREFIX "" CACHE STRING "Add a prefix to all exported symbol names in
7777
7878set (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#######
8191if (BUILD_WITHOUT_LAPACK)
8292 set (NO_LAPACK 1)
@@ -379,7 +389,7 @@ if (BUILD_SHARED_LIBS AND BUILD_RELAPACK)
379389 endif ()
380390endif ()
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,26 @@ 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 (USE_PERL)
485+ message (STATUS "adding postbuild instruction to rename syms" )
486+ add_custom_command (TARGET ${OpenBLAS_LIBNAME} _static POST_BUILD
487+ COMMAND perl ${PROJECT_SOURCE_DIR} /exports/gensymbol.pl "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
488+ 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
489+ COMMAND lld-link -nodefaultlib:libcmt -defaultlib:msvcrt ${CMAKE_LINKER_FLAGS} -errorlimit:0 -def:${PROJECT_BINARY_DIR} /renamesyms.def ${PROJECT_BINARY_DIR} /dllinit.o $<TARGET_FILE:${OpenBLAS_LIBNAME} _static> -wholearchive:$<TARGET_FILE:${OpenBLAS_LIBNAME} _static> -dll -out:$<TARGET_FILE_DIR:${OpenBLAS_LIBNAME} _static>/${OpenBLAS_LIBNAME} .dll -implib:$<TARGET_FILE_DIR:${OpenBLAS_LIBNAME} _static>/${OpenBLAS_LIBNAME} .dll.a
490+ #if (${REMOVE_STATIC_LIB})
491+ #file (REMOVE $<TARGET_FILE_DIR:${OpenBLAS_LIBNAME}_static>/${OpenBLAS_LIBNAME}.lib)
492+ #endif ()
493+ )
494+ #endif ()
495+ else ()
470496 if (NOT USE_PERL)
471497 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
498+ 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
499+ COMMAND objcopy -v --redefine-syms ${PROJECT_BINARY_DIR} /objcopy.def ${PROJECT_BINARY_DIR} /lib/${OpenBLAS_LIBNAME} .so
474500 COMMENT "renaming symbols"
475501 )
476502 else ()
@@ -481,6 +507,7 @@ if (BUILD_SHARED_LIBS AND NOT ${SYMBOLPREFIX}${SYMBOLSUFFIX} STREQUAL "")
481507 )
482508 endif ()
483509endif ()
510+ endif ()
484511
485512if (BUILD_BENCHMARKS)
486513 #find_package(OpenMP REQUIRED)
@@ -650,4 +677,4 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PN}ConfigVersion.cmake
650677 DESTINATION ${CMAKECONFIG_INSTALL_DIR} )
651678install (EXPORT "${PN}${SUFFIX64} Targets"
652679 NAMESPACE "${PN}${SUFFIX64} ::"
653- DESTINATION ${CMAKECONFIG_INSTALL_DIR} )
680+ DESTINATION ${CMAKECONFIG_INSTALL_DIR} )
0 commit comments