I did a revision of this, to use a style similar to the user directories, in the master makefile.
On Tue, Dec 15, 2015 at 3:50 PM, Davide Libenzi <[email protected]> wrote: > For now I only used it for snc. Plan to use it for perf as well. > Did not touch kprof2perf, as it is going away in the perf branch. > > > https://github.com/brho/akaros/compare/master...dlibenzi:makefrag_user_app > > The following changes since commit > c8a6943551e4eb433c058e258bca0a99e713d581: > > Rename backtrace_kframe -> backtrace_hwtf [2/2] (2015-12-10 11:26:40 > -0500) > > are available in the git repository at: > > [email protected]:dlibenzi/akaros makefrag_user_app > > for you to fetch changes up to 8b262d2dde201f186115e7bfddd09d59df1aed7f: > > Created a new Makefrag-user-app helper for building binaries (2015-12-15 > 15:46:36 -0800) > > ---------------------------------------------------------------- > Davide Libenzi (1): > Created a new Makefrag-user-app helper for building binaries > > Makefile | 7 +++--- > tools/apps/snc/Makefile | 41 ++------------------------------- > user/Makefrag-user-app | 61 > +++++++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 67 insertions(+), 42 deletions(-) > create mode 100644 user/Makefrag-user-app > > diff --git a/Makefile b/Makefile > index 8defe95..d0de66f 100644 > --- a/Makefile > +++ b/Makefile > @@ -404,8 +404,9 @@ kfs-paths := kern/kfs > endif > > FIRST_KFS_PATH = $(firstword $(kfs-paths)) > +ABS_KFS_PATH = $(abspath $(FIRST_KFS_PATH)) > > -export OBJDIR FIRST_KFS_PATH > +export OBJDIR FIRST_KFS_PATH ABS_KFS_PATH > > # Avoiding implicit rules > $(srctree)/Makelocal: ; > @@ -659,13 +660,13 @@ PHONY += apps-install > apps-install: > @$(call make_as_parent, -C tools/apps/busybox) > @$(call make_as_parent, -C tools/profile/kprof2perf install) > - @$(call make_as_parent, -C tools/apps/snc install) > + @$(MAKE) -C tools/apps/snc DEPLIBS="$^" && $(MAKE) -C tools/apps/snc > install > > PHONY += apps-clean > apps-clean: > @$(call make_as_parent, -C tools/apps/busybox clean) > @$(call make_as_parent, -C tools/profile/kprof2perf clean) > - @$(call make_as_parent, -C tools/apps/snc clean) > + @$(MAKE) -C tools/apps/snc clean > > # Cross Compiler > # > ========================================================================= > diff --git a/tools/apps/snc/Makefile b/tools/apps/snc/Makefile > index 2678e98..85eeecd 100644 > --- a/tools/apps/snc/Makefile > +++ b/tools/apps/snc/Makefile > @@ -1,39 +1,2 @@ > -# Do not: > -# o use make's built-in rules and variables > -# (this increases performance and avoids hard-to-debug behaviour); > -# o print "Entering directory ..."; > -MAKEFLAGS += -rR --no-print-directory > - > -# Overrides > -BUILDDIR ?= $(shell pwd) > -AKAROS_ROOT ?= $(BUILDDIR)/../../.. > -MAKE_JOBS ?= 4 > -KFS_ROOT ?= $(AKAROS_ROOT)/kern/kfs > - > -XCC = $(CROSS_COMPILE)gcc > - > - > -PHONY := all > -all: snc > - > - > -PHONY += snc > -snc: snc.c > - @$(XCC) $(ROS_CFLAGS) $(ROS_LDFLAGS) -o snc snc.c > - > - > -PHONY += install > -install: all > - @cp snc $(KFS_ROOT)/bin/snc > - > - > -PHONY += clean > -clean: > - @rm -f snc > - > - > -PHONY += mrproper > -mrproper: clean > - > - > -.PHONY: $(PHONY) > +APPNAME = snc > +include ../../../user/Makefrag-user-app > diff --git a/user/Makefrag-user-app b/user/Makefrag-user-app > new file mode 100644 > index 0000000..64dac87 > --- /dev/null > +++ b/user/Makefrag-user-app > @@ -0,0 +1,61 @@ > +# Makefrag for most user libraries > +# They must set APPNAME, then include this fragment > +# e.g. APPNAME = perf > + > +ARCH ?= none # catch bugs > +SRCDIR ?= > +INCDIR = $(shell if [ -d "$(SRCDIR)include" ]; then echo > "$(SRCDIR)include";\ > + else echo -n ""; fi) > + > +OBJDIR ?= $(SRCDIR)obj > +# DEPLIBS passed in from the top-level Makefile > +DEPLIBS := $(DEPLIBS) > +DEPLIBAS = $(patsubst %, $(XCC_TARGET_LIB)/lib%.a, $(DEPLIBS)) > + > +ifneq ($(INCDIR),) > + INCS = -I$(INCDIR) > +endif > + > +FINALAPP = $(OBJDIR)/$(APPNAME) > +FINALAPP-INSTALL = $(ABS_KFS_PATH)/bin/$(APPNAME) > + > +uc = $(shell echo $(1) | tr a-z A-Z) > + > +APPUCNAME := $(call uc, $(APPNAME)) > +HEADERS := $(shell find $(INCDIR) -name "*.h") > +CFILES := $(wildcard $(SRCDIR)*.c) > +CFILES += $(wildcard $(SRCDIR)$(ARCH)/*.c) > +SFILES := $(wildcard $(SRCDIR)$(ARCH)/*.S) > +OBJS := $(patsubst %.c, $(OBJDIR)/%.o, $(CFILES)) \ > + $(patsubst %.S, $(OBJDIR)/%.o, $(SFILES)) > + > +all: $(FINALAPP) > + @: > + > +$(OBJDIR)/$(ARCH)/%.o: $(SRCDIR)$(ARCH)/%.S $(HEADERS) $(DEPLIBAS) > + @echo + as [$(APPUCNAME)] $< > + @mkdir -p $(@D) > + $(Q)$(CC) $(CFLAGS_USER) $(INCS) -o $@ -c $< > + > +$(OBJDIR)/%.o: $(SRCDIR)%.c $(HEADERS) $(DEPLIBAS) > + @echo + cc [$(APPUCNAME)] $< > + @mkdir -p $(@D) > + $(Q)$(CC) $(CFLAGS_USER) $(INCS) -o $@ -c $< > + > +$(FINALAPP): $(OBJS) > + @echo + ld [$(APPUCNAME)] $@ > + @mkdir -p $(@D) > + $(Q)$(CC) -o $@ $(OBJS) $(DEPLIBAS) > + > +# Allow three different patterns for installing include files > +$(FINALAPP-INSTALL): $(FINALAPP) > + @echo + in [$(APPUCNAME)] $< $@ > + @cp $< $@ > + > +install: $(FINALAPP-INSTALL) > + @echo > /dev/null > + > +clean: > + @echo + clean [$(APPUCNAME)] > + $(Q)rm -rf $(FINALAPP) > + $(Q)rm -rf $(OBJDIR) > > -- You received this message because you are subscribed to the Google Groups "Akaros" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. For more options, visit https://groups.google.com/d/optout.
