Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add autotools config files for NVIDIA compilers, always add -fPIC flag for nvfortran. #3642

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 17 additions & 1 deletion config/cmake/HDFCXXCompilerFlags.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,22 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL SunPro AND CMAKE_CXX_COMPILER_LOADED)
endif ()
endif ()

if (CMAKE_CXX_COMPILER_ID STREQUAL "NVHPC" AND CMAKE_CXX_COMPILER_LOADED)
if (NOT DEFINED CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION)
if (NOT CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD EQUAL 11)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C11_STANDARD_COMPILE_OPTION}")
endif ()
endif ()
if (NOT ${HDF_CFG_NAME} MATCHES "Debug" AND NOT ${HDF_CFG_NAME} MATCHES "Developer")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Minform=warn")
if (NOT ${HDF_CFG_NAME} MATCHES "RelWithDebInfo")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s")
endif ()
else ()
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Mbounds -gopt -g")
endif ()
endif ()

if (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_LOADED)
set (CMAKE_CXX_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_CXX_FLAGS}")
if (${HDF_CFG_NAME} MATCHES "Debug" OR ${HDF_CFG_NAME} MATCHES "Developer")
Expand Down Expand Up @@ -97,7 +113,7 @@ if (HDF5_DISABLE_COMPILER_WARNINGS)
endif ()

#-----------------------------------------------------------------------------
# HDF5 library compile options
# HDF5 library compile options - to be made available to all targets
#-----------------------------------------------------------------------------

if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
Expand Down
13 changes: 12 additions & 1 deletion config/cmake/HDFCompilerFlags.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,17 @@ if(_CLANG_MSVC_WINDOWS AND "x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGN
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Xlinker -stack:20000000")
endif()

if(CMAKE_C_COMPILER_ID STREQUAL "NVHPC" )
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Minform=warn")
if (NOT ${HDF_CFG_NAME} MATCHES "Debug" AND NOT ${HDF_CFG_NAME} MATCHES "Developer")
if (NOT ${HDF_CFG_NAME} MATCHES "RelWithDebInfo")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s")
endif ()
else ()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Mbounds -g")
endif ()
endif()

if (CMAKE_COMPILER_IS_GNUCC)
set (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")
if (${HDF_CFG_NAME} MATCHES "Debug" OR ${HDF_CFG_NAME} MATCHES "Developer")
Expand Down Expand Up @@ -106,7 +117,7 @@ if (HDF5_DISABLE_COMPILER_WARNINGS)
endif ()

#-----------------------------------------------------------------------------
# HDF5 library compile options
# HDF5 library compile options - to be made available to all targets
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
Expand Down
13 changes: 12 additions & 1 deletion config/cmake/HDFFortranCompilerFlags.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ if (HDF5_DISABLE_COMPILER_WARNINGS)
endif ()

#-----------------------------------------------------------------------------
# HDF5 library compile options
# HDF5 library compile options - to be made available to all targets
#-----------------------------------------------------------------------------
if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 10.0)
if (HDF5_ENABLE_BUILD_DIAGS)
Expand All @@ -57,6 +57,17 @@ if (CMAKE_Fortran_COMPILER_ID STREQUAL "NAG")
list (APPEND HDF5_CMAKE_Fortran_FLAGS "-ieee=full")
endif ()

if (CMAKE_Fortran_COMPILER_ID STREQUAL "NVHPC")
if (NOT ${HDF_CFG_NAME} MATCHES "Debug" AND NOT ${HDF_CFG_NAME} MATCHES "Developer")
set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mnoframe")
if (NOT ${HDF_CFG_NAME} MATCHES "RelWithDebInfo")
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -s")
endif ()
else ()
set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mbounds -Mchkptr -Mdclchk -g")
endif ()
endif ()

if (NOT MSVC AND NOT MINGW)
# General flags
if (CMAKE_Fortran_COMPILER_ID STREQUAL "Intel")
Expand Down
21 changes: 21 additions & 0 deletions config/linux-gnulibc1
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ fi
# Figure out GNU C compiler flags
. $srcdir/config/gnu-flags

# Figure out NVIDIA C Compiler flags
. $srcdir/config/nvidia-flags

# Figure out PGI C compiler flags
. $srcdir/config/pgi-flags

Expand Down Expand Up @@ -113,6 +116,9 @@ fi
# Figure out GNU FC compiler flags
. $srcdir/config/gnu-fflags

# Figure out NVIDIA FC compiler flags
. $srcdir/config/nvidia-fflags

# Figure out PGI FC compiler flags
. $srcdir/config/pgi-fflags

Expand Down Expand Up @@ -204,6 +210,9 @@ fi
# Figure out GNU CXX compiler flags
. $srcdir/config/gnu-cxxflags

# Figure out NVIDIA CXX compiler flags
. $srcdir/config/nvidia-cxxflags

# Figure out PGI CXX compiler flags
. $srcdir/config/pgi-cxxflags

Expand Down Expand Up @@ -244,6 +253,10 @@ case $CC in
grep 'clang version' | sed 's/.*clang version \([-a-z0-9\.]*\).*/\1/'`"
;;

*nvc*)
cc_version_info=`$CC $CFLAGS $H5_CFLAGS -V 2>&1 | grep 'nvc'`
;;

*)
echo "No match to get cc_version_info for $CC"
;;
Expand Down Expand Up @@ -295,6 +308,7 @@ case $FC in
*pgf90*)
fc_version_info=`$FC $FCFLAGS $H5_FCFLAGS -V 2>&1 | grep 'pgf90'`
;;

*nagfor*|*nagftn*)
RM='rm -f'
tmpfile=/tmp/cmpver.$$
Expand All @@ -309,6 +323,10 @@ case $FC in
echo "compiler '$FC' is $fc_version_info"
;;

*nvfortran*)
fc_version_info=`$FC $FCFLAGS $H5_FCFLAGS -V 2>&1 | grep 'nvfortran'`
;;

*)
echo "No match to get fc_version_info for $FC"
;;
Expand All @@ -319,6 +337,9 @@ fi
# check if the compiler_version_info is already set
if test -z "$cxx_version_info"; then
case $CXX in
*nvc++*)
cxx_version_info=`$CXX $CXXFLAGS $H5_CXXFLAGS -V 2>&1 | grep 'nvc++'`
;;
*pgc++*)
cxx_version_info=`$CXX $CXXFLAGS $H5_CXXFLAGS -V 2>&1 | grep 'pgc++'`
;;
Expand Down
101 changes: 101 additions & 0 deletions config/nvidia-cxxflags
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
# -*- shell-script -*-
#
# Copyright by The HDF Group.
# 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://www.hdfgroup.org/licenses.
# If you do not have access to either file, you may request a copy from
# [email protected].


# This file should be sourced into configure if the compiler is the
# NVIDIA nvc++ compiler or a derivative. It is careful not to do anything
# if the compiler is not NVIDIA; otherwise `cxx_flags_set' is set to `yes'
#

# Get the compiler version in a way that works for NVIDIA nvc++
# unless a compiler version is already known
#
# cxx_vendor: The compiler name: nvc++
# cxx_version: Version number: 5.0-2, 5.2-2
#
if test X = "X$cxx_flags_set"; then
cxx_version="`$CXX $CXXFLAGS -V 2>&1 |grep '^nvc++ '`"
if test X != "X$cxx_version"; then
cxx_vendor=`echo $cxx_version |sed 's/\([a-z]*++\).*/\1/'`
cxx_version=`echo $cxx_version |sed 's/nvc++ \([-a-z0-9\.\-]*\).*/\1/'`
echo "compiler '$CXX' is NVIDIA $cxx_vendor-$cxx_version"

# Some version numbers
# NVIDIA version numbers are of the form: "major.minor-patch"
cxx_vers_major=`echo $cxx_version | cut -f1 -d.`
cxx_vers_minor=`echo $cxx_version | cut -f2 -d. | cut -f1 -d-`
cxx_vers_patch=`echo $cxx_version | cut -f2 -d. | cut -f2 -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
cxx_vers_all=`expr $cxx_vers_major '*' 1000000 + $cxx_vers_minor '*' 1000 + $cxx_vers_patch`
fi
fi

# Common PGI flags for various situations
if test "X-nvc++" = "X-$cxx_vendor"; then

###########
# General #
###########

# Default to C++11 standard
H5_CXXFLAGS="$H5_CXXFLAGS -std=c++11 -Minform=warn"

##############
# Production #
##############

PROD_CXXFLAGS=

#########
# Debug #
#########

# NDEBUG is handled explicitly in configure
# -g is handled by the symbols flags
DEBUG_CXXFLAGS="-Mbounds"

###########
# Symbols #
###########

NO_SYMBOLS_CXXFLAGS="-s"
SYMBOLS_CXXFLAGS="-g"

#############
# Profiling #
#############

PROFILE_CXXFLAGS="-Mprof=func,line"
# Use this for profiling with gprof
#PROFILE_CXXFLAGS="-pg"

################
# Optimization #
################

HIGH_OPT_CXXFLAGS="-O4"
DEBUG_OPT_CXXFLAGS="-gopt -O2"
NO_OPT_CXXFLAGS="-O0"

#################
# Flags are set #
#################
cxx_flags_set=yes
fi

# Clear cxx info if no flags set
if test "X-$cxx_flags_set" = "X-"; then
cxx_vendor=
cxx_version=
fi
139 changes: 139 additions & 0 deletions config/nvidia-fflags
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
# -*- shell-script -*-
#
# Copyright by The HDF Group.
# 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://www.hdfgroup.org/licenses.
# If you do not have access to either file, you may request a copy from
# [email protected].


# This file should be sourced into configure if the compiler is the
# NVIDIA nvfortran compiler or a derivative. It is careful not to do anything
# if the compiler is not NVIDIA; otherwise `f9x_flags_set' is set to `yes'
#

# Get the compiler version in a way that works for NVIDIA nvfortran
# unless a compiler version is already known
#
# f9x_vendor: The compiler name: nvfortran
# f9x_version: Version number:
#
if test X = "X$f9x_flags_set"; then
f9x_version="`$FC $FCFLAGS -V 2>&1 |grep '^nvfortran '`"
if test X != "X$f9x_version"; then
is_mpi="`$FC $FCFLAGS -help 2>&1 |grep 'link MPI'`"
f9x_vendor=`echo $f9x_version |sed 's/\([a-z0-9]*\).*/\1/'`
f9x_version=`echo $f9x_version |sed 's/nvfortran \([-a-z0-9\.\-]*\).*/\1/'`
echo "compiler '$FC' is NVIDIA $f9x_vendor-$f9x_version"

# Some version numbers
# NVIDIA version numbers are of the form: "major.minor-patch"
f9x_vers_major=`echo $f9x_version | cut -f1 -d.`
f9x_vers_minor=`echo $f9x_version | cut -f2 -d. | cut -f1 -d-`
f9x_vers_patch=`echo $f9x_version | cut -f2 -d. | cut -f2 -d-`
test -n "$f9x_vers_major" || f9x_vers_major=0
test -n "$f9x_vers_minor" || f9x_vers_minor=0
test -n "$f9x_vers_patch" || f9x_vers_patch=0
f9x_vers_all=`expr $f9x_vers_major '*' 1000000 + $f9x_vers_minor '*' 1000 + $f9x_vers_patch`
fi
fi

# Common NVIDIA flags for various situations
if test "X-nvfortran" = "X-$f9x_vendor"; then

###############################
# Architecture-specific flags #
###############################

arch=
# 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

##############
# Production #
##############

# Check for MPI wrapper being used and tweak down compiler options
# Comment out the Tweaking since it caused problems to mpich1.2.6.
# Need to investigate the reasons to tweak.
#if test "X-" == "X-$is_mpi"; then
# PROD_FCFLAGS="-fast -s -Mnoframe"
#else
# PROD_FCFLAGS="-O2 -s"
#fi
PROD_FCFLAGS="-fast -Mnoframe -fPIC"

#########
# Debug #
#########

DEBUG_FCFLAGS="-Mbounds -Mchkptr -Mdclchk -fPIC"

###########
# Symbols #
###########

NO_SYMBOLS_FCFLAGS="-s"
SYMBOLS_FCFLAGS="-g"

#############
# Profiling #
#############

PROFILE_FCFLAGS="-Mprof=func,line"
# Use this for profiling with gprof
#PROFILE_FCFLAGS="-pg"

################
# Optimization #
################

HIGH_OPT_FCFLAGS=
DEBUG_OPT_FCFLAGS=
NO_OPT_FCFLAGS=

############
# Warnings #
############

###########
# General #
###########

FC_BASENAME=nvfortran
Fortran_COMPILER_ID=NVIDIA
F9XSUFFIXFLAG=""
FSEARCH_DIRS=""
# Uncomment the following to add something specific for FCFLAGS.
#FCFLAGS="$FCFLAGS"



#################
# Flags are set #
#################
f9x_flags_set=yes
fi

# Clear f9x info if no flags set
if test "X-$f9x_flags_set" = "X-"; then
f9x_vendor=
f9x_version=
fi

Loading
Loading