Use target-specific openwrt directories with symlinks

This allows us to use separate .config files per target. Also, don't use
OpenWRT's feeds script anymore, but symlink the feeds ourselves.
This commit is contained in:
Matthias Schiffer 2014-05-11 10:43:10 +02:00
parent 635192e3e9
commit 0fd92dd685
2 changed files with 71 additions and 53 deletions

120
Makefile
View File

@ -7,6 +7,7 @@ export LC_ALL LANG
empty:= empty:=
space:= $(empty) $(empty) space:= $(empty) $(empty)
GLUONMAKE_EARLY = $(SUBMAKE) -C $(GLUON_ORIGOPENWRTDIR) -f $(GLUONDIR)/Makefile GLUON_TOOLS=0
GLUONMAKE = $(SUBMAKE) -C $(GLUON_OPENWRTDIR) -f $(GLUONDIR)/Makefile GLUONMAKE = $(SUBMAKE) -C $(GLUON_OPENWRTDIR) -f $(GLUONDIR)/Makefile
ifneq ($(OPENWRT_BUILD),1) ifneq ($(OPENWRT_BUILD),1)
@ -15,7 +16,7 @@ GLUONDIR:=${CURDIR}
include $(GLUONDIR)/include/gluon.mk include $(GLUONDIR)/include/gluon.mk
TOPDIR:=$(GLUON_OPENWRTDIR) TOPDIR:=$(GLUON_ORIGOPENWRTDIR)
export TOPDIR export TOPDIR
@ -61,40 +62,46 @@ endef
include $(GLUONDIR)/targets/targets.mk include $(GLUONDIR)/targets/targets.mk
CheckExternal := test -d $(GLUON_OPENWRTDIR) || (echo 'You don'"'"'t seem to have obtained the external repositories needed by Gluon; please call `make update` first!'; false)
gluon-tools: FORCE CheckExternal := test -d $(GLUON_ORIGOPENWRTDIR) || (echo 'You don'"'"'t seem to have obtained the external repositories needed by Gluon; please call `make update` first!'; false)
+@$(SUBMAKE) -C $(TOPDIR) prepare-tmpinfo OPENWRT_BUILD=0 V=s$(OPENWRT_VERBOSE)
+@$(GLUONMAKE) gluon-tools GLUON_TOOLS=0
all: gluon-tools
prepare-target: FORCE
@$(CheckExternal)
+@$(GLUONMAKE_EARLY) prepare-target
all: prepare-target
+@$(GLUONMAKE) prepare +@$(GLUONMAKE) prepare
+@$(GLUONMAKE) images +@$(GLUONMAKE) images
download prepare images: gluon-tools prepare: prepare-target
+@$(GLUONMAKE) $@ +@$(GLUONMAKE) $@
tools/% toolchain/% package/% target/%: gluon-tools clean dirclean download images: FORCE
+@$(GLUONMAKE) $@
manifest: gluon-tools
[ -n "$(GLUON_BRANCH)" ] || (echo 'Please set GLUON_BRANCH to create a manifest.'; false)
+@$(GLUONMAKE) $@
dirclean: clean
@$(CheckExternal) @$(CheckExternal)
+@$(SUBMAKE) -C $(TOPDIR) -r dirclean +@$(GLUONMAKE_EARLY) maybe-prepare-target
+@$(GLUONMAKE) $@
toolchain/% package/% target/%: FORCE
@$(CheckExternal)
+@$(GLUONMAKE_EARLY) maybe-prepare-target
+@$(GLUONMAKE) $@
manifest: FORCE
[ -n "$(GLUON_BRANCH)" ] || (echo 'Please set GLUON_BRANCH to create a manifest.'; false)
@$(CheckExternal)
+@$(GLUONMAKE_EARLY) maybe-prepare-target
+@$(GLUONMAKE) $@
cleanall: clean cleanall: clean
@$(CheckExternal) ;
+@$(SUBMAKE) -C $(TOPDIR) -r clean
clean:
@$(CheckExternal)
+@$(GLUONMAKE) clean
else else
TOPDIR=${CURDIR}
export TOPDIR
include rules.mk include rules.mk
include $(GLUONDIR)/include/gluon.mk include $(GLUONDIR)/include/gluon.mk
@ -135,6 +142,7 @@ include $(GLUONDIR)/targets/targets.mk
BOARD := $(GLUON_TARGET_$(GLUON_TARGET)_BOARD) BOARD := $(GLUON_TARGET_$(GLUON_TARGET)_BOARD)
override SUBTARGET := $(GLUON_TARGET_$(GLUON_TARGET)_SUBTARGET) override SUBTARGET := $(GLUON_TARGET_$(GLUON_TARGET)_SUBTARGET)
target_prepared_stamp := $(BOARD_BUILDDIR)/target-prepared
gluon_prepared_stamp := $(BOARD_BUILDDIR)/prepared gluon_prepared_stamp := $(BOARD_BUILDDIR)/prepared
@ -143,6 +151,38 @@ include $(INCLUDE_DIR)/target.mk
gluon-tools: $(STAGING_DIR_HOST)/bin/stat gluon-tools: $(STAGING_DIR_HOST)/bin/stat
feeds: FORCE
rm -rf $(TOPDIR)/package/feeds
mkdir $(TOPDIR)/package/feeds
[ ! -f $(GLUON_SITEDIR)/modules ] || . $(GLUON_SITEDIR)/modules && for feed in $$GLUON_SITE_FEEDS; do ln -s ../../../packages/$$feed $(TOPDIR)/package/feeds/$$feed; done
. $(GLUONDIR)/modules && for feed in $$GLUON_FEEDS; do ln -s ../../../packages/$$feed $(TOPDIR)/package/feeds/$$feed; done
+$(NO_TRACE_MAKE) -C $(TOPDIR) prepare-tmpinfo OPENWRT_BUILD=0
config: FORCE
( \
cat $(GLUONDIR)/include/config $(GLUONDIR)/targets/$(GLUON_TARGET)/config; \
echo '$(patsubst %,CONFIG_PACKAGE_%=m,$(sort $(filter-out -%,$(GLUON_DEFAULT_PACKAGES) $(GLUON_SITE_PACKAGES) $(PROFILE_PACKAGES))))' \
| sed -e 's/ /\n/g'; \
) > .config
+$(NO_TRACE_MAKE) defconfig OPENWRT_BUILD=0
prepare-target: FORCE
mkdir -p $(GLUON_OPENWRTDIR)
for dir in build_dir dl staging_dir tmp; do \
mkdir -p $(GLUON_ORIGOPENWRTDIR)/$$dir; \
done
for link in build_dir Config.in dl include Makefile package rules.mk scripts staging_dir target tmp toolchain tools; do \
ln -sf $(GLUON_ORIGOPENWRTDIR)/$$link $(GLUON_OPENWRTDIR); \
done
+$(GLUONMAKE_EARLY) feeds
+$(GLUONMAKE_EARLY) gluon-tools
+$(GLUONMAKE) config
touch $(target_prepared_stamp)
$(target_prepared_stamp):
+$(GLUONMAKE_EARLY) prepare-target
maybe-prepare-target: $(target_prepared_stamp)
$(BUILD_DIR)/.prepared: Makefile $(BUILD_DIR)/.prepared: Makefile
@mkdir -p $$(dirname $@) @mkdir -p $$(dirname $@)
@ -151,42 +191,19 @@ $(BUILD_DIR)/.prepared: Makefile
$(toolchain/stamp-install): $(tools/stamp-install) $(toolchain/stamp-install): $(tools/stamp-install)
$(package/stamp-compile): $(package/stamp-cleanup) $(package/stamp-compile): $(package/stamp-cleanup)
clean: FORCE clean: FORCE
+$(SUBMAKE) clean
dirclean: FORCE
+$(SUBMAKE) dirclean
rm -rf $(GLUON_BUILDDIR) rm -rf $(GLUON_BUILDDIR)
refresh_feeds: FORCE
export MAKEFLAGS=V=s$(OPENWRT_VERBOSE); \
export SCAN_COOKIE=; \
scripts/feeds uninstall -a; \
scripts/feeds update -a; \
scripts/feeds install -a
export GLUON_GENERATE := $(GLUONDIR)/scripts/generate.sh export GLUON_GENERATE := $(GLUONDIR)/scripts/generate.sh
export GLUON_CONFIGURE := $(GLUONDIR)/scripts/configure.pl export GLUON_CONFIGURE := $(GLUONDIR)/scripts/configure.pl
feeds: FORCE download: FORCE
( \
[ ! -f $(GLUON_SITEDIR)/modules ] || . $(GLUON_SITEDIR)/modules && for feed in $$GLUON_SITE_FEEDS; do echo src-link $$feed ../../packages/$$feed; done; \
. $(GLUONDIR)/modules && for feed in $$GLUON_FEEDS; do echo src-link $$feed ../../packages/$$feed; done; \
) > feeds.conf
+$(GLUONMAKE) refresh_feeds V=s$(OPENWRT_VERBOSE)
+$(NO_TRACE_MAKE) -C $(TOPDIR) prepare-tmpinfo OPENWRT_BUILD=0
config: FORCE
rm .config
( \
cat $(GLUONDIR)/include/config $(GLUONDIR)/targets/$(GLUON_TARGET)/config; \
echo '$(patsubst %,CONFIG_PACKAGE_%=m,$(sort $(filter-out -%,$(GLUON_DEFAULT_PACKAGES) $(GLUON_SITE_PACKAGES) $(PROFILE_PACKAGES))))' \
| sed -e 's/ /\n/g'; \
) > .config
+$(NO_TRACE_MAKE) defconfig OPENWRT_BUILD=0
.config:
+$(GLUONMAKE) config
download: .config FORCE
+$(SUBMAKE) tools/download +$(SUBMAKE) tools/download
+$(SUBMAKE) toolchain/download +$(SUBMAKE) toolchain/download
+$(SUBMAKE) package/download +$(SUBMAKE) package/download
@ -217,7 +234,6 @@ prepare: FORCE
mkdir -p $(GLUON_IMAGEDIR) $(BOARD_BUILDDIR) mkdir -p $(GLUON_IMAGEDIR) $(BOARD_BUILDDIR)
echo 'src packages file:../openwrt/bin/$(BOARD)/packages' > $(BOARD_BUILDDIR)/opkg.conf echo 'src packages file:../openwrt/bin/$(BOARD)/packages' > $(BOARD_BUILDDIR)/opkg.conf
+$(GLUONMAKE) feeds
+$(GLUONMAKE) config +$(GLUONMAKE) config
+$(GLUONMAKE) toolchain +$(GLUONMAKE) toolchain
+$(GLUONMAKE) kernel +$(GLUONMAKE) kernel

View File

@ -1,12 +1,14 @@
ifneq ($(__gluon_inc),1) ifneq ($(__gluon_inc),1)
__gluon_inc=1 __gluon_inc=1
GLUON_OPENWRTDIR := $(GLUONDIR)/openwrt GLUON_ORIGOPENWRTDIR := $(GLUONDIR)/openwrt
GLUON_SITEDIR := $(GLUONDIR)/site GLUON_SITEDIR := $(GLUONDIR)/site
GLUON_IMAGEDIR ?= $(GLUONDIR)/images GLUON_IMAGEDIR ?= $(GLUONDIR)/images
GLUON_BUILDDIR ?= $(GLUONDIR)/build GLUON_BUILDDIR ?= $(GLUONDIR)/build
GLUON_OPENWRTDIR = $(GLUON_BUILDDIR)/$(GLUON_TARGET)/openwrt
BOARD_BUILDDIR = $(GLUON_BUILDDIR)/$(BOARD)$(if $(SUBTARGET),-$(SUBTARGET)) BOARD_BUILDDIR = $(GLUON_BUILDDIR)/$(BOARD)$(if $(SUBTARGET),-$(SUBTARGET))
BOARD_KDIR = $(BOARD_BUILDDIR)/kernel BOARD_KDIR = $(BOARD_BUILDDIR)/kernel