From e03c0e09ea5a8b4a613c37a90e8a38f9b1f1232c Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Tue, 11 Aug 2015 09:39:17 +0200 Subject: [PATCH] revise build system - build a bootstrap compiler - afterwards we build newlib and the final gcc --- hermit/Makefile | 19 +++++++++------- hermit/usr/Makefile | 38 ++++++++++++++++++++----------- hermit/usr/binutils | 2 +- hermit/usr/examples/Makefile | 44 +++++++++++++++++------------------- hermit/usr/newlib | 2 +- hermit/usr/pte | 2 +- 6 files changed, 60 insertions(+), 47 deletions(-) diff --git a/hermit/Makefile b/hermit/Makefile index 57a3f35f4..3d2f76091 100644 --- a/hermit/Makefile +++ b/hermit/Makefile @@ -8,7 +8,7 @@ GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags) TODAY := $(shell date +'%Y%m%d') # Set your own cross compiler tool chain prefix here -CROSSCOMPREFIX = +CROSSCOMPREFIX = x86_64-hermit- STACKPROT = -fno-stack-protector CC_FOR_TARGET = $(CROSSCOMPREFIX)gcc @@ -54,7 +54,7 @@ STRIP_DEBUG = --strip-debug KEEP_DEBUG = --only-keep-debug OUTPUT_FORMAT = -O elf32-i386 -CFLAGS_FOR_NEWLIB = -O2 -mtune=native #$(STACKPROT) +CFLAGS_FOR_NEWLIB = -O3 -mavx2 -mfma #$(STACKPROT) LDFLAGS_FOR_NEWLIB = NASMFLAGS_FOR_NEWLIB = -felf64 CFLAGS_FOR_TOOLS = -O2 -Wall @@ -69,12 +69,12 @@ endif default: all -all: usr tools $(NAME).elf +all: bootstrap toolchain tools $(NAME).elf -usr: +toolchain: $Q$(MAKE) ARCH=$(ARCH) \ - LDFLAGS="$(LDFLAGS_FOR_NEWLIB)" \ - CFLAGS="$(CFLAGS_FOR_NEWLIB)" \ + LDFLAGS_FOR_TARGET="$(LDFLAGS_FOR_NEWLIB)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_NEWLIB)" \ NASMFLAGS="$(NASMFLAGS_FOR_NEWLIB)" \ CC_FOR_TARGET=$(CC_FOR_TARGET) \ CXX_FOR_TARGET=$(CXX_FOR_TARGET) \ @@ -87,7 +87,10 @@ usr: OBJCOPY_FOR_TARGET=$(OBJCOPY_FOR_TARGET) \ RANLIB_FOR_TARGET=$(RANLIB_FOR_TARGET) \ STRIP_FOR_TARGET=$(STRIP_FOR_TARGET) \ - READELF_FOR_TARGET=$(READELF_FOR_TARGET) -C usr + READELF_FOR_TARGET=$(READELF_FOR_TARGET) -C usr toolchain + +bootstrap: + $Q$(MAKE) ARCH=$(ARCH) CFLAGS="" LDFLAGS="" -C usr bootstrap tools: $Q$(MAKE) ARCH=$(ARCH) CFLAGS="$(CFLAGS_FOR_TOOLS)" LDFLAGS="$(LDFLAGS_FOR_TOOLS)" -C tools @@ -135,6 +138,6 @@ include/hermit/config.inc: include/hermit/config.h @echo [GCC-ASM] $@ $Q$(CC_FOR_TARGET) $(CFLAGS) -c -o $@ $< -.PHONY: default all clean emu gdb usr tools +.PHONY: default all clean emu gdb usr toolchain tools include $(addsuffix /Makefile,$(SUBDIRS)) diff --git a/hermit/usr/Makefile b/hermit/usr/Makefile index 96c18695e..f57ddaba1 100644 --- a/hermit/usr/Makefile +++ b/hermit/usr/Makefile @@ -1,6 +1,7 @@ -TOPDIR = $(shell pwd) +override TOPDIR = $(shell pwd) ARCH = x86 TARGET=x86_64-hermit +NJOBS=-j20 NEWLIB = $(TOPDIR)/$(ARCH)/$(TARGET) RM = rm -rf @@ -16,24 +17,35 @@ ifeq ($V,0) P = > /dev/null endif -default: $(ARCH) - $Q$(MAKE) TARGET=$(TARGET) CFLAGS+="-I. -Iplatform/hermit -Iplatform/helper -ffreestanding -O3 -Wall -I$(NEWLIB)/include -I../../include" LDFLAGS+="-nostdlib -L$(NEWLIB)/lib" -C pte depend - $Q$(MAKE) TARGET=$(TARGET) CFLAGS+="-I. -Iplatform/hermit -Iplatform/helper -ffreestanding -O3 -Wall -I$(NEWLIB)/include -I../../include" LDFLAGS+="-nostdlib -L$(NEWLIB)/lib" -C pte - $Q$(MAKE) CFLAGS+="-mtune=native -O3" -C examples depend - $Q$(MAKE) CFLAGS+="-mtune=native -O3" -C examples +demo: + $Q$(MAKE) CC_FOR_TARGET=$(CC_FOR_TARGET) CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" LDFLAGS_FOR_TARGET="$(LDFLAGS_FOR_TARGET)" OBJCOPY_FOR_TARGET=$(OBJCOPY_FOR_TARGET) -C examples depend + $Q$(MAKE) CC_FOR_TARGET=$(CC_FOR_TARGET) CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" LDFLAGS_FOR_TARGET="$(LDFLAGS_FOR_TARGET)" OBJCOPY_FOR_TARGET=$(OBJCOPY_FOR_TARGET) -C examples $(ARCH): - @echo Build newlib - $Q$(RM) $(TMP) $Q$(MKDIR) $(TMP) + +bootstrap: $(ARCH) $(TMP)/binutils $(TMP)/bootstrap + +$(TMP)/binutils: $Q$(MKDIR) $(TMP)/binutils - $Q$(CD) $(TMP)/binutils; $(TOPDIR)/binutils/configure --target=$(TARGET) --prefix=$(TOPDIR)/$(ARCH) --disable-shared --disable-nls --disable-gdb --disable-libdecnumber --disable-readline --disable-sim --disable-libssp --enable-tls && $(MAKE) && $(MAKE) install + $Q$(CD) $(TMP)/binutils; $(TOPDIR)/binutils/configure --target=$(TARGET) --prefix=$(TOPDIR)/$(ARCH) --disable-shared --disable-nls --disable-gdb --disable-libdecnumber --disable-readline --disable-sim --disable-libssp --enable-tls && $(MAKE) $(NJOBS) && $(MAKE) install + + +$(TMP)/bootstrap: + $Q$(MKDIR) $(TMP)/bootstrap + $Q$(CD) $(TMP)/bootstrap; $(TOPDIR)/gcc/configure --target=$(TARGET) --prefix=$(TOPDIR)/$(ARCH) --without-headers --enable-languages=c --disable-nls --disable-shared --disable-libssp --enable-threads=posix --enable-tls && $(MAKE) $(NJOBS) all-gcc && $(MAKE) install-gcc + +toolchain: $(TMP)/newlib $(TMP)/gcc demo + +$(TMP)/newlib: $Q$(MKDIR) $(TMP)/newlib - $Q$(CD) $(TMP)/newlib; $(TOPDIR)/newlib/configure --target=$(TARGET) --prefix=$(TOPDIR)/$(ARCH) $(OPT) && $(MAKE) && $(MAKE) install - $Q$(MAKE) TARGET=$(TARGET) CFLAGS+="-O3 -I. -Iplatform/hermit -Iplatform/helper -ffreestanding -O3 -Wall -I$(NEWLIB)/include -I../../include -I../../arch/$(ARCH)/include" LDFLAGS+="-nostdlib -L$(NEWLIB)/lib" -C pte depend - $Q$(MAKE) TARGET=$(TARGET) CFLAGS+="-O3 -I. -Iplatform/hermit -Iplatform/helper -ffreestanding -O3 -Wall -I$(NEWLIB)/include -I../../include -I../../arch/$(ARCH)/include" LDFLAGS+="-nostdlib -L$(NEWLIB)/lib" -C pte + $Q$(CD) $(TMP)/newlib; $(TOPDIR)/newlib/configure --target=$(TARGET) --prefix=$(TOPDIR)/$(ARCH) $(OPT) && $(MAKE) $(NJOBS) && $(MAKE) install + $Q$(MAKE) TARGET=$(TARGET) CC_FOR_TARGET=$(CC_FOR_TARGET) AR_FOR_TARGET=$(AR_FOR_TARGET) CFLAGS_FOR_TARGET+="-O3 -I. -Iplatform/hermit -Iplatform/helper -Wall" -C pte depend + $Q$(MAKE) TARGET=$(TARGET) CC_FOR_TARGET=$(CC_FOR_TARGET) AR_FOR_TARGET=$(AR_FOR_TARGET) CFLAGS_FOR_TARGET+="-O3 -I. -Iplatform/hermit -Iplatform/helper -Wall" -C pte + +$(TMP)/gcc: $Q$(MKDIR) $(TMP)/gcc - $Q$(CD) $(TMP)/gcc; $(TOPDIR)/gcc/configure --target=$(TARGET) --prefix=$(TOPDIR)/$(ARCH) --without-headers --with-newlib --enable-languages=c --disable-nls --disable-shared --disable-libssp --enable-threads=posix --enable-tls && $(MAKE) && $(MAKE) install + $Q$(CD) $(TMP)/gcc; $(TOPDIR)/gcc/configure --target=$(TARGET) --prefix=$(TOPDIR)/$(ARCH) --without-headers --with-newlib --enable-languages=c --disable-nls --disable-shared --disable-libssp --enable-threads=posix --enable-tls && $(MAKE) $(NJOBS) && $(MAKE) install clean: @echo Cleaning toolchain diff --git a/hermit/usr/binutils b/hermit/usr/binutils index dcfa3eed2..36a850444 160000 --- a/hermit/usr/binutils +++ b/hermit/usr/binutils @@ -1 +1 @@ -Subproject commit dcfa3eed2bb8cbde847561b6746fa148da034b73 +Subproject commit 36a8504446db193cbc4c8f94eaf957996fc6bd03 diff --git a/hermit/usr/examples/Makefile b/hermit/usr/examples/Makefile index 61ca27a76..432d4aa94 100644 --- a/hermit/usr/examples/Makefile +++ b/hermit/usr/examples/Makefile @@ -5,23 +5,21 @@ override STRIP_DEBUG = --strip-unneeded --strip-debug KEEP_DEBUG = --only-keep-debug # Set your own cross compiler tool chain prefix here -override CROSSCOMPREFIX = ../$(ARCH)/bin/$(TARGET)- +CROSSCOMPREFIX = x86_64-hermit- -override CC_FOR_TARGET = $(CROSSCOMPREFIX)gcc -override CXX_FOR_TARGET = $(CROSSCOMPREFIX)g++ -override GCC_FOR_TARGET = $(CROSSCOMPREFIX)gcc -override CPP_FOR_TARGET = $(CROSSCOMPREFIX)cpp -override AR_FOR_TARGET = $(CROSSCOMPREFIX)ar -override AS_FOR_TARGET = $(CROSSCOMPREFIX)as -override LD_FOR_TARGET = $(CROSSCOMPREFIX)ld -override NM_FOR_TARGET = $(CROSSCOMPREFIX)nm -override OBJDUMP_FOR_TARGET = $(CROSSCOMPREFIX)objdump -override OBJCOPY_FOR_TARGET = $(CROSSCOMPREFIX)objcopy -override RANLIB_FOR_TARGET = $(CROSSCOMPREFIX)ranlib -override STRIP_FOR_TARGET = $(CROSSCOMPREFIX)strip -override READELF_FOR_TARGET = $(CROSSCOMPREFIX)readelf - -override CFLAGS=-O3 -mtune=native +CC_FOR_TARGET = $(CROSSCOMPREFIX)gcc +CXX_FOR_TARGET = $(CROSSCOMPREFIX)g++ +GCC_FOR_TARGET = $(CROSSCOMPREFIX)gcc +CPP_FOR_TARGET = $(CROSSCOMPREFIX)cpp +AR_FOR_TARGET = $(CROSSCOMPREFIX)ar +AS_FOR_TARGET = $(CROSSCOMPREFIX)as +LD_FOR_TARGET = $(CROSSCOMPREFIX)ld +NM_FOR_TARGET = $(CROSSCOMPREFIX)nm +OBJDUMP_FOR_TARGET = $(CROSSCOMPREFIX)objdump +OBJCOPY_FOR_TARGET = $(CROSSCOMPREFIX)objcopy +RANLIB_FOR_TARGET = $(CROSSCOMPREFIX)ranlib +STRIP_FOR_TARGET = $(CROSSCOMPREFIX)strip +READELF_FOR_TARGET = $(CROSSCOMPREFIX)readelf # Prettify output V = 0 @@ -33,7 +31,7 @@ endif # other implicit rules %.o : %.c @echo [CC] $@ - $Q$(CC_FOR_TARGET) -c $(CFLAGS) -o $@ $< + $Q$(CC_FOR_TARGET) -c $(CFLAGS_FOR_TARGET) -o $@ $< default: all @@ -41,32 +39,32 @@ all: hello jacobi stream thr_hello stream: stream.o @echo [LD] $@ - $Q$(CC_FOR_TARGET) $(LDFLAGS) $(CFLAGS) -o $@ $< + $Q$(CC_FOR_TARGET) $(LDFLAGS_FOR_TARGET) $(CFLAGS_FOR_TARGET) -o $@ $< $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ $Qchmod a-x $@.sym hello: hello.o @echo [LD] $@ - $Q$(CC_FOR_TARGET) $(LDFLAGS) $(CFLAGS) -o $@ $< + $Q$(CC_FOR_TARGET) $(LDFLAGS_FOR_TARGET) $(CFLAGS_FOR_TARGET) -o $@ $< $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ $Qchmod a-x $@.sym jacobi: jacobi.o @echo [LD] $@ - $Q$(CC_FOR_TARGET) $(LDFLAGS) $(CFLAGS) -o $@ $< -lm + $Q$(CC_FOR_TARGET) $(LDFLAGS_FOR_TARGET) $(CFLAGS_FOR_TARGET) -o $@ $< -lm $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ $Qchmod a-x $@.sym thr_hello.o: thr_hello.c @echo [CC] $@ - $Q$(CC_FOR_TARGET) -c $(CFLAGS) -pthread -o $@ $< + $Q$(CC_FOR_TARGET) -c $(CFLAGS_FOR_TARGET) -pthread -o $@ $< thr_hello: thr_hello.o @echo [LD] $@ - $Q$(CC_FOR_TARGET) $(LDFLAGS) $(CFLAGS) -o $@ $< -pthread + $Q$(CC_FOR_TARGET) $(LDFLAGS_FOR_TARGET) $(CFLAGS_FOR_TARGET) -o $@ $< -pthread $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ $Qchmod a-x $@.sym @@ -80,7 +78,7 @@ veryclean: $Q$(RM) hello jacobi stream thr_hello *.sym *.o *~ depend: - $Q$(CC_FOR_TARGET) -MM $(CFLAGS) *.c > Makefile.dep + $Q$(CC_FOR_TARGET) -MM $(CFLAGS_FOR_TARGET) *.c > Makefile.dep -include Makefile.dep # DO NOT DELETE diff --git a/hermit/usr/newlib b/hermit/usr/newlib index f1ad593aa..e5a31152f 160000 --- a/hermit/usr/newlib +++ b/hermit/usr/newlib @@ -1 +1 @@ -Subproject commit f1ad593aa47f8ac58ba13c8eb6f225f3a0f69980 +Subproject commit e5a31152f36fe135f2755d768b4ecb3114805b7d diff --git a/hermit/usr/pte b/hermit/usr/pte index ecfea8b26..afe1f9219 160000 --- a/hermit/usr/pte +++ b/hermit/usr/pte @@ -1 +1 @@ -Subproject commit ecfea8b26f4285ae69311d7753f7b9ddfd736ee4 +Subproject commit afe1f92192e66ac3d659d2d7b1ec202d20d2605f