From 3613ec7296a782c86ea5f0706a5a0cb51602abc9 Mon Sep 17 00:00:00 2001 From: kmu Date: Thu, 14 Nov 2019 09:28:03 -0600 Subject: let hdf5 pick up the right compiler in Intel environment --- config/gnu-cxxflags | 21 ++++++----- config/gnu-flags | 5 ++- config/intel-cxxflags | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++ config/linux-gnulibc1 | 3 ++ 4 files changed, 121 insertions(+), 10 deletions(-) create mode 100644 config/intel-cxxflags diff --git a/config/gnu-cxxflags b/config/gnu-cxxflags index e0f2999..744f56d 100644 --- a/config/gnu-cxxflags +++ b/config/gnu-cxxflags @@ -28,29 +28,32 @@ if test X = "X$cxx_flags_set"; then # filter it out. # icc beginning with version 12 includes a "gcc version compatiblilty" # string, causing the gcc H5_CFLAGS to be erroneously added. The line - # "grep -v 'icc version'" causes the discarding of any output - # containing 'icc version'. The cc_version for icc is correctly determined - # and flags added in the intel-flags script. + # "grep -v 'icpc version'" causes the discarding of any output + # containing 'icpc version'. The line "grep -v 'icpc.orig version'" + # causes the discarding of any output containing 'icpc.orig version'. + # The cxx_version for icc is correctly determined + # and flags added in the intel-cxxflags script. cxx_version="`$CXX $CXXFLAGS $H5_CXXFLAGS -v 2>&1 | grep -v 'PathScale' |\ grep -v 'icc version' |\ + grep -v 'icpc version' |\ + grep -v 'icpc.orig version' |\ grep 'gcc version' | sed 's/.*gcc version \([-a-z0-9\.]*\).*/\1/'`" cxx_vendor=`echo $cxx_version |sed 's/\([a-z]*\).*/\1/'` cxx_version=`echo $cxx_version |sed 's/[-a-z]//g'` if test X = "X$cxx_vendor" -a X != "X$cxx_version"; then - cxx_vendor=g++ + cxx_vendor=g++ fi if test "-" != "$cxx_vendor-$cxx_version"; then - echo "compiler '$CXX' is GNU $cxx_vendor-$cxx_version" + echo "compiler '$CXX' is GNU $cxx_vendor-$cxx_version" fi # Some version numbers cxx_vers_major=`echo $cxx_version | cut -f1 -d.` cxx_vers_minor=`echo $cxx_version | cut -f2 -d.` cxx_vers_patch=`echo $cxx_version | cut -f3 -d.` - test -n "$cc_vers_major" || cxx_vers_major=0 - test -n "$cc_vers_minor" || cxx_vers_minor=0 - test -n "$cc_vers_patch" || cxx_vers_patch=0 - cxx_vers_all=`expr $cxx_vers_major '*' 1000000 + $cxx_vers_minor '*' 1000 + $cxx_vers_patch` + test -n "$cxx_vers_major" || cxx_vers_major=0 + test -n "$cxx_vers_minor" || cxx_vers_minor=0 + test -n "$cxx_vers_patch" || cxx_vers_patch=0 fi # Common g++ flags for various situations diff --git a/config/gnu-flags b/config/gnu-flags index 6355ccf..7a6686e 100644 --- a/config/gnu-flags +++ b/config/gnu-flags @@ -29,10 +29,13 @@ if test "X-" = "X-$cc_flags_set"; then # icc beginning with version 12 includes a "gcc version compatiblilty" # string, causing the gcc H5_CFLAGS to be erroneously added. The line # "grep -v 'icc version'" causes the discarding of any output - # containing 'icc version'. The cc_version for icc is correctly determined + # containing 'icc version'. The line "grep -v 'icc.orig version'" causes + # the discarding of any output containing 'icc.orig version'. + # The cc_version for icc is correctly determined # and flags added in the intel-flags script. cc_version="`$CC $CFLAGS $H5_CFLAGS -v 2>&1 | grep -v 'PathScale' |\ grep -v 'icc version' |\ + grep -v 'icc.orig version' |\ grep 'gcc version' | sed 's/.*gcc version \([-a-z0-9\.]*\).*/\1/'`" cc_vendor=`echo $cc_version |sed 's/\([a-z]*\).*/\1/'` cc_version=`echo $cc_version |sed 's/[-a-z]//g'` diff --git a/config/intel-cxxflags b/config/intel-cxxflags new file mode 100644 index 0000000..97fe021 --- /dev/null +++ b/config/intel-cxxflags @@ -0,0 +1,102 @@ +# -*- shell-script -*- +# +# Copyright by The HDF Group. +# Copyright by the Board of Trustees of the University of Illinois. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the COPYING file, which can be found at the root of the source code +# distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. +# If you do not have access to either file, you may request a copy from +# help@hdfgroup.org. + + +# This file should be sourced into configure if the compiler is the +# Intel icc compiler or a derivative. It is careful not to do anything +# if the compiler is not Intel; otherwise `cxx_flags_set' is set to `yes' +# + +# Get the compiler version in a way that works for icpc +# icpc unless a compiler version is already known +# +# cxx_vendor: The compiler name: icpc +# cxx_version: Version number: 18.0.1 +# +if test X = "X$cxx_flags_set"; then + cxx_version="`$CXX $CXXFLAGS $H5_CXXFLAGS -V 2>&1 |grep 'Version'`" + if test X != "X$cxx_version"; then + cxx_vendor=icpc + cxx_version=`echo $cxx_version |sed 's/.*Version \([-a-z0-9\.\-]*\).*/\1/'` + echo "compiler '$CXX' is Intel $cxx_vendor-$cxx_version" + + # Some version numbers + # Intel version numbers are of the form: "major.minor" + cxx_vers_major=`echo $cxx_version | cut -f1 -d.` + cxx_vers_minor=`echo $cxx_version | cut -f2 -d.` + cxx_vers_patch=`echo $cxx_version | cut -f3 -d.` + test -n "$cxx_vers_major" || cxx_vers_major=0 + test -n "$cxx_vers_minor" || cxx_vers_minor=0 + test -n "$cxx_vers_patch" || cxx_vers_patch=0 + fi +fi + +# Common Intel flags for various situations +if test "X-icpc" = "X-$cxx_vendor"; then + # Insert section about version specific problems from compiler flags here, + # if necessary. + + arch= + # Architecture-specific flags + # Nothing currently. (Uncomment code below and modify to add any) + #case "$host_os-$host_cpu" in + # *-i686) + # arch="-march=i686" + # ;; + #esac + + # Host-specific flags + # Nothing currently. (Uncomment code below and modify to add any) + #case "`hostname`" in + # sleipnir.ncsa.uiuc.edu) + # arch="$arch -pipe" + # ;; + #esac + + # General + # Default to C99 standard. + H5_CFLAGS="$H5_CFLAGS $arch -std=c99 -Wcheck -Wall" + + # Production + PROD_CFLAGS= + + # Debug + # NDEBUG is handled explicitly in configure + DEBUG_CFLAGS= + + # Symbols + SYMBOLS_CFLAGS="-g" + NO_SYMBOLS_CFLAGS="-Wl,-s" + + # Profiling + # Use this for profiling with gprof + PROFILE_CFLAGS="-p" + + # Optimization + HIGH_OPT_CFLAGS="-O3" + DEBUG_OPT_CFLAGS="-O0" + NO_OPT_CFLAGS="-O0" + + # Flags are set + cxx_flags_set=yes + +fi + +# Version specific ICC flags +# TODO + +# Clear cxx info if no flags set +if test "X-$cxx_flags_set" = "X-"; then + cxx_vendor= + cxx_version= +fi diff --git a/config/linux-gnulibc1 b/config/linux-gnulibc1 index 39225e7..bf5915a 100644 --- a/config/linux-gnulibc1 +++ b/config/linux-gnulibc1 @@ -194,6 +194,9 @@ fi # Figure out GNU CXX compiler flags . $srcdir/config/gnu-cxxflags +# Figure out Intel CXX compiler flags +. $srcdir/config/intel-cxxflags + # compiler version strings # check if the compiler_version_info is already set -- cgit v0.12