[coreboot-gerrit] Patch set updated for coreboot: util/crossgcc: Add option to bootstrap a host gcc

Nico Huber (nico.h@gmx.de) gerrit at coreboot.org
Wed Jan 27 00:43:17 CET 2016


Nico Huber (nico.h at gmx.de) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/13473

-gerrit

commit 1b971c27cffab985b7a39967df9b672c6f66af00
Author: Nico Huber <nico.huber at secunet.com>
Date:   Tue Jan 26 16:10:17 2016 +0100

    util/crossgcc: Add option to bootstrap a host gcc
    
    Bootstrapping gcc is the recommended way if your host gcc's version
    doesn't match the gcc version you're going to build. While a build
    with an outdated host gcc usually succeeds, an outdated gnat seems
    to be a bigger issue.
    
    Change-Id: Icb47d3e9dbafc55737fbc3ce62a084fb9d5f359a
    Signed-off-by: Nico Huber <nico.huber at secunet.com>
---
 util/crossgcc/Makefile |  3 ++-
 util/crossgcc/buildgcc | 38 +++++++++++++++++++++++++++++++++++---
 2 files changed, 37 insertions(+), 4 deletions(-)

diff --git a/util/crossgcc/Makefile b/util/crossgcc/Makefile
index 79e0c3c..4f5d919 100644
--- a/util/crossgcc/Makefile
+++ b/util/crossgcc/Makefile
@@ -25,7 +25,8 @@ build_tools: build_gcc build_iasl build_gdb
 
 build_gcc:
 	bash ./buildgcc -p $(BUILD_PLATFORM) $(if $(CPUS),-j $(CPUS)) $(if $(KEEP_SOURCES),-t) $(BUILDGCC_OPTIONS) \
-			$(if $(BUILD_LANGUAGES),-l $(BUILD_LANGUAGES))
+			$(if $(BUILD_LANGUAGES),-l $(BUILD_LANGUAGES)) \
+			$(if $(BUILD_BOOTSTRAP),-b) \
 
 build_gdb:
 ifeq ($(SKIP_GDB),)
diff --git a/util/crossgcc/buildgcc b/util/crossgcc/buildgcc
index c621f4f..69be3fd 100755
--- a/util/crossgcc/buildgcc
+++ b/util/crossgcc/buildgcc
@@ -19,7 +19,7 @@
 cd $(dirname $0)
 
 CROSSGCC_DATE="January 26th, 2016"
-CROSSGCC_VERSION="1.35"
+CROSSGCC_VERSION="1.36"
 
 # default settings
 PACKAGE=GCC
@@ -31,6 +31,7 @@ DESTDIR=
 CLEANHOST=0
 SAVETEMPS=0
 SKIPPYTHON=1
+BOOTSTRAP=0
 
 # GCC toolchain version numbers
 GMP_VERSION=6.1.0
@@ -367,6 +368,8 @@ myhelp()
 	printf "    [-P|--package <package>]      Build a specific package: GCC, CLANG, IASL, GDB\n"
 	printf "                                  (defaults to $PACKAGE)\n"
 	printf "GCC specific options:\n"
+	printf "    [-b|--bootstrap]              bootstrap the host compiler before building\n"
+	printf "                                  the cross compiler\n"
 	printf "    [-p|--platform <platform>]    target platform to build cross compiler for\n"
 	printf "                                  (defaults to $TARGETARCH)\n"
 	printf "    [-l|--languages <languages>]  comma separated list of target languages\n"
@@ -467,8 +470,24 @@ build_BINUTILS() {
 	$MAKE install DESTDIR=$DESTDIR || touch .failed
 }
 
+build_host_GCC() {
+	CC="$CC" CFLAGS_FOR_TARGET="-O2" BOOT_CFLAGS="-O2" \
+		../gcc-${GCC_VERSION}/configure \
+		--prefix=$HOSTDIR --libexecdir=$HOSTDIR/lib \
+		--enable-bootstrap \
+		--disable-werror --disable-nls \
+		--disable-libssp --disable-libquadmath \
+		${GCC_OPTIONS} --enable-languages="${LANGUAGES}" \
+		--with-gmp=$DESTDIR$HOSTDIR --with-mpfr=$DESTDIR$HOSTDIR \
+		--with-mpc=$DESTDIR$HOSTDIR --with-libelf=$DESTDIR$HOSTDIR \
+		--with-pkgversion="coreboot toolchain host bootstrap v$CROSSGCC_VERSION $CROSSGCC_DATE" \
+		&& \
+	$MAKE $JOBS CFLAGS_FOR_BUILD="-O2" BOOT_CFLAGS="-O2" bootstrap && \
+	$MAKE install DESTDIR=$DESTDIR && \
+	ln -s gcc $DESTDIR$2/bin/cc || touch .failed
+}
 
-build_GCC() {
+build_target_GCC() {
 	# GCC does not honor HOSTCFLAGS at all. CFLAGS are used for
 	# both target and host object files.
 	# There's a work-around called CFLAGS_FOR_BUILD and CFLAGS_FOR_TARGET
@@ -495,6 +514,14 @@ build_GCC() {
 	fi
 }
 
+build_GCC() {
+	if is_host_package $1; then
+		build_host_GCC $@
+	else
+		build_target_GCC $@
+	fi
+}
+
 build_EXPAT() {
 	CC="$CC" CFLAGS="$HOSTCFLAGS" ../${EXPAT_DIR}/configure --disable-shared \
 		--prefix=$HOSTDIR --target=${TARGETARCH} || touch .failed
@@ -614,6 +641,7 @@ while true ; do
 			TARGETDIR="$(echo $1 | sed -e 's,/*$,,')"
 			HOSTDIR="$TARGETDIR-host"
 			shift;;
+		-b|--bootstrap) shift; BOOTSTRAP=1;;
 		-p|--platform)	shift; TARGETARCH="$1"; shift;;
 		-l|--languages)	shift; LANGUAGES="$1"; shift;;
 		-D|--destdir)	shift; DESTDIR="$1"; shift;;
@@ -656,7 +684,11 @@ case "$PACKAGE" in
 	GCC|gcc)
 		echo "Target architecture is now $TARGETARCH"
 		NAME="${TARGETARCH} cross GCC"
-		PACKAGES="host-GMP host-MPFR host-MPC host-LIBELF BINUTILS GCC"
+		if [ $BOOTSTRAP -eq 1 ]; then
+			PACKAGES="host-GMP host-MPFR host-MPC host-LIBELF host-GCC BINUTILS GCC"
+		else
+			PACKAGES="host-GMP host-MPFR host-MPC host-LIBELF BINUTILS GCC"
+		fi
 		;;
 	GDB|gdb)
 		NAME="${TARGETARCH} cross GDB"



More information about the coreboot-gerrit mailing list