Merge topic 'NAG-Fortran'
09d1c10
FortranCInterface: Recognize NAG Fortran module symbolsaf2ad90
Add NAG Fortran compiler information files24cc3d4
Recognize the NAG Fortran compiler83892c4
Allow Fortran platform files to set empty valuesfe3f878
Detect object files in implicit link information
This commit is contained in:
commit
72163de0a5
|
@ -64,7 +64,8 @@ FUNCTION(CMAKE_DETERMINE_COMPILER_ABI lang src)
|
|||
AND NOT "${CMAKE_OSX_ARCHITECTURES}" MATCHES ";"
|
||||
# Skip this with Xcode for now.
|
||||
AND NOT "${CMAKE_GENERATOR}" MATCHES Xcode)
|
||||
CMAKE_PARSE_IMPLICIT_LINK_INFO("${OUTPUT}" implicit_libs implicit_dirs log)
|
||||
CMAKE_PARSE_IMPLICIT_LINK_INFO("${OUTPUT}" implicit_libs implicit_dirs log
|
||||
"${CMAKE_${lang}_IMPLICIT_OBJECT_REGEX}")
|
||||
FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
||||
"Parsed ${lang} implicit link information from above output:\n${log}\n\n")
|
||||
ENDIF()
|
||||
|
|
|
@ -169,6 +169,9 @@ IF(NOT CMAKE_Fortran_COMPILER_ID_RUN)
|
|||
LIST(APPEND CMAKE_Fortran_COMPILER_ID_VENDORS Compaq)
|
||||
SET(CMAKE_Fortran_COMPILER_ID_VENDOR_FLAGS_Compaq "-what")
|
||||
SET(CMAKE_Fortran_COMPILER_ID_VENDOR_REGEX_Compaq "Compaq Visual Fortran")
|
||||
LIST(APPEND CMAKE_Fortran_COMPILER_ID_VENDORS NAG) # Numerical Algorithms Group
|
||||
SET(CMAKE_Fortran_COMPILER_ID_VENDOR_FLAGS_NAG "-V")
|
||||
SET(CMAKE_Fortran_COMPILER_ID_VENDOR_REGEX_NAG "NAG Fortran Compiler")
|
||||
|
||||
# Try to identify the compiler.
|
||||
SET(CMAKE_Fortran_COMPILER_ID)
|
||||
|
|
|
@ -67,29 +67,29 @@ SET(CMAKE_NEEDS_REQUIRES_STEP_Fortran_FLAG 1)
|
|||
# Create a set of shared library variable specific to Fortran
|
||||
# For 90% of the systems, these are the same flags as the C versions
|
||||
# so if these are not set just copy the flags from the c version
|
||||
IF(NOT CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS)
|
||||
IF(NOT DEFINED CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS)
|
||||
SET(CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS})
|
||||
ENDIF(NOT CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS)
|
||||
ENDIF()
|
||||
|
||||
IF(NOT CMAKE_SHARED_LIBRARY_Fortran_FLAGS)
|
||||
IF(NOT DEFINED CMAKE_SHARED_LIBRARY_Fortran_FLAGS)
|
||||
SET(CMAKE_SHARED_LIBRARY_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS})
|
||||
ENDIF(NOT CMAKE_SHARED_LIBRARY_Fortran_FLAGS)
|
||||
ENDIF()
|
||||
|
||||
IF(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS)
|
||||
SET(CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS})
|
||||
ENDIF(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS)
|
||||
ENDIF()
|
||||
|
||||
IF(NOT CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG)
|
||||
IF(NOT DEFINED CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG)
|
||||
SET(CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG})
|
||||
ENDIF(NOT CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG)
|
||||
ENDIF()
|
||||
|
||||
IF(NOT CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG_SEP)
|
||||
IF(NOT DEFINED CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG_SEP)
|
||||
SET(CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP})
|
||||
ENDIF(NOT CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG_SEP)
|
||||
ENDIF()
|
||||
|
||||
IF(NOT CMAKE_SHARED_LIBRARY_RPATH_LINK_Fortran_FLAG)
|
||||
IF(NOT DEFINED CMAKE_SHARED_LIBRARY_RPATH_LINK_Fortran_FLAG)
|
||||
SET(CMAKE_SHARED_LIBRARY_RPATH_LINK_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG})
|
||||
ENDIF(NOT CMAKE_SHARED_LIBRARY_RPATH_LINK_Fortran_FLAG)
|
||||
ENDIF()
|
||||
|
||||
IF(NOT DEFINED CMAKE_EXE_EXPORTS_Fortran_FLAG)
|
||||
SET(CMAKE_EXE_EXPORTS_Fortran_FLAG ${CMAKE_EXE_EXPORTS_C_FLAG})
|
||||
|
@ -100,25 +100,25 @@ IF(NOT DEFINED CMAKE_SHARED_LIBRARY_SONAME_Fortran_FLAG)
|
|||
ENDIF()
|
||||
|
||||
# repeat for modules
|
||||
IF(NOT CMAKE_SHARED_MODULE_CREATE_Fortran_FLAGS)
|
||||
IF(NOT DEFINED CMAKE_SHARED_MODULE_CREATE_Fortran_FLAGS)
|
||||
SET(CMAKE_SHARED_MODULE_CREATE_Fortran_FLAGS ${CMAKE_SHARED_MODULE_CREATE_C_FLAGS})
|
||||
ENDIF(NOT CMAKE_SHARED_MODULE_CREATE_Fortran_FLAGS)
|
||||
ENDIF()
|
||||
|
||||
IF(NOT CMAKE_SHARED_MODULE_Fortran_FLAGS)
|
||||
IF(NOT DEFINED CMAKE_SHARED_MODULE_Fortran_FLAGS)
|
||||
SET(CMAKE_SHARED_MODULE_Fortran_FLAGS ${CMAKE_SHARED_MODULE_C_FLAGS})
|
||||
ENDIF(NOT CMAKE_SHARED_MODULE_Fortran_FLAGS)
|
||||
ENDIF()
|
||||
|
||||
IF(NOT CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG)
|
||||
IF(NOT DEFINED CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG)
|
||||
SET(CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG})
|
||||
ENDIF(NOT CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG)
|
||||
ENDIF()
|
||||
|
||||
IF(NOT CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG_SEP)
|
||||
IF(NOT DEFINED CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG_SEP)
|
||||
SET(CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG_SEP})
|
||||
ENDIF(NOT CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG_SEP)
|
||||
ENDIF()
|
||||
|
||||
IF(NOT CMAKE_EXECUTABLE_RPATH_LINK_Fortran_FLAG)
|
||||
IF(NOT DEFINED CMAKE_EXECUTABLE_RPATH_LINK_Fortran_FLAG)
|
||||
SET(CMAKE_EXECUTABLE_RPATH_LINK_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_Fortran_FLAG})
|
||||
ENDIF(NOT CMAKE_EXECUTABLE_RPATH_LINK_Fortran_FLAG)
|
||||
ENDIF()
|
||||
|
||||
IF(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_Fortran_WITH_RUNTIME_PATH)
|
||||
SET(CMAKE_SHARED_LIBRARY_LINK_Fortran_WITH_RUNTIME_PATH ${CMAKE_SHARED_LIBRARY_LINK_C_WITH_RUNTIME_PATH})
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
# This is used internally by CMake and should not be included by user
|
||||
# code.
|
||||
|
||||
function(CMAKE_PARSE_IMPLICIT_LINK_INFO text lib_var dir_var log_var)
|
||||
function(CMAKE_PARSE_IMPLICIT_LINK_INFO text lib_var dir_var log_var obj_regex)
|
||||
set(implicit_libs_tmp "")
|
||||
set(implicit_dirs_tmp)
|
||||
set(log "")
|
||||
|
@ -59,6 +59,11 @@ function(CMAKE_PARSE_IMPLICIT_LINK_INFO text lib_var dir_var log_var)
|
|||
# Unix library full path.
|
||||
list(APPEND implicit_libs_tmp ${arg})
|
||||
set(log "${log} arg [${arg}] ==> lib [${arg}]\n")
|
||||
elseif("${arg}" MATCHES "^(.:)?[/\\].*\\.o$"
|
||||
AND obj_regex AND "${arg}" MATCHES "${obj_regex}")
|
||||
# Object file full path.
|
||||
list(APPEND implicit_libs_tmp ${arg})
|
||||
set(log "${log} arg [${arg}] ==> obj [${arg}]\n")
|
||||
elseif("${arg}" MATCHES "^-Y(P,)?")
|
||||
# Sun search path.
|
||||
string(REGEX REPLACE "^-Y(P,)?" "" dirs "${arg}")
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
# Help CMAKE_PARSE_IMPLICIT_LINK_INFO detect NAG Fortran object files.
|
||||
if(NOT CMAKE_Fortran_COMPILER_WORKS AND NOT CMAKE_Fortran_COMPILER_FORCED)
|
||||
message(STATUS "Detecting NAG Fortran directory")
|
||||
# Run with -dryrun to see sample "link" line.
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_Fortran_COMPILER} dummy.o -dryrun
|
||||
OUTPUT_VARIABLE _dryrun
|
||||
ERROR_VARIABLE _dryrun
|
||||
)
|
||||
# Match an object file.
|
||||
string(REGEX MATCH "/[^ ]*/[^ /][^ /]*\\.o" _nag_obj "${_dryrun}")
|
||||
if(_nag_obj)
|
||||
# Parse object directory and convert to a regex.
|
||||
string(REGEX REPLACE "/[^/]*$" "" _nag_dir "${_nag_obj}")
|
||||
string(REGEX REPLACE "([][+.*()^])" "\\\\\\1" _nag_regex "${_nag_dir}")
|
||||
set(CMAKE_Fortran_IMPLICIT_OBJECT_REGEX "^${_nag_regex}/")
|
||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
||||
"Detecting NAG Fortran directory with -dryrun found\n"
|
||||
" object: ${_nag_obj}\n"
|
||||
" directory: ${_nag_dir}\n"
|
||||
" regex: ${CMAKE_Fortran_IMPLICIT_OBJECT_REGEX}\n"
|
||||
"from output:\n${_dryrun}\n\n")
|
||||
message(STATUS "Detecting NAG Fortran directory - ${_nag_dir}")
|
||||
else()
|
||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
||||
"Detecting NAG Fortran directory with -dryrun failed:\n${_dryrun}\n\n")
|
||||
message(STATUS "Detecting NAG Fortran directory - failed")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(CMAKE_Fortran_MODDIR_FLAG "-mdir ")
|
||||
set(CMAKE_SHARED_LIBRARY_Fortran_FLAGS "-PIC")
|
|
@ -45,10 +45,12 @@ set(module_symbols
|
|||
my_module_mp_my_sub_ # Intel
|
||||
MY_MODULE_mp_MY_SUB # Intel on Windows
|
||||
my_module_my_sub_ # PGI
|
||||
my_module_MP_my_sub # NAG
|
||||
mymodule$mysub # HP
|
||||
mymodule_mp_mysub_ # Intel
|
||||
MYMODULE_mp_MYSUB # Intel on Windows
|
||||
mymodule_mysub_ # PGI
|
||||
mymodule_MP_mysub # NAG
|
||||
${FortranCInterface_MODULE_SYMBOLS}
|
||||
)
|
||||
list(REMOVE_DUPLICATES module_symbols)
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
set(CMAKE_Fortran_VERBOSE_FLAG "-Wl,-v") # Runs gcc under the hood.
|
||||
|
||||
# Need -fpp explicitly on case-insensitive filesystem.
|
||||
set(CMAKE_Fortran_COMPILE_OBJECT
|
||||
"<CMAKE_Fortran_COMPILER> -fpp -o <OBJECT> <DEFINES> <FLAGS> -c <SOURCE>")
|
|
@ -0,0 +1,10 @@
|
|||
set(CMAKE_Fortran_VERBOSE_FLAG "-Wl,-v") # Runs gcc under the hood.
|
||||
|
||||
# Need one "-Wl," level to send flag through to gcc.
|
||||
# Use "-Xlinker" to get through gcc to real linker.
|
||||
set(CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS "-Wl,-shared")
|
||||
set(CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG "-Wl,-Xlinker,-rpath,-Xlinker,")
|
||||
set(CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG_SEP ":")
|
||||
set(CMAKE_SHARED_LIBRARY_RPATH_LINK_Fortran_FLAG "-Wl,-Xlinker,-rpath-link,-Xlinker,")
|
||||
set(CMAKE_SHARED_LIBRARY_SONAME_Fortran_FLAG "-Wl,-Xlinker,-soname,-Xlinker,")
|
||||
set(CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS "-Wl,-rdynamic")
|
|
@ -77,6 +77,13 @@ set(linux64_pgf90_libs "pgf90;pgf90_rpm1;pgf902;pgf90rtl;pgftnrtl;nspgc;pgc;rt;p
|
|||
set(linux64_pgf90_dirs "/opt/compiler/pgi/linux86-64/8.0-3/lib;/usr/lib64;/usr/lib64/gcc/x86_64-suse-linux/4.1.2")
|
||||
list(APPEND platforms linux64_pgf90)
|
||||
|
||||
# nagfor dummy.f -Wl,-v
|
||||
set(linux64_nagfor_text " /usr/libexec/gcc/x86_64-redhat-linux/4.4.5/collect2 --no-add-needed --eh-frame-hdr --build-id -m elf_x86_64 --hash-style=gnu -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o a.out /usr/lib/gcc/x86_64-redhat-linux/4.4.5/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/4.4.5/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/4.4.5/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/4.4.5 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.5 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.5/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.5/../../.. /usr/local/NAG/lib/f90_init.o /usr/local/NAG/lib/quickfit.o dummy.o -rpath /usr/local/NAG/lib /usr/local/NAG/lib/libf53.so /usr/local/NAG/lib/libf53.a -lm -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-redhat-linux/4.4.5/crtend.o /usr/lib/gcc/x86_64-redhat-linux/4.4.5/../../../../lib64/crtn.o")
|
||||
set(linux64_nagfor_libs "/usr/local/NAG/lib/f90_init.o;/usr/local/NAG/lib/quickfit.o;/usr/local/NAG/lib/libf53.a;m;c")
|
||||
set(linux64_nagfor_dirs "/usr/lib/gcc/x86_64-redhat-linux/4.4.5;/usr/lib64;/lib64;/usr/lib")
|
||||
set(linux64_nagfor_obj_regex "^/usr/local/NAG/lib")
|
||||
list(APPEND platforms linux64_nagfor)
|
||||
|
||||
# gcc dummy.c -v # in strange path
|
||||
set(linux64_test1_text "
|
||||
/this/might/match/as/a/linker/ld/but/it/is/not because the ld is not the last path component
|
||||
|
@ -380,7 +387,7 @@ list(APPEND platforms msys_g77)
|
|||
# Test parsing for all above examples.
|
||||
|
||||
foreach(p IN LISTS platforms)
|
||||
cmake_parse_implicit_link_info("${${p}_text}" libs dirs log)
|
||||
cmake_parse_implicit_link_info("${${p}_text}" libs dirs log "${${p}_obj_regex}")
|
||||
|
||||
foreach(v libs dirs)
|
||||
if(NOT "${${v}}" STREQUAL "${${p}_${v}}")
|
||||
|
|
Loading…
Reference in New Issue