1
0
Fork 0
mirror of https://github.com/hermitcore/libhermit.git synced 2025-03-09 00:00:03 +01:00

revise build system

- build a bootstrap compiler
- afterwards we build newlib and the final gcc
This commit is contained in:
Stefan Lankes 2015-08-11 09:39:17 +02:00
parent 592d99462c
commit e03c0e09ea
6 changed files with 60 additions and 47 deletions

View file

@ -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))

View file

@ -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

@ -1 +1 @@
Subproject commit dcfa3eed2bb8cbde847561b6746fa148da034b73
Subproject commit 36a8504446db193cbc4c8f94eaf957996fc6bd03

View file

@ -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

@ -1 +1 @@
Subproject commit f1ad593aa47f8ac58ba13c8eb6f225f3a0f69980
Subproject commit e5a31152f36fe135f2755d768b4ecb3114805b7d

@ -1 +1 @@
Subproject commit ecfea8b26f4285ae69311d7753f7b9ddfd736ee4
Subproject commit afe1f92192e66ac3d659d2d7b1ec202d20d2605f