diff options
-rw-r--r-- | compiler/ghc.mk | 84 | ||||
-rw-r--r-- | hadrian/src/Rules/Generate.hs | 13 | ||||
-rw-r--r-- | includes/ghc.mk | 11 |
3 files changed, 57 insertions, 51 deletions
diff --git a/compiler/ghc.mk b/compiler/ghc.mk index 3f94e87926..7c301552cf 100644 --- a/compiler/ghc.mk +++ b/compiler/ghc.mk @@ -29,9 +29,14 @@ compiler_stage1_C_FILES_NODEPS = compiler/parser/cutils.c # we just skip the check. compiler_NO_CHECK = YES +# We need to decrement the 1-indexed compiler stage to be the 0-indexed stage +# we use everwhere else. dec1 = 0 dec2 = 1 dec3 = 2 +# TODO(@Ericson2314) Get rid of compiler-specific stage indices. I think the +# argument was stage n ghc is used to build stage n everything else, but I +# don't buy that argument. ifneq "$(BINDIST)" "YES" @@ -48,40 +53,53 @@ $(foreach n,1 2 3, \ ) endif -compiler/stage%/build/Config.hs : mk/config.mk mk/project.mk | $$(dir $$@)/. - $(call removeFiles,$@) - @echo 'Creating $@ ... ' - @echo '{-# LANGUAGE CPP #-}' >> $@ - @echo 'module Config' >> $@ - @echo ' ( module GHC.Version' >> $@ - @echo ' , cBuildPlatformString' >> $@ - @echo ' , cHostPlatformString' >> $@ - @echo ' , cProjectName' >> $@ - @echo ' , cBooterVersion' >> $@ - @echo ' , cStage' >> $@ - @echo ' ) where' >> $@ - @echo >> $@ - @echo 'import GhcPrelude' >> $@ - @echo >> $@ - @echo 'import GHC.Version' >> $@ - @echo >> $@ - @echo '#include "ghcplatform.h"' >> $@ - @echo >> $@ - @echo 'cBuildPlatformString :: String' >> $@ - @echo 'cBuildPlatformString = BuildPlatform_NAME' >> $@ - @echo >> $@ - @echo 'cHostPlatformString :: String' >> $@ - @echo 'cHostPlatformString = HostPlatform_NAME' >> $@ - @echo >> $@ - @echo 'cProjectName :: String' >> $@ - @echo 'cProjectName = "$(ProjectName)"' >> $@ - @echo >> $@ - @echo 'cBooterVersion :: String' >> $@ - @echo 'cBooterVersion = "$(GhcVersion)"' >> $@ - @echo >> $@ - @echo 'cStage :: String' >> $@ - @echo 'cStage = show (STAGE :: Int)' >> $@ +BUILDPLATFORM_1 = $(BUILDPLATFORM) +BUILDPLATFORM_2 = $(HOSTPLATFORM) +BUILDPLATFORM_3 = $(TARGETPLATFORM) + +HOSTPLATFORM_1 = $(HOSTPLATFORM) +HOSTPLATFORM_2 = $(TARGETPLATFORM) +HOSTPLATFORM_3 = $(TARGETPLATFORM) + +define compilerConfig +# $1 = compile stage (1-indexed) +compiler/stage$1/build/Config.hs : mk/config.mk mk/project.mk | $$$$(dir $$$$@)/. + $$(call removeFiles,$$@) + @echo 'Creating $$@ ... ' + @echo '{-# LANGUAGE CPP #-}' >> $$@ + @echo 'module Config' >> $$@ + @echo ' ( module GHC.Version' >> $$@ + @echo ' , cBuildPlatformString' >> $$@ + @echo ' , cHostPlatformString' >> $$@ + @echo ' , cProjectName' >> $$@ + @echo ' , cBooterVersion' >> $$@ + @echo ' , cStage' >> $$@ + @echo ' ) where' >> $$@ + @echo >> $$@ + @echo 'import GhcPrelude' >> $$@ + @echo >> $$@ + @echo 'import GHC.Version' >> $$@ + @echo >> $$@ + @echo 'cBuildPlatformString :: String' >> $$@ + @echo 'cBuildPlatformString = "$(BUILDPLATFORM_$1)"' >> $$@ + @echo >> $$@ + @echo 'cHostPlatformString :: String' >> $$@ + @echo 'cHostPlatformString = "$(HOSTPLATFORM_$1)"' >> $$@ + @echo >> $$@ + @echo 'cProjectName :: String' >> $$@ + @echo 'cProjectName = "$(ProjectName)"' >> $$@ + @echo >> $$@ + @echo 'cBooterVersion :: String' >> $$@ + @echo 'cBooterVersion = "$(GhcVersion)"' >> $$@ + @echo >> $$@ + @echo 'cStage :: String' >> $$@ + @echo 'cStage = show (STAGE :: Int)' >> $$@ @echo done. +endef + +$(eval $(call compilerConfig,0)) +$(eval $(call compilerConfig,1)) +$(eval $(call compilerConfig,2)) # ---------------------------------------------------------------------------- # Generate supporting stuff for prelude/PrimOp.hs diff --git a/hadrian/src/Rules/Generate.hs b/hadrian/src/Rules/Generate.hs index c2c3c14372..f20f815da4 100644 --- a/hadrian/src/Rules/Generate.hs +++ b/hadrian/src/Rules/Generate.hs @@ -238,9 +238,6 @@ generateGhcPlatformH = do [ "#if !defined(__GHCPLATFORM_H__)" , "#define __GHCPLATFORM_H__" , "" - , "#define BuildPlatform_NAME " ++ show buildPlatform - , "#define HostPlatform_NAME " ++ show hostPlatform - , "" , "#define BuildPlatform_TYPE " ++ cppify buildPlatform , "#define HostPlatform_TYPE " ++ cppify hostPlatform , "" @@ -336,6 +333,10 @@ generateSettings = do -- | Generate @Config.hs@ files. generateConfigHs :: Expr String generateConfigHs = do + stage <- getStage + let chooseSetting x y = getSetting $ if stage == Stage0 then x else y + buildPlatform <- chooseSetting BuildPlatform HostPlatform + hostPlatform <- chooseSetting HostPlatform TargetPlatform trackGenerateHs cProjectName <- getSetting ProjectName cBooterVersion <- getSetting GhcVersion @@ -354,13 +355,11 @@ generateConfigHs = do , "" , "import GHC.Version" , "" - , "#include \"ghcplatform.h\"" - , "" , "cBuildPlatformString :: String" - , "cBuildPlatformString = BuildPlatform_NAME" + , "cBuildPlatformString = " ++ show buildPlatform , "" , "cHostPlatformString :: String" - , "cHostPlatformString = HostPlatform_NAME" + , "cHostPlatformString = " ++ show hostPlatform , "" , "cProjectName :: String" , "cProjectName = " ++ show cProjectName diff --git a/includes/ghc.mk b/includes/ghc.mk index 52b875cc28..50c293ee5b 100644 --- a/includes/ghc.mk +++ b/includes/ghc.mk @@ -139,14 +139,6 @@ endef $(eval $(call includesHeaderConfig,0)) $(eval $(call includesHeaderConfig,1)) -BUILDPLATFORM_0 = $(BUILDPLATFORM) -BUILDPLATFORM_1 = $(HOSTPLATFORM) -BUILDPLATFORM_2 = $(TARGETPLATFORM) - -HOSTPLATFORM_0 = $(HOSTPLATFORM) -HOSTPLATFORM_1 = $(TARGETPLATFORM) -HOSTPLATFORM_2 = $(TARGETPLATFORM) - BuildPlatform_0_CPP = $(BuildPlatform_CPP) BuildPlatform_1_CPP = $(HostPlatform_CPP) BuildPlatform_2_CPP = $(TargetPlatform_CPP) @@ -187,9 +179,6 @@ $$(includes_$1_H_PLATFORM) : includes/ghc.mk includes/Makefile | $$$$(dir $$$$@) @echo "#if !defined(__GHCPLATFORM_H__)" > $$@ @echo "#define __GHCPLATFORM_H__" >> $$@ @echo >> $$@ - @echo "#define BuildPlatform_NAME \"$(BUILDPLATFORM_$1)\"" >> $$@ - @echo "#define HostPlatform_NAME \"$(HOSTPLATFORM_$1)\"" >> $$@ - @echo >> $$@ @echo "#define BuildPlatform_TYPE $(BuildPlatform_$1_CPP)" >> $$@ @echo "#define HostPlatform_TYPE $(HostPlatform_$1_CPP)" >> $$@ @echo >> $$@ |