summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--ghc.mk17
-rw-r--r--ghc/ghc.mk16
-rw-r--r--rts/ghc.mk3
-rw-r--r--rules/build-prog.mk6
-rw-r--r--rules/hs-suffix-rules-srcdir.mk2
6 files changed, 39 insertions, 9 deletions
diff --git a/Makefile b/Makefile
index af669d7f8f..f15677d68b 100644
--- a/Makefile
+++ b/Makefile
@@ -48,7 +48,7 @@ $(PACKAGE_MK):
sh boot-pkgs
# No need to update makefiles for these targets:
-REALGOALS=$(filter-out framework-pkg clean clean_% distclean maintainer-clean show,$(MAKECMDGOALS))
+REALGOALS=$(filter-out bootstrapping-files framework-pkg clean clean_% distclean maintainer-clean show,$(MAKECMDGOALS))
# NB. not the same as saying '%: ...', which doesn't do the right thing:
# it does nothing if we specify a target that already exists.
@@ -77,7 +77,7 @@ clean distclean maintainer-clean:
$(filter clean_%, $(MAKECMDGOALS)) : clean_% :
$(MAKE) -r --no-print-directory -f ghc.mk $@
-show: $(PACKAGE_MK)
+bootstrapping-files show: $(PACKAGE_MK)
$(MAKE) -r --no-print-directory -f ghc.mk $@
ifeq "$(darwin_TARGET_OS)" "1"
diff --git a/ghc.mk b/ghc.mk
index 64d317b756..fb6ba93868 100644
--- a/ghc.mk
+++ b/ghc.mk
@@ -172,6 +172,10 @@ ifneq "$(findstring clean,$(MAKECMDGOALS))" ""
NO_INCLUDE_DEPS = YES
NO_INCLUDE_PKGDATA = YES
endif
+ifneq "$(findstring bootstrapping-files,$(MAKECMDGOALS))" ""
+NO_INCLUDE_DEPS = YES
+NO_INCLUDE_PKGDATA = YES
+endif
ifeq "$(findstring show,$(MAKECMDGOALS))" "show"
NO_INCLUDE_DEPS = YES
# We want package-data.mk for show
@@ -347,7 +351,8 @@ ifeq "$(BuildSharedLibs)" "YES"
OTHER_LIBS += libffi/libHSffi$(dyn_libsuf)
endif
ifeq "$(HaveLibGmp)" "NO"
-OTHER_LIBS += gmp/libgmp.a
+GMP_LIB = gmp/libgmp.a
+OTHER_LIBS += $(GMP_LIB)
endif
# We cannot run ghc-cabal to configure a package until we have
@@ -554,7 +559,7 @@ $(foreach pkg,$(PACKAGES) $(PACKAGES_STAGE2),$(eval libraries/$(pkg)_dist-instal
# XXX Hack; remove this
$(foreach pkg,$(PACKAGES_STAGE2),$(eval libraries/$(pkg)_dist-install_HC_OPTS += -Wwarn))
-# XXX we configure packages with the bootsrapping compiler (for
+# XXX we configure packages with the bootstrapping compiler (for
# dependency reasons, see the phase ordering), which doesn't
# necessarily support all the extensions we need, and Cabal filters
# out the ones it thinks aren't supported.
@@ -865,7 +870,7 @@ publish-sdist :
endif
ifeq "$(GhcUnregisterised)" "YES"
-SRC_CC_OPTS += -DNO_REGS -DUSE_MINIINTERPRETER
+SRC_CC_OPTS += -DNO_REGS -DUSE_MINIINTERPRETER -D__GLASGOW_HASKELL__=$(ProjectVersionInt)
endif
# -----------------------------------------------------------------------------
@@ -918,3 +923,9 @@ maintainer-clean : distclean
.PHONY: all_libraries
+.PHONY: bootstrapping-files
+bootstrapping-files: $(GMP_LIB)
+bootstrapping-files: includes/ghcautoconf.h
+bootstrapping-files: includes/DerivedConstants.h
+bootstrapping-files: includes/GHCConstants.h
+
diff --git a/ghc/ghc.mk b/ghc/ghc.mk
index c9313948ce..103c590652 100644
--- a/ghc/ghc.mk
+++ b/ghc/ghc.mk
@@ -120,9 +120,15 @@ $(INPLACE_LIB)/extra-gcc-opts : extra-gcc-opts
$(CP) $< $@
# The GHC programs need to depend on all the helper programs they might call
-$(GHC_STAGE1) : $(INPLACE_LIB)/extra-gcc-opts $(MANGLER) $(SPLIT)
-$(GHC_STAGE2) : $(INPLACE_LIB)/extra-gcc-opts $(MANGLER) $(SPLIT)
-$(GHC_STAGE3) : $(INPLACE_LIB)/extra-gcc-opts $(MANGLER) $(SPLIT)
+ifeq "$(GhcUnregisterised)" "NO"
+$(GHC_STAGE1) : $(MANGLER) $(SPLIT)
+$(GHC_STAGE2) : $(MANGLER) $(SPLIT)
+$(GHC_STAGE3) : $(MANGLER) $(SPLIT)
+endif
+
+$(GHC_STAGE1) : $(INPLACE_LIB)/extra-gcc-opts
+$(GHC_STAGE2) : $(INPLACE_LIB)/extra-gcc-opts
+$(GHC_STAGE3) : $(INPLACE_LIB)/extra-gcc-opts
ifeq "$(Windows)" "YES"
$(GHC_STAGE1) : $(TOUCHY) $(INPLACE)/stamp-mingw $(INPLACE_LIB)/perl.exe
@@ -130,6 +136,10 @@ $(GHC_STAGE2) : $(TOUCHY) $(INPLACE)/stamp-mingw $(INPLACE_LIB)/perl.exe
$(GHC_STAGE3) : $(TOUCHY) $(INPLACE)/stamp-mingw $(INPLACE_LIB)/perl.exe
endif
+ifeq "$(BootingFromHc)" "YES"
+ghc_stage2_OTHER_OBJS += $(compiler_stage2_v_LIB) $(ALL_LIBS) $(ALL_LIBS) $(ALL_LIBS) $(ALL_RTS_LIBS) -lgmp $(libffi_STATIC_LIB) -lm -lutil -lrt
+endif
+
endif
INSTALL_LIBS += extra-gcc-opts
diff --git a/rts/ghc.mk b/rts/ghc.mk
index c22c8620e1..c4a3dd5042 100644
--- a/rts/ghc.mk
+++ b/rts/ghc.mk
@@ -43,6 +43,8 @@ EXCLUDED_SRCS += $(wildcard rts/Vis*.c)
rts_C_SRCS = $(filter-out $(EXCLUDED_SRCS),$(wildcard rts/*.c $(foreach dir,$(ALL_DIRS),rts/$(dir)/*.c)))
rts_CMM_SRCS = $(wildcard rts/*.cmm)
+# Don't compile .S files when bootstrapping a new arch
+ifeq "$(TARGETPLATFORM)" "$(HOSTPLATFORM)"
ifneq "$(findstring $(TargetArch_CPP), powerpc powerpc64)" ""
rts_S_SRCS += rts/AdjustorAsm.S
else
@@ -50,6 +52,7 @@ ifneq "$(findstring $(TargetOS_CPP), darwin)" ""
rts_S_SRCS += rts/AdjustorAsm.S
endif
endif
+endif
ifeq "$(GhcUnregisterised)" "YES"
GENAPPLY_OPTS = -u
diff --git a/rules/build-prog.mk b/rules/build-prog.mk
index 4bfc1e11fa..20cf46fe0c 100644
--- a/rules/build-prog.mk
+++ b/rules/build-prog.mk
@@ -97,9 +97,15 @@ $$(foreach dir,$$($1_$2_HS_SRC_DIRS),\
$(call c-objs,$1,$2,v)
$(call hs-objs,$1,$2,v)
+ifeq "$$(BootingFromHc)" "NO"
$1/$2/build/tmp/$$($1_$2_PROG) : $$($1_$2_v_HS_OBJS) $$($1_$2_v_C_OBJS) $$($1_$2_v_S_OBJS) $$($1_$2_OTHER_OBJS)
$$(MKDIRHIER) $$(dir $$@)
$$($1_$2_HC) -o $$@ $$($1_$2_v_ALL_HC_OPTS) $$(LD_OPTS) $$($1_$2_v_HS_OBJS) $$($1_$2_v_C_OBJS) $$($1_$2_v_S_OBJS) $$($1_$2_OTHER_OBJS)
+else
+$1/$2/build/tmp/$$($1_$2_PROG) : $$($1_$2_v_HS_OBJS) $$($1_$2_v_C_OBJS) $$($1_$2_v_S_OBJS) $$($1_$2_OTHER_OBJS)
+ $$(MKDIRHIER) $$(dir $$@)
+ $$(CC) -o $$@ $$($1_$2_v_ALL_CC_OPTS) $$(LD_OPTS) $$($1_$2_v_HS_OBJS) $$($1_$2_v_C_OBJS) $$($1_$2_v_S_OBJS) $$($1_$2_OTHER_OBJS)
+endif
# Note [lib-depends] if this program is built with stage1 or greater, we
# need to depend on the libraries too. NB. since $(ALL_STAGE1_LIBS) and
diff --git a/rules/hs-suffix-rules-srcdir.mk b/rules/hs-suffix-rules-srcdir.mk
index 30dd6c50eb..4aa7b7eb2a 100644
--- a/rules/hs-suffix-rules-srcdir.mk
+++ b/rules/hs-suffix-rules-srcdir.mk
@@ -54,7 +54,7 @@ endif
# XXX: for some reason these get used in preference to the direct
# .hs->.o rule, I don't know why --SDM
-$1/$2/build/%.$$($3_osuf) : $1/$4/%.hc includes/ghcautoconf.h includes/ghcplatform.h
+$1/$2/build/%.$$($3_osuf) : $1/$4/%.hc includes/ghcautoconf.h includes/ghcplatform.h $$(MKDIRHIER)
$$(MKDIRHIER) $$(dir $$@)
$$(CC) $$($1_$2_$3_ALL_CC_OPTS) -Iincludes -x c -c $$< -o $$@