|
|
@@ -299,23 +299,49 @@ if (USE_OPENMP) |
|
|
|
endif() |
|
|
|
endif() |
|
|
|
|
|
|
|
# Seems that this hack doesn't required since macOS 11 Big Sur |
|
|
|
if (APPLE AND BUILD_SHARED_LIBS AND CMAKE_HOST_SYSTEM_VERSION VERSION_LESS 20) |
|
|
|
set (CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1) |
|
|
|
if (NOT NOFORTRAN) |
|
|
|
set (CMAKE_Fortran_USE_RESPONSE_FILE_FOR_OBJECTS 1) |
|
|
|
set (CMAKE_Fortran_CREATE_SHARED_LIBRARY |
|
|
|
"sh -c 'cat ${CMAKE_BINARY_DIR}/CMakeFiles/openblas_shared.dir/objects*.rsp | xargs -n 1024 ${CMAKE_AR} -ru libopenblas.a && exit 0' " |
|
|
|
"sh -c '${CMAKE_AR} -rs libopenblas.a ${CMAKE_BINARY_DIR}/driver/others/CMakeFiles/driver_others.dir/xerbla.c.o && exit 0' " |
|
|
|
"sh -c 'echo \"\" | ${CMAKE_Fortran_COMPILER} -o dummy.o -c -x f95-cpp-input - '" |
|
|
|
"sh -c '${CMAKE_Fortran_COMPILER} -fpic -shared -Wl,-all_load -Wl,-force_load,libopenblas.a -Wl,-noall_load dummy.o -o ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libopenblas.${OpenBLAS_MAJOR_VERSION}.${OpenBLAS_MINOR_VERSION}.dylib'" |
|
|
|
"sh -c 'ls -l ${CMAKE_BINARY_DIR}/lib'") |
|
|
|
else () |
|
|
|
set (CMAKE_C_CREATE_SHARED_LIBRARY |
|
|
|
"sh -c 'cat ${CMAKE_BINARY_DIR}/CMakeFiles/openblas_shared.dir/objects*.rsp | xargs -n 1024 ${CMAKE_AR} -ru libopenblas.a && exit 0' " |
|
|
|
"sh -c '${CMAKE_AR} -rs libopenblas.a ${CMAKE_BINARY_DIR}/driver/others/CMakeFiles/driver_others.dir/xerbla.c.o && exit 0' " |
|
|
|
"sh -c '${CMAKE_C_COMPILER} -fpic -shared -Wl,-all_load -Wl,-force_load,libopenblas.a -Wl,-noall_load -o ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libopenblas.${OpenBLAS_MAJOR_VERSION}.${OpenBLAS_MINOR_VERSION}.dylib'") |
|
|
|
endif () |
|
|
|
# Fix "Argument list too long" for macOS with Intel CPUs and DYNAMIC_ARCH turned on |
|
|
|
if(APPLE AND DYNAMIC_ARCH AND (NOT CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64")) |
|
|
|
# Use response files |
|
|
|
set(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1) |
|
|
|
# Always build static library first |
|
|
|
if(INTERFACE64) |
|
|
|
set(STATIC_FILE "libopenblas_64.a") |
|
|
|
else() |
|
|
|
set(STATIC_FILE "libopenblas.a") |
|
|
|
endif() |
|
|
|
if(BUILD_STATIC_LIBS) |
|
|
|
set(STATIC_PATH "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${STATIC_FILE}") |
|
|
|
else() |
|
|
|
add_library(${OpenBLAS_LIBNAME}_static STATIC ${TARGET_OBJS} ${OpenBLAS_DEF_FILE}) |
|
|
|
set(STATIC_PATH STATIC_FILE) |
|
|
|
endif() |
|
|
|
set(CREATE_STATIC_LIBRARY_COMMAND |
|
|
|
"sh -c 'cat ${CMAKE_BINARY_DIR}/CMakeFiles/openblas_shared.dir/objects*.rsp | xargs -n 1024 ${CMAKE_AR} -ru ${STATIC_PATH} && exit 0' " |
|
|
|
"sh -c '${CMAKE_AR} -rs ${STATIC_PATH} ${CMAKE_BINARY_DIR}/driver/others/CMakeFiles/driver_others.dir/xerbla.c.o && exit 0' ") |
|
|
|
if(BUILD_SHARED_LIBS) |
|
|
|
add_dependencies(${OpenBLAS_LIBNAME}_shared ${OpenBLAS_LIBNAME}_static) |
|
|
|
set(SHARED_PATH "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libopenblas.${OpenBLAS_MAJOR_VERSION}.${OpenBLAS_MINOR_VERSION}.dylib") |
|
|
|
endif() |
|
|
|
if(USE_OPENMP) |
|
|
|
get_target_property(OMP_LIB OpenMP::OpenMP_C INTERFACE_LINK_LIBRARIES) |
|
|
|
else() |
|
|
|
set(OMP_LIB "") |
|
|
|
endif() |
|
|
|
if(NOT NOFORTRAN) |
|
|
|
set(CMAKE_Fortran_USE_RESPONSE_FILE_FOR_OBJECTS 1) |
|
|
|
set(CMAKE_Fortran_CREATE_STATIC_LIBRARY ${CREATE_STATIC_LIBRARY_COMMAND}) |
|
|
|
if(BUILD_SHARED_LIBS) |
|
|
|
set(CMAKE_Fortran_CREATE_SHARED_LIBRARY |
|
|
|
"sh -c 'echo \"\" | ${CMAKE_Fortran_COMPILER} -o dummy.o -c -x f95-cpp-input - '" |
|
|
|
"sh -c '${CMAKE_Fortran_COMPILER} -fpic -shared -Wl,-all_load -Wl,-force_load,${STATIC_PATH} dummy.o -o ${SHARED_PATH} ${OMP_LIB}'") |
|
|
|
endif() |
|
|
|
else() |
|
|
|
set(CMAKE_C_CREATE_STATIC_LIBRARY ${CREATE_STATIC_LIBRARY_COMMAND}) |
|
|
|
if(BUILD_SHARED_LIBS) |
|
|
|
set(CMAKE_C_CREATE_SHARED_LIBRARY |
|
|
|
"sh -c '${CMAKE_C_COMPILER} -fpic -shared -Wl,-all_load -Wl,-force_load,${STATIC_PATH} -o ${SHARED_PATH} ${OMP_LIB}'") |
|
|
|
endif() |
|
|
|
endif() |
|
|
|
endif() |
|
|
|
|
|
|
|
# Handle MSVC exports |
|
|
|