Skip to content

Commit 44632f3

Browse files
committed
Fix "Argument list too long" compilation error for Intel macOS
1 parent dd38b4e commit 44632f3

1 file changed

Lines changed: 38 additions & 17 deletions

File tree

CMakeLists.txt

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -299,23 +299,44 @@ if (USE_OPENMP)
299299
endif()
300300
endif()
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(BUILD_STATIC_LIBS)
308+
set(STATIC_PATH "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libopenblas.a")
309+
else()
310+
add_library(${OpenBLAS_LIBNAME}_static STATIC ${TARGET_OBJS} ${OpenBLAS_DEF_FILE})
311+
set(STATIC_PATH "libopenblas.a")
312+
endif()
313+
set(CREATE_STATIC_LIBRARY_COMMAND
314+
"sh -c 'cat ${CMAKE_BINARY_DIR}/CMakeFiles/openblas_shared.dir/objects*.rsp | xargs -n 1024 ${CMAKE_AR} -ru ${STATIC_PATH} && exit 0' "
315+
"sh -c '${CMAKE_AR} -rs ${STATIC_PATH} ${CMAKE_BINARY_DIR}/driver/others/CMakeFiles/driver_others.dir/xerbla.c.o && exit 0' ")
316+
if(BUILD_SHARED_LIBS)
317+
add_dependencies(${OpenBLAS_LIBNAME}_shared ${OpenBLAS_LIBNAME}_static)
318+
set(SHARED_PATH "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libopenblas.${OpenBLAS_MAJOR_VERSION}.${OpenBLAS_MINOR_VERSION}.dylib")
319+
endif()
320+
if(USE_OPENMP)
321+
get_target_property(OMP_LIB OpenMP::OpenMP_C INTERFACE_LINK_LIBRARIES)
322+
else()
323+
set(OMP_LIB "")
324+
endif()
325+
if(NOT NOFORTRAN)
326+
set(CMAKE_Fortran_USE_RESPONSE_FILE_FOR_OBJECTS 1)
327+
set(CMAKE_Fortran_CREATE_STATIC_LIBRARY ${CREATE_STATIC_LIBRARY_COMMAND})
328+
if(BUILD_SHARED_LIBS)
329+
set(CMAKE_Fortran_CREATE_SHARED_LIBRARY
330+
"sh -c 'echo \"\" | ${CMAKE_Fortran_COMPILER} -o dummy.o -c -x f95-cpp-input - '"
331+
"sh -c '${CMAKE_Fortran_COMPILER} -fpic -shared -Wl,-all_load -Wl,-force_load,${STATIC_PATH} dummy.o -o ${SHARED_PATH} ${OMP_LIB}'")
332+
endif()
333+
else()
334+
set(CMAKE_C_CREATE_STATIC_LIBRARY ${CREATE_STATIC_LIBRARY_COMMAND})
335+
if(BUILD_SHARED_LIBS)
336+
set(CMAKE_C_CREATE_SHARED_LIBRARY
337+
"sh -c '${CMAKE_C_COMPILER} -fpic -shared -Wl,-all_load -Wl,-force_load,${STATIC_PATH} -o ${SHARED_PATH} ${OMP_LIB}'")
338+
endif()
339+
endif()
319340
endif()
320341

321342
# Handle MSVC exports

0 commit comments

Comments
 (0)