I am not entirely happy with that, though I do not have a clear idea in
mind now, for replacement.
Now we have the dependencies for a app/userlib listed in the main makefile,
with the main makefile using make -C to call the child.
Ideally, the main makefile should include the child, so that the child can
be a single point definition for targets and dependencies.


On Mon, Dec 21, 2015 at 9:57 AM, Barret Rhoden <[email protected]> wrote:

> Merged to master at f945c3bf7870..548361ec318c (from, to]
>
> You can see the entire diff with 'git diff' or at
> https://github.com/brho/akaros/compare/f945c3bf7870...548361ec318c
>
>
>
> On 2015-12-15 at 15:50 "'Davide Libenzi' via Akaros"
> <[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.
>

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

Reply via email to