libtool
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] libtool: preliminary support for the Cray compiler.


From: Christian Feld
Subject: Re: [PATCH] libtool: preliminary support for the Cray compiler.
Date: Tue, 27 Sep 2016 10:56:05 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0

Hi Eric,

On 2015-06-02 17:27, Eric Bavier wrote:
Has anyone had a chance to look this patch over?

we found one OpenMP related issue in your patch. In contrast to other
compilers, the Cray compiler enables OpenMP by default (-homp) and you
need to pass -hnoomp to disable it.

With your patch, building a non-OpenMP library adds -hnoomp to
inherited_linker_flags. Linking this non-OpenMP library to an OpenMP
program leads to undefined OpenMP symbols because the inherited linker
flag -hnoomp gets added late to the link line. Here it doesn't matter if
you explicitly specify -homp for linking or just use the default.

This is easy to fix, see below.

`~Eric

On 04/14/2015 12:46 PM, Eric Bavier wrote:
I'd like to get some additional feedback on this patch for the Cray
Compiler Environment support in libtool, now that the copyright
assignment process has (finally) gone through.


0001-libtool-preliminary-support-for-the-Cray-compiler.patch


From 533d9854c7b3c6c351f5a8d7f2f69e69fb73ad40 Mon Sep 17 00:00:00 2001
From: Eric Bavier <address@hidden>
Date: Tue, 18 Nov 2014 15:33:58 -0600
Subject: [PATCH] libtool: preliminary support for the Cray compiler.

This patch adds preliminary support for the Cray Compiler
Environment (CCE) to libtool.  Main issues:

  - When linking a static executable, the value of the STRIP environment
    variable must be an absolute file name.

  - Symbols will be stripped from shared libraries during creation if
    the STRIP environment variable is set.

  - When linking against shared libraries, or dlopening a library, a
    "-dynamic" option needs to be given to the compiler that it can make
    sure that linked system libraries are shared libraries.
---
 build-aux/ltmain.in | 38 +++++++++++++++++++++++++++++++++++---
 m4/libtool.m4       | 48 +++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 82 insertions(+), 4 deletions(-)

diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
index d5cf07a..aee9a9b 100644
--- a/build-aux/ltmain.in
+++ b/build-aux/ltmain.in
@@ -5159,7 +5159,7 @@ func_mode_link ()
     ;;

       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
-      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*|-h*omp)

should be:
+      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*|-homp)

     func_append compiler_flags " $arg"
     func_append compile_command " $arg"
     func_append finalize_command " $arg"
@@ -5693,7 +5693,7 @@ func_mode_link ()
     found=false
     case $deplib in
     -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
-        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)

should be:
+        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*|-homp)

Thanks,
Christian

+        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*|-h*omp)
       if test prog,link = "$linkmode,$pass"; then
         compile_deplibs="$deplib $compile_deplibs"
         finalize_deplibs="$deplib $finalize_deplibs"
@@ -6234,6 +6234,21 @@ func_mode_link ()
       esac
       # This is a shared library

+      # Cray's compiler drivers need a -dynamic flag if any linked
+      # library is a shared library.  Ensure it gets this flag.
+      case `$CC -V 2>&1 | sed 5q` in
+          *Cray*)
+              case " $compile_command " in
+                  *" -dynamic ") ;;
+                  *) func_append compile_command " -dynamic" ;;
+              esac
+              case " $finalize_command " in
+                  *" -dynamic ") ;;
+                  *) func_append finalize_command " -dynamic" ;;
+              esac
+              ;;
+      esac
+
       # Warn about portability, can't link against -module's on some
       # systems (darwin).  Don't bleat about dlopened modules though!
       dlopenmodule=
@@ -8311,7 +8326,24 @@ EOF
     finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ 
$]*\).ltframework% -framework \1%g'`
     ;;
       esac
-
+      if test -n "$dlfiles" ||
+     test "$dlself" = "yes" ||
+     test "$export_dynamic" = "yes"; then
+    # Cray's compiler drivers need a -dynamic flag if the program
+    # is going to be dlopening itself or any libraries.
+    case `$CC -V 2>&1 | sed 5q` in
+        *Cray*)
+            case " $compile_command " in
+                *" -dynamic ") ;;
+                *) func_append compile_command " -dynamic" ;;
+            esac
+            case " $finalize_command " in
+                *" -dynamic ") ;;
+                *) func_append finalize_command " -dynamic" ;;
+            esac
+            ;;
+    esac
+      fi

       # move library search paths that coincide with paths to not yet
       # installed libraries to the beginning of the library search list
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index a3bc337..5467b5d 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -1530,7 +1530,9 @@ _LT_DECL([], [archiver_list_spec], [1],
 m4_defun([_LT_CMD_OLD_ARCHIVE],
 [_LT_PROG_AR

-AC_CHECK_TOOL(STRIP, strip, :)
+# Cray's compiler drivers need STRIP to be an absolute file name when
+# static linking.
+AC_PATH_TOOL(STRIP, strip, :)
 test -z "$STRIP" && STRIP=:
 _LT_DECL([], [STRIP], [1], [A symbol stripping program])

@@ -4407,6 +4409,12 @@ m4_if([$1], [CXX], [
           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
           ;;
+        *Cray\ C*)
+          # Cray C++ compiler
+          _LT_TAGVAR(lt_prog_compiler_pic, $1)='-hpic'
+          _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+          _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+          ;;
         esac
         ;;
     esac
@@ -4764,6 +4772,11 @@ m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       ;;
+    *Cray\ Fortran* | *Cray\ C*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-hpic'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+      ;;
     esac
     ;;
       esac
@@ -5247,6 +5260,14 @@ _LT_EOF
       fi
       ;;
     esac
+    case `$CC -V 2>&1 | sed 5q` in
+    *Cray\ C* | *Cray\ Fortran*)    # Cray C/C++/Fortran
+      _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in 
$convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; 
done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+      _LT_TAGVAR(compiler_needs_object, $1)=yes
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(archive_cmds, $1)='save_STRIP=$STRIP; unset STRIP; $CC 
-shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o 
$lib; ret=\$?; STRIP=\$save_STRIP; export STRIP; (exit \$ret)'
+      ;;
+        esac
       else
         _LT_TAGVAR(ld_shlibs, $1)=no
       fi
@@ -5792,6 +5813,16 @@ _LT_EOF
     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs 
$deplibs $compiler_flags'
     ;;
       esac
+      case `$CC -V 2>&1 | sed 5q` in
+      *Cray\ C* | *Cray\ Fortran*)    # Cray C/C++/Fortran
+    _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in 
$convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; 
done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+    _LT_TAGVAR(compiler_needs_object, $1)=yes
+    _LT_TAGVAR(archive_cmds, $1)='save_STRIP=$STRIP; unset STRIP; $CC -shared 
$pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib; 
ret=\$?; STRIP=\$save_STRIP; export STRIP; (exit \$ret)'
+    ;;
+      *)
+    _LT_TAGVAR(ld_shlibs, $1)=no
+    ;;
+      esac
       ;;

     netbsd*)
@@ -7064,6 +7095,21 @@ if test yes != "$_lt_caught_CXX_error"; then
           # in the archive.
           _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
           ;;
+        *Cray\ C*)          # Cray C++ compiler
+          # If STRIP is set while creating a shared library with
+          # the Cray compiler, the library has its symbols
+          # removed.  So we unset and restore it.
+          _LT_TAGVAR(archive_cmds, $1)='save_STRIP=$STRIP; unset STRIP; $CC 
-shared $wl-soname $wl$soname -o $lib $predep_objects $libobjs $deplibs 
$postdep_objects $compiler_flags; ret=\$?; STRIP=\$save_STRIP; export STRIP; 
(exit \$ret)'
+          _LT_TAGVAR(archive_expsym_cmds, $1)=''
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+          _LT_TAGVAR(whole_archive_flag_spec, $1)='-vv $wl--whole-archive`new_convenience=; for conv in 
$convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; 
done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+          _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+          # Not sure whether something based on
+          # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+          # would be better.
+          output_verbose_link_cmd='func_echo_all'
+          ;;
         esac
         ;;
     esac
-- 2.0.0

Thank you,
Eric Bavier, Scientific Libraries, Cray Inc.



_______________________________________________
https://lists.gnu.org/mailman/listinfo/libtool




------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
Forschungszentrum Juelich GmbH
52425 Juelich
Sitz der Gesellschaft: Juelich
Eingetragen im Handelsregister des Amtsgerichts Dueren Nr. HR B 3498
Vorsitzender des Aufsichtsrats: MinDir Dr. Karl Eugen Huthmacher
Geschaeftsfuehrung: Prof. Dr.-Ing. Wolfgang Marquardt (Vorsitzender),
Karsten Beneke (stellv. Vorsitzender), Prof. Dr.-Ing. Harald Bolt,
Prof. Dr. Sebastian M. Schmidt
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------




reply via email to

[Prev in Thread] Current Thread [Next in Thread]