From 3c440f91ea7f26f7c5ed10c18bd28348020d8ebe Mon Sep 17 00:00:00 2001 From: aqua Date: Sun, 30 Jul 2023 17:11:43 +0300 Subject: Added make wrapper --- .gitignore | 4 +++ Makefile | 71 -------------------------------------------------- config.mk | 9 +++---- devices/build.mk | 14 ---------- devices/mk | 14 ++++++++++ i686/build.mk | 16 ------------ i686/mk | 16 ++++++++++++ lib/build.mk | 36 ------------------------- lib/mk | 36 +++++++++++++++++++++++++ mach | 11 ++++---- mk | 57 ++++++++++++++++++++++++++++++++++++++++ root.mk | 2 +- rules.mk | 11 +++++--- src/build.mk | 29 --------------------- src/mk | 25 ++++++++++++++++++ tools/kconfig/build.mk | 26 ------------------ tools/kconfig/mk | 26 ++++++++++++++++++ 17 files changed, 195 insertions(+), 208 deletions(-) delete mode 100644 Makefile delete mode 100755 devices/build.mk create mode 100755 devices/mk delete mode 100755 i686/build.mk create mode 100755 i686/mk delete mode 100755 lib/build.mk create mode 100755 lib/mk create mode 100755 mk delete mode 100755 src/build.mk create mode 100755 src/mk delete mode 100755 tools/kconfig/build.mk create mode 100755 tools/kconfig/mk diff --git a/.gitignore b/.gitignore index ff952c7..6009cfd 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,7 @@ src/conf.h .config.old doc include/ + +# test files +test_* +!test_*.cc diff --git a/Makefile b/Makefile deleted file mode 100644 index 8bc5de5..0000000 --- a/Makefile +++ /dev/null @@ -1,71 +0,0 @@ -# ===================================================================== -# spdx-license-identifier: ISC -# glitch top-level makefile -# ===================================================================== - -MAKE := make -MAKEID := $(shell ${MAKE} --version | head -n1) -MAKEFLAGS += -rR --no-print-directory - -ARCH := $(shell sed -nE "s/CONFIG_ARCH_(.+)=y/\1/p" .config) - -SUBDIRS := lib ${ARCH} devices src - -.PHONY: help info run doc clean test valgrind -help: - @echo "run: run kernel image in qemu" - @echo "test: run all tests" - @echo "valgrind: run all tests in valgrind" - -run: glitch.iso - qemu-system-i386 -accel kvm -machine pc -cdrom $^ -d cpu_reset -display gtk,zoom-to-fit=on - -clean: - @for d in ${SUBDIRS}; do make -C $$d -f ../root.mk clean; done - -test: - @for d in ${SUBDIRS}; do make -C $$d -f ../root.mk test.quiet; done - -valgrind: - @for d in ${SUBDIRS}; do make -C $$d -f ../root.mk valgrind.quiet; done - -# configure targets -kconfig: - @make -C tools/kconfig -f ../../root.mk - -.config: Kconfig - @alldefconfig - -config.mk: .config ${ARCH}/toolchain.mk - @cat .config >> $@ - @echo -e '\n## toolchain.mk' >> $@ - @cat ${ARCH}/toolchain.mk >> $@ - -# build targets -lib/libk.a: - @${MAKE} -C lib -f ../root.mk libk.a -i686/arch.a: - @${MAKE} -C ${ARCH} -f ../root.mk arch.a -devices/devs.a: - @${MAKE} -C devices -f ../root.mk devs.a -src/kernel.a: - @${MAKE} -C src -f ../root.mk kernel.a - -src/glitch.elf: lib/libk.a i686/arch.a devices/devs.a src/kernel.a - @${MAKE} -C src -f ../root.mk glitch.elf - -# iso image -glitch.iso: src/glitch.elf grub/grub.cfg - @grub-file --is-x86-multiboot2 src/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 src/glitch.elf isodir/boot/glitch/glitch.elf - @i686-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 - - diff --git a/config.mk b/config.mk index 56039f0..36fc32f 100644 --- a/config.mk +++ b/config.mk @@ -6,17 +6,14 @@ # # Toolchain # +CONFIG_ARCH_i686=y +# CONFIG_ARCH_mips is not set +CONFIG_TOOLCHAIN_i686_gcc=y CONFIG_CFLAGS="-g -Og" CONFIG_CXXFLAGS="-g -Og" CONFIG_LDFLAGS="" # end of Toolchain -# -# Target -# -CONFIG_ARCH_i686=y -# end of Target - # # Devices # diff --git a/devices/build.mk b/devices/build.mk deleted file mode 100755 index b27d945..0000000 --- a/devices/build.mk +++ /dev/null @@ -1,14 +0,0 @@ -#!../mach - -INCLUDES := -I../${ARCH} -${ARCH}_CFLAGS += ${INCLUDES} -${ARCH}_CXXFLAGS += ${INCLUDES} - -TARGETLIB += devs -devs.SRCS = pic_8259.c uart/uart_16550.c vga.c i8042.c pckbd.c mouse.c - -HOSTTARGETBIN += uart/test_uart_16550 -uart/test_uart_16550.SRCS = uart/uart_16550.c uart/unittest_uart_16550.cc - -TESTS += uart/test_uart_16550 - diff --git a/devices/mk b/devices/mk new file mode 100755 index 0000000..b27d945 --- /dev/null +++ b/devices/mk @@ -0,0 +1,14 @@ +#!../mach + +INCLUDES := -I../${ARCH} +${ARCH}_CFLAGS += ${INCLUDES} +${ARCH}_CXXFLAGS += ${INCLUDES} + +TARGETLIB += devs +devs.SRCS = pic_8259.c uart/uart_16550.c vga.c i8042.c pckbd.c mouse.c + +HOSTTARGETBIN += uart/test_uart_16550 +uart/test_uart_16550.SRCS = uart/uart_16550.c uart/unittest_uart_16550.cc + +TESTS += uart/test_uart_16550 + diff --git a/i686/build.mk b/i686/build.mk deleted file mode 100755 index 312e553..0000000 --- a/i686/build.mk +++ /dev/null @@ -1,16 +0,0 @@ -#!../mach - -INCLUDES := -isystem../grub -${ARCH}_CFLAGS += ${INCLUDES} -${ARCH}_CXXFLAGS += ${INCLUDES} - -TARGETLIB += arch -arch.SRCS = boot.s init.s \ - gdt.c lgdt.c \ - lidt.c isr.c - -HOSTTARGETBIN += test_gdt -test_gdt.SRCS = test_gdt.cc - -TESTS += test_gdt - diff --git a/i686/mk b/i686/mk new file mode 100755 index 0000000..312e553 --- /dev/null +++ b/i686/mk @@ -0,0 +1,16 @@ +#!../mach + +INCLUDES := -isystem../grub +${ARCH}_CFLAGS += ${INCLUDES} +${ARCH}_CXXFLAGS += ${INCLUDES} + +TARGETLIB += arch +arch.SRCS = boot.s init.s \ + gdt.c lgdt.c \ + lidt.c isr.c + +HOSTTARGETBIN += test_gdt +test_gdt.SRCS = test_gdt.cc + +TESTS += test_gdt + diff --git a/lib/build.mk b/lib/build.mk deleted file mode 100755 index 06c6006..0000000 --- a/lib/build.mk +++ /dev/null @@ -1,36 +0,0 @@ -#!../mach - -# minimal C standard library -TARGETLIB += libk -libk.SRCS = \ - libk/endian/little.c \ - libk/stdio/printf.c libk/stdio/fprintf.c libk/stdio/vfprintf.cpp \ - libk/stdlib/memcpy.c libk/stdlib/memset.c libk/stdlib/linked_list_allocator.c \ - libk/string/itoa.c - -HOSTTARGETBIN += libk/endian/test_endian_little -libk/endian/test_endian_little.SRCS = libk/endian/test_endian_little.cc - -HOSTTARGETBIN += libk/stdlib/test_linked_list_allocator -libk/stdlib/test_linked_list_allocator.SRCS = libk/stdlib/test_linked_list_allocator.cc - -HOSTTARGETBIN += libk/stdlib/test_mem -libk/stdlib/test_mem.SRCS = libk/stdlib/test_mem.cc - -HOSTTARGETBIN += libk/string/test_string -libk/string/test_string.SRCS = libk/string/test_string.cc - -TESTS += \ - libk/endian/test_endian_little \ - libk/stdlib/test_linked_list_allocator libk/stdlib/test_mem \ - libk/string/test_string - -# blake2s hash algorithm -TARGETLIB += blake2 -blake2.SRCS = blake2/blake2s.c - -HOSTTARGETBIN += blake2/test_blake2s_selftest -blake2/test_blake2s_selftest.SRCS = blake2/test_blake2s_selftest.cc - -TESTS += blake2/test_blake2s_selftest - diff --git a/lib/mk b/lib/mk new file mode 100755 index 0000000..06c6006 --- /dev/null +++ b/lib/mk @@ -0,0 +1,36 @@ +#!../mach + +# minimal C standard library +TARGETLIB += libk +libk.SRCS = \ + libk/endian/little.c \ + libk/stdio/printf.c libk/stdio/fprintf.c libk/stdio/vfprintf.cpp \ + libk/stdlib/memcpy.c libk/stdlib/memset.c libk/stdlib/linked_list_allocator.c \ + libk/string/itoa.c + +HOSTTARGETBIN += libk/endian/test_endian_little +libk/endian/test_endian_little.SRCS = libk/endian/test_endian_little.cc + +HOSTTARGETBIN += libk/stdlib/test_linked_list_allocator +libk/stdlib/test_linked_list_allocator.SRCS = libk/stdlib/test_linked_list_allocator.cc + +HOSTTARGETBIN += libk/stdlib/test_mem +libk/stdlib/test_mem.SRCS = libk/stdlib/test_mem.cc + +HOSTTARGETBIN += libk/string/test_string +libk/string/test_string.SRCS = libk/string/test_string.cc + +TESTS += \ + libk/endian/test_endian_little \ + libk/stdlib/test_linked_list_allocator libk/stdlib/test_mem \ + libk/string/test_string + +# blake2s hash algorithm +TARGETLIB += blake2 +blake2.SRCS = blake2/blake2s.c + +HOSTTARGETBIN += blake2/test_blake2s_selftest +blake2/test_blake2s_selftest.SRCS = blake2/test_blake2s_selftest.cc + +TESTS += blake2/test_blake2s_selftest + diff --git a/mach b/mach index 76d73ea..fbc10d7 100755 --- a/mach +++ b/mach @@ -1,20 +1,21 @@ #!/bin/sh # ===================================================================== # filename: mach -# description: make wrapper used to run build.mk +# description: make wrapper used to run mk files # To use, add the relative path to this script as a -# shebang in build.mk and make it executable. +# shebang in mk and make it executable. # spdx-license-identifier: ISC # ===================================================================== -if [[ $1 != "./build.mk" ]] +if [[ $1 != "./mk" ]] then - echo "Run from subdir" + echo "Usage: $0 ./mk; argument passed: $1" exit 1 fi -# remove ./build.mk from args +# remove ./mk from args ARGS=${@:2} + # root.mk should be next to this script ROOT=`dirname $0` diff --git a/mk b/mk new file mode 100755 index 0000000..f4de64b --- /dev/null +++ b/mk @@ -0,0 +1,57 @@ +#!./mach + +SUBDIRS := lib ${ARCH} devices src + +${ARCH}_LDFLAGS += -T ${ROOTDIR}${ARCH}/linker.ld + +TARGETBIN += glitch +glitch.OBJS += ${ARCH}/arch.a src/kernel.a devices/devs.a lib/libk.a + +lib/libk.a: + @${MAKE} -C lib -f ../root.mk libk.a +i686/arch.a: + @${MAKE} -C ${ARCH} -f ../root.mk arch.a +devices/devs.a: + @${MAKE} -C devices -f ../root.mk devs.a +src/kernel.a: + @${MAKE} -C src -f ../root.mk kernel.a +kconfig: + @${MAKE} -C tools/kconfig -f ../../root.mk + +run: glitch.iso + qemu-system-i386 -accel kvm -machine pc -cdrom $^ -d cpu_reset -display gtk,zoom-to-fit=on + +# configure targets +.config: Kconfig + @alldefconfig + +config.mk: .config ${ARCH}/toolchain.mk + @cat .config > $@ + @echo -e '\n## toolchain.mk' >> $@ + @cat ${ARCH}/toolchain.mk >> $@ + +# iso image +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 + @i686-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 + +clean: clean_subdirs +clean_subdirs: + @for d in ${SUBDIRS}; do make -C $$d -f ../root.mk clean; done + +test: test_subdirs +test_subdirs: + @for d in ${SUBDIRS}; do make -C $$d -f ../root.mk test.quiet; done + +valgrind: valgrind_subdirs +valgrind_subdirs: + @for d in ${SUBDIRS}; do make -C $$d -f ../root.mk valgrind.quiet; done diff --git a/root.mk b/root.mk index b42e078..87ac276 100644 --- a/root.mk +++ b/root.mk @@ -33,7 +33,7 @@ info: list-targets: # include build from current dir -include build.mk +include mk SUBDIR := $(dir $(abspath $(lastword ${MAKEFILE_LIST}))) COMPONENT := $(lastword $(subst /, ,${SUBDIR})) diff --git a/rules.mk b/rules.mk index 3f750f8..5407a61 100644 --- a/rules.mk +++ b/rules.mk @@ -1,3 +1,6 @@ +# variables +VCS_ROOT = $(shell git rev-parse --show-toplevel) + # generate build rules from variables # This makefile defines the following targets: # - all: default goal, build all default targets @@ -118,19 +121,19 @@ build/%.o: %.cc .PHONY: test test.quiet valgrind valgrind.quiet clean.base FORCE test: ${TESTS} @echo " -> Running tests in $(shell pwd | xargs basename)" - @../scripts/test_runner.py --verbose ${TESTS} + @[[ -z "${TESTS}" ]] || ${VCS_ROOT}/scripts/test_runner.py --verbose ${TESTS} test.quiet: ${TESTS} @echo " -> Running tests in $(shell pwd | xargs basename)" - @../scripts/test_runner.py ${TESTS} + @[[ -z "${TESTS}" ]] || ${VCS_ROOT}/scripts/test_runner.py ${TESTS} valgrind: ${TESTS} @echo " -> Running valgrind on tests in $(shell pwd | xargs basename)" - @../scripts/test_runner.py --verbose --valgrind ${TESTS} + @[[ -z "${TESTS}" ]] || ${VCS_ROOT}/scripts/test_runner.py --verbose --valgrind ${TESTS} valgrind.quiet: ${TESTS} @echo " -> Running valgrind on tests in $(shell pwd | xargs basename)" - @../scripts/test_runner.py --valgrind ${TESTS} + @[[ -z "${TESTS}" ]] || ${VCS_ROOT}/scripts/test_runner.py --valgrind ${TESTS} clean: FORCE @echo " -> Cleaning $(shell pwd | xargs basename)" diff --git a/src/build.mk b/src/build.mk deleted file mode 100755 index bdc1e3b..0000000 --- a/src/build.mk +++ /dev/null @@ -1,29 +0,0 @@ -#!../mach - -INCLUDES := -isystem${ROOTDIR}grub -I${ROOTDIR}${ARCH} -I${ROOTDIR}devices -${ARCH}_CFLAGS += ${INCLUDES} -${ARCH}_CXXFLAGS += ${INCLUDES} -${ARCH}_LDFLAGS += -T ${ROOTDIR}${ARCH}/linker.ld - -TARGETBIN += glitch -glitch.OBJS += ${ROOTDIR}${ARCH}/arch.a kernel.a ${ROOTDIR}devices/devs.a ${ROOTDIR}lib/libk.a - -TARGETLIB += kernel -kernel.SRCS := multiboot2.c mmap.c kernel.cpp mem/vmm.c - -HOSTTARGETBIN += sched/test_taskqueue -sched/test_taskqueue.SRCS = sched/test_taskqueue.cc - -HOSTTARGETBIN += sched/test_roundrobin -sched/test_roundrobin.SRCS = sched/test_roundrobin.cc - -TESTS += \ - sched/test_taskqueue sched/test_roundrobin - -kernel.c: conf.h -conf.h: conf.h.in - @echo ' GEN $@' - @cp conf.h.in conf.h - @sed -i 's/@VERSION@/$(shell git describe)/' conf.h - @sed -i 's/@CC@/${${ARCH}_CCID}/' conf.h - diff --git a/src/mk b/src/mk new file mode 100755 index 0000000..84a735f --- /dev/null +++ b/src/mk @@ -0,0 +1,25 @@ +#!../mach + +INCLUDES := -isystem${ROOTDIR}grub -I${ROOTDIR}${ARCH} -I${ROOTDIR}devices +${ARCH}_CFLAGS += ${INCLUDES} +${ARCH}_CXXFLAGS += ${INCLUDES} + +TARGETLIB += kernel +kernel.SRCS := multiboot2.c mmap.c kernel.cpp mem/vmm.c + +HOSTTARGETBIN += sched/test_taskqueue +sched/test_taskqueue.SRCS = sched/test_taskqueue.cc + +HOSTTARGETBIN += sched/test_roundrobin +sched/test_roundrobin.SRCS = sched/test_roundrobin.cc + +TESTS += \ + sched/test_taskqueue sched/test_roundrobin + +kernel.c: conf.h +conf.h: conf.h.in + @echo ' GEN $@' + @cp conf.h.in conf.h + @sed -i 's/@VERSION@/$(shell git describe)/' conf.h + @sed -i 's/@CC@/${${ARCH}_CCID}/' conf.h + diff --git a/tools/kconfig/build.mk b/tools/kconfig/build.mk deleted file mode 100755 index a11a6d4..0000000 --- a/tools/kconfig/build.mk +++ /dev/null @@ -1,26 +0,0 @@ -#!../../mach - -HOSTTARGETBIN += conf mconf - -lxdiag_srcs := \ - lxdialog/checklist.c lxdialog/inputbox.c lxdialog/menubox.c lxdialog/textbox.c lxdialog/util.c lxdialog/yesno.c - -parser_srcs := \ - confdata.c expr.c menu.c preprocess.c symbol.c util.c \ - lex.yy.c parser.tab.c - -conf.SRCS := ${parser_srcs} conf.c - -mconf.SRCS := ${parser_srcs} ${lxdiag_srcs} mconf.c - -HOST_CFLAGS := -D_GNU_SOURCE $(shell pkg-config --cflags ncursesw) -HOST_LDFLAGS := $(shell pkg-config --libs ncursesw) - -%.tab.c: %.y - bison --header --debug $< - -lex.yy.c: lexer.l parser.tab.c - flex $< - -CLEAN_FILES += parser.tab.h parser.tab.c lex.yy.c - diff --git a/tools/kconfig/mk b/tools/kconfig/mk new file mode 100755 index 0000000..a11a6d4 --- /dev/null +++ b/tools/kconfig/mk @@ -0,0 +1,26 @@ +#!../../mach + +HOSTTARGETBIN += conf mconf + +lxdiag_srcs := \ + lxdialog/checklist.c lxdialog/inputbox.c lxdialog/menubox.c lxdialog/textbox.c lxdialog/util.c lxdialog/yesno.c + +parser_srcs := \ + confdata.c expr.c menu.c preprocess.c symbol.c util.c \ + lex.yy.c parser.tab.c + +conf.SRCS := ${parser_srcs} conf.c + +mconf.SRCS := ${parser_srcs} ${lxdiag_srcs} mconf.c + +HOST_CFLAGS := -D_GNU_SOURCE $(shell pkg-config --cflags ncursesw) +HOST_LDFLAGS := $(shell pkg-config --libs ncursesw) + +%.tab.c: %.y + bison --header --debug $< + +lex.yy.c: lexer.l parser.tab.c + flex $< + +CLEAN_FILES += parser.tab.h parser.tab.c lex.yy.c + -- cgit v1.2.1