os-workshop

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 059eaa4cce639f1a77e5412c6c24040422ae7c9a
parent 255cb995f32b1f20497c9971523c11261c5b70a1
Author: Brian Swetland <swetland@frotz.net>
Date:   Sun, 24 Apr 2022 12:23:31 -0700

build: adjust app build

- tidy up variable naming
- allow for app-specific linker scripts

Diffstat:
Mmake/app.mk | 75++++++++++++++++++++++++++++++++++++++++-----------------------------------
Mproject/devicetree.mk | 6+++---
Mproject/info.mk | 6+++---
Mproject/mandelbrot.mk | 6+++---
4 files changed, 49 insertions(+), 44 deletions(-)

diff --git a/make/app.mk b/make/app.mk @@ -1,68 +1,73 @@ ## Copyright 2022, Brian Swetland <swetland@frotz.net> ## Licensed under the Apache License, Version 2.0 -APPDIR := $(BUILD)/$(APP) -APPELF := $(BUILD)/$(APP).elf -APPLST := $(BUILD)/$(APP).lst +APP_DIR := $(BUILD)/$(APP_NAME) +APP_ELF := $(BUILD)/$(APP_NAME).elf +APP_LST := $(BUILD)/$(APP_NAME).lst +APP_LDSCRIPT := $(if $(APP_LDSCRIPT),$(APP_LDSCRIPT),$(LDSCRIPT)) -ALL += $(APPELF) $(APPLST) +ALL += $(APP_ELF) $(APP_LST) # Generate objects from sources. -APPOBJ := $(patsubst %.c,$(APPDIR)/%.o,$(SRC)) -APPOBJ := $(patsubst %.S,$(APPDIR)/%.o,$(APPOBJ)) +APP_OBJ := $(patsubst %.c,$(APP_DIR)/%.o,$(APP_SRC)) +APP_OBJ := $(patsubst %.S,$(APP_DIR)/%.o,$(APP_OBJ)) # Assemble compile and link flags. -APPCFLAGS := $(ARCHFLAGS) $(CFLAGS) $(patsubst %,-I%,$(APPINC)) -APPLDFLAGS := $(ARCHFLAGS) -Wl,--gc-sections +APP_CFLAGS := $(ARCHFLAGS) $(CFLAGS) $(patsubst %,-I%,$(APP_INC)) +APP_LDFLAGS := $(ARCHFLAGS) -Wl,--gc-sections -$(shell mkdir -p $(APPDIR)) +$(shell mkdir -p $(APP_DIR)) -# Track flags in a build.opts file so we can depend on it. -# Write the file only if it does not already contain the -# same options as currently defined. -$(APPOBJ): $(APPDIR)/build.opts -$(APPELF): $(APPDIR)/build.opts - -OPTS.A := $(APPCFLAGS) $(APPLDFLAGS) -OPTS.B := $(file <$(APPDIR)/build.opts) +OPTS.A := $(APP_CFLAGS) $(APP_LDFLAGS) +OPTS.B := $(file <$(APP_DIR)/build.opts) ifneq ($(OPTS.A),$(OPTS.B)) -$(file >$(APPDIR)/build.opts,$(OPTS.A)) +$(info generating $(APP_DIR)/build.opts) +$(file >$(APP_DIR)/build.opts,$(OPTS.A)) endif -$(APPELF): _OBJ := $(APPOBJ) -$(APPELF): _LDFLAGS := $(APPLDFLAGS) -T $(LDSCRIPT) -$(APPLIB): _LIB := -lgcc -$(APPELF): $(APPOBJ) $(LDSCRIPT) $(APPDIR)/build.opts +# Track flags in a build.opts file so we can depend on it. +# Write the file only if it does not already contain the +# same options as currently defined. +$(APP_OBJ): $(APP_DIR)/build.opts +$(APP_ELF): $(APP_DIR)/build.opts + +$(APP_ELF): _OBJ := $(APP_OBJ) +$(APP_ELF): _LDFLAGS := $(APP_LDFLAGS) -T $(APP_LDSCRIPT) +$(APP_LIB): _LIB := -lgcc +$(APP_ELF): $(APP_OBJ) $(APP_LDSCRIPT) $(APP_DIR)/build.opts @$(info linking $@) $(V)$(XGCC) $(_LDFLAGS) -o $@ $(_OBJ) $(_LIB) -$(APPLST): $(APPELF) +$(APP_LST): $(APP_ELF) $(V)$(XOBJDUMP) -D $< > $@ -$(APPDIR)/%.o: _CFLAGS := $(APPCFLAGS) +$(APP_DIR)/%.o: _CFLAGS := $(APP_CFLAGS) -$(APPDIR)/%.o: %.c +$(APP_DIR)/%.o: %.c @mkdir -p $(dir $@) @$(info compiling $<) $(V)$(XGCC) -c -o $@ $< $(_CFLAGS) -MD -MP -MT $@ -MF $(@:%o=%d) -$(APPDIR)/%.o: %.S +$(APP_DIR)/%.o: %.S @mkdir -p $(dir $@) @$(info compiling $<) $(V)$(XGCC) -c -o $@ $< $(_CFLAGS) -MD -MP -MT $@ -MF $(@:%o=%d) --include $(patsubst %.o,%.d,$(APPOBJ)) +# include compiler auto-deps +-include $(patsubst %.o,%.d,$(APP_OBJ)) -run.$(APP):: _BIN := $(APPELF) -run.$(APP):: $(APPELF) $(APPLST) +run.$(APP_NAME):: $(QEMUBIOS) +run.$(APP_NAME):: _BIN := $(APP_ELF) +run.$(APP_NAME):: $(APP_ELF) $(APP_LST) $(QEMU) $(QFLAGS) -kernel $(_BIN) -debug.$(APP):: _BIN := $(APPELF) -debug.$(APP):: $(APPELF) $(APPLST) +debug.$(APP_NAME):: $(QEMUBIOS) +debug.$(APP_NAME):: _BIN := $(APP_ELF) +debug.$(APP_NAME):: $(APP_ELF) $(APP_LST) $(QEMU) $(QFLAGS.GDB) -kernel $(_BIN) -APP := -INC := -SRC := - +APP_NAME := +APP_INC := +APP_SRC := +APP_LDSCRIPT := diff --git a/project/devicetree.mk b/project/devicetree.mk @@ -1,5 +1,5 @@ -APP := devicetree -SRC := hw/src/start.S misc/devicetree.c -SRC += hw/src/debug.c $(LIBC_SRC) +APP_NAME := devicetree +APP_SRC := hw/src/start.S misc/devicetree.c +APP_SRC += hw/src/debug.c $(LIBC_SRC) include make/app.mk diff --git a/project/info.mk b/project/info.mk @@ -1,5 +1,5 @@ -APP := info -SRC := hw/src/start.S misc/info.c -SRC += hw/src/debug.c $(LIBC_SRC) +APP_NAME := info +APP_SRC := hw/src/start.S misc/info.c +APP_SRC += hw/src/debug.c $(LIBC_SRC) include make/app.mk diff --git a/project/mandelbrot.mk b/project/mandelbrot.mk @@ -1,5 +1,5 @@ -APP := mandelbrot -SRC := hw/src/start.S misc/mandelbrot.c -SRC += hw/src/debug.c $(LIBC_SRC) +APP_NAME := mandelbrot +APP_SRC := hw/src/start.S misc/mandelbrot.c +APP_SRC += hw/src/debug.c $(LIBC_SRC) include make/app.mk