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:
parent
592d99462c
commit
e03c0e09ea
6 changed files with 60 additions and 47 deletions
|
@ -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))
|
||||
|
|
|
@ -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
|
|
@ -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
|
Loading…
Add table
Reference in a new issue