This commit is contained in:
parent
c8f65ff90d
commit
7c5506e9b8
@ -1,263 +0,0 @@
|
||||
--- ./distrib/configure-bin.ac.orig 2007-04-25 19:10:40.000000000 +0200
|
||||
+++ ./distrib/configure-bin.ac 2007-09-03 15:18:46.000000000 +0200
|
||||
@@ -139,7 +139,13 @@
|
||||
AC_PROG_CPP
|
||||
|
||||
#
|
||||
-AC_OUTPUT(Makefile)
|
||||
+dnl ** Check gcc version and flags we need to pass it **
|
||||
+#
|
||||
+FP_GCC_EXTRA_FLAGS
|
||||
+
|
||||
+#
|
||||
+AC_CONFIG_FILES(Makefile extra-gcc-opts)
|
||||
+AC_OUTPUT
|
||||
|
||||
echo "****************************************************"
|
||||
echo "Configuration done, ready to either 'make install'"
|
||||
--- ./compiler/main/DriverPipeline.hs.orig 2007-04-25 19:10:40.000000000 +0200
|
||||
+++ ./compiler/main/DriverPipeline.hs 2007-09-03 15:13:00.000000000 +0200
|
||||
@@ -815,6 +815,7 @@
|
||||
(cmdline_include_paths ++ pkg_include_dirs)
|
||||
|
||||
let (md_c_flags, md_regd_c_flags) = machdepCCOpts dflags
|
||||
+ gcc_extra_viac_flags <- getExtraViaCOpts dflags
|
||||
let pic_c_flags = picCCOpts dflags
|
||||
|
||||
let verb = getVerbFlag dflags
|
||||
@@ -881,6 +882,13 @@
|
||||
++ (if hcc && mangle
|
||||
then md_regd_c_flags
|
||||
else [])
|
||||
+ ++ (if hcc
|
||||
+ then if mangle
|
||||
+ then gcc_extra_viac_flags
|
||||
+ else filter (=="-fwrapv")
|
||||
+ gcc_extra_viac_flags
|
||||
+ -- still want -fwrapv even for unreg'd
|
||||
+ else [])
|
||||
++ (if hcc
|
||||
then more_hcc_opts
|
||||
else [])
|
||||
@@ -890,10 +898,6 @@
|
||||
++ split_opt
|
||||
++ include_paths
|
||||
++ pkg_extra_cc_opts
|
||||
-#ifdef HAVE_GCC_HAS_WRAPV
|
||||
- -- We need consistent integer overflow (trac #952)
|
||||
- ++ ["-fwrapv"]
|
||||
-#endif
|
||||
))
|
||||
|
||||
return (next_phase, dflags, maybe_loc, output_fn)
|
||||
--- ./compiler/main/DynFlags.hs.orig 2007-04-25 19:10:39.000000000 +0200
|
||||
+++ ./compiler/main/DynFlags.hs 2007-09-03 15:13:00.000000000 +0200
|
||||
@@ -1243,6 +1243,18 @@
|
||||
-----------------------------------------------------------------------------
|
||||
-- Via-C compilation stuff
|
||||
|
||||
+-- There are some options that we need to pass to gcc when compiling
|
||||
+-- Haskell code via C, but are only supported by recent versions of
|
||||
+-- gcc. The configure script decides which of these options we need,
|
||||
+-- and puts them in the file "extra-gcc-opts" in $topdir, which is
|
||||
+-- read before each via-C compilation. The advantage of having these
|
||||
+-- in a separate file is that the file can be created at install-time
|
||||
+-- depending on the available gcc version, and even re-generated later
|
||||
+-- if gcc is upgraded.
|
||||
+--
|
||||
+-- The options below are not dependent on the version of gcc, only the
|
||||
+-- platform.
|
||||
+
|
||||
machdepCCOpts :: DynFlags -> ([String], -- flags for all C compilations
|
||||
[String]) -- for registerised HC compilations
|
||||
machdepCCOpts dflags
|
||||
@@ -1285,20 +1297,6 @@
|
||||
-- , if suffixMatch "mingw32" cTARGETPLATFORM then "-mno-cygwin" else ""
|
||||
],
|
||||
[ "-fno-defer-pop",
|
||||
-#ifdef HAVE_GCC_MNO_OMIT_LFPTR
|
||||
- -- Some gccs are configured with
|
||||
- -- -momit-leaf-frame-pointer on by default, and it
|
||||
- -- apparently takes precedence over
|
||||
- -- -fomit-frame-pointer, so we disable it first here.
|
||||
- "-mno-omit-leaf-frame-pointer",
|
||||
-#endif
|
||||
-#ifdef HAVE_GCC_HAS_NO_UNIT_AT_A_TIME
|
||||
- "-fno-unit-at-a-time",
|
||||
- -- unit-at-a-time doesn't do us any good, and screws
|
||||
- -- up -split-objs by moving the split markers around.
|
||||
- -- It's only turned on with -O2, but put it here just
|
||||
- -- in case someone uses -optc-O2.
|
||||
-#endif
|
||||
"-fomit-frame-pointer",
|
||||
-- we want -fno-builtin, because when gcc inlines
|
||||
-- built-in functions like memcpy() it tends to
|
||||
@@ -1317,13 +1315,6 @@
|
||||
-- and get in the way of -split-objs. Another option
|
||||
-- would be to throw them away in the mangler, but this
|
||||
-- is easier.
|
||||
-#ifdef HAVE_GCC_HAS_NO_UNIT_AT_A_TIME
|
||||
- "-fno-unit-at-a-time",
|
||||
- -- unit-at-a-time doesn't do us any good, and screws
|
||||
- -- up -split-objs by moving the split markers around.
|
||||
- -- It's only turned on with -O2, but put it here just
|
||||
- -- in case someone uses -optc-O2.
|
||||
-#endif
|
||||
"-fno-builtin"
|
||||
-- calling builtins like strlen() using the FFI can
|
||||
-- cause gcc to run out of regs, so use the external
|
||||
--- ./compiler/main/SysTools.lhs.orig 2007-04-25 19:10:41.000000000 +0200
|
||||
+++ ./compiler/main/SysTools.lhs 2007-09-03 15:13:00.000000000 +0200
|
||||
@@ -22,6 +22,7 @@
|
||||
copy,
|
||||
copyWithHeader,
|
||||
normalisePath, -- FilePath -> FilePath
|
||||
+ getExtraViaCOpts,
|
||||
|
||||
-- Temporary-file management
|
||||
setTmpDir,
|
||||
@@ -518,6 +519,10 @@
|
||||
hPutStr h ls
|
||||
hClose h
|
||||
|
||||
+getExtraViaCOpts :: DynFlags -> IO [String]
|
||||
+getExtraViaCOpts dflags = do
|
||||
+ f <- readFile (topDir dflags `joinFileName` "extra-gcc-opts")
|
||||
+ return (words f)
|
||||
\end{code}
|
||||
|
||||
%************************************************************************
|
||||
--- ./aclocal.m4.orig 2007-04-25 19:10:41.000000000 +0200
|
||||
+++ ./aclocal.m4 2007-09-03 15:13:00.000000000 +0200
|
||||
@@ -922,45 +922,47 @@
|
||||
])# FP_GHC_HAS_READLINE
|
||||
|
||||
|
||||
-# FP_GCC_NEEDS_NO_OMIT_LFPTR
|
||||
-# --------------------------
|
||||
+# FP_GCC_EXTRA_FLAGS
|
||||
+# ------------------
|
||||
+# 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. Defines HAVE_GCC_MNO_OMIT_LFPTR.
|
||||
-AC_DEFUN([FP_GCC_NEEDS_NO_OMIT_LFPTR],
|
||||
+# -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([whether gcc needs -mno-omit-leaf-frame-pointer], [fp_cv_gcc_needs_no_omit_lfptr],
|
||||
-[FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.2],
|
||||
- [fp_cv_gcc_needs_no_omit_lfptr=yes],
|
||||
- [fp_cv_gcc_needs_no_omit_lfptr=no])])
|
||||
-if test "$fp_cv_gcc_needs_no_omit_lfptr" = "yes"; then
|
||||
- AC_DEFINE([HAVE_GCC_MNO_OMIT_LFPTR], [1], [Define to 1 if gcc supports -mno-omit-leaf-frame-pointer.])
|
||||
-fi])# FP_GCC_NEEDS_NO_OMIT_LFPTR
|
||||
-
|
||||
-# FP_GCC_HAS_NO_UNIT_AT_A_TIME
|
||||
-# --------------------------
|
||||
-AC_DEFUN([FP_GCC_HAS_NO_UNIT_AT_A_TIME],
|
||||
-[AC_REQUIRE([FP_HAVE_GCC])
|
||||
-AC_CACHE_CHECK([whether gcc has -fno-unit-at-a-time], [fp_cv_gcc_has_no_unit_at_a_time],
|
||||
-[FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.4],
|
||||
- [fp_cv_gcc_has_no_unit_at_a_time=yes],
|
||||
- [fp_cv_gcc_has_no_unit_at_a_time=no])])
|
||||
-if test "$fp_cv_gcc_has_no_unit_at_a_time" = "yes"; then
|
||||
- AC_DEFINE([HAVE_GCC_HAS_NO_UNIT_AT_A_TIME], [1], [Define to 1 if gcc supports -fno-unit-at-a-time.])
|
||||
-fi])
|
||||
-
|
||||
-# FP_GCC_HAS_WRAPV
|
||||
-# --------------------------
|
||||
-AC_DEFUN([FP_GCC_HAS_WRAPV],
|
||||
-[AC_REQUIRE([FP_HAVE_GCC])
|
||||
-AC_CACHE_CHECK([whether gcc has -fwrapv], [fp_cv_gcc_has_wrapv],
|
||||
-[FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.4],
|
||||
- [fp_cv_gcc_has_wrapv=yes],
|
||||
- [fp_cv_gcc_has_wrapv=no])])
|
||||
-if test "$fp_cv_gcc_has_wrapv" = "yes"; then
|
||||
- AC_DEFINE([HAVE_GCC_HAS_WRAPV], [1], [Define to 1 if gcc supports -fwrapv.])
|
||||
-fi])
|
||||
+AC_CACHE_CHECK([for extra options to pass gcc when compiling via C], [fp_cv_gcc_extra_opts],
|
||||
+[fp_cv_gcc_extra_opts=
|
||||
+ FP_COMPARE_VERSIONS([$fp_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_gcc_version], [-ge], [3.2],
|
||||
+ [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -mno-omit-leaf-frame-pointer"],
|
||||
+ [])
|
||||
+ FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.4],
|
||||
+ [FP_COMPARE_VERSIONS([$fp_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"]
|
||||
+ )],
|
||||
+ [])
|
||||
+ ;;
|
||||
+ esac
|
||||
+])
|
||||
+AC_SUBST([GccExtraViaCOpts],$fp_cv_gcc_extra_opts)
|
||||
+])
|
||||
+
|
||||
|
||||
# FP_SETUP_PROJECT_VERSION
|
||||
# ---------------------
|
||||
--- ./configure.ac.orig 2007-04-25 19:10:41.000000000 +0200
|
||||
+++ ./configure.ac 2007-09-03 15:13:00.000000000 +0200
|
||||
@@ -909,9 +909,7 @@
|
||||
dnl
|
||||
FP_HAVE_GCC
|
||||
FP_MINGW_GCC
|
||||
-FP_GCC_NEEDS_NO_OMIT_LFPTR
|
||||
-FP_GCC_HAS_NO_UNIT_AT_A_TIME
|
||||
-FP_GCC_HAS_WRAPV
|
||||
+FP_GCC_EXTRA_FLAGS
|
||||
|
||||
dnl ** figure out how to invoke cpp directly (gcc -E is no good)
|
||||
AC_PROG_CPP
|
||||
@@ -1251,6 +1249,6 @@
|
||||
fi
|
||||
AC_SUBST([GTK_CONFIG])
|
||||
|
||||
-AC_CONFIG_FILES([mk/config.mk ghc.spec docs/users_guide/ug-book.xml])
|
||||
+AC_CONFIG_FILES([mk/config.mk ghc.spec extra-gcc-opts docs/users_guide/ug-book.xml])
|
||||
AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
|
||||
AC_OUTPUT
|
||||
--- ./Makefile.orig 2007-04-25 19:10:41.000000000 +0200
|
||||
+++ ./Makefile 2007-09-03 15:17:11.000000000 +0200
|
||||
@@ -171,6 +171,11 @@
|
||||
endif
|
||||
endif
|
||||
|
||||
+# Install gcc-extra-opts
|
||||
+install ::
|
||||
+ @$(INSTALL_DIR) $(libdir)
|
||||
+ $(INSTALL_DATA) $(INSTALL_OPTS) extra-gcc-opts $(libdir)
|
||||
+
|
||||
install-docs ::
|
||||
@case '${MFLAGS}' in *-[ik]*) x_on_err=0;; *-r*[ik]*) x_on_err=0;; *) x_on_err=1;; esac; \
|
||||
for i in $(SUBDIRS); do \
|
||||
@@ -232,6 +237,7 @@
|
||||
LICENSE \
|
||||
utils/mkdirhier/mkdirhier \
|
||||
install-sh \
|
||||
+ extra-gcc-opts.in \
|
||||
config.guess \
|
||||
config.sub \
|
||||
aclocal.m4
|
||||
--- ./extra-gcc-opts.in.orig 2007-09-03 15:55:59.000000000 +0200
|
||||
+++ ./extra-gcc-opts.in 2007-09-03 15:13:00.000000000 +0200
|
||||
@@ -0,0 +1 @@
|
||||
+@GccExtraViaCOpts@
|
Loading…
x
Reference in New Issue
Block a user