diff options
author | John Ericson <git@JohnEricson.me> | 2019-04-03 09:32:05 -0400 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2019-04-30 20:29:31 -0400 |
commit | d37d91e9a444a7822eef1558198d21511558515e (patch) | |
tree | 478d7a0bf63e91ac8901f0c277dbe29136b1665b | |
parent | 014ed644eea9037427c1ebeaac16189b00f9dbc7 (diff) | |
download | haskell-d37d91e9a444a7822eef1558198d21511558515e.tar.gz |
Generate settings by make/hadrian instead of configure
This allows it to eventually become stage-specific
-rw-r--r-- | aclocal.m4 | 20 | ||||
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | distrib/configure.ac.in | 2 | ||||
-rw-r--r-- | ghc.mk | 5 | ||||
-rw-r--r-- | ghc/ghc.mk | 3 | ||||
-rw-r--r-- | hadrian/cfg/system.config.in | 40 | ||||
-rw-r--r-- | hadrian/doc/make.md | 11 | ||||
-rw-r--r-- | hadrian/src/Oracles/Setting.hs | 51 | ||||
-rw-r--r-- | hadrian/src/Rules/BinaryDist.hs | 2 | ||||
-rw-r--r-- | hadrian/src/Rules/Configure.hs | 2 | ||||
-rw-r--r-- | hadrian/src/Rules/Generate.hs | 53 | ||||
-rw-r--r-- | hadrian/src/Rules/SourceDist.hs | 2 | ||||
-rw-r--r-- | includes/ghc.mk | 46 | ||||
-rw-r--r-- | mk/config.mk.in | 37 |
14 files changed, 257 insertions, 21 deletions
diff --git a/aclocal.m4 b/aclocal.m4 index d2d42f243b..5004a05ec6 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -497,16 +497,16 @@ AC_DEFUN([FP_SETTINGS], [ if test "$windows" = YES -a "$EnableDistroToolchain" = "NO" then - mingw_bin_prefix=mingw/bin/ - SettingsCCompilerCommand="\$tooldir/${mingw_bin_prefix}gcc.exe" - SettingsHaskellCPPCommand="\$tooldir/${mingw_bin_prefix}gcc.exe" + mingw_bin_prefix='$$tooldir/mingw/bin/' + SettingsCCompilerCommand="${mingw_bin_prefix}gcc.exe" + SettingsHaskellCPPCommand="${mingw_bin_prefix}gcc.exe" SettingsHaskellCPPFlags="$HaskellCPPArgs" - SettingsLdCommand="\$tooldir/${mingw_bin_prefix}ld.exe" - SettingsArCommand="\$tooldir/${mingw_bin_prefix}ar.exe" - SettingsRanlibCommand="\$tooldir/${mingw_bin_prefix}ranlib.exe" - SettingsDllWrapCommand="\$tooldir/${mingw_bin_prefix}dllwrap.exe" - SettingsWindresCommand="\$tooldir/${mingw_bin_prefix}windres.exe" - SettingsTouchCommand='$topdir/bin/touchy.exe' + SettingsLdCommand="${mingw_bin_prefix}ld.exe" + SettingsArCommand="${mingw_bin_prefix}ar.exe" + SettingsRanlibCommand="${mingw_bin_prefix}ranlib.exe" + SettingsDllWrapCommand="${mingw_bin_prefix}dllwrap.exe" + SettingsWindresCommand="${mingw_bin_prefix}windres.exe" + SettingsTouchCommand='$$topdir/bin/touchy.exe' elif test "$EnableDistroToolchain" = "YES" then SettingsCCompilerCommand="$(basename $CC)" @@ -517,7 +517,7 @@ AC_DEFUN([FP_SETTINGS], SettingsArCommand="$(basename $ArCmd)" SettingsDllWrapCommand="$(basename $DllWrapCmd)" SettingsWindresCommand="$(basename $WindresCmd)" - SettingsTouchCommand='$topdir/bin/touchy.exe' + SettingsTouchCommand='$$topdir/bin/touchy.exe' else SettingsCCompilerCommand="$CC" SettingsHaskellCPPCommand="$HaskellCPPCmd" diff --git a/configure.ac b/configure.ac index 7772bd43b6..e1b2342d75 100644 --- a/configure.ac +++ b/configure.ac @@ -897,7 +897,7 @@ FP_CHECK_SIZEOF_AND_ALIGNMENT(int64_t) FP_CHECK_SIZEOF_AND_ALIGNMENT(uint64_t) -dnl for use in settings.in +dnl for use in settings file TargetWordSize=$ac_cv_sizeof_void_p if test "x$TargetWordSize" == 8; then AC_SUBST([Cabal64bit],[True]) @@ -1292,7 +1292,7 @@ checkMake380() { checkMake380 make checkMake380 gmake -AC_CONFIG_FILES([mk/config.mk mk/install.mk mk/project.mk rts/rts.cabal compiler/ghc.cabal ghc/ghc-bin.cabal utils/iserv/iserv.cabal utils/iserv-proxy/iserv-proxy.cabal utils/remote-iserv/remote-iserv.cabal utils/runghc/runghc.cabal utils/gen-dll/gen-dll.cabal libraries/ghc-boot/ghc-boot.cabal libraries/ghc-boot-th/ghc-boot-th.cabal libraries/ghci/ghci.cabal libraries/ghc-heap/ghc-heap.cabal libraries/libiserv/libiserv.cabal libraries/template-haskell/template-haskell.cabal settings docs/users_guide/ghc_config.py docs/index.html libraries/prologue.txt distrib/configure.ac]) +AC_CONFIG_FILES([mk/config.mk mk/install.mk mk/project.mk rts/rts.cabal compiler/ghc.cabal ghc/ghc-bin.cabal utils/iserv/iserv.cabal utils/iserv-proxy/iserv-proxy.cabal utils/remote-iserv/remote-iserv.cabal utils/runghc/runghc.cabal utils/gen-dll/gen-dll.cabal libraries/ghc-boot/ghc-boot.cabal libraries/ghc-boot-th/ghc-boot-th.cabal libraries/ghci/ghci.cabal libraries/ghc-heap/ghc-heap.cabal libraries/libiserv/libiserv.cabal libraries/template-haskell/template-haskell.cabal docs/users_guide/ghc_config.py docs/index.html libraries/prologue.txt distrib/configure.ac]) AC_OUTPUT [ if test "$print_make_warning" = "true"; then diff --git a/distrib/configure.ac.in b/distrib/configure.ac.in index f9f14d1f6b..9cdb635ed3 100644 --- a/distrib/configure.ac.in +++ b/distrib/configure.ac.in @@ -159,7 +159,7 @@ dnl May need to use gcc to find platform details. dnl -------------------------------------------------------------- FPTOOLS_SET_HASKELL_PLATFORM_VARS -dnl TargetWordSize for settings.in +dnl TargetWordSize for settings file AC_CHECK_SIZEOF(void *, 4) if test "x$ac_cv_sizeof_void_p" = "x0"; then AC_MSG_ERROR([Failed to determine machine word size. Does your toolchain actually work?]) @@ -1010,7 +1010,6 @@ $(eval $(call bindist-list,.,\ README \ INSTALL \ configure config.sub config.guess install-sh \ - settings.in \ llvm-targets \ llvm-passes \ packages \ @@ -1067,7 +1066,7 @@ BIN_DIST_MK = $(BIN_DIST_PREP_DIR)/bindist.mk unix-binary-dist-prep: $(call removeTrees,bindistprep/) "$(MKDIRHIER)" $(BIN_DIST_PREP_DIR) - set -e; for i in packages LICENSE compiler ghc rts libraries utils docs libffi includes driver mk rules Makefile aclocal.m4 config.sub config.guess install-sh settings.in llvm-targets llvm-passes ghc.mk inplace distrib/configure.ac distrib/README distrib/INSTALL; do ln -s ../../$$i $(BIN_DIST_PREP_DIR)/; done + set -e; for i in packages LICENSE compiler ghc rts libraries utils docs libffi includes driver mk rules Makefile aclocal.m4 config.sub config.guess install-sh llvm-targets llvm-passes ghc.mk inplace distrib/configure.ac distrib/README distrib/INSTALL; do ln -s ../../$$i $(BIN_DIST_PREP_DIR)/; done echo "HADDOCK_DOCS = $(HADDOCK_DOCS)" >> $(BIN_DIST_MK) echo "BUILD_SPHINX_HTML = $(BUILD_SPHINX_HTML)" >> $(BIN_DIST_MK) echo "BUILD_SPHINX_PDF = $(BUILD_SPHINX_PDF)" >> $(BIN_DIST_MK) @@ -1165,7 +1164,7 @@ SRC_DIST_GHC_DIRS = mk rules docs distrib bindisttest libffi includes \ SRC_DIST_GHC_FILES += \ configure.ac config.guess config.sub configure \ aclocal.m4 README.md ANNOUNCE HACKING.md INSTALL.md LICENSE Makefile \ - install-sh settings.in llvm-targets llvm-passes VERSION GIT_COMMIT_ID \ + install-sh llvm-targets llvm-passes VERSION GIT_COMMIT_ID \ boot packages ghc.mk MAKEHELP.md .PHONY: VERSION diff --git a/ghc/ghc.mk b/ghc/ghc.mk index 4c3fbdfd88..9747e34dcc 100644 --- a/ghc/ghc.mk +++ b/ghc/ghc.mk @@ -129,6 +129,9 @@ all_ghc_stage1 : $(GHC_STAGE1) all_ghc_stage2 : $(GHC_STAGE2) all_ghc_stage3 : $(GHC_STAGE3) +settings : $(includes_SETTINGS) + "$(CP)" $< $@ + $(INPLACE_LIB)/settings : settings "$(CP)" $< $@ diff --git a/hadrian/cfg/system.config.in b/hadrian/cfg/system.config.in index e3c612e0e2..fbb1f54854 100644 --- a/hadrian/cfg/system.config.in +++ b/hadrian/cfg/system.config.in @@ -108,6 +108,46 @@ conf-ld-linker-args-stage1 = @CONF_LD_LINKER_OPTS_STAGE1@ conf-ld-linker-args-stage2 = @CONF_LD_LINKER_OPTS_STAGE2@ conf-ld-linker-args-stage3 = @CONF_LD_LINKER_OPTS_STAGE3@ +# Settings: +#========== + +# We are in the process of moving the settings file from being entirely +# generated by configure, to generated being by the build system. Many of these +# might become redundant. + +gcc-extra-via-c-opts = @GccExtraViaCOpts@ +ld-has-no-compact-unwind = @LdHasNoCompactUnwind@ +ld-has-build-id = @LdHasBuildId@ +ld-has-filelist = @LdHasFilelist@ +ld-is-gnu-ld = @LdIsGNULd@ +ar-args = @ArArgs@ + +settings-c-compiler-command = @SettingsCCompilerCommand@ +settings-haskell-cpp-command = @SettingsHaskellCPPCommand@ +settings-haskell-cpp-flags = @SettingsHaskellCPPFlags@ +settings-c-compiler-flags = @SettingsCCompilerFlags@ +settings-c-compiler-link-flags = @SettingsCCompilerLinkFlags@ +settings-c-compiler-supports-no-pie = @SettingsCCompilerSupportsNoPie@ +settings-ld-command = @SettingsLdCommand@ +settings-ld-flags = @SettingsLdFlags@ +settings-ar-command = @SettingsArCommand@ +settings-ranlib-command = @SettingsRanlibCommand@ +settings-dll-wrap-command = @SettingsDllWrapCommand@ +settings-windres-command = @SettingsWindresCommand@ +settings-libtool-command = @SettingsLibtoolCommand@ +settings-touch-command = @SettingsTouchCommand@ +settings-clang-command = @SettingsClangCommand@ +settings-llc-command = @SettingsLlcCommand@ +settings-opt-command = @SettingsOptCommand@ + +haskell-target-os = @HaskellTargetOs@ +haskell-target-arch = @HaskellTargetArch@ +target-word-size = @TargetWordSize@ +haskell-have-gnu-nonexec-stack = @HaskellHaveGnuNonexecStack@ +haskell-have-ident-directive = @HaskellHaveIdentDirective@ +haskell-have-subsections-via-symbols = @HaskellHaveSubsectionsViaSymbols@ +haskell-have-rts-linker = @HaskellHaveRTSLinker@ + # Include and library directories: #================================= diff --git a/hadrian/doc/make.md b/hadrian/doc/make.md index c163317a18..ff51f6d7ba 100644 --- a/hadrian/doc/make.md +++ b/hadrian/doc/make.md @@ -163,6 +163,17 @@ time you fire up a build. This is not possible with the Make build system. build _build/stage1/lib/platformConstants ``` +- Generate the `settings` file to be used for stage 1/2 GHC + + ``` sh + # Make + make inplace/lib/settings + + # Hadrian + build _build/stage0/lib/settings + build _build/stage1/lib/settings + ``` + - Build a static library for base with the stage 1 compiler ``` sh diff --git a/hadrian/src/Oracles/Setting.hs b/hadrian/src/Oracles/Setting.hs index 46ae5b5bd0..4c87d53404 100644 --- a/hadrian/src/Oracles/Setting.hs +++ b/hadrian/src/Oracles/Setting.hs @@ -3,7 +3,9 @@ module Oracles.Setting ( getSettingList, anyTargetPlatform, anyTargetOs, anyTargetArch, anyHostOs, ghcWithInterpreter, ghcEnableTablesNextToCode, useLibFFIForAdjustors, ghcCanonVersion, cmdLineLengthLimit, iosHost, osxHost, windowsHost, - hostSupportsRPaths, topDirectory, libsuf, ghcVersionStage + hostSupportsRPaths, topDirectory, libsuf, ghcVersionStage, + SettingsFileSetting (..), + settingsFileSetting ) where import Hadrian.Expression @@ -75,6 +77,31 @@ data SettingList = ConfCcArgs Stage | ConfLdLinkerArgs Stage | HsCppArgs +-- TODO compute solely in Hadrian, removing these variables' definitions +-- from aclocal.m4 whenever they can be calculated from other variables +-- already fed into Hadrian. + +-- | Each 'SettingsFileSetting' is defined by 'FP_SETTINGS' in aclocal.m4. +-- Eventually much of that local can probably be computed just in Hadrian. +data SettingsFileSetting + = SettingsFileSetting_CCompilerCommand + | SettingsFileSetting_HaskellCPPCommand + | SettingsFileSetting_HaskellCPPFlags + | SettingsFileSetting_CCompilerFlags + | SettingsFileSetting_CCompilerLinkFlags + | SettingsFileSetting_CCompilerSupportsNoPie + | SettingsFileSetting_LdCommand + | SettingsFileSetting_LdFlags + | SettingsFileSetting_ArCommand + | SettingsFileSetting_RanlibCommand + | SettingsFileSetting_DllWrapCommand + | SettingsFileSetting_WindresCommand + | SettingsFileSetting_LibtoolCommand + | SettingsFileSetting_TouchCommand + | SettingsFileSetting_ClangCommand + | SettingsFileSetting_LlcCommand + | SettingsFileSetting_OptCommand + -- | Look up the value of a 'Setting' in @cfg/system.config@, tracking the -- result. setting :: Setting -> Action String @@ -127,6 +154,28 @@ settingList key = fmap words $ lookupValueOrError configFile $ case key of ConfLdLinkerArgs stage -> "conf-ld-linker-args-" ++ stageString stage HsCppArgs -> "hs-cpp-args" +-- | Look up the value of a 'SettingList' in @cfg/system.config@, tracking the +-- result. +settingsFileSetting :: SettingsFileSetting -> Action String +settingsFileSetting key = lookupValueOrError configFile $ case key of + SettingsFileSetting_CCompilerCommand -> "settings-c-compiler-command" + SettingsFileSetting_HaskellCPPCommand -> "settings-haskell-cpp-command" + SettingsFileSetting_HaskellCPPFlags -> "settings-haskell-cpp-flags" + SettingsFileSetting_CCompilerFlags -> "settings-c-compiler-flags" + SettingsFileSetting_CCompilerLinkFlags -> "settings-c-compiler-link-flags" + SettingsFileSetting_CCompilerSupportsNoPie -> "settings-c-compiler-supports-no-pie" + SettingsFileSetting_LdCommand -> "settings-ld-command" + SettingsFileSetting_LdFlags -> "settings-ld-flags" + SettingsFileSetting_ArCommand -> "settings-ar-command" + SettingsFileSetting_RanlibCommand -> "settings-ranlib-command" + SettingsFileSetting_DllWrapCommand -> "settings-dll-wrap-command" + SettingsFileSetting_WindresCommand -> "settings-windres-command" + SettingsFileSetting_LibtoolCommand -> "settings-libtool-command" + SettingsFileSetting_TouchCommand -> "settings-touch-command" + SettingsFileSetting_ClangCommand -> "settings-clang-command" + SettingsFileSetting_LlcCommand -> "settings-llc-command" + SettingsFileSetting_OptCommand -> "settings-opt-command" + -- | An expression that looks up the value of a 'Setting' in @cfg/system.config@, -- tracking the result. getSetting :: Setting -> Expr c b String diff --git a/hadrian/src/Rules/BinaryDist.hs b/hadrian/src/Rules/BinaryDist.hs index 3db64ee648..c02d9787f9 100644 --- a/hadrian/src/Rules/BinaryDist.hs +++ b/hadrian/src/Rules/BinaryDist.hs @@ -204,7 +204,7 @@ bindistRules = do bindistInstallFiles :: [FilePath] bindistInstallFiles = [ "config.sub", "config.guess", "install-sh", "mk" -/- "config.mk.in" - , "mk" -/- "install.mk.in", "mk" -/- "project.mk", "settings.in", "README" + , "mk" -/- "install.mk.in", "mk" -/- "project.mk", "README" , "INSTALL" ] -- | This auxiliary function gives us a top-level 'Filepath' that we can 'need' diff --git a/hadrian/src/Rules/Configure.hs b/hadrian/src/Rules/Configure.hs index 8395472a4b..ba67df20a6 100644 --- a/hadrian/src/Rules/Configure.hs +++ b/hadrian/src/Rules/Configure.hs @@ -14,7 +14,7 @@ import qualified System.Info.Extra as System -- | Files generated by running the @configure@ script. configureResults :: [FilePath] configureResults = - [ configFile, "settings", configH, "compiler/ghc.cabal", "rts/rts.cabal"] + [ configFile, configH, "compiler/ghc.cabal", "rts/rts.cabal"] configureRules :: Rules () configureRules = do diff --git a/hadrian/src/Rules/Generate.hs b/hadrian/src/Rules/Generate.hs index ba35e03d9d..b167cd1a00 100644 --- a/hadrian/src/Rules/Generate.hs +++ b/hadrian/src/Rules/Generate.hs @@ -7,6 +7,7 @@ module Rules.Generate ( import Base import Expression import Flavour +import Hadrian.Oracles.TextFile (lookupValueOrError) import Oracles.Flag import Oracles.ModuleFiles import Oracles.Setting @@ -161,7 +162,7 @@ copyRules = do prefix -/- "llvm-targets" <~ return "." prefix -/- "llvm-passes" <~ return "." prefix -/- "platformConstants" <~ (buildRoot <&> (-/- generatedDir)) - prefix -/- "settings" <~ return "." + prefix -/- "settings" <~ (buildRoot <&> (-/- generatedDir)) prefix -/- "template-hsc.h" <~ return (pkgPath hsc2hs) prefix -/- "html//*" <~ return "utils/haddock/haddock-api/resources" @@ -177,6 +178,7 @@ generateRules = do priority 2.0 $ (root -/- generatedDir -/- "ghcautoconf.h") <~ generateGhcAutoconfH priority 2.0 $ (root -/- generatedDir -/- "ghcplatform.h") <~ generateGhcPlatformH priority 2.0 $ (root -/- generatedDir -/- "ghcversion.h") <~ generateGhcVersionH + priority 2.0 $ (root -/- generatedDir -/- "settings") <~ generateSettings -- TODO: simplify, get rid of fake rts context root -/- generatedDir ++ "//*" %> \file -> do @@ -261,6 +263,55 @@ generateGhcPlatformH = do ++ [ "\n#endif /* __GHCPLATFORM_H__ */" ] +generateSettings :: Expr String +generateSettings = do + let flag' = flag >=> \case + True -> pure "YES" + False -> pure "NO" + settings <- (traverse . traverse) expr $ + [ ("GCC extra via C opts", lookupValueOrError configFile "gcc-extra-via-c-opts") + , ("C compiler command", settingsFileSetting SettingsFileSetting_CCompilerCommand) + , ("C compiler flags", settingsFileSetting SettingsFileSetting_CCompilerFlags) + , ("C compiler link flags", settingsFileSetting SettingsFileSetting_CCompilerLinkFlags) + , ("C compiler supports -no-pie", settingsFileSetting SettingsFileSetting_CCompilerSupportsNoPie) + , ("Haskell CPP command", settingsFileSetting SettingsFileSetting_HaskellCPPCommand) + , ("Haskell CPP flags", settingsFileSetting SettingsFileSetting_HaskellCPPFlags) + , ("ld command", settingsFileSetting SettingsFileSetting_LdCommand) + , ("ld flags", settingsFileSetting SettingsFileSetting_LdFlags) + , ("ld supports compact unwind", lookupValueOrError configFile "ld-has-no-compact-unwind") + , ("ld supports build-id", lookupValueOrError configFile "ld-has-build-id") + , ("ld supports filelist", lookupValueOrError configFile "ld-has-filelist") + , ("ld is GNU ld", lookupValueOrError configFile "ld-is-gnu-ld") + , ("ar command", settingsFileSetting SettingsFileSetting_ArCommand) + , ("ar flags", lookupValueOrError configFile "ar-args") + , ("ar supports at file", flag' ArSupportsAtFile) + , ("ranlib command", settingsFileSetting SettingsFileSetting_RanlibCommand) + , ("touch command", settingsFileSetting SettingsFileSetting_TouchCommand) + , ("dllwrap command", settingsFileSetting SettingsFileSetting_DllWrapCommand) + , ("windres command", settingsFileSetting SettingsFileSetting_WindresCommand) + , ("libtool command", settingsFileSetting SettingsFileSetting_LibtoolCommand) + , ("cross compiling", flag' CrossCompiling) + , ("target os", lookupValueOrError configFile "haskell-target-os") + , ("target arch", lookupValueOrError configFile "haskell-target-arch") + , ("target word size", lookupValueOrError configFile "target-word-size") + , ("target has GNU nonexec stack", lookupValueOrError configFile "haskell-have-gnu-nonexec-stack") + , ("target has .ident directive", lookupValueOrError configFile "haskell-have-ident-directive") + , ("target has subsections via symbols", lookupValueOrError configFile "haskell-have-subsections-via-symbols") + , ("target has RTS linker", lookupValueOrError configFile "haskell-have-rts-linker") + , ("Unregisterised", flag' GhcUnregisterised) + , ("LLVM llc command", settingsFileSetting SettingsFileSetting_LlcCommand) + , ("LLVM opt command", settingsFileSetting SettingsFileSetting_OptCommand) + , ("LLVM clang command", settingsFileSetting SettingsFileSetting_ClangCommand) + ] + let showTuple (k, v) = "(" ++ show k ++ ", " ++ show v ++ ")" + pure $ case settings of + [] -> "[]" + s : ss -> unlines $ + ("[" ++ showTuple s) + : ((\s' -> "," ++ showTuple s') <$> ss) + ++ ["]"] + + -- | Generate @Config.hs@ files. generateConfigHs :: Expr String generateConfigHs = do diff --git a/hadrian/src/Rules/SourceDist.hs b/hadrian/src/Rules/SourceDist.hs index 6e56c666b6..e70dc5cd7b 100644 --- a/hadrian/src/Rules/SourceDist.hs +++ b/hadrian/src/Rules/SourceDist.hs @@ -110,4 +110,4 @@ prepareTree dest = do , "ghc.mk" , "install-sh" , "packages" - , "settings.in" ] + ] diff --git a/includes/ghc.mk b/includes/ghc.mk index 939bf19933..27b704d140 100644 --- a/includes/ghc.mk +++ b/includes/ghc.mk @@ -166,6 +166,52 @@ endif endif +# ----------------------------------------------------------------------------- +# Settings + +# These settings are read by GHC at runtime, so as to not cause spurious +# rebuilds. + +includes_SETTINGS = includes/dist/build/settings + +$(includes_SETTINGS) : includes/Makefile | $$(dir $$@)/. + $(call removeFiles,$@) + @echo '[("GCC extra via C opts", "$(GccExtraViaCOpts)")' >> $@ + @echo ',("C compiler command", "$(SettingsCCompilerCommand)")' >> $@ + @echo ',("C compiler flags", "$(SettingsCCompilerFlags)")' >> $@ + @echo ',("C compiler link flags", "$(SettingsCCompilerLinkFlags)")' >> $@ + @echo ',("C compiler supports -no-pie", "$(SettingsCCompilerSupportsNoPie)")' >> $@ + @echo ',("Haskell CPP command", "$(SettingsHaskellCPPCommand)")' >> $@ + @echo ',("Haskell CPP flags", "$(SettingsHaskellCPPFlags)")' >> $@ + @echo ',("ld command", "$(SettingsLdCommand)")' >> $@ + @echo ',("ld flags", "$(SettingsLdFlags)")' >> $@ + @echo ',("ld supports compact unwind", "$(LdHasNoCompactUnwind)")' >> $@ + @echo ',("ld supports build-id", "$(LdHasBuildId)")' >> $@ + @echo ',("ld supports filelist", "$(LdHasFilelist)")' >> $@ + @echo ',("ld is GNU ld", "$(LdIsGNULd)")' >> $@ + @echo ',("ar command", "$(SettingsArCommand)")' >> $@ + @echo ',("ar flags", "$(ArArgs)")' >> $@ + @echo ',("ar supports at file", "$(ArSupportsAtFile)")' >> $@ + @echo ',("ranlib command", "$(SettingsRanlibCommand)")' >> $@ + @echo ',("touch command", "$(SettingsTouchCommand)")' >> $@ + @echo ',("dllwrap command", "$(SettingsDllWrapCommand)")' >> $@ + @echo ',("windres command", "$(SettingsWindresCommand)")' >> $@ + @echo ',("libtool command", "$(SettingsLibtoolCommand)")' >> $@ + @echo ',("cross compiling", "$(CrossCompiling)")' >> $@ + @echo ',("target os", "$(HaskellTargetOs)")' >> $@ + @echo ',("target arch", "$(HaskellTargetArch)")' >> $@ + @echo ',("target word size", "$(TargetWordSize)")' >> $@ + @echo ',("target has GNU nonexec stack", "$(HaskellHaveGnuNonexecStack)")' >> $@ + @echo ',("target has .ident directive", "$(HaskellHaveIdentDirective)")' >> $@ + @echo ',("target has subsections via symbols", "$(HaskellHaveSubsectionsViaSymbols)")' >> $@ + @echo ',("target has RTS linker", "$(HaskellHaveRTSLinker)")' >> $@ + @echo ',("Unregisterised", "$(Unregisterised)")' >> $@ + @echo ',("LLVM llc command", "$(SettingsLlcCommand)")' >> $@ + @echo ',("LLVM opt command", "$(SettingsOptCommand)")' >> $@ + @echo ',("LLVM clang command", "$(SettingsClangCommand)")' >> $@ + @echo ']' >> $@ + + # --------------------------------------------------------------------------- # Make DerivedConstants.h for the compiler diff --git a/mk/config.mk.in b/mk/config.mk.in index 79191af52e..6abf01816f 100644 --- a/mk/config.mk.in +++ b/mk/config.mk.in @@ -488,6 +488,43 @@ endif GHC_PACKAGE_DB_FLAG = @GHC_PACKAGE_DB_FLAG@ #----------------------------------------------------------------------------- +# Settings + +# We are in the process of moving the settings file from being entirely +# generated by configure, to generated being by the build system. Many of these +# might become redundant. + +GccExtraViaCOpts = @GccExtraViaCOpts@ +LdHasFilelist = @LdHasFilelist@ +ArArgs = @ArArgs@ +HaskellTargetOs = @HaskellTargetOs@ +HaskellTargetArch = @HaskellTargetArch@ +TargetWordSize = @TargetWordSize@ +HaskellHaveGnuNonexecStack = @HaskellHaveGnuNonexecStack@ +HaskellHaveIdentDirective = @HaskellHaveIdentDirective@ +HaskellHaveSubsectionsViaSymbols = @HaskellHaveSubsectionsViaSymbols@ +HaskellHaveRTSLinker = @HaskellHaveRTSLinker@ +Unregisterised = @Unregisterised@ + +SettingsCCompilerCommand = @SettingsCCompilerCommand@ +SettingsHaskellCPPCommand = @SettingsHaskellCPPCommand@ +SettingsHaskellCPPFlags = @SettingsHaskellCPPFlags@ +SettingsCCompilerFlags = @SettingsCCompilerFlags@ +SettingsCCompilerLinkFlags = @SettingsCCompilerLinkFlags@ +SettingsCCompilerSupportsNoPie = @SettingsCCompilerSupportsNoPie@ +SettingsLdCommand = @SettingsLdCommand@ +SettingsLdFlags = @SettingsLdFlags@ +SettingsArCommand = @SettingsArCommand@ +SettingsRanlibCommand = @SettingsRanlibCommand@ +SettingsDllWrapCommand = @SettingsDllWrapCommand@ +SettingsWindresCommand = @SettingsWindresCommand@ +SettingsLibtoolCommand = @SettingsLibtoolCommand@ +SettingsTouchCommand = @SettingsTouchCommand@ +SettingsClangCommand = @SettingsClangCommand@ +SettingsLlcCommand = @SettingsLlcCommand@ +SettingsOptCommand = @SettingsOptCommand@ + +#----------------------------------------------------------------------------- # C compiler # # NB. Don't override $(CC) using build.mk, re-configure using |