libtool
[Top][All Lists]
Advanced

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

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


From: Eric Bavier
Subject: [PATCH 2/2] libtool: preliminary support for the Cray compiler.
Date: Thu, 20 Nov 2014 14:33:52 -0600

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 85e2809..c6b532b 100644
--- a/build-aux/ltmain.in
+++ b/build-aux/ltmain.in
@@ -5134,7 +5134,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)
        func_append compiler_flags " $arg"
        func_append compile_command " $arg"
        func_append finalize_command " $arg"
@@ -5665,7 +5665,7 @@ func_mode_link ()
        found=false
        case $deplib in
        -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
-        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+        |-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"
@@ -6206,6 +6206,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=
@@ -8246,7 +8261,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 6143541..bda4b07 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -1499,7 +1499,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])
 
@@ -4262,6 +4264,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
@@ -4619,6 +4627,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
@@ -5098,6 +5111,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
@@ -5593,6 +5614,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*)
@@ -6814,6 +6845,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




reply via email to

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