# ensure we don't clash with any pre-supplied autoconf ones.
+# FPTOOLS_SET_PLATFORM_VARS
+# ----------------------------------
+# Set the platform variables
+AC_DEFUN([FPTOOLS_SET_PLATFORM_VARS],
+[
+ # If no argument was given for a configuration variable, then discard
+ # the guessed canonical system and use the configuration of the
+ # bootstrapping ghc. If an argument was given, map it from gnu format
+ # to ghc format.
+ #
+ # For why we do it this way, see: #3637, #1717, #2951
+ #
+ # In bindists, we haven't called AC_CANONICAL_{BUILD,HOST,TARGET}
+ # so this justs uses $bootstrap_target.
+
+ if test "$build_alias" = ""
+ then
+ if test "$bootstrap_target" != ""
+ then
+ build=$bootstrap_target
+ echo "Build platform inferred as: $build"
+ else
+ echo "Can't work out build platform"
+ exit 1
+ fi
+
+ BuildArch=`echo "$build" | sed 's/-.*//'`
+ BuildVendor=`echo "$build" | sed -e 's/.*-\(.*\)-.*/\1/'`
+ BuildOS=`echo "$build" | sed 's/.*-//'`
+ else
+ GHC_CONVERT_CPU([$build_cpu], [BuildArch])
+ GHC_CONVERT_VENDOR([$build_vendor], [BuildVendor])
+ GHC_CONVERT_OS([$build_os], [BuildOS])
+ fi
+
+ if test "$host_alias" = ""
+ then
+ if test "$bootstrap_target" != ""
+ then
+ host=$bootstrap_target
+ echo "Host platform inferred as: $host"
+ else
+ echo "Can't work out host platform"
+ exit 1
+ fi
+
+ HostArch=`echo "$host" | sed 's/-.*//'`
+ HostVendor=`echo "$host" | sed -e 's/.*-\(.*\)-.*/\1/'`
+ HostOS=`echo "$host" | sed 's/.*-//'`
+ else
+ GHC_CONVERT_CPU([$host_cpu], [HostArch])
+ GHC_CONVERT_VENDOR([$host_vendor], [HostVendor])
+ GHC_CONVERT_OS([$host_os], [HostOS])
+ fi
+
+ if test "$target_alias" = ""
+ then
+ if test "$bootstrap_target" != ""
+ then
+ target=$bootstrap_target
+ echo "Target platform inferred as: $target"
+ else
+ echo "Can't work out target platform"
+ exit 1
+ fi
+
+ TargetArch=`echo "$target" | sed 's/-.*//'`
+ TargetVendor=`echo "$target" | sed -e 's/.*-\(.*\)-.*/\1/'`
+ TargetOS=`echo "$target" | sed 's/.*-//'`
+ else
+ GHC_CONVERT_CPU([$target_cpu], [TargetArch])
+ GHC_CONVERT_VENDOR([$target_vendor], [TargetVendor])
+ GHC_CONVERT_OS([$target_os], [TargetOS])
+ fi
+])
+
+
# FPTOOLS_SET_C_LD_FLAGS
# ----------------------------------
# Set the C, LD and CPP flags for a given platform
# $1 is the platform
-# $2 is the name of the C flags variable
-# $3 is the name of the LD flags variable
-# $4 is the name of the CPP flags variable
+# $2 is the name of the CC flags variable
+# $3 is the name of the linker flags variable when linking with gcc
+# $4 is the name of the linker flags variable when linking with ld
+# $5 is the name of the CPP flags variable
AC_DEFUN([FPTOOLS_SET_C_LD_FLAGS],
[
- AC_MSG_CHECKING([Setting up $2, $3 and $4])
+ AC_MSG_CHECKING([Setting up $2, $3, $4 and $5])
case $$1 in
i386-apple-darwin)
- # By default, gcc on OS X will generate SSE
- # instructions, which need things 16-byte aligned,
- # but we don't 16-byte align things. Thus drop
- # back to generic i686 compatibility. Trac #2983.
- $2="$$2 -march=i686 -m32"
- $3="$$3 -march=i686 -m32"
- $4="$$4 -march=i686 -m32"
+ $2="$$2 -m32"
+ $3="$$3 -m32"
+ $4="$$4 -arch i386"
+ $5="$$5 -m32"
;;
x86_64-apple-darwin)
$2="$$2 -m64"
$3="$$3 -m64"
- $4="$$4 -m64"
- ;;
- esac
-
- case $$1 in
- i386-apple-darwin|x86_64-apple-darwin)
- # We support back to OS X 10.5
- $2="$$2 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5"
- $3="$$3 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5"
- $4="$$4 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5"
+ $4="$$4 -arch x86_64"
+ $5="$$5 -m64"
;;
esac
])# FP_PROG_LD_X
+# FP_PROG_LD_BUILD_ID
+# ------------
+
+# Sets the output variable LdHasBuildId to YES if ld supports
+# --build-id, or NO otherwise.
+AC_DEFUN([FP_PROG_LD_BUILD_ID],
+[
+AC_CACHE_CHECK([whether ld understands --build-id], [fp_cv_ld_build_id],
+[echo 'foo() {}' > conftest.c
+${CC-cc} -c conftest.c
+if ${LdCmd} -r --build-id=none -o conftest2.o conftest.o > /dev/null 2>&1; then
+ fp_cv_ld_build_id=yes
+else
+ fp_cv_ld_build_id=no
+fi
+rm -rf conftest*])
+if test "$fp_cv_ld_build_id" = yes; then
+ LdHasBuildId=YES
+else
+ LdHasBuildId=NO
+fi
+AC_SUBST([LdHasBuildId])
+])# FP_PROG_LD_BUILD_ID
+
+
# FP_PROG_LD_IS_GNU
# -----------------
# Sets the output variable LdIsGNULd to YES or NO, depending on whether it is
# Determine which extra flags we need to pass gcc when we invoke it
# to compile .hc code.
#
-# Some OSs (Mandrake Linux, in particular) configure GCC with
-# -momit-leaf-frame-pointer on by default. If this is the case, we
-# need to turn it off for mangling to work. The test is currently a
-# bit crude, using only the version number of gcc.
-#
# -fwrapv is needed for gcc to emit well-behaved code in the presence of
# integer wrap around. (Trac #952)
#
-# -fno-unit-at-a-time or -fno-toplevel-reoder is necessary to avoid gcc
-# reordering things in the module and confusing the manger and/or splitter.
-# (eg. Trac #1427)
-#
AC_DEFUN([FP_GCC_EXTRA_FLAGS],
[AC_REQUIRE([FP_HAVE_GCC])
AC_CACHE_CHECK([for extra options to pass gcc when compiling via C], [fp_cv_gcc_extra_opts],
FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.4],
[fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fwrapv"],
[])
- case $TargetPlatform in
- i386-*|x86_64-*)
- FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.2],
- [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -mno-omit-leaf-frame-pointer"],
- [])
- FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.4],
- [FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [4.2],
- [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-toplevel-reorder"],
- [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-unit-at-a-time"]
- )],
- [])
- ;;
- sparc-*-solaris2)
- FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [4.2],
- [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-toplevel-reorder"],
- [])
- ;;
- esac
])
AC_SUBST([GccExtraViaCOpts],$fp_cv_gcc_extra_opts)
])
hppa*)
$2="hppa"
;;
- i386)
+ i386|i486|i586|i686)
$2="i386"
;;
ia64)
# --------------------------------
# converts vendor from gnu to ghc naming, and assigns the result to $target_var
AC_DEFUN([GHC_CONVERT_VENDOR],[
-$2="$1"
+ case "$1" in
+ pc|gentoo) # like i686-pc-linux-gnu and i686-gentoo-freebsd8
+ $2="unknown"
+ ;;
+ *)
+ #pass thru by default
+ $2="$1"
+ ;;
+ esac
])
# GHC_CONVERT_OS(os, target_var)
freebsd|netbsd|openbsd|dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix|haiku)
$2="$1"
;;
+ freebsd8) # like i686-gentoo-freebsd8
+ $2="freebsd"
+ ;;
*)
echo "Unknown OS $1"
exit 1