
The relevant makefile code is in fptools/mk/bootstrap.mk - I'm sure you'll be able to modify it to do the right thing. When you've got it working we'll think about how to set up the bootstrapping system so mangling is optional.
I wonder if it matters whether PLATFORM_CC_OPTS is set to -static in mk/bootstrap.mk? The comments there say that the flags "should match the list in machdepCCOpts in ghc/compiler/DriverFlags.hs", and DriverFlags.hs does set -static for alpha.
I'm not sure whether -static is needed; try it without and see what happens.
(By the way, are *_hsc.[hc] files considered part of the ".hc distribution"? I needed them for compiling, say, Directory.hc.)
Anyway, the current hurdle is that ghc/lib/std/PrelInt.hc doesn't compile because int64ToIntegerzh_fast is not declared because ghc/includes/PrimOps.h did not declare it because SUPPORT_LONG_LONGS is not defined in ghc/includes/StgTypes.h because SUPPORT_LONG_LONGS is defined in ghc/includes/StgTypes.h if and only if HAVE_LONG_LONG && SIZEOF_VOID_P < 8, and SIZEOF_VOID_P is 8.
I'm not sure what the right fix is here. Why does StgTypes.h not define SUPPORT_LONG_LONGS if SIZEOF_VOID_P >= 8, anyway?
I think it's right not to define SUPPORT_LONG_LONGS - as far as I can tell, that symbol means "we need the long long type for StgWord64/StgInt64 on this architecture", which isn't true on Alpha. On a 64-bit machine, int64ToIntegerzh_fast and word64ToIntegerzh_fast are identical to intToIntegerzh_fast and wordToIntegerzh_fast respectively (as long as GMP is using a 64-bit limb type, which fortunately it does). The folllowing (untested) patch should be along the right lines... Cheers, Simon *** PrimOps.hc 2001/07/06 14:11:38 1.79 --- PrimOps.hc 2001/07/11 09:24:29 *************** *** 594,601 **** FE_ } ! #endif /* HAVE_LONG_LONG */ /* ToDo: this is shockingly inefficient */ --- 594,616 ---- FE_ } + #elif SIZEOF_VOID_P == 8 ! FN_(word64ToIntegerzh_fast) ! { ! FB_ ! JMP_(wordToIntegerzh_fast); ! FE_ ! } ! ! FN_(int64ToIntegerzh_fast) ! { ! FB_ ! JMP_(intToIntegerzh_fast); ! FE_ ! } ! ! #endif /* SUPPORT_LONG_LONGS || SIZEOF_VOID_P == 8 */ /* ToDo: this is shockingly inefficient */