diff options
author | aqua <aqua@iserlohn-fortress.net> | 2023-02-05 10:16:20 +0200 |
---|---|---|
committer | aqua <aqua@iserlohn-fortress.net> | 2023-02-05 10:16:20 +0200 |
commit | a5de90c48a1800c865285945aadd019fa07c7ad8 (patch) | |
tree | a2e476f4950aa142019617779f8e0bce4a01305c /Makefile | |
parent | blake2: use makefiles instead of meson.build (diff) | |
download | kernel-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-- | Makefile | 115 |
1 files changed, 50 insertions, 65 deletions
@@ -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 |