aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authoraqua <aqua@iserlohn-fortress.net>2023-02-05 10:16:20 +0200
committeraqua <aqua@iserlohn-fortress.net>2023-02-05 10:16:20 +0200
commita5de90c48a1800c865285945aadd019fa07c7ad8 (patch)
treea2e476f4950aa142019617779f8e0bce4a01305c /Makefile
parentblake2: use makefiles instead of meson.build (diff)
downloadkernel-a5de90c48a1800c865285945aadd019fa07c7ad8.tar.xz
Split Makefile
- Makefile: configure, doc and test targets - Makefile.all: info, build and run targets - rules.mk: add base test targets
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile115
1 files changed, 50 insertions, 65 deletions
diff --git a/Makefile b/Makefile
index fa37164..0e0474f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,81 +1,66 @@
-MAKE = make
-MAKEFLAGS += --no-print-directory
-SRC_ROOT := $(shell pwd)
+# =====================================================================
+# spdx-license-identifier: ISC
+# glitch top-level makefile
+# =====================================================================
-include Makefile.config
+MAKE := make
+MAKEID := $(shell ${MAKE} --version | head -n1)
+MAKEFLAGS += -rR --no-print-directory
-.PHONY: all doc run clean test FORCE
-all: glitch.elf
+ARCH := $(shell sed -nE "s/CONFIG_ARCH_(.+)=y/\1/p" .config)
+
+.PHONY: all help info run doc clean test valgrind
+all: Makefile.config
+ @${MAKE} -f Makefile.all
+
+help:
+ @echo "info: show current configuration"
+ @echo "all: build kernel image"
+ @echo "run: run kernel image in qemu"
+ @echo "test: run all tests"
+ @echo "valgrind: run all tests in valgrind"
+
+info: Makefile.config
+ @echo "- make:"
+ @echo " MAKE: ${MAKE}"
+ @echo " MAKEID: ${MAKEID}"
+ @echo " MAKEFLAGS: ${MAKEFLAGS}"
+ @${MAKE} -f Makefile.all $@
+
+run: Makefile.config
+ @${MAKE} -f Makefile.all $@
doc: FORCE
doxygen doxygen.config
-run: glitch.iso
- @qemu-system-i386 -cdrom glitch.iso -accel kvm -d cpu_reset -display gtk,zoom-to-fit=on
-
clean:
- @${MAKE} ARCH=${ARCH} -C lib clean
- @${MAKE} ARCH=${ARCH} -C ${ARCH} clean
- @${MAKE} ARCH=${ARCH} -C devices clean
- @${MAKE} ARCH=${ARCH} -C src clean
-
-info:
- @echo "* Build information *"
- @echo " ARCH ${ARCH}"
- @echo " MAKE $(shell ${MAKE} --version | head -n1)"
- @echo " CC $(shell ${CC} --version | head -n1)"
- @echo " ${CFLAGS}"
- @echo " CXX $(shell ${CXX} --version | head -n1)"
- @echo " ${CXXFLAGS}"
- @echo " LD $(shell ${LD} --version | head -n1)"
- @echo " ${LDFLAGS}"
+ @${MAKE} -C lib clean
+ @${MAKE} -C ${ARCH} clean
+ @${MAKE} -C devices clean
+ @${MAKE} -C src clean
test:
- @echo Looking for inline assembly
- @grep -rn 'asm' devices lib src
- @echo Running tests
- @make -C lib test
- @make -C src test
+ @echo " -> Looking for inline assembly in src/ and lib/"
+ @grep -rn 'asm' devices src lib
+ @echo " -> Running tests in src"
+ @make -C src test > /dev/null
+ @echo " -> Running tests in lib"
+ @make -C lib test > /dev/null
valgrind:
- @make -C lib valgrind
- @make -C src valgrind
-
-FORCE:
+ @echo " -> Running valgrind on tests in lib"
+ @make -C lib valgrind &> /dev/null
+ @echo " -> Running valgrind on tests in src"
+ @make -C src valgrind &> /dev/null
+# configure targets
.config: Kconfig
@alldefconfig
-Makefile.config: .config
- @cp .config Makefile.config
- @echo -e '\n# toolchain.mk' >> Makefile.config
- @cat $$(sed -nE "s/CONFIG_ARCH_(.+)=y/\1/p" .config)/toolchain.mk >> Makefile.config
-
-lib/libk.a: FORCE
- @${MAKE} -C lib libk.a
-i686/arch.a: FORCE
- @${MAKE} -C ${ARCH} arch.a
-devices/devs.a: FORCE
- @${MAKE} -C devices devs.a
-src/kernel.a: FORCE
- @${MAKE} -C src kernel.a
-
-glitch.elf: ${ARCH}/arch.a src/kernel.a devices/devs.a lib/libk.a
- @echo ' LD $@'
- @${LD} ${LDFLAGS} -T ${ARCH}/linker.ld -o $@ $^
- @echo -n ' B2b '
- @b2sum $@ | cut -d ' ' -f1
-
-glitch.iso: glitch.elf grub/grub.cfg
- @grub-file --is-x86-multiboot2 glitch.elf
- @mkdir -p isodir/boot/grub
- @mkdir -p isodir/boot/glitch
- @grub-script-check grub/grub.cfg
- @cp grub/grub.cfg isodir/boot/grub/grub.cfg
- @cp glitch.elf isodir/boot/glitch/glitch.elf
- @${STRIP} isodir/boot/glitch/glitch.elf
- @rm -f isodir/boot/glitch/checksums
- @sha512sum isodir/boot/glitch/* > isodir/boot/glitch/checksums
- @sed -i s/isodir// isodir/boot/glitch/checksums
- @grub-mkrescue -o glitch.iso isodir
+Makefile.config: .config ${ARCH}/toolchain.mk
+ @echo -e '## This is a generated file, manual edits might be lost' > Makefile.config
+ @echo -e '\n## .config' >> Makefile.config
+ @cat .config >> Makefile.config
+ @echo -e '\n## toolchain.mk' >> Makefile.config
+ @cat ${ARCH}/toolchain.mk >> Makefile.config