make em make less make, cuz makin' make ain't make no fun

This commit is contained in:
Niklas Gollenstede
2025-12-15 12:17:19 +01:00
parent 4245798955
commit 7ae806fa01
4 changed files with 81 additions and 6 deletions

53
user/Makefile.app Normal file
View File

@@ -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