From c6b3d38a156dd624760a8eb1bb374affd43b4f2a Mon Sep 17 00:00:00 2001 From: Björn Stenberg Date: Thu, 20 Nov 2008 11:27:31 +0000 Subject: New makefile solution: A single invocation of 'make' to build the entire tree. Fully controlled dependencies give faster and more correct recompiles. Many #include lines adjusted to conform to the new standards. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19146 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/plugins.make | 76 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 apps/plugins/plugins.make (limited to 'apps/plugins/plugins.make') diff --git a/apps/plugins/plugins.make b/apps/plugins/plugins.make new file mode 100644 index 0000000000..2e266cb190 --- /dev/null +++ b/apps/plugins/plugins.make @@ -0,0 +1,76 @@ +# __________ __ ___. +# Open \______ \ ____ ____ | | _\_ |__ _______ ___ +# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / +# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < +# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ +# \/ \/ \/ \/ \/ +# $Id: Makefile 19082 2008-11-10 23:54:24Z zagor $ +# + +# single-file plugins: +PLUGINS_SRC = $(call preprocess, $(APPSDIR)/plugins/SOURCES) +OTHER_SRC += $(PLUGINS_SRC) +ROCKS := $(PLUGINS_SRC:.c=.rock) +ROCKS := $(subst $(ROOTDIR),$(BUILDDIR),$(ROCKS)) + +# libplugin.a +PLUGINLIB := $(BUILDDIR)/apps/plugins/libplugin.a +PLUGINLIB_SRC = $(call preprocess, $(APPSDIR)/plugins/lib/SOURCES) +OTHER_SRC += $(PLUGINLIB_SRC) + +PLUGINLIB_OBJ := $(PLUGINLIB_SRC:.c=.o) +PLUGINLIB_OBJ := $(PLUGINLIB_OBJ:.S=.o) +PLUGINLIB_OBJ := $(subst $(ROOTDIR),$(BUILDDIR),$(PLUGINLIB_OBJ)) + +# multifile plugins (subdirs): +PLUGINSUBDIRS := $(call preprocess, $(APPSDIR)/plugins/SUBDIRS) + +# include .make from each subdir (yay!) +$(foreach dir,$(PLUGINSUBDIRS),$(eval include $(dir)/$(notdir $(dir)).make)) + +### build data / rules +PLUGIN_LDS := $(APPSDIR)/plugins/plugin.lds +PLUGINLINK_LDS := $(BUILDDIR)/apps/plugins/plugin.link + +OTHER_INC += -I$(APPSDIR)/plugins + +# special compile flags for plugins: +PLUGINFLAGS = -I$(APPSDIR)/plugins -DPLUGIN $(CFLAGS) + +$(ROCKS): $(PLUGINLIB) $(APPSDIR)/plugin.h $(PLUGINLINK_LDS) $(PLUGINBITMAPLIB) + +$(PLUGINLIB): $(PLUGINLIB_OBJ) + $(call PRINTS,AR $(@F))$(AR) rs $@ $^ >/dev/null 2>&1 + +$(PLUGINLINK_LDS): $(PLUGIN_LDS) + $(call PRINTS,PP $(@F)) + $(call preprocess2file,$<,$@,-DLOADADDRESS=$(LOADADDRESS)) + +$(BUILDDIR)/credits.raw credits.raw: $(DOCSDIR)/CREDITS + $(call PRINTS,Create credits.raw)perl $(APPSDIR)/plugins/credits.pl < $< > $(BUILDDIR)/$(@F) + +# special dependencies +$(BUILDDIR)/apps/plugins/wav2wv.rock: $(BUILDDIR)/apps/codecs/libwavpack.a + +# special pattern rule for compiling plugin lib (with -ffunction-sections) +$(BUILDDIR)/apps/plugins/lib/%.o: $(ROOTDIR)/apps/plugins/lib/%.c + $(SILENT)mkdir -p $(dir $@) + $(call PRINTS,CC $(subst $(ROOTDIR)/,,$<))$(CC) -I$(dir $<) $(PLUGINFLAGS) -ffunction-sections -c $< -o $@ + +# special pattern rule for compiling plugins with extra flags +$(BUILDDIR)/apps/plugins/%.o: $(ROOTDIR)/apps/plugins/%.c $(PLUGINBITMAPLIB) + $(SILENT)mkdir -p $(dir $@) + $(call PRINTS,CC $(subst $(ROOTDIR)/,,$<))$(CC) -I$(dir $<) $(PLUGINFLAGS) -c $< -o $@ + +ifdef SIMVER + PLUGINLDFLAGS = $(SHARED_FLAG) # <-- from Makefile +else + PLUGINLDFLAGS = -T$(PLUGINLINK_LDS) -Wl,--gc-sections -Wl,-Map,$*.map +endif + +$(BUILDDIR)/%.rock: $(BUILDDIR)/%.o $(PLUGINLINK_LDS) + $(call PRINTS,LD $(@F))$(CC) $(PLUGINFLAGS) -o $(BUILDDIR)/$*.elf \ + $(filter %.o, $^) \ + $(filter %.a, $^) \ + -lgcc $(PLUGINLDFLAGS) + $(SILENT)$(OC) -O binary $(BUILDDIR)/$*.elf $@ -- cgit v1.2.3