@@ -299,23 +299,49 @@ if (USE_OPENMP)
299299 endif ()
300300endif ()
301301
302- # Seems that this hack doesn't required since macOS 11 Big Sur
303- if (APPLE AND BUILD_SHARED_LIBS AND CMAKE_HOST_SYSTEM_VERSION VERSION_LESS 20)
304- set (CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1)
305- if (NOT NOFORTRAN)
306- set (CMAKE_Fortran_USE_RESPONSE_FILE_FOR_OBJECTS 1)
307- set (CMAKE_Fortran_CREATE_SHARED_LIBRARY
308- "sh -c 'cat ${CMAKE_BINARY_DIR} /CMakeFiles/openblas_shared.dir/objects*.rsp | xargs -n 1024 ${CMAKE_AR} -ru libopenblas.a && exit 0' "
309- "sh -c '${CMAKE_AR} -rs libopenblas.a ${CMAKE_BINARY_DIR} /driver/others/CMakeFiles/driver_others.dir/xerbla.c.o && exit 0' "
310- "sh -c 'echo \"\" | ${CMAKE_Fortran_COMPILER} -o dummy.o -c -x f95-cpp-input - '"
311- "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'"
312- "sh -c 'ls -l ${CMAKE_BINARY_DIR} /lib'" )
313- else ()
314- set (CMAKE_C_CREATE_SHARED_LIBRARY
315- "sh -c 'cat ${CMAKE_BINARY_DIR} /CMakeFiles/openblas_shared.dir/objects*.rsp | xargs -n 1024 ${CMAKE_AR} -ru libopenblas.a && exit 0' "
316- "sh -c '${CMAKE_AR} -rs libopenblas.a ${CMAKE_BINARY_DIR} /driver/others/CMakeFiles/driver_others.dir/xerbla.c.o && exit 0' "
317- "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'" )
318- endif ()
302+ # Fix "Argument list too long" for macOS with Intel CPUs and DYNAMIC_ARCH turned on
303+ if (APPLE AND DYNAMIC_ARCH AND (NOT CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64" ))
304+ # Use response files
305+ set (CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1)
306+ # Always build static library first
307+ if (INTERFACE64)
308+ set (STATIC_FILE "libopenblas_64.a" )
309+ else ()
310+ set (STATIC_FILE "libopenblas.a" )
311+ endif ()
312+ if (BUILD_STATIC_LIBS)
313+ set (STATIC_PATH "${CMAKE_LIBRARY_OUTPUT_DIRECTORY} /${STATIC_FILE} " )
314+ else ()
315+ add_library (${OpenBLAS_LIBNAME} _static STATIC ${TARGET_OBJS} ${OpenBLAS_DEF_FILE} )
316+ set (STATIC_PATH STATIC_FILE)
317+ endif ()
318+ set (CREATE_STATIC_LIBRARY_COMMAND
319+ "sh -c 'cat ${CMAKE_BINARY_DIR} /CMakeFiles/openblas_shared.dir/objects*.rsp | xargs -n 1024 ${CMAKE_AR} -ru ${STATIC_PATH} && exit 0' "
320+ "sh -c '${CMAKE_AR} -rs ${STATIC_PATH} ${CMAKE_BINARY_DIR} /driver/others/CMakeFiles/driver_others.dir/xerbla.c.o && exit 0' " )
321+ if (BUILD_SHARED_LIBS )
322+ add_dependencies (${OpenBLAS_LIBNAME} _shared ${OpenBLAS_LIBNAME} _static )
323+ set (SHARED_PATH "${CMAKE_LIBRARY_OUTPUT_DIRECTORY} /libopenblas.${OpenBLAS_MAJOR_VERSION} .${OpenBLAS_MINOR_VERSION} .dylib" )
324+ endif ()
325+ if (USE_OPENMP)
326+ get_target_property (OMP_LIB OpenMP::OpenMP_C INTERFACE_LINK_LIBRARIES )
327+ else ()
328+ set (OMP_LIB "" )
329+ endif ()
330+ if (NOT NOFORTRAN)
331+ set (CMAKE_Fortran_USE_RESPONSE_FILE_FOR_OBJECTS 1)
332+ set (CMAKE_Fortran_CREATE_STATIC_LIBRARY ${CREATE_STATIC_LIBRARY_COMMAND} )
333+ if (BUILD_SHARED_LIBS )
334+ set (CMAKE_Fortran_CREATE_SHARED_LIBRARY
335+ "sh -c 'echo \"\" | ${CMAKE_Fortran_COMPILER} -o dummy.o -c -x f95-cpp-input - '"
336+ "sh -c '${CMAKE_Fortran_COMPILER} -fpic -shared -Wl,-all_load -Wl,-force_load,${STATIC_PATH} dummy.o -o ${SHARED_PATH} ${OMP_LIB} '" )
337+ endif ()
338+ else ()
339+ set (CMAKE_C_CREATE_STATIC_LIBRARY ${CREATE_STATIC_LIBRARY_COMMAND} )
340+ if (BUILD_SHARED_LIBS )
341+ set (CMAKE_C_CREATE_SHARED_LIBRARY
342+ "sh -c '${CMAKE_C_COMPILER} -fpic -shared -Wl,-all_load -Wl,-force_load,${STATIC_PATH} -o ${SHARED_PATH} ${OMP_LIB} '" )
343+ endif ()
344+ endif ()
319345endif ()
320346
321347# Handle MSVC exports
0 commit comments