Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 34 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,14 @@ if(APPLE)
if(NOT NOFORTRAN)
set(CMAKE_Fortran_USE_RESPONSE_FILE_FOR_OBJECTS ON)
set(CMAKE_Fortran_USE_RESPONSE_FILE_FOR_LIBRARIES ON)
# NAG Fortran does not support the GCC-specific -x f95-cpp-input flag
# used in the shared library link rule below. Override
# CMAKE_Fortran_CREATE_SHARED_LIBRARY early (before targets are defined)
# to use the C compiler link rule instead; the shared library contains
# only C and assembler objects so this is safe.
if(CMAKE_Fortran_COMPILER_ID MATCHES "NAG")
set(CMAKE_Fortran_CREATE_SHARED_LIBRARY ${CMAKE_C_CREATE_SHARED_LIBRARY})
endif()
endif()
set(CMAKE_NINJA_FORCE_RESPONSE_FILE ON)
endif()
Expand Down Expand Up @@ -360,9 +368,32 @@ if(APPLE AND BUILD_STATIC_LIBS)
if(NOT NOFORTRAN)
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}'")
if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
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}'")
elseif(CMAKE_Fortran_COMPILER_ID MATCHES "NAG")
# NAG does not support -x f95-cpp-input, and macOS needs -dynamiclib
# rather than -Wl,-shared. Use the C compiler as the linker driver
# and add the NAG Fortran runtime so NAGf90_* symbols resolve.
# Locate the NAG Fortran runtime (libf<XY>rts) without hardcoding the
# version digits: NAG 7.1 ships libf71rts, 7.2 ships libf72rts, etc.
get_filename_component(_NAG_FC_DIR "${CMAKE_Fortran_COMPILER}" DIRECTORY)
set(_NAG_RTS_DIR "${_NAG_FC_DIR}/../lib/NAG_Fortran")
file(GLOB _NAG_RTS_CANDIDATES
"${_NAG_RTS_DIR}/libf*rts.dylib"
"${_NAG_RTS_DIR}/libf*rts.a")
if(_NAG_RTS_CANDIDATES)
list(GET _NAG_RTS_CANDIDATES 0 _NAG_RTS_LIB)
get_filename_component(_NAG_RTS_NAME "${_NAG_RTS_LIB}" NAME_WE)
string(REGEX REPLACE "^lib" "" _NAG_RTS_LIBNAME "${_NAG_RTS_NAME}")
set(_NAG_RTS_FLAGS "-L${_NAG_RTS_DIR} -l${_NAG_RTS_LIBNAME}")
else()
set(_NAG_RTS_FLAGS "")
endif()
set(CMAKE_Fortran_CREATE_SHARED_LIBRARY
"sh -c '${CMAKE_C_COMPILER} -dynamiclib -Wl,-all_load -Wl,-force_load,${STATIC_PATH} -o ${SHARED_PATH} ${OMP_LIB} ${_NAG_RTS_FLAGS}'")
endif()
endif()
else()
set(CMAKE_C_CREATE_STATIC_LIBRARY ${CREATE_STATIC_LIBRARY_COMMAND})
Expand Down
Loading