@@ -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,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()
483510endif()
511+ endif()
484512
485513if (BUILD_BENCHMARKS)
486514 #find_package(OpenMP REQUIRED)
0 commit comments