From 7ae806fa0122bbbacf9c7d28385806c818161200 Mon Sep 17 00:00:00 2001 From: Niklas Gollenstede Date: Mon, 15 Dec 2025 12:17:19 +0100 Subject: [PATCH] make em make less make, cuz makin' make ain't make no fun --- .clang-tidy | 2 +- .gitignore | 3 +-- user/Makefile | 29 ++++++++++++++++++++++++++--- user/Makefile.app | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 81 insertions(+), 6 deletions(-) create mode 100644 user/Makefile.app diff --git a/.clang-tidy b/.clang-tidy index c13105f..cabaf8c 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -23,4 +23,4 @@ Checks: > -cppcoreguidelines-pro-*, CheckOptions: readability-simplify-boolean-expr.IgnoreMacros: 'true' - readability-identifier-length.IgnoreNames: 'me' + readability-identifier-length.IgnoreNames: 'g,me' diff --git a/.gitignore b/.gitignore index d95f4fd..567609b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ -.build* -/build* +build/ diff --git a/user/Makefile b/user/Makefile index ea3cb72..bd8767f 100644 --- a/user/Makefile +++ b/user/Makefile @@ -13,8 +13,31 @@ INITRD = $(BUILDDIR)/initrd.img all: $(INITRD) +# Rezepte fuer Apps (Unterverzeichnisse) +$(APPS): $(BUILDDIR)/init.o + $(VERBOSE) $(MAKE) -C $@ -f ../Makefile.app + +# recipe for compiling imgbuilder +$(IMGBUILDER): imgbuilder.cc $(MAKEFILE_LIST) + @echo "CC $@" + @if test \( ! \( -d $(@D) \) \) ;then mkdir -p $(@D);fi + $(VERBOSE) $(CXX) -std=c++23 -o $@ $< + # recipe for building the final oostubs image -$(INITRD): +$(INITRD): $(APPS) $(IMGBUILDER) @echo "IMGBUILD $@" - @mkdir -p $(@D) - @touch $@ + @if test \( ! \( -d $(@D) \) \) ;then mkdir -p $(@D);fi + $(VERBOSE) $(IMGBUILDER) $(addsuffix $(BUILDDIR)/app.img, $(APPS)) > $@ + +lint:: + $(VERBOSE) $(foreach APP,$(APPS),$(MAKE) -C $(APP) -f ../Makefile.app lint && ) true + +tidy:: + $(VERBOSE) $(foreach APP,$(APPS),$(MAKE) -C $(APP) -f ../Makefile.app tidy && ) true + +# clean all apps additionally to default clean recipe from common.mk +clean:: + $(VERBOSE) $(foreach APP,$(APPS),$(MAKE) -C $(APP) -f ../Makefile.app clean && ) true + +.PHONY: all clean $(APPS) + diff --git a/user/Makefile.app b/user/Makefile.app new file mode 100644 index 0000000..a88f5b1 --- /dev/null +++ b/user/Makefile.app @@ -0,0 +1,53 @@ +# -------------------------------------------------------------------------- +# Linker Script +LINKER_SCRIPT = ../sections.ld +# Files to be compiled (important: defined prior to importing common.mk!) +CC_SOURCES = $(shell find * -name "*.cc" -a ! -name '.*' ) +ASM_SOURCES = $(shell find * -name "*.asm" -a ! -name '.*' ) + +CXXFLAGS_INCLUDE = -I../../libsys -I../../kernel +CXXFLAGS_DEFAULT += $(CXXFLAGS_INCLUDE) + +# ----------------------------------------------------------------------------- +# Globale Variablen und Standard-Rezepte einbinden +include ../../tools/common.mk + +# -------------------------------------------------------------------------- +# Default target + +.DEFAULT_GOAL = all +all: $(BUILDDIR)/app.img + +# ----------------------------------------------------------------------------- +# Parameters & flags: + +CXXFLAGS += $(CXXFLAGS_INCLUDE) +# Enable 16-byte compare-and-exchange instruction for debugging purposes (stack alignment) +CXXFLAGS += -mcx16 + +LDLIBS += -L../../libsys/$(BUILDDIR) -lsys +INITOBJ = ../$(BUILDDIR)/init.o + +# -------------------------------------------------------------------------- +# Linked applications +$(BUILDDIR)/app: $(INITOBJ) $(ASM_OBJECTS) $(CC_OBJECTS) $(LINKER_SCRIPT) $(MAKEFILE_LIST) + @echo "LD $@" + @mkdir -p $(@D) + $(VERBOSE) $(CXX) $(CXXFLAGS) -Wl,-T $(LINKER_SCRIPT) -o $@ $(LDFLAGS) $(INITOBJ) $(ASM_OBJECTS) $(CC_OBJECTS) $(LDLIBS) + +# -------------------------------------------------------------------------- +# 'app.img' contains all section required for loading an application (flat binary) + +$(BUILDDIR)/app.img: $(BUILDDIR)/app + @echo "OBJCOPY $@" + @if ! nm $< | grep "4000000 T start" >/dev/null 2>&1 ; then echo "Symbol 'start' is not first address" ; exit 1 ; fi + @if test \( ! \( -d $(@D) \) \) ;then mkdir -p $(@D);fi + $(VERBOSE) objcopy -O binary --set-section-flags .bss=alloc,load,contents $< $@ + +# -------------------------------------------------------------------------- +# Include dependency files (generated gcc -MM) + +ifneq ($(MAKECMDGOALS),clean) +-include $(DEP_FILES) +endif +