From 271ab8860facdee8cbbecd0025ec1e9d08f83d99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Lov=C3=A9n?= Date: Sun, 2 Jan 2022 20:19:53 +0100 Subject: [PATCH] Improved build commands --- .gitignore | 3 +-- Makefile | 22 +++++++++++++--------- dbg | 11 ++++++++++- emu | 11 ++++++++++- make | 11 ++++++++++- src/kernel/Makefile | 7 ++++++- toolchain/docker-compose.yml | 17 +++-------------- toolchain/gdbinit | 1 + 8 files changed, 54 insertions(+), 29 deletions(-) diff --git a/.gitignore b/.gitignore index 501990d..98adcf0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ -dist/ -build/ +mittos.iso sysroot/ *.d diff --git a/Makefile b/Makefile index 07dbace..b062184 100644 --- a/Makefile +++ b/Makefile @@ -2,23 +2,27 @@ ifeq ($(BUILDROOT),) $(error BUILDROOT IS NOT SET!) endif +TARGET := x86_64-elf +KERNELMAKE := TARGET=${TARGET} $(MAKE) -C src/kernel + +DIST := $(BUILDROOT)/mittos.iso SYSROOT := $(BUILDROOT)/sysroot -DIST := $(BUILDROOT)/dist/mittos.iso - -$(DIST): - setup-grub.sh +$(DIST): $(SYSROOT)/kernel + $(BUILDROOT)/toolchain/setup-grub.sh grub-mkrescue -o $@ $(SYSROOT) -kernel: +$(SYSROOT)/kernel: FORCE ifeq ($(shell make -sqC src/kernel || echo 1), 1) - $(MAKE) -C src/kernel install + $(KERNELMAKE) install endif -install: $(DIST) +.PHONY: FORCE clean: rm -rf $(DIST) - $(MAKE) -C src/kernel clean + $(KERNELMAKE) clean -.PHONY: install \ No newline at end of file +distclean: + $(MAKE) clean + rm -rf $(SYSROOT) \ No newline at end of file diff --git a/dbg b/dbg index 9fc8b18..da82134 100755 --- a/dbg +++ b/dbg @@ -1,3 +1,12 @@ #!/usr/bin/env bash -docker-compose -f toolchain/docker-compose.yml run --rm dbg "$@" \ No newline at end of file +default="gdb -q -x /opt/toolchain/gdbinit" + +if [[ "$1" == "-" ]]; then + shift + cmd="$@" +else + cmd="${default} $@" +fi + +docker-compose -f toolchain/docker-compose.yml run --rm -u $(id -u):$(id -g) run ${cmd} \ No newline at end of file diff --git a/emu b/emu index 4eb3a1c..1e97d85 100755 --- a/emu +++ b/emu @@ -1,3 +1,12 @@ #!/usr/bin/env bash -docker-compose -f toolchain/docker-compose.yml run --rm --name emul emul "$@" \ No newline at end of file +default="qemu-system-x86_64 -s -S -cdrom /opt/mittos.iso -curses" + +if [[ "$1" == "-" ]]; then + shift + cmd="$@" +else + cmd="${default} $@" +fi + +docker-compose -f toolchain/docker-compose.yml run --rm --name emul -u $(id -u):$(id -g) run ${cmd} \ No newline at end of file diff --git a/make b/make index 596a495..9eb521a 100755 --- a/make +++ b/make @@ -1,3 +1,12 @@ #!/usr/bin/env bash -docker-compose -f toolchain/docker-compose.yml run --rm -u $(id -u):$(id -g) make make "$@" \ No newline at end of file +default="make" + +if [[ "$1" == "-" ]]; then + shift + cmd="$@" +else + cmd="${default} $@" +fi + +docker-compose -f toolchain/docker-compose.yml run --rm -u $(id -u):$(id -g) build ${cmd} \ No newline at end of file diff --git a/src/kernel/Makefile b/src/kernel/Makefile index 6a9b12a..58331cb 100644 --- a/src/kernel/Makefile +++ b/src/kernel/Makefile @@ -1,5 +1,8 @@ +ifeq ($(BUILDROOT),) +$(error BUILDROOT IS NOT SET!) +endif -CC := x86_64-elf-gcc +CC := ${TARGET}-gcc SRC := $(wildcard **/*.[cS]) OBJ := $(patsubst %, %.o, $(basename $(SRC))) @@ -13,6 +16,7 @@ LDFLAGS := -n -nostdlib -lgcc -T Link.ld kernel: $(OBJ) $(LINK.c) $^ -o $@ +# Automatic dependency tracking DEP := $(OBJ:.o=.d) DEPFLAGS = -MT $@ -MMD -MP -MF $*.d $(OBJ): CPPFLAGS += $(DEPFLAGS) @@ -30,4 +34,5 @@ clean: .PHONY: install +# Include automatic dependency rules include $(DEP) \ No newline at end of file diff --git a/toolchain/docker-compose.yml b/toolchain/docker-compose.yml index 28778a2..7da9c37 100644 --- a/toolchain/docker-compose.yml +++ b/toolchain/docker-compose.yml @@ -1,29 +1,18 @@ version: "3.5" services: - make: + build: image: thomasloven/mittos-build build: context: . dockerfile: Dockerfile.build volumes: - ..:/opt - command: make - emul: + run: image: thomasloven/mittos-run build: context: . dockerfile: Dockerfile.run volumes: - - ..:/opt - command: qemu-system-x86_64 -s -S -cdrom /opt/dist/mittos.iso -curses - - dbg: - image: thomasloven/mittos-run - build: - context: . - dockerfile: Dockerfile.run - volumes: - - ..:/opt - command: gdb -q -x /opt/toolchain/gdbinit \ No newline at end of file + - ..:/opt \ No newline at end of file diff --git a/toolchain/gdbinit b/toolchain/gdbinit index 45fd97e..d7bece1 100644 --- a/toolchain/gdbinit +++ b/toolchain/gdbinit @@ -5,6 +5,7 @@ target remote emul:1234 define q monitor quit +quit end define reg