Build chain tweaks and cleanup

This commit is contained in:
Thomas Lovén 2022-01-11 18:12:57 +01:00
parent 6c36d3dd40
commit fc54366eec
5 changed files with 36 additions and 26 deletions

View File

@ -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)
rm -rf $(SYSROOT)
.PHONY: all dist sysroot FORCE

View File

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

View File

@ -1,12 +1,9 @@
#include <stdint.h>
#include <multiboot.h>
#include <cpu.h>
#include <memory.h>
#include <terminal.h>
#include <debug.h>
#include <multiboot.h>
#include <interrupts.h>
#include <stdlib.h>
#include <stdio.h>
#include <proc.h>
void TEMP_test_scheduler();

View File

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

View File

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