diff options
-rw-r--r-- | config/gnu-flags | 258 |
1 files changed, 97 insertions, 161 deletions
diff --git a/config/gnu-flags b/config/gnu-flags index 5f36eaa..e7f8f14 100644 --- a/config/gnu-flags +++ b/config/gnu-flags @@ -19,10 +19,10 @@ # if the compiler is not GNU; otherwise `cc_flags_set' is set to `yes' # -# Get the compiler version in a way that works for gcc, egcs, and -# pgcc unless a compiler version is already known +# Get the compiler version in a way that works for gcc +# unless a compiler version is already known # -# cc_vendor: The compiler name: gcc, egcs, or pgcc +# cc_vendor: The compiler name: gcc # cc_version: Version number: 2.91.60, 2.7.2.1 # if test X = "X$cc_flags_set"; then @@ -55,61 +55,9 @@ if test X = "X$cc_flags_set"; then cc_vers_all=`expr $cc_vers_major '*' 1000000 + $cc_vers_minor '*' 1000 + $cc_vers_patch` fi -# GCC compilers before gcc-2.8.1 have problems with `long long'. -if test gcc = "$cc_vendor" -a "$cc_vers_all" -lt 2008001; then - cat <<EOF - ** - ** This compiler may be unable to properly compile the long long - ** data type used extensively by hdf5. There may be other code - ** generation problems also, especially when optimizations are - ** enabled. Please upgrade to at least GNU gcc version 2.8.1 - ** before reporting bugs to the HDF5 team. - ** -EOF - sleep 5 - -# GCC v2.96 (shipped with RH7.x) has problems with `float'-> `double' conversions. -elif test gcc = "$cc_vendor" -a "$cc_vers_all" -eq 2096000; then - cat <<EOF - ** - ** This compiler may have problems converting 'float' values to - ** 'double' values. There may be other code generation problems - ** as well. - ** - ** Please use a different version of gcc before reporting bugs. - ** -EOF - sleep 5 - -# Current EGCS compilers have problems with `long long' and register -# allocation when optimizations are turned on for x86 systems. -elif test egcs = "$cc_vendor" -a "$cc_vers_all" -le 2091066; then - cat <<EOF - ** - ** This compiler may have problems allocating registers when - ** optimizations are enabled on some platforms. - ** -EOF - sleep 5 - -# All current versions of PGCC have problems also. -elif test pgcc = "$cc_vendor" -a "$cc_vers_all" -le 2091066; then - cat <<EOF - ** - ** This compiler may have problems allocating registers for long - ** long data types when optimizations are enabled. There may be - ** other code generation problems as well. We know of no version - ** of pgcc which is capable of compiling HDF5 in production mode. - ** Please use gcc-2.8 or egcs-1.1.1 before reporting bugs. - ** -EOF - sleep 5 - -fi - # Common GCC flags for various situations case "$cc_vendor-$cc_version" in - gcc*|egcs*|pgcc*) + gcc*) # Architecture-specific flags arch= case "$host_os-$host_cpu" in @@ -146,33 +94,40 @@ case "$cc_vendor-$cc_version" in esac # General - H5_CFLAGS="$H5_CFLAGS $arch -ansi -pedantic -Wall -W -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs -Winline" + H5_CFLAGS="$H5_CFLAGS $arch -std=c99 -pedantic -Wall -W -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs -Winline" # Production case "$cc_vendor-$cc_version" in - gcc-2.95.[34]) - PROD_CFLAGS="-O3" - ;; - gcc-3.*) + gcc-[34].*) PROD_CFLAGS="-O3" ;; - gcc-4.*) - PROD_CFLAGS="-O3" + gcc-5.*) + PROD_CFLAGS="-O3 -fstdarg-opt" ;; *) - PROD_CFLAGS="-O" + PROD_CFLAGS="-O -finline-functions" ;; esac - - PROD_CFLAGS="$PROD_CFLAGS -fomit-frame-pointer -finline-functions" PROD_CPPFLAGS= # Debug - DEBUG_CFLAGS="-g -fverbose-asm" + case "$cc_vendor-$cc_version" in + gcc-5.*) + DEBUG_CFLAGS="-Og -g -ftrapv -fno-common" + ;; + *) + DEBUG_CFLAGS="-g" + ;; + esac + #DEBUG_CFLAGS="$DEBUG_CFLAGS -fsanitize=undefined" DEBUG_CPPFLAGS= + # Try out the new "stack protector" feature introduced in gcc 4.1 + # (We should also think about adding some of the other memory protection options) + #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all" + # Profile - PROFILE_CFLAGS="-g -pg" + PROFILE_CFLAGS="-Og -g -pg" PROFILE_CPPFLAGS= # Flags are set @@ -186,13 +141,10 @@ esac # the information from the previous version and adding modifications to that. case "$cc_vendor-$cc_version" in -# Closer to the gcc 4.10 release, we should check for additional flags to +# Closer to the gcc 5.2 release, we should check for additional flags to # include and break it out into it's own section, like the other versions # below. -QAK - gcc-4.9*) - # Replace -ansi flag with -std=c99 flag - H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`" - + gcc-5*) # Append warning flags # Don't use the '-Wtraditional' flag, we're way past having K&R C code # H5_CFLAGS="$H5_CFLAGS -Wtraditional" @@ -259,16 +211,13 @@ case "$cc_vendor-$cc_version" in # Append more extra warning flags that only gcc 4.9+ know about H5_CFLAGS="$H5_CFLAGS -Wdate-time -Wopenmp-simd" - # Try out the new "stack protector" feature in gcc 4.1 - # (Strictly speaking this isn't really a "warning" flag, so it's added to - # the debugging flags) - #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all" - ;; + # (There was no release of gcc 5.0) - gcc-4.8*) - # Replace -ansi flag with -std=c99 flag - H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`" + # Append more extra warning flags that only gcc 5.1+ know about + H5_CFLAGS="$H5_CFLAGS -Warray-bounds=2 -Wc99-c11-compat" + ;; + gcc-4.9*) # Append warning flags # Don't use the '-Wtraditional' flag, we're way past having K&R C code # H5_CFLAGS="$H5_CFLAGS -Wtraditional" @@ -332,16 +281,76 @@ case "$cc_vendor-$cc_version" in # Append more extra warning flags that only gcc 4.8+ know about H5_CFLAGS="$H5_CFLAGS -Wsuggest-attribute=format" - # Try out the new "stack protector" feature in gcc 4.1 - # (Strictly speaking this isn't really a "warning" flag, so it's added to - # the debugging flags) - #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all" + # Append more extra warning flags that only gcc 4.9+ know about + H5_CFLAGS="$H5_CFLAGS -Wdate-time -Wopenmp-simd" ;; - gcc-4.7*) - # Replace -ansi flag with -std=c99 flag - H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`" + gcc-4.8*) + # Append warning flags + # Don't use the '-Wtraditional' flag, we're way past having K&R C code + # H5_CFLAGS="$H5_CFLAGS -Wtraditional" + # Don't use the '-Wtraditional-conversion' flag, there's too many warnings + # from GCC's assert macro + # H5_CFLAGS="$H5_CFLAGS -Wtraditional-conversion" + + # Append warning flags from gcc-3* case + # (don't use -Wpadded flag for normal builds, many of the warnings its + # issuing can't be fixed and they are making it hard to detect other, + # more important warnings) + #H5_CFLAGS="$H5_CFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded" + H5_CFLAGS="$H5_CFLAGS -Wfloat-equal -Wmissing-format-attribute" + + # Append warning flags from gcc-3.2* case + H5_CFLAGS="$H5_CFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization" + + # Enable more format checking flags, beyond the basic -Wformat included + # in -Wall + H5_CFLAGS="$H5_CFLAGS -Wformat=2" + + # The "unreachable code" warning appears to be reliable now... + H5_CFLAGS="$H5_CFLAGS -Wunreachable-code" + + # Append warning flags from gcc-3.3* case + H5_CFLAGS="$H5_CFLAGS -Wendif-labels" + + # Append warning flags from gcc-3.4* case + H5_CFLAGS="$H5_CFLAGS -Wdeclaration-after-statement -Wold-style-definition -Winvalid-pch" + + # Replace old -W flag with new -Wextra flag + H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-W\ /-Wextra\ /g'`" + + # Append more extra warning flags that only gcc4.0+ know about + H5_CFLAGS="$H5_CFLAGS -Wvariadic-macros -Winit-self -Wmissing-include-dirs -Wswitch-default -Wswitch-enum -Wunused-macros" + + # Append more extra warning flags that only gcc 4.1+ know about + H5_CFLAGS="$H5_CFLAGS -Wunsafe-loop-optimizations -Wc++-compat" + + # Append more extra warning flags that only gcc 4.2+ know about + H5_CFLAGS="$H5_CFLAGS -Wstrict-overflow" + + # Append more extra warning flags that only gcc 4.3+ know about + # + # Technically, variable-length arrays are part of the C99 standard, but + # we should approach them a bit cautiously... -QAK + H5_CFLAGS="$H5_CFLAGS -Wlogical-op -Wlarger-than=2048 -Wvla" + + # Append more extra warning flags that only gcc 4.4+ know about + H5_CFLAGS="$H5_CFLAGS -Wsync-nand -Wframe-larger-than=16384 -Wpacked-bitfield-compat" + + # Append more extra warning flags that only gcc 4.5+ know about + H5_CFLAGS="$H5_CFLAGS -Wstrict-overflow=5 -Wjump-misses-init" + # Append more extra warning flags that only gcc 4.6+ know about + H5_CFLAGS="$H5_CFLAGS -Wdouble-promotion -Wsuggest-attribute=const -Wtrampolines" + + # Append more extra warning flags that only gcc 4.7+ know about + H5_CFLAGS="$H5_CFLAGS -Wstack-usage=8192 -Wvector-operation-performance -Wsuggest-attribute=pure -Wsuggest-attribute=noreturn" + + # Append more extra warning flags that only gcc 4.8+ know about + H5_CFLAGS="$H5_CFLAGS -Wsuggest-attribute=format" + ;; + + gcc-4.7*) # Append warning flags # Don't use the '-Wtraditional' flag, we're way past having K&R C code # H5_CFLAGS="$H5_CFLAGS -Wtraditional" @@ -402,17 +411,9 @@ case "$cc_vendor-$cc_version" in # Append more extra warning flags that only gcc 4.7+ know about H5_CFLAGS="$H5_CFLAGS -Wstack-usage=8192 -Wvector-operation-performance -Wsuggest-attribute=pure -Wsuggest-attribute=noreturn" - - # Try out the new "stack protector" feature in gcc 4.1 - # (Strictly speaking this isn't really a "warning" flag, so it's added to - # the debugging flags) - #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all" ;; gcc-4.6*) - # Replace -ansi flag with -std=c99 flag - H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`" - # Disable warnings about using 'long long' type H5_CFLAGS="$H5_CFLAGS -Wno-long-long" @@ -466,17 +467,9 @@ case "$cc_vendor-$cc_version" in # Append more extra warning flags that only gcc 4.6+ know about H5_CFLAGS="$H5_CFLAGS -Wdouble-promotion -Wsuggest-attribute=const -Wtrampolines" - - # Try out the new "stack protector" feature in gcc 4.1 - # (Strictly speaking this isn't really a "warning" flag, so it's added to - # the debugging flags) - #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all" ;; gcc-4.5*) - # Replace -ansi flag with -std=c99 flag - H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`" - # Disable warnings about using 'long long' type H5_CFLAGS="$H5_CFLAGS -Wno-long-long" @@ -527,17 +520,9 @@ case "$cc_vendor-$cc_version" in # Append more extra warning flags that only gcc 4.5+ know about H5_CFLAGS="$H5_CFLAGS -Wstrict-aliasing -Wstrict-overflow=5 -Wjump-misses-init -Wunsuffixed-float-constants" - - # Try out the new "stack protector" feature in gcc 4.1 - # (Strictly speaking this isn't really a "warning" flag, so it's added to - # the debugging flags) - #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all" ;; gcc-4.4*) - # Replace -ansi flag with -std=c99 flag - H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`" - # Disable warnings about using 'long long' type H5_CFLAGS="$H5_CFLAGS -Wno-long-long" @@ -584,17 +569,9 @@ case "$cc_vendor-$cc_version" in # Append more extra warning flags that only gcc 4.4+ know about H5_CFLAGS="$H5_CFLAGS -Wsync-nand -Wframe-larger-than=16384 -Wpacked-bitfield-compat" - - # Try out the new "stack protector" feature in gcc 4.1 - # (Strictly speaking this isn't really a "warning" flag, so it's added to - # the debugging flags) - #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all" ;; gcc-4.3*) - # Replace -ansi flag with -std=c99 flag - H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`" - # Disable warnings about using 'long long' type H5_CFLAGS="$H5_CFLAGS -Wno-long-long" @@ -638,17 +615,9 @@ case "$cc_vendor-$cc_version" in # Technically, variable-length arrays are part of the C99 standard, but # we should approach them a bit cautiously... -QAK H5_CFLAGS="$H5_CFLAGS -Wlogical-op -Wvla" - - # Try out the new "stack protector" feature in gcc 4.1 - # (Strictly speaking this isn't really a "warning" flag, so it's added to - # the debugging flags) - #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all" ;; gcc-4.2*) - # Replace -ansi flag with -std=c99 flag - H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`" - # Disable warnings about using 'long long' type H5_CFLAGS="$H5_CFLAGS -Wno-long-long" @@ -686,17 +655,9 @@ case "$cc_vendor-$cc_version" in # Append more extra warning flags that only gcc 4.2+ know about H5_CFLAGS="$H5_CFLAGS -Wstrict-overflow" - - # Try out the new "stack protector" feature in gcc 4.1 - # (Strictly speaking this isn't really a "warning" flag, so it's added to - # the debugging flags) - #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all" ;; gcc-4.1.*) - # Replace -ansi flag with -std=c99 flag - H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`" - # Disable warnings about using 'long long' type H5_CFLAGS="$H5_CFLAGS -Wno-long-long" @@ -731,17 +692,9 @@ case "$cc_vendor-$cc_version" in # Append more extra warning flags that only gcc 4.1+ know about H5_CFLAGS="$H5_CFLAGS -Wunsafe-loop-optimizations -Wc++-compat -Wvolatile-register-var" - - # Try out the new "stack protector" feature in gcc 4.1 - # (Strictly speaking this isn't really a "warning" flag, so it's added to - # the debugging flags) - #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all" ;; gcc-4.0*) - # Replace -ansi flag with -std=c99 flag - H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`" - # Disable warnings about using 'long long' type H5_CFLAGS="$H5_CFLAGS -Wno-long-long" @@ -776,9 +729,6 @@ case "$cc_vendor-$cc_version" in ;; gcc-3.4*) - # Replace -ansi flag with -std=c99 flag - H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`" - # Disable warnings about using 'long long' type H5_CFLAGS="$H5_CFLAGS -Wno-long-long" @@ -810,9 +760,6 @@ case "$cc_vendor-$cc_version" in ;; gcc-3.3*) - # Replace -ansi flag with -std=c99 flag - H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`" - # Disable warnings about using 'long long' type H5_CFLAGS="$H5_CFLAGS -Wno-long-long" @@ -838,9 +785,6 @@ case "$cc_vendor-$cc_version" in ;; gcc-3.2*) - # Replace -ansi flag with -std=c99 flag - H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`" - # Disable warnings about using 'long long' type H5_CFLAGS="$H5_CFLAGS -Wno-long-long" @@ -863,9 +807,6 @@ case "$cc_vendor-$cc_version" in ;; gcc-3*) - # Replace -ansi flag with -std=c99 flag - H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`" - # Disable warnings about using 'long long' type H5_CFLAGS="$H5_CFLAGS -Wno-long-long" @@ -876,11 +817,6 @@ case "$cc_vendor-$cc_version" in #H5_CFLAGS="$H5_CFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded" H5_CFLAGS="$H5_CFLAGS -Wfloat-equal -Wmissing-format-attribute" ;; - - gcc-2.9[56]*) - # Disable warnings about using 'long long' type - H5_CFLAGS="$H5_CFLAGS -Wno-long-long" - ;; esac # Clear cc info if no flags set |