[Git][ghc/ghc][wip/move-via-c-flags-into-ghc] Move via-C flags into GHC

Rodrigo Mesquita (@alt-romes) gitlab at gitlab.haskell.org
Tue May 23 18:36:53 UTC 2023



Rodrigo Mesquita pushed to branch wip/move-via-c-flags-into-ghc at Glasgow Haskell Compiler / GHC


Commits:
75b42288 by Ben Gamari at 2023-05-23T19:36:44+01:00
Move via-C flags into GHC

These were previously hardcoded in configure (with no option for
overriding them) and simply passed onto ghc through the settings file.

Since configure already guarantees gcc supports those flags, we simply
move them into GHC.

- - - - -


8 changed files:

- compiler/GHC/Settings/IO.hs
- configure.ac
- hadrian/bindist/Makefile
- hadrian/bindist/config.mk.in
- hadrian/cfg/system.config.in
- hadrian/src/Rules/Generate.hs
- − m4/fp_gcc_extra_flags.m4
- + m4/fp_gcc_supports_via_c_flags.m4


Changes:

=====================================
compiler/GHC/Settings/IO.hs
=====================================
@@ -76,7 +76,6 @@ initSettings top_dir = do
       getToolSetting :: String -> ExceptT SettingsError m String
       getToolSetting key = expandToolDir useInplaceMinGW mtool_dir <$> getSetting key
   targetPlatformString <- getSetting "target platform string"
-  myExtraGccViaCFlags <- getSetting "GCC extra via C opts"
   cc_prog <- getToolSetting "C compiler command"
   cxx_prog <- getToolSetting "C++ compiler command"
   cc_args_str <- getToolSetting "C compiler flags"
@@ -93,6 +92,16 @@ initSettings top_dir = do
       cpp_args = map Option (words cpp_args_str)
       cc_args  = words cc_args_str ++ unreg_cc_args
       cxx_args = words cxx_args_str
+
+      -- The extra flags we need to pass gcc when we invoke it to compile .hc code.
+      --
+      -- -fwrapv is needed for gcc to emit well-behaved code in the presence of
+      -- integer wrap around (#952).
+      extraGccViaCFlags = if platformUnregisterised platform
+                            -- configure guarantees cc support these flags
+                            then ["-fwrapv", "-fno-builtin"]
+                            else []
+
   ldSupportsCompactUnwind <- getBooleanSetting "ld supports compact unwind"
   ldSupportsFilelist      <- getBooleanSetting "ld supports filelist"
   ldSupportsResponseFiles <- getBooleanSetting "ld supports response files"
@@ -204,7 +213,7 @@ initSettings top_dir = do
       , toolSettings_opt_lc      = []
       , toolSettings_opt_i       = []
 
-      , toolSettings_extraGccViaCFlags = words myExtraGccViaCFlags
+      , toolSettings_extraGccViaCFlags = extraGccViaCFlags
       }
 
     , sTargetPlatform = platform


=====================================
configure.ac
=====================================
@@ -622,6 +622,9 @@ FP_GCC_VERSION
 dnl ** See whether cc supports -no-pie
 FP_GCC_SUPPORTS_NO_PIE
 
+dnl ** Check support for the extra flags passed by GHC when compiling via C
+FP_GCC_SUPPORTS_VIA_C_FLAGS
+
 dnl ** Used to determine how to compile ghc-prim's atomics.c, used by
 dnl    unregisterised, Sparc, and PPC backends. Also determines whether
 dnl    linking to libatomic is required for atomic operations, e.g. on


=====================================
hadrian/bindist/Makefile
=====================================
@@ -79,7 +79,6 @@ WrapperBinsDir=${bindir}
 # N.B. this is duplicated from includes/ghc.mk.
 lib/settings : config.mk
 	@rm -f $@
-	@echo '[("GCC extra via C opts", "$(GccExtraViaCOpts)")' >> $@
 	@echo ',("C compiler command", "$(SettingsCCompilerCommand)")' >> $@
 	@echo ',("C compiler flags", "$(SettingsCCompilerFlags)")' >> $@
 	@echo ',("C++ compiler command", "$(SettingsCxxCompilerCommand)")' >> $@


=====================================
hadrian/bindist/config.mk.in
=====================================
@@ -234,7 +234,6 @@ GhcRtsWithLibdw=$(strip $(if $(filter $(TargetArch_CPP),i386 x86_64 s390x), at UseL
 # might become redundant.
 # See Note [tooldir: How GHC finds mingw on Windows]
 
-GccExtraViaCOpts = @GccExtraViaCOpts@
 LdHasFilelist = @LdHasFilelist@
 LdSupportsResponseFiles = @LdSupportsResponseFiles@
 LdHasBuildId = @LdHasBuildId@


=====================================
hadrian/cfg/system.config.in
=====================================
@@ -137,7 +137,6 @@ conf-merge-objects-args-stage3  = @MergeObjsArgs@
 # might become redundant.
 # See Note [tooldir: How GHC finds mingw on Windows]
 
-gcc-extra-via-c-opts = @GccExtraViaCOpts@
 ld-has-no-compact-unwind = @LdHasNoCompactUnwind@
 ld-has-filelist = @LdHasFilelist@
 ld-supports-response-files = @LdSupportsResponseFiles@


=====================================
hadrian/src/Rules/Generate.hs
=====================================
@@ -411,8 +411,7 @@ generateSettings :: Expr String
 generateSettings = do
     ctx <- getContext
     settings <- traverse sequence $
-        [ ("GCC extra via C opts", expr $ lookupSystemConfig "gcc-extra-via-c-opts")
-        , ("C compiler command", expr $ settingsFileSetting SettingsFileSetting_CCompilerCommand)
+        [ ("C compiler command", expr $ settingsFileSetting SettingsFileSetting_CCompilerCommand)
         , ("C compiler flags", expr $ settingsFileSetting SettingsFileSetting_CCompilerFlags)
         , ("C++ compiler command", expr $ settingsFileSetting SettingsFileSetting_CxxCompilerCommand)
         , ("C++ compiler flags", expr $ settingsFileSetting SettingsFileSetting_CxxCompilerFlags)


=====================================
m4/fp_gcc_extra_flags.m4 deleted
=====================================
@@ -1,20 +0,0 @@
-# FP_GCC_EXTRA_FLAGS
-# ------------------
-# Determine which extra flags we need to pass gcc when we invoke it
-# to compile .hc code.
-#
-# -fwrapv is needed for gcc to emit well-behaved code in the presence of
-# integer wrap around. (#952)
-#
-AC_DEFUN([FP_GCC_EXTRA_FLAGS],
-[AC_REQUIRE([FP_GCC_VERSION])
-AC_CACHE_CHECK([for extra options to pass gcc when compiling via C], [fp_cv_gcc_extra_opts],
-[
- if test "$Unregisterised" = "YES"; then
-   # These used to be conditioned on gcc version but we no longer support
-   # GCC versions which lack support for these flags
-   fp_cv_gcc_extra_opts="-fwrapv -fno-builtin"
- fi
-])
-AC_SUBST([GccExtraViaCOpts],$fp_cv_gcc_extra_opts)
-])


=====================================
m4/fp_gcc_supports_via_c_flags.m4
=====================================
@@ -0,0 +1,18 @@
+# FP_GCC_SUPPORTS_VIA_C_FLAGS
+# ----------------------
+# Does gcc support the -no-pie option? If so we should pass it to gcc when
+# joining objects since -pie may be enabled by default.
+AC_DEFUN([FP_GCC_SUPPORTS_VIA_C_FLAGS],
+[
+   AC_REQUIRE([AC_PROG_CC])
+   AC_MSG_CHECKING([whether CC supports flags passed by GHC when compiling via C])
+   echo 'int main() { return 0; }' > conftest.c
+   if $CC -fwrapv -fno-builtin -Werror -x c conftest.c -o conftest > conftest.txt 2>&1 && ! grep -i unrecognized conftest.txt > /dev/null 2>&1; then
+       AC_MSG_RESULT([yes])
+   else
+       AC_MSG_RESULT([no])
+       AC_MSG_ERROR([gcc must support the flags -fwrapv and/or -fno-builtin])]
+   fi
+   rm -f conftest.c conftest.o conftest
+])
+



View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/75b422888527112f71a09e6cf39601d120efe541

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/75b422888527112f71a09e6cf39601d120efe541
You're receiving this email because of your account on gitlab.haskell.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20230523/9f3599a7/attachment-0001.html>


More information about the ghc-commits mailing list