# -------------------------------------------------------------------------- # 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 @mkdir -p $(@D) $(VERBOSE) objcopy -O binary --set-section-flags .bss=alloc,load,contents $< $@ # -------------------------------------------------------------------------- # Include dependency files (generated gcc -MM) ifneq ($(MAKECMDGOALS),clean) -include $(DEP_FILES) endif