diff --git a/ChangeLog b/ChangeLog
index a01bcf927ba9bc5e76f31cb53502fdb769a7461b..147325d75733c2e6d9cd8a29f95f789ff910d744 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Mon Sep 29 00:38:08 1997 Aaron Jackson <jackson@negril.msrce.howard.edu>
+
+	* Makefile.in (bootstrap-lean): New target.
+
 Thu Sep 18 23:58:27 1997  Jeffrey A Law  (law@cygnus.com)
 
 	* Makefile.in (cross): New target.
diff --git a/Makefile.in b/Makefile.in
index 063293453d2f87af68e96276c0d1d1e0c529d223..b7f9c27be7954c78d47bcebdaae400f63d2d1888 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1298,6 +1298,21 @@ bootstrap bootstrap2 bootstrap3: all-texinfo all-bison all-byacc all-binutils al
 	@echo "Building runtime libraries"; \
 	$(MAKE) all
 
+.PHONY: bootstrap-lean
+bootstrap-lean: all-texinfo all-bison all-byacc all-binutils all-gas all-ld
+	@r=`pwd`; export r; \
+	s=`cd $(srcdir); pwd`; export s; \
+	$(SET_LIB_PATH) \
+	echo "Bootstrapping the compiler"; \
+	cd gcc; $(MAKE) $(GCC_FLAGS_TO_PASS) $@
+	@r=`pwd`; export r; \
+	s=`cd $(srcdir); pwd`; export s; \
+	$(SET_LIB_PATH) \
+	echo "Comparing stage2 and stage3 of the compiler"; \
+	cd gcc; $(MAKE) $(GCC_FLAGS_TO_PASS) compare-lean
+	@echo "Building runtime libraries"; \
+	$(MAKE) all
+
 .PHONY: cross
 cross: all-texinfo all-bison all-byacc all-binutils all-gas all-ld
 	@r=`pwd`; export r; \
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 513abf58a5e99bb4d4ed8195727a36bb978b7ff0..76baa0e829ae3ec44b285ca8b3a7c149251b6372 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+Mon Sep 29 00:38:42 1997 Aaron Jackson <jackson@negril.msrce.howard.edu>
+
+	* Makefile.in (bootstrap-lean, compare-lean): New targets.
+
 Mon Sep 29 00:18:16 1997  Richard Henderson  (rth@cygnus.com)
 
 	* alias.c (base_alias_check): Two symbols can conflict if they
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 70290639b57efce2777f2a54885f22e9a90ea230..3ca979b79f518362132f073699f37650b1644cb4 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -2576,6 +2576,22 @@ bootstrap: force
 	$(MAKE) stage2
 	$(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage2/ LANGUAGES="$(LANGUAGES)"
 
+bootstrap-lean: force
+# Only build the C compiler for stage1, because that is the only one that
+# we can guarantee will build with the native compiler, and also it is the
+# only thing useful for building stage2.
+	$(MAKE) CC="$(CC)" libdir=$(libdir) LANGUAGES="$(BOOT_LANGUAGES)"
+	$(MAKE) stage1
+# This used to define ALLOCA as empty, but that would lead to bad results
+# for a subsequent `make install' since that would not have ALLOCA empty.
+# To prevent `make install' from compiling alloca.o and then relinking cc1
+# because alloca.o is newer, we permit these recursive makes to compile
+# alloca.o.  Then cc1 is newer, so it won't have to be relinked.
+	$(MAKE) CC="stage1/xgcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage1/ LANGUAGES="$(LANGUAGES)"
+	$(MAKE) stage2
+	rm -rf stage1
+	$(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage2/ LANGUAGES="$(LANGUAGES)"
+
 bootstrap2: force
 	$(MAKE) CC="stage1/xgcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage1/ LANGUAGES="$(LANGUAGES)"
 	$(MAKE) stage2
@@ -2612,6 +2628,31 @@ compare: force
 	else true; \
 	fi
 
+# ./ avoids bug in some versions of tail.
+compare-lean: force
+	-rm -f .bad_compare
+	for file in *$(objext); do \
+	  tail +16c ./$$file > tmp-foo1; \
+	  tail +16c stage2/$$file > tmp-foo2 \
+	    && (cmp tmp-foo1 tmp-foo2 > /dev/null 2>&1 || echo $$file differs >> .bad_compare) || true; \
+	done
+	for dir in tmp-foo $(SUBDIRS); do \
+	  if [ "`echo $$dir/*$(objext)`" != "$$dir/*$(objext)" ] ; then \
+	    for file in $$dir/*$(objext); do \
+	      tail +16c ./$$file > tmp-foo1; \
+	      tail +16c stage2/$$file > tmp-foo2 \
+	        && (cmp tmp-foo1 tmp-foo2 > /dev/null 2>&1 || echo $$file differs >> .bad_compare) || true; \
+	    done; \
+	  fi; \
+	done
+	-rm -f tmp-foo*
+	if [ -f .bad_compare ]; then \
+	  echo "Bootstrap comparison failure!"; \
+	  cat .bad_compare; \
+	  exit 1; \
+	else rm -rf stage2; \
+	fi
+
 # Similar, but compare with stage3 directory
 compare3: force
 	for file in *$(objext); do \