diff options
author | Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> | 2020-03-17 19:41:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-17 11:41:47 -0700 |
commit | 06bf93b270382b030e578ebe9534164fbfd9ff0e (patch) | |
tree | e16ed89709a9b2da8fbd08be5444cee84c4173f3 /var | |
parent | be8841cbc5ced1d702fae194193b9029765c1a7e (diff) | |
download | spack-06bf93b270382b030e578ebe9534164fbfd9ff0e.tar.gz spack-06bf93b270382b030e578ebe9534164fbfd9ff0e.tar.bz2 spack-06bf93b270382b030e578ebe9534164fbfd9ff0e.tar.xz spack-06bf93b270382b030e578ebe9534164fbfd9ff0e.zip |
MPICH: optional libxml2 support; NAG patches (#15235)
* Add patches when building with NAG
* Make libxml2 support optional. Also include conflict for
@:3.2~hydra+libxml2 since @:3.2~hydra does not require libxml2
support
* Add '--disable-silent-rules' to get more verbose output during
the build
Diffstat (limited to 'var')
5 files changed, 222 insertions, 2 deletions
diff --git a/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_0.patch b/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_0.patch new file mode 100644 index 0000000000..18d5c2ad65 --- /dev/null +++ b/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_0.patch @@ -0,0 +1,29 @@ +--- a/configure ++++ b/configure +@@ -11563,6 +11563,8 @@ _LT_EOF + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; ++ nagfor*) # NAGFOR 5.3 ++ tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; +@@ -19036,6 +19038,8 @@ _LT_EOF + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec_F77= + tmp_sharedflag='--shared' ;; ++ nagfor*) # NAGFOR 5.3 ++ tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; +@@ -22116,6 +22120,8 @@ _LT_EOF + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec_FC= + tmp_sharedflag='--shared' ;; ++ nagfor*) # NAGFOR 5.3 ++ tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; diff --git a/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_1.patch b/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_1.patch new file mode 100644 index 0000000000..8fb671093b --- /dev/null +++ b/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_1.patch @@ -0,0 +1,71 @@ +--- a/confdb/ltmain.sh ++++ b/confdb/ltmain.sh +@@ -180,6 +180,20 @@ func_basename () + func_basename_result=`$ECHO "${1}" | $SED "$basename"` + } # func_basename may be replaced by extended shell implementation + ++# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. ++func_cc_basename () ++{ ++ for cc_temp in $*""; do ++ case $cc_temp in ++ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; ++ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; ++ \-*) ;; ++ *) break;; ++ esac ++ done ++ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ++} ++ + + # func_dirname_and_basename file append nondir_replacement + # perform func_basename and func_dirname in a single function +@@ -6419,6 +6433,13 @@ func_mode_link () + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` ++ ++ # Additionally convert " -pthread" to " -Wl,-pthread" for nagfor ++ func_cc_basename $CC ++ case $func_cc_basename_result in ++ nagfor*) tmp_inherited_linker_flags=`$ECHO "$tmp_inherited_linker_flags" | $SED 's/ -pthread/ -Wl,-pthread/g'` ;; ++ esac ++ + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; +@@ -8001,6 +8022,13 @@ EOF + ;; + esac + ++ # Time to revert the changes made for nagfor. ++ func_cc_basename $CC ++ case $func_cc_basename_result in ++ nagfor*) ++ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% -Wl,-pthread% -pthread%g'` ;; ++ esac ++ + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= +--- a/configure ++++ b/configure +@@ -11614,6 +11614,8 @@ _LT_EOF + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 ++ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ++ compiler_needs_object=yes + tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' +@@ -19246,6 +19248,8 @@ _LT_EOF + whole_archive_flag_spec_FC= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 ++ whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ++ compiler_needs_object_FC=yes + tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' diff --git a/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_2.patch b/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_2.patch new file mode 100644 index 0000000000..871ffe6dd2 --- /dev/null +++ b/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_2.patch @@ -0,0 +1,11 @@ +--- a/configure ++++ b/configure +@@ -22237,6 +22237,8 @@ _LT_EOF + whole_archive_flag_spec_F77= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 ++ whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ++ compiler_needs_object_F77=yes + tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' diff --git a/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.6.patch b/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.6.patch new file mode 100644 index 0000000000..50f73f2dde --- /dev/null +++ b/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.6.patch @@ -0,0 +1,69 @@ +--- a/confdb/ltmain.sh ++++ b/confdb/ltmain.sh +@@ -7867,6 +7867,13 @@ func_mode_link () + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` ++ ++ # Additionally convert " -pthread" to " -Wl,-pthread" for nagfor ++ func_cc_basename $CC ++ case $func_cc_basename_result in ++ nagfor*) tmp_inherited_linker_flags=`$ECHO "$tmp_inherited_linker_flags" | $SED 's/ -pthread/ -Wl,-pthread/g'` ;; ++ esac ++ + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; +@@ -8886,7 +8893,8 @@ func_mode_link () + xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + # On Darwin other compilers +- case $CC in ++ func_cc_basename $CC ++ case $func_cc_basename_result in + nagfor*) + verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + ;; +@@ -9498,6 +9506,13 @@ EOF + ;; + esac + ++ # Time to revert the changes made for nagfor. ++ func_cc_basename $CC ++ case $func_cc_basename_result in ++ nagfor*) ++ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% -Wl,-pthread% -pthread%g'` ;; ++ esac ++ + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= +--- a/configure ++++ b/configure +@@ -12583,6 +12583,8 @@ _LT_EOF + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 ++ whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ++ compiler_needs_object=yes + tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' +@@ -20684,6 +20686,8 @@ _LT_EOF + whole_archive_flag_spec_FC= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 ++ whole_archive_flag_spec_FC='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ++ compiler_needs_object_FC=yes + tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' +@@ -23958,6 +23962,8 @@ _LT_EOF + whole_archive_flag_spec_F77= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 ++ whole_archive_flag_spec_F77='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ++ compiler_needs_object_F77=yes + tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' diff --git a/var/spack/repos/builtin/packages/mpich/package.py b/var/spack/repos/builtin/packages/mpich/package.py index 0980c66818..8360046ab4 100644 --- a/var/spack/repos/builtin/packages/mpich/package.py +++ b/var/spack/repos/builtin/packages/mpich/package.py @@ -63,6 +63,9 @@ spack package at this time.''', ) variant('pci', default=(sys.platform != 'darwin'), description="Support analyzing devices on PCI bus") + variant('libxml2', default=True, + description='Use libxml2 for XML support instead of the custom ' + 'minimalistic implementation') provides('mpi') provides('mpi@:3.0', when='@3:') @@ -86,6 +89,23 @@ spack package at this time.''', sha256='c7d4ecf865dccff5b764d9c66b6a470d11b0b1a5b4f7ad1ffa61079ad6b5dede', when='@3.3:3.3.0') + # This patch for Libtool 2.4.2 enables shared libraries for NAG and is + # applied by MPICH starting version 3.1. + patch('nag_libtool_2.4.2_0.patch', when='@:3.0%nag') + + # This patch for Libtool 2.4.2 fixes the problem with '-pthread' flag and + # enables convenience libraries for NAG. Starting version 3.1, the order of + # checks for FC and F77 is changed, therefore we need to apply the patch in + # two steps (the patch files can be merged once the support for versions + # 3.1 and older is dropped). + patch('nag_libtool_2.4.2_1.patch', when='@:3.1.3%nag') + patch('nag_libtool_2.4.2_2.patch', when='@:3.1.3%nag') + + # This patch for Libtool 2.4.6 does the same as the previous two. The + # problem is not fixed upstream yet and the upper version constraint is + # given just to avoid application of the patch to the develop version. + patch('nag_libtool_2.4.6.patch', when='@3.1.4:3.3%nag') + depends_on('findutils', type='build') depends_on('pkgconfig', type='build') @@ -96,8 +116,14 @@ spack package at this time.''', depends_on('ucx', when='netmod=ucx') - depends_on('libpciaccess', when="+pci") - depends_on('libxml2') + # The dependencies on libpciaccess and libxml2 come from the embedded + # hwloc, which, before version 3.3, was used only for Hydra. + depends_on('libpciaccess', when="@:3.2+hydra+pci") + depends_on('libxml2', when='@:3.2+hydra+libxml2') + + # Starting with version 3.3, MPICH uses hwloc directly. + depends_on('libpciaccess', when="@3.3:+pci") + depends_on('libxml2', when='@3.3:+libxml2') # Starting with version 3.3, Hydra can use libslurm for nodelist parsing depends_on('slurm', when='+slurm') @@ -119,6 +145,12 @@ spack package at this time.''', conflicts('pmi=pmi2', when='device=ch3 netmod=ofi') conflicts('pmi=pmix', when='device=ch3') + # MPICH does not require libxml2 and libpciaccess for versions before 3.3 + # when ~hydra is set: prevent users from setting +libxml2 and +pci in this + # case to avoid generating an identical MPICH installation. + conflicts('+pci', when='@:3.2~hydra') + conflicts('+libxml2', when='@:3.2~hydra') + def setup_build_environment(self, env): env.unset('F90') env.unset('F90FLAGS') @@ -181,6 +213,7 @@ spack package at this time.''', def configure_args(self): spec = self.spec config_args = [ + '--disable-silent-rules', '--enable-shared', '--with-pm={0}'.format('hydra' if '+hydra' in spec else 'no'), '--{0}-romio'.format('enable' if '+romio' in spec else 'disable'), @@ -234,4 +267,11 @@ spack package at this time.''', config_args.append('--with-ucx={0}'.format( spec['ucx'].prefix)) + # In other cases the argument is redundant. + if '@:3.2+hydra' in spec or '@3.3:' in spec: + # The root configure script passes the argument to the configure + # scripts of all instances of hwloc (there are three copies of it: + # for hydra, for hydra2, and for MPICH itself). + config_args += self.enable_or_disable('libxml2') + return config_args |