diff options
-rw-r--r-- | Makefile | 13 | ||||
-rw-r--r-- | include/subdir.mk | 63 | ||||
-rw-r--r-- | tools/Makefile | 64 |
3 files changed, 86 insertions, 54 deletions
@@ -23,7 +23,10 @@ export LANG=C export TOPDIR=${CURDIR} export IS_TTY=$(shell tty -s && echo 1 || echo 0) -include $(TOPDIR)/include/verbose.mk +include ./rules.mk +include $(INCLUDE_DIR)/depends.mk +include $(INCLUDE_DIR)/subdir.mk +include tools/Makefile OPENWRTVERSION:=$(RELEASE) ifneq ($(VERSION),) @@ -100,7 +103,7 @@ kernel_menuconfig: .config FORCE package/% target/%: tmp/.packageinfo toolchain/% package/% target/%: tmp/.targetinfo -package/% target/% tools/% toolchain/%: FORCE +package/% target/% toolchain/%: FORCE $(MAKE) -C $(patsubst %/$*,%,$@) $* @@ -130,8 +133,7 @@ download: .config FORCE $(MAKE) package/download $(MAKE) target/download -world: .config FORCE - $(MAKE) tools/install +world: .config $(tools/stamp) FORCE $(MAKE) toolchain/install $(MAKE) target/compile $(MAKE) package/compile @@ -162,5 +164,4 @@ symlinkclean: rm -rf tmp .SILENT: clean dirclean distclean symlinkclean config-clean download world help tmp/.packageinfo tmp/.targetinfo tmpinfo-clean tmp/.config-package.in tmp/.config-target.in .config scripts/config/mconf scripts/config/conf menuconfig tmp/.prereq-build tmp/.prereq-package tmp/.prereq-target -FORCE: ; -.PHONY: FORCE help +.PHONY: help diff --git a/include/subdir.mk b/include/subdir.mk new file mode 100644 index 000000000..81a6f2a42 --- /dev/null +++ b/include/subdir.mk @@ -0,0 +1,63 @@ +# debug flags: +# +# d: show subdirectory tree +# t: show added targets +# l: show legacy targets + +ifeq ($(DEBUG),all) + build_debug:=dt +else + build_debug:=$(DEBUG) +endif + +define debug +$$(findstring $(2),$$(if $$(DEBUG_DIR),$$(if $$(filter $$(DEBUG_DIR)%,$(1)),$(build_debug)),$(build_debug))) +endef + +define warn +$$(if $(call debug,$(1),$(2)),$$(warning $(3))) +endef + +define warn_eval +$(call warn,$(1),$(2),$(3) $(4)) +$(4) +endef + +dep/compile=$(1)/prepare +dep/install=$(1)/compile +SUBTARGETS:=clean download prepare compile install update refresh prereq + +# Parameters: <subdir> +define subdir + $(call warn,$(1),d,D $(1)) + $(foreach bd,$($(1)/builddirs), + $(call warn,$(1),d,BD $(1)/$(bd)) + $(foreach target,$(SUBTARGETS), + $(call warn_eval,$(1)/$(bd),t,T,$(1)/$(bd)/$(target): $(call dep/$(target),$(1)/$(bd)) $($(1)/$(bd)/$(target)) $($(1)//$(target))) + @$$(MAKE) -j1 -C $(1)/$(bd) $(target) + + # legacy targets + $(call warn_eval,$(1)/$(bd),l,T,$(1)/$(bd)-$(target): $(1)/$(bd)/$(target)) + ) + ) + $(foreach target,$(SUBTARGETS), + $(call warn_eval,$(1),t,T,$(1)/$(target): $($(1)/) $(foreach bd,$($(1)/builddirs),$(1)/$(bd)/$(target))) + ) +endef + +# Parameters: <subdir> <name> +define stampfile + $(1)/stamp:=$(STAGING_DIR)/stampfiles/.$(2)_installed + $(call rdep,$(1),$$($(1)/stamp)) + + $$($(1)/stamp): + @$(MAKE) $(1)/install + @mkdir -p $$$$(dirname $$($(1)/stamp)) + @touch $$($(1)/stamp) + .PRECIOUS: $$($(1)/stamp) # work around a make bug + + $(1)//clean:=$(1)/stamp/clean + $(1)/stamp/clean: FORCE + @rm -f $$($(1)/stamp) + +endef diff --git a/tools/Makefile b/tools/Makefile index 68e7dab53..0d6b51597 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -1,60 +1,28 @@ # -# Copyright (C) 2006 OpenWrt.org +# Copyright (C) 2007 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. # # Main makefile for the host tools # -include $(TOPDIR)/rules.mk -TARGETS-y:=sed sstrip ipkg-utils ext2fs squashfs mtd-utils lzma mkimage firmware-utils patch-cmdline -TARGETS-$(CONFIG_CCACHE) += ccache -TARGETS_DOWNLOAD:=$(patsubst %,%-download,$(TARGETS-y)) -TARGETS_PREPARE:=$(patsubst %,%-prepare,$(TARGETS-y)) -TARGETS_COMPILE:=$(patsubst %,%-compile,$(TARGETS-y)) -TARGETS_INSTALL:=$(patsubst %,%-install,$(TARGETS-y)) -TARGETS_CLEAN:=$(patsubst %,%-clean,$(TARGETS-y)) -STAMP:=$(STAGING_DIR)/stampfiles/.tools_installed +curdir:=$(patsubst %/Makefile,%,$(lastword $(MAKEFILE_LIST))) -all: install -download: $(TARGETS_DOWNLOAD) -compile: $(TARGETS_COMPILE) -install: $(STAMP) -clean: $(TARGETS_CLEAN) +# subdirectories to descend into +$(curdir)/builddirs := sed sstrip ipkg-utils ext2fs squashfs mtd-utils lzma mkimage firmware-utils patch-cmdline $(if $(CONFIG_CCACHE),ccache) -squashfs-compile: lzma-install +# builddir dependencies +$(curdir)/squashfs/compile := $(curdir)/lzma/install -ifneq ($(shell $(SCRIPT_DIR)/timestamp.pl -p . $(STAMP)),$(STAMP)) - $(STAMP): $(TARGETS_INSTALL) -endif +# preparatory work +$(STAGING_DIR)/include-host/.done: + @mkdir -p $$(dirname $@) + @cp $(curdir)/include/*.h $$(dirname $@)/ + @touch $@ -$(STAMP): $(TOPDIR)/.config - mkdir -p $(shell dirname $@) - touch $@ - -TOOL_HOST_INCLUDES:=$(patsubst ./include/%.h,$(STAGING_DIR)/include-host/%.h,$(wildcard ./include/*.h)) -$(TOOL_HOST_INCLUDES): $(STAGING_DIR)/include-host/%.h: ./include/%.h - @mkdir -p $(STAGING_DIR)/include-host - $(CP) $< $@ - -$(TOOL_BUILD_DIR): - @mkdir -p $@ - -%-prereq %-download %-clean %-refresh %-update: FORCE - $(MAKE) -C $* $(patsubst $*-%,%,$@) - -%-prepare: $(TOOL_HOST_INCLUDES) $(TOOL_BUILD_DIR) FORCE - $(MAKE) -C $* $(patsubst $*-%,%,$@) - -%-compile: %-prepare FORCE - $(MAKE) -C $* $(patsubst $*-%,%,$@) - -%-install: %-compile FORCE - $(MAKE) -C $* $(patsubst $*-%,%,$@) - -ifeq ($(MAKECMDGOALS),install-targets) -MAKEFLAGS:=$(MAKEFLAGS) -j$(CONFIG_JLEVEL) -else -.NOTPARALLEL: -endif +# prerequisites for the individual targets +$(curdir)/ := .config +$(curdir)//prepare := $(STAGING_DIR)/include-host/.done +$(eval $(call stampfile,$(curdir),tools)) +$(eval $(call subdir,$(curdir))) |