From 3645abac01b634b61b2ea2508ba67e88ef9ee219 Mon Sep 17 00:00:00 2001 From: John Ericson <John.Ericson@Obsidian.Systems> Date: Wed, 27 Oct 2021 04:06:46 +0000 Subject: [PATCH] Avoid GHC_STAGE and other include bits We should strive to make our includes in terms of the RTS as much as possible. One place there that is not possible, the llvm version, we make a new tiny header Stage numbers are somewhat arbitrary, if we simple need a newer RTS, we should say so. --- .gitignore | 1 + compiler/GHC/CmmToLlvm/Base.hs | 2 +- compiler/GHC/Data/FastString.hs | 12 +++++------- compiler/GHC/Driver/Pipeline.hs | 1 - compiler/GHC/Driver/Pipeline/Execute.hs | 2 +- compiler/GHC/Utils/GlobalVars.hs | 5 +---- compiler/cbits/genSym.c | 5 ++++- compiler/ghc-llvm-version.h.in | 12 ++++++++++++ compiler/ghc.cabal.in | 1 + configure.ac | 5 ++++- hadrian/src/Rules/Generate.hs | 2 -- libraries/ghc-boot/GHC/Data/ShortText.hs | 2 +- rts/include/ghc.mk | 2 -- utils/iserv/cbits/iservmain.c | 3 ++- 14 files changed, 33 insertions(+), 22 deletions(-) create mode 100644 compiler/ghc-llvm-version.h.in diff --git a/.gitignore b/.gitignore index c860ecd9cbc5..46fb24d4a995 100644 --- a/.gitignore +++ b/.gitignore @@ -108,6 +108,7 @@ _darcs/ /compiler/FunTypes.h /compiler/MachDeps.h /compiler/MachRegs.h +/compiler/ghc-llvm-version.h /compiler/ghc.cabal /compiler/ghc.cabal.old /distrib/configure.ac diff --git a/compiler/GHC/CmmToLlvm/Base.hs b/compiler/GHC/CmmToLlvm/Base.hs index 2095e3d606a4..33798acf72f5 100644 --- a/compiler/GHC/CmmToLlvm/Base.hs +++ b/compiler/GHC/CmmToLlvm/Base.hs @@ -39,7 +39,7 @@ module GHC.CmmToLlvm.Base ( aliasify, llvmDefLabel ) where -#include "ghcautoconf.h" +#include "ghc-llvm-version.h" import GHC.Prelude import GHC.Utils.Panic diff --git a/compiler/GHC/Data/FastString.hs b/compiler/GHC/Data/FastString.hs index 262ddd3ada9d..1b2f21c4154c 100644 --- a/compiler/GHC/Data/FastString.hs +++ b/compiler/GHC/Data/FastString.hs @@ -111,9 +111,6 @@ module GHC.Data.FastString lengthPS ) where --- For GHC_STAGE -#include "ghcplatform.h" - import GHC.Prelude as Prelude import GHC.Utils.Encoding @@ -143,7 +140,7 @@ import Data.Semigroup as Semi import Foreign -#if GHC_STAGE >= 2 +#if MIN_VERSION_GLASGOW_HASKELL(9,3,0,0) import GHC.Conc.Sync (sharedCAF) #endif @@ -384,13 +381,14 @@ stringTable = unsafePerformIO $ do -- use the support wired into the RTS to share this CAF among all images of -- libHSghc -#if GHC_STAGE < 2 +#if !MIN_VERSION_GLASGOW_HASKELL(9,3,0,0) return tab #else sharedCAF tab getOrSetLibHSghcFastStringTable --- from the RTS; thus we cannot use this mechanism when GHC_STAGE<2; the previous --- RTS might not have this symbol +-- from the 9.3 RTS; the previouss RTS before might not have this symbol. The +-- right way to do this however would be to define some HAVE_FAST_STRING_TABLE +-- or similar rather than use (odd parity) development versions. foreign import ccall unsafe "getOrSetLibHSghcFastStringTable" getOrSetLibHSghcFastStringTable :: Ptr a -> IO (Ptr a) #endif diff --git a/compiler/GHC/Driver/Pipeline.hs b/compiler/GHC/Driver/Pipeline.hs index 55b6a2897055..53bf0333fb30 100644 --- a/compiler/GHC/Driver/Pipeline.hs +++ b/compiler/GHC/Driver/Pipeline.hs @@ -48,7 +48,6 @@ module GHC.Driver.Pipeline ( ) where -#include "ghcplatform.h" import GHC.Prelude import GHC.Platform diff --git a/compiler/GHC/Driver/Pipeline/Execute.hs b/compiler/GHC/Driver/Pipeline/Execute.hs index 25aac65d8535..08a63c01252f 100644 --- a/compiler/GHC/Driver/Pipeline/Execute.hs +++ b/compiler/GHC/Driver/Pipeline/Execute.hs @@ -5,7 +5,7 @@ {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE GADTs #-} {-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-} -#include "ghcplatform.h" +#include <ghcplatform.h> {- Functions for providing the default interpretation of the 'TPhase' actions -} diff --git a/compiler/GHC/Utils/GlobalVars.hs b/compiler/GHC/Utils/GlobalVars.hs index 19496d5d8213..ad02bc45b1bc 100644 --- a/compiler/GHC/Utils/GlobalVars.hs +++ b/compiler/GHC/Utils/GlobalVars.hs @@ -22,9 +22,6 @@ module GHC.Utils.GlobalVars ) where --- For GHC_STAGE -#include "ghcplatform.h" - import GHC.Prelude import GHC.Conc.Sync ( sharedCAF ) @@ -60,7 +57,7 @@ foreign import ccall unsafe saccessor \ -#if GHC_STAGE < 2 +#if !MIN_VERSION_GLASGOW_HASKELL(9,3,0,0) GLOBAL_VAR(v_unsafeHasPprDebug, False, Bool) GLOBAL_VAR(v_unsafeHasNoDebugOutput, False, Bool) diff --git a/compiler/cbits/genSym.c b/compiler/cbits/genSym.c index 19697de25e81..9bdadc5a990d 100644 --- a/compiler/cbits/genSym.c +++ b/compiler/cbits/genSym.c @@ -1,11 +1,14 @@ #include <Rts.h> #include <assert.h> #include "Unique.h" -#include "ghcversion.h" +#include <ghcversion.h> // These global variables have been moved into the RTS. It allows them to be // shared with plugins even if two different instances of the GHC library are // loaded at the same time (#19940) +// +// The CPP is thus about the RTS version GHC is linked against, and not the +// version of the GHC being built. #if !MIN_VERSION_GLASGOW_HASKELL(9,3,0,0) HsInt ghc_unique_counter = 0; HsInt ghc_unique_inc = 1; diff --git a/compiler/ghc-llvm-version.h.in b/compiler/ghc-llvm-version.h.in new file mode 100644 index 000000000000..241ce53e32a7 --- /dev/null +++ b/compiler/ghc-llvm-version.h.in @@ -0,0 +1,12 @@ +#if !defined(__GHC_LLVM_VERSION_H__) +#define __GHC_LLVM_VERSION_H__ + +/* The maximum supported LLVM version number */ +#undef sUPPORTED_LLVM_VERSION_MAX + +/* The minimum supported LLVM version number */ +#undef sUPPORTED_LLVM_VERSION_MIN + +/* Define to `unsigned int' if <sys/types.h> does not define. */ +#undef size_t +#endif /* __GHC_LLVM_VERSION_H__ */ diff --git a/compiler/ghc.cabal.in b/compiler/ghc.cabal.in index 0fed86620bb9..19ade29336a2 100644 --- a/compiler/ghc.cabal.in +++ b/compiler/ghc.cabal.in @@ -78,6 +78,7 @@ Library -- MachRegs.h -- hits #error, skip -- target sensative, should not be used MachDeps.h + ghc-llvm-version.h Build-Depends: base >= 4.11 && < 4.17, deepseq >= 1.4 && < 1.5, diff --git a/configure.ac b/configure.ac index 634210b15129..bb0ab606ccdd 100644 --- a/configure.ac +++ b/configure.ac @@ -71,8 +71,11 @@ AC_PREREQ([2.69]) # ------------------------------------------------------------------------- # Prepare to generate the following header files # -# + +# This one is autogenerated by autoheader. AC_CONFIG_HEADER(mk/config.h) +# This one is manually maintained. +AC_CONFIG_HEADER(compiler/ghc-llvm-version.h) # No, semi-sadly, we don't do `--srcdir'... if test x"$srcdir" != 'x.' ; then diff --git a/hadrian/src/Rules/Generate.hs b/hadrian/src/Rules/Generate.hs index 5247c8b4ae52..782ae63803e3 100644 --- a/hadrian/src/Rules/Generate.hs +++ b/hadrian/src/Rules/Generate.hs @@ -254,8 +254,6 @@ generateGhcPlatformH = do [ "#if !defined(__GHCPLATFORM_H__)" , "#define __GHCPLATFORM_H__" , "" - , "#define GHC_STAGE " ++ show (fromEnum stage + 1) - , "" , "#define BuildPlatform_TYPE " ++ cppify buildPlatform , "#define HostPlatform_TYPE " ++ cppify hostPlatform , "" diff --git a/libraries/ghc-boot/GHC/Data/ShortText.hs b/libraries/ghc-boot/GHC/Data/ShortText.hs index 108b5a43cd1e..815c3edb6432 100644 --- a/libraries/ghc-boot/GHC/Data/ShortText.hs +++ b/libraries/ghc-boot/GHC/Data/ShortText.hs @@ -14,7 +14,7 @@ -- -- This can be removed when we exit the boot compiler window. Thus once we drop GHC-9.2 as boot compiler, -- we can drop this code as well. -#if GHC_STAGE < 1 +#if !MIN_VERSION_GLASGOW_HASKELL(9,3,0,0) {-# OPTIONS_GHC -fignore-interface-pragmas #-} #endif -- | diff --git a/rts/include/ghc.mk b/rts/include/ghc.mk index 7c26499ce4c3..a04d5dbc1c0d 100644 --- a/rts/include/ghc.mk +++ b/rts/include/ghc.mk @@ -179,8 +179,6 @@ $$(includes_$1_H_PLATFORM) : rts/include/ghc.mk rts/include/Makefile | $$$$(dir @echo "#if !defined(__GHCPLATFORM_H__)" > $$@ @echo "#define __GHCPLATFORM_H__" >> $$@ @echo >> $$@ - @echo "#define GHC_STAGE ($1 + 1)" >> $$@ - @echo >> $$@ @echo "#define BuildPlatform_TYPE $(BuildPlatform_$1_CPP)" >> $$@ @echo "#define HostPlatform_TYPE $(HostPlatform_$1_CPP)" >> $$@ @echo >> $$@ diff --git a/utils/iserv/cbits/iservmain.c b/utils/iserv/cbits/iservmain.c index d88d14e0d63a..b182f9f54955 100644 --- a/utils/iserv/cbits/iservmain.c +++ b/utils/iserv/cbits/iservmain.c @@ -1,4 +1,5 @@ -#if GHC_STAGE > 1 +#include <ghcversion.h> +#if MIN_VERSION_GLASGOW_HASKELL(9,3,0,0) # include <rts/PosixSource.h> #else // PosixSource.h not yet exposed, hacky inline for now. # include <ghcplatform.h> -- GitLab