Absoft: Detect implicit link libraries on Linux and Mac
Use the "-X -v" flag to the Absoft front-end to pass "-v" to the gcc it invokes under the hood. Teach CMakeParseImplicitLinkInfo to exclude linker version lines from consideration as link lines. Fix parsing of Sun's linker search path option "-Y..." to avoid conflict with the Mac linker option "-Y<num>".
This commit is contained in:
parent
ac5b999fff
commit
d7b376b3a7
|
@ -29,11 +29,13 @@ function(CMAKE_PARSE_IMPLICIT_LINK_INFO text lib_var dir_var log_var obj_regex)
|
||||||
# Construct a regex to match linker lines. It must match both the
|
# Construct a regex to match linker lines. It must match both the
|
||||||
# whole line and just the command (argv[0]).
|
# whole line and just the command (argv[0]).
|
||||||
set(linker_regex "^( *|.*[/\\])(${linker}|ld|collect2)[^/\\]*( |$)")
|
set(linker_regex "^( *|.*[/\\])(${linker}|ld|collect2)[^/\\]*( |$)")
|
||||||
|
set(linker_exclude_regex "collect2 version ")
|
||||||
set(log "${log} link line regex: [${linker_regex}]\n")
|
set(log "${log} link line regex: [${linker_regex}]\n")
|
||||||
string(REGEX REPLACE "\r?\n" ";" output_lines "${text}")
|
string(REGEX REPLACE "\r?\n" ";" output_lines "${text}")
|
||||||
foreach(line IN LISTS output_lines)
|
foreach(line IN LISTS output_lines)
|
||||||
set(cmd)
|
set(cmd)
|
||||||
if("${line}" MATCHES "${linker_regex}")
|
if("${line}" MATCHES "${linker_regex}" AND
|
||||||
|
NOT "${line}" MATCHES "${linker_exclude_regex}")
|
||||||
if(UNIX)
|
if(UNIX)
|
||||||
separate_arguments(args UNIX_COMMAND "${line}")
|
separate_arguments(args UNIX_COMMAND "${line}")
|
||||||
else()
|
else()
|
||||||
|
@ -64,8 +66,8 @@ function(CMAKE_PARSE_IMPLICIT_LINK_INFO text lib_var dir_var log_var obj_regex)
|
||||||
# Object file full path.
|
# Object file full path.
|
||||||
list(APPEND implicit_libs_tmp ${arg})
|
list(APPEND implicit_libs_tmp ${arg})
|
||||||
set(log "${log} arg [${arg}] ==> obj [${arg}]\n")
|
set(log "${log} arg [${arg}] ==> obj [${arg}]\n")
|
||||||
elseif("${arg}" MATCHES "^-Y(P,)?")
|
elseif("${arg}" MATCHES "^-Y(P,)?[^0-9]")
|
||||||
# Sun search path.
|
# Sun search path ([^0-9] avoids conflict with Mac -Y<num>).
|
||||||
string(REGEX REPLACE "^-Y(P,)?" "" dirs "${arg}")
|
string(REGEX REPLACE "^-Y(P,)?" "" dirs "${arg}")
|
||||||
string(REPLACE ":" ";" dirs "${dirs}")
|
string(REPLACE ":" ";" dirs "${dirs}")
|
||||||
list(APPEND implicit_dirs_tmp ${dirs})
|
list(APPEND implicit_dirs_tmp ${dirs})
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
set(CMAKE_Fortran_VERBOSE_FLAG "-X -v") # Runs gcc under the hood.
|
|
@ -0,0 +1 @@
|
||||||
|
set(CMAKE_Fortran_VERBOSE_FLAG "-X -v") # Runs gcc under the hood.
|
|
@ -84,6 +84,13 @@ set(linux64_nagfor_dirs "/usr/lib/gcc/x86_64-redhat-linux/4.4.5;/usr/lib64;/lib6
|
||||||
set(linux64_nagfor_obj_regex "^/usr/local/NAG/lib")
|
set(linux64_nagfor_obj_regex "^/usr/local/NAG/lib")
|
||||||
list(APPEND platforms linux64_nagfor)
|
list(APPEND platforms linux64_nagfor)
|
||||||
|
|
||||||
|
# absoft dummy.f -X -v
|
||||||
|
set(linux64_absoft_text "collect2 version 4.4.5 (x86-64 Linux/ELF)
|
||||||
|
/usr/bin/ld --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=both -dynamic-linker /lib64/ld-linux-x86-64.so.2 /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crt1.o /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crti.o /usr/lib/gcc/x86_64-linux-gnu/4.4.5/crtbegin.o -L/opt/absoft11.1/lib64 -L/usr/lib/gcc/x86_64-linux-gnu/4.4.5 -L/usr/lib/gcc/x86_64-linux-gnu/4.4.5 -L/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../.. /tmp/E3Bii1/dummy.o -v -laf90math -lafio -lamisc -labsoftmain -laf77math -lm -lmv -lpthread -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-linux-gnu/4.4.5/crtend.o /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crtn.o")
|
||||||
|
set(linux64_absoft_libs "af90math;afio;amisc;absoftmain;af77math;m;mv;pthread;c")
|
||||||
|
set(linux64_absoft_dirs "/opt/absoft11.1/lib64;/usr/lib/gcc/x86_64-linux-gnu/4.4.5;/usr/lib;/lib")
|
||||||
|
list(APPEND platforms linux64_absoft)
|
||||||
|
|
||||||
# gcc dummy.c -v # in strange path
|
# gcc dummy.c -v # in strange path
|
||||||
set(linux64_test1_text "
|
set(linux64_test1_text "
|
||||||
/this/might/match/as/a/linker/ld/but/it/is/not because the ld is not the last path component
|
/this/might/match/as/a/linker/ld/but/it/is/not because the ld is not the last path component
|
||||||
|
@ -125,6 +132,14 @@ set(mac_ppc_g++_libs "stdc++")
|
||||||
set(mac_ppc_g++_dirs "/usr/lib/powerpc-apple-darwin10/4.2.1;/usr/lib/gcc/powerpc-apple-darwin10/4.2.1;/usr/lib")
|
set(mac_ppc_g++_dirs "/usr/lib/powerpc-apple-darwin10/4.2.1;/usr/lib/gcc/powerpc-apple-darwin10/4.2.1;/usr/lib")
|
||||||
list(APPEND platforms mac_ppc_g++)
|
list(APPEND platforms mac_ppc_g++)
|
||||||
|
|
||||||
|
# absoft dummy.f -X -v
|
||||||
|
set(mac_absoft_text "collect2 version 4.2.1 (Apple Inc. build 5664) (i686 Darwin)
|
||||||
|
/usr/libexec/gcc/i686-apple-darwin10/4.2.1/ld -dynamic -arch i386 -macosx_version_min 10.6.6 -weak_reference_mismatches non-weak -o a.out -lcrt1.10.6.o -L/Applications/Absoft11.1/lib -L/usr/lib/i686-apple-darwin10/4.2.1 -L/usr/lib/gcc/i686-apple-darwin10/4.2.1 -L/usr/lib/gcc/i686-apple-darwin10/4.2.1 -L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../../i686-apple-darwin10/4.2.1 -L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../.. /var/folders/04/04+Djjm8GZWBmuEdp2Gsw++++TM/-Tmp-//bTAoJc/dummy.o -v -Y 10 -laf90math -lafio -lamisc -labsoftmain -laf77math -lm -lmv -lSystem -lgcc -lSystem
|
||||||
|
")
|
||||||
|
set(mac_absoft_libs "af90math;afio;amisc;absoftmain;af77math;m;mv")
|
||||||
|
set(mac_absoft_dirs "/Applications/Absoft11.1/lib;/usr/lib/i686-apple-darwin10/4.2.1;/usr/lib/gcc/i686-apple-darwin10/4.2.1;/usr/lib")
|
||||||
|
list(APPEND platforms mac_absoft)
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
# Sun
|
# Sun
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue