[svn-r9684] Purpose:

Port

Description:
    Initial work for supporting GNU FORTRAN/F95 on FreeBSD.  I think I've
got things mostly set up correctly, but I'm getting an internal compiler
error on one of the FORTRAN sources, so I'm not going to add this configuration
to the daily tests yet.

Platforms tested:
    FreeBSD 4.10 (sleipnir) w/GNU FORTRAN
    Not tested in h5committest
This commit is contained in:
Quincey Koziol 2004-12-16 21:27:41 -05:00
parent 1205c57531
commit 5387f65eef
4 changed files with 135 additions and 1 deletions

View File

@ -56,6 +56,7 @@
./config/depend4.in
./config/dependN.in
./config/freebsd
./config/gnu-fflags
./config/gnu-flags
./config/hpux10.20
./config/hpux11.00

View File

@ -15,9 +15,26 @@ fi
# from /usr/include/sys/cdefs.h
CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=1"
# Figure out compiler flags
#
# HDF5 FORTRAN integers
#
# R_LARGE is the number of digits for the bigest integer supported.
# R_INTEGER is the number of digits in INTEGER
#
R_LARGE=18
R_INTEGER=9
HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
HID_T='SELECTED_INT_KIND(R_INTEGER)'
SIZE_T='SELECTED_INT_KIND(R_INTEGER)'
OBJECT_NAMELEN_DEFAULT_F=-1
# Figure out C compiler flags
. $srcdir/config/gnu-flags
# Figure out FORTRAN compiler flags
. $srcdir/config/gnu-fflags
# Special setup to use pthread support if enable-threadsafe is on.
# Works with static executable only.
if test "X-" != "X-$enable_threadsafe"; then

85
config/gnu-fflags Normal file
View File

@ -0,0 +1,85 @@
# -*- shell-script -*-
#
# This file should be sourced into configure if the compiler is the
# GNU g95/gfortran compiler or a derivative. It is careful not to do anything
# if the compiler is not GNU; otherwise `f9x_flags_set' is set to `yes'
#
# Get the compiler version in a way that works for GNU fortran
# gfortran unless a compiler version is already known
#
# f9x_vendor: The compiler name: gfortran
# f9x_version: Version number: 5.0-2, 5.2-2
#
if test X = "X$f9x_flags_set"; then
f9x_version="`$F9X $FFLAGS -v 2>&1 |grep 'gcc version' |\
sed 's/.*gcc version \([-a-z0-9\.]*\).*/\1/'`"
if test X != "X$f9x_version"; then
# is_mpi="`$F9X $FFLAGS -help 2>&1 |grep 'link MPI'`"
f9x_vendor=`echo $f9x_version |sed 's/\([a-z]*\).*/\1/'`
f9x_version=`echo $f9x_version |sed 's/[-a-z]//g'`
if test X = "X$f9x_vendor" -a X != "X$f9x_version"; then
f9x_vendor=gfortran
fi
if test "-" != "$f9x_vendor-$f9x_version"; then
echo "compiler '$F9X' is GNU $f9x_vendor-$f9x_version"
fi
# Some version numbers
f9x_vers_major=`echo $f9x_version | cut -f1 -d.`
f9x_vers_minor=`echo $f9x_version | cut -f2 -d.`
f9x_vers_patch=`echo $f9x_version | cut -f3 -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 GNU flags for various situations
if test "X-gfortran" = "X-$f9x_vendor"; then
# Insert section about version specific problems from gnu-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
F9X_BASENAME=gfortran40
F9XSUFFIXFLAG=""
FSEARCH_DIRS=""
FFLAGS="$FFLAGS -pedantic -Wall -Wconversion -Wunderflow -Wimplicit-interface -W"
# Production
PROD_FFLAGS="-O2 -s"
# Debug
DEBUG_FFLAGS="-g -fbounds-check"
# Profile
PROFILE_FFLAGS="-g -pg"
# 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

View File

@ -193,6 +193,37 @@ typedef float real_f;
#endif /*WINDOWS */
/* FreeBSD definitions */
#if (defined(__FreeBSD) || defined(__FreeBSD__))
/* Common definitions */
typedef char *_fcd;
typedef int int_f;
typedef int hid_t_f;
typedef float real_f;
#define _fcdtocp(desc) (desc)
/* IA32 specific definitions */
#if (defined(i386) || defined(__i386) || defined(__i386__))
typedef long long hsize_t_f;
typedef long long hssize_t_f;
typedef int size_t_f;
/* AMD64 specific definitions */
#elif defined __x86_64__
typedef long long hsize_t_f;
typedef long long hssize_t_f;
typedef int size_t_f;
/* IA64 specific definitions */
#elif defined __ia64
typedef long hsize_t_f;
typedef long hssize_t_f;
typedef long size_t_f;
#endif /* IA64 */
#define FNAME_POST_UNDERSCORE
#endif /* FreeBSD */
/*----------------------------------------------------------------
** MACRO FNAME for any fortran callable routine name.
**