diff options
author | Ian Lynagh <igloo@earth.li> | 2011-01-04 22:00:13 +0000 |
---|---|---|
committer | Ian Lynagh <igloo@earth.li> | 2011-01-04 22:00:13 +0000 |
commit | f0e3d7904df76f35676e105ed63e7b4eb961773a (patch) | |
tree | 7daaa320da46a3be56448b5b4096bbafb082231a /compiler/ghc.mk | |
parent | daee7323b13a3f35cead6b94092adbcdfdcad568 (diff) | |
download | haskell-f0e3d7904df76f35676e105ed63e7b4eb961773a.tar.gz |
Define cTargetArch and start to use it rather than ifdefs
Using Haskell conditionals means the compiler sees all the code, so
there should be less rot of code specific to uncommon arches. Code
for other platforms should still be optimised away, although if we want
to support targetting other arches then we'll need to compile it
for-real anyway.
Diffstat (limited to 'compiler/ghc.mk')
-rw-r--r-- | compiler/ghc.mk | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/compiler/ghc.mk b/compiler/ghc.mk index 44ac382f54..978835f34f 100644 --- a/compiler/ghc.mk +++ b/compiler/ghc.mk @@ -49,6 +49,8 @@ compiler/stage%/build/Config.hs : mk/config.mk mk/project.mk | $$(dir $$@)/. @echo '{-# LANGUAGE CPP #-}' >> $@ @echo 'module Config where' >> $@ @echo >> $@ + @echo 'import Distribution.System' >> $@ + @echo >> $@ @echo '#include "ghc_boot_platform.h"' >> $@ @echo >> $@ @echo 'cBuildPlatformString :: String' >> $@ @@ -58,6 +60,42 @@ compiler/stage%/build/Config.hs : mk/config.mk mk/project.mk | $$(dir $$@)/. @echo 'cTargetPlatformString :: String' >> $@ @echo 'cTargetPlatformString = TargetPlatform_NAME' >> $@ @echo >> $@ +# Sync this with checkArch in configure.ac + @echo 'cTargetArch :: Arch' >> $@ + @echo '#if i386_TARGET_ARCH' >> $@ + @echo 'cTargetArch = I386' >> $@ + @echo '#elif x86_64_TARGET_ARCH' >> $@ + @echo 'cTargetArch = X86_64' >> $@ + @echo '#elif powerpc_TARGET_ARCH' >> $@ + @echo 'cTargetArch = PPC' >> $@ + @echo '#elif powerpc64_TARGET_ARCH' >> $@ + @echo 'cTargetArch = PPC64' >> $@ + @echo '#elif sparc_TARGET_ARCH || sparc64_TARGET_ARCH' >> $@ + @echo 'cTargetArch = Sparc' >> $@ + @echo '#elif arm_TARGET_ARCH' >> $@ + @echo 'cTargetArch = Arm' >> $@ + @echo '#elif mips_TARGET_ARCH || mipseb_TARGET_ARCH || mipsel_TARGET_ARCH' >> $@ + @echo 'cTargetArch = Mips' >> $@ + @echo '#elif 0' >> $@ + @echo 'cTargetArch = SH' >> $@ + @echo '#elif ia64_TARGET_ARCH' >> $@ + @echo 'cTargetArch = IA64' >> $@ + @echo '#elif s390_TARGET_ARCH' >> $@ + @echo 'cTargetArch = S390' >> $@ + @echo '#elif alpha_TARGET_ARCH' >> $@ + @echo 'cTargetArch = Alpha' >> $@ + @echo '#elif hppa_TARGET_ARCH || hppa1_1_TARGET_ARCH' >> $@ + @echo 'cTargetArch = Hppa' >> $@ + @echo '#elif rs6000_TARGET_ARCH' >> $@ + @echo 'cTargetArch = Rs6000' >> $@ + @echo '#elif m68k_TARGET_ARCH' >> $@ + @echo 'cTargetArch = M68k' >> $@ + @echo '#elif vax_TARGET_ARCH' >> $@ + @echo 'cTargetArch = Vax' >> $@ + @echo '#else' >> $@ + @echo '#error Unknown target arch' >> $@ + @echo '#endif' >> $@ + @echo >> $@ @echo 'cProjectName :: String' >> $@ @echo 'cProjectName = "$(ProjectName)"' >> $@ @echo 'cProjectVersion :: String' >> $@ |