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