From fc54366eec88277b281163e5ebecf2028234eb74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Lov=C3=A9n?= Date: Tue, 11 Jan 2022 18:12:57 +0100 Subject: [PATCH] Build chain tweaks and cleanup --- Makefile | 32 +++++++++++++++++--------------- src/kernel/Makefile | 10 +++++++--- src/kernel/boot/kmain.c | 5 +---- src/libmittos/Makefile | 9 +++++++-- toolchain/build-musl.sh | 6 ++++-- 5 files changed, 36 insertions(+), 26 deletions(-) diff --git a/Makefile b/Makefile index a3099f3..c7c24ae 100644 --- a/Makefile +++ b/Makefile @@ -3,25 +3,26 @@ $(error BUILDROOT IS NOT SET!) endif TARGET := x86_64-elf -KERNELMAKE := TARGET=${TARGET} $(MAKE) -C src/kernel -LIBMAKE := TARGET=${TARGET} $(MAKE) -C src/libmittos +MAKE.kernel := TARGET=${TARGET} $(MAKE) -C src/kernel +MAKE.libmittos := TARGET=${TARGET} $(MAKE) -C src/libmittos DIST := $(BUILDROOT)/mittos.iso SYSROOT := $(BUILDROOT)/sysroot -SYS_ITEMS := $(SYSROOT)/kernel $(SYSROOT)/usr/lib/libc.a $(SYSROOT)/usr/lib/libmittos.a -all: $(SYSROOT)/kernel $(SYS_ITEMS) + +all: kernel + dist: $(DIST) - -$(DIST): $(SYS_ITEMS) +$(DIST): kernel $(BUILDROOT)/toolchain/setup-grub.sh grub-mkrescue -o $@ $(SYSROOT) + kernel: $(SYSROOT)/kernel -$(SYSROOT)/kernel: $(SYSROOT)/usr/lib/libc.a $(SYSROOT)/usr/lib/libmittos.a FORCE -ifeq ($(shell make -sqC src/kernel install || echo 1), 1) - $(KERNELMAKE) install +$(SYSROOT)/kernel: musllib libmittos FORCE +ifeq ($(shell $(MAKE.kernel) -sq install || echo 1), 1) + $(MAKE.kernel) install endif musllib: $(SYSROOT)/usr/lib/libc.a @@ -30,17 +31,18 @@ $(SYSROOT)/usr/lib/libc.a: libmittos: $(SYSROOT)/usr/lib/libmittos.a $(SYSROOT)/usr/lib/libmittos.a: FORCE -ifeq ($(shell make -sqC src/libmittos install || echo 1), 1) - $(LIBMAKE) install +ifeq ($(shell $(MAKE.libmittos) -sq install || echo 1), 1) + $(MAKE.libmittos) install endif -.PHONY: all dist sysroot FORCE clean: rm -rf $(DIST) - $(KERNELMAKE) clean - $(LIBMAKE) clean + $(MAKE.kernel) clean + $(MAKE.libmittos) clean distclean: $(MAKE) clean - rm -rf $(SYSROOT) \ No newline at end of file + rm -rf $(SYSROOT) + +.PHONY: all dist sysroot FORCE \ No newline at end of file diff --git a/src/kernel/Makefile b/src/kernel/Makefile index cababcc..b074bc5 100644 --- a/src/kernel/Makefile +++ b/src/kernel/Makefile @@ -20,23 +20,27 @@ kernel: $(OBJ) %.o: %.S.py python3 $^ | $(COMPILE.S) $(DEPFLAGS) -x assembler-with-cpp - -o $@ + # Automatic dependency tracking DEP := $(OBJ:.o=.d) DEPFLAGS = -MT $@ -MMD -MP -MF $*.d $(OBJ): CPPFLAGS += $(DEPFLAGS) %.d: ; + +# Installation DESTDIR ?= $(BUILDROOT)/sysroot -$(DESTDIR)$(PREFIX)/kernel: kernel +$(DESTDIR)/kernel: kernel install -D $< $@ -install: $(DESTDIR)$(PREFIX)/kernel +install: $(DESTDIR)/kernel + clean: rm -rf $(OBJ) $(DEP) kernel -.PHONY: install +.PHONY: install clean # Include automatic dependency rules include $(DEP) \ No newline at end of file diff --git a/src/kernel/boot/kmain.c b/src/kernel/boot/kmain.c index 74486b6..4671d45 100644 --- a/src/kernel/boot/kmain.c +++ b/src/kernel/boot/kmain.c @@ -1,12 +1,9 @@ #include +#include #include #include #include #include -#include -#include -#include -#include #include void TEMP_test_scheduler(); diff --git a/src/libmittos/Makefile b/src/libmittos/Makefile index b004f82..943eb17 100644 --- a/src/libmittos/Makefile +++ b/src/libmittos/Makefile @@ -6,7 +6,6 @@ CC := ${TARGET}-gcc SRC := $(shell find -type f -name '*.[cS]*') OBJ := $(patsubst %, %.o, $(basename $(basename $(SRC)))) - HDR := $(shell find -type f -name '*.h') CFLAGS := -Wall -Wextra -pedantic -ffreestanding -mcmodel=large -std=c2x @@ -18,15 +17,19 @@ LDFLAGS := -nostdlib -r libmittos.a: $(OBJ) $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@ + # Automatic dependency tracking DEP := $(OBJ:.o=.d) DEPFLAGS = -MT $@ -MMD -MP -MF $*.d $(OBJ): CPPFLAGS += $(DEPFLAGS) %.d: ; + +# Installation DESTDIR ?= $(BUILDROOT)/sysroot LIBDIR := $(DESTDIR)/usr/lib INCDIR := $(DESTDIR)/usr/include/mittos + $(LIBDIR)/libmittos.a: libmittos.a install -D $< $@ @@ -38,9 +41,11 @@ install: install-headers $(LIBDIR)/libmittos.a install-headers: $(HDR:./include/%=$(INCDIR)/%) + clean: rm -rf $(OBJ) $(DEP) libmittos.a -.PHONY: install install-headers +.PHONY: install install-headers clean + # Include automatic dependency rules include $(DEP) \ No newline at end of file diff --git a/toolchain/build-musl.sh b/toolchain/build-musl.sh index 81bd73b..5142119 100755 --- a/toolchain/build-musl.sh +++ b/toolchain/build-musl.sh @@ -1,6 +1,6 @@ #!/bin/sh -e -target=x86_64-elf +TARGET=x86_64-elf SYSROOT=/opt/sysroot # Pull or update musl libc @@ -10,12 +10,14 @@ cd musl git reset --hard git pull +# Apply patches [ -d /opt/src/patch-musl ] && rsync -a /opt/src/patch-musl/ /opt/external/musl/ +# Build and install mkdir -p /opt/external/build-musl && cd /opt/external/build-musl rm -r * ../musl/configure \ - --target=${target} \ + --target=${TARGET} \ --prefix=${SYSROOT}/usr \ --disable-shared \ --enable-debug \