From: Daniel Dickinson <[email protected]> When using SDK default to avoiding rebuilding packages previously built (within same variant of a source package; alternate variants don't cause isses so do allow them) and in addition avoid installing from feeds packages previously built. In both cases this may be overridden by a force option on the command line.
For feeds install it is -f, and for building the force is FORCE_SDK="<space separated lists of package variants to build>", where package variant is just source package name for non varianted packages and <source_package>-<variant> for varianted packages Signed-off-by: Daniel Dickinson <[email protected]> --- Makefile | 5 +++-- include/kernel.mk | 37 ++++++++++++++++++++++--------------- include/package.mk | 29 ++++++++++++++++++++++++++--- include/subdir.mk | 2 +- package/Makefile | 2 ++ scripts/feeds | 11 ++++++++++- target/sdk/Makefile | 5 +++++ 7 files changed, 69 insertions(+), 22 deletions(-) diff --git a/Makefile b/Makefile index a12e3ea..91c4779 100644 --- a/Makefile +++ b/Makefile @@ -41,8 +41,9 @@ else $(toolchain/stamp-install): $(tools/stamp-install) $(target/stamp-compile): $(toolchain/stamp-install) $(tools/stamp-install) $(BUILD_DIR)/.prepared $(package/stamp-compile): $(target/stamp-compile) $(package/stamp-cleanup) -$(package/stamp-install): $(package/stamp-compile) -$(target/stamp-install): $(package/stamp-compile) $(package/stamp-install) +$(package/stamp-markforsdk): $(package/stamp-compile) +$(package/stamp-install): $(package/stamp-compile) $(package/stamp-markforsdk) +$(target/stamp-install): $(package/stamp-compile) $(package/stamp-markforsdk) $(package/stamp-install) printdb: @true diff --git a/include/kernel.mk b/include/kernel.mk index 878a366..cce6130 100644 --- a/include/kernel.mk +++ b/include/kernel.mk @@ -179,9 +179,15 @@ $(call KernelPackage/$(1)/config) $(call KernelPackage/depends) - ifneq ($(if $(filter-out %=y %=n %=m,$(KCONFIG)),$(filter m y,$(foreach c,$(filter-out %=y %=n %=m,$(KCONFIG)),$($(c)))),.),) - ifneq ($(if $(SDK),$(filter-out $(LINUX_DIR)/%.ko,$(FILES)),$(strip $(FILES))),) - define Package/kmod-$(1)/install + NOBUILD:=$(if $(filter-out $(FORCE_SDK),$(PKG_NAME)$(if $(BUILD_VARIANT),-$(BUILD_VARIANT))),\ + $(if $(wildcard $(TOPDIR)/pkgstamp/$(PKG_NAME)$(if $(BUILD_VARIANT),-$(BUILD_VARIANT))),\ + 1 \ + ) \ + ) + ifeq ($(NOBUILD),) + ifneq ($(if $(filter-out %=y %=n %=m,$(KCONFIG)),$(filter m y,$(foreach c,$(filter-out %=y %=n %=m,$(KCONFIG)),$($(c)))),.),) + ifneq ($(if $(SDK),$(filter-out $(LINUX_DIR)/%.ko,$(FILES)),$(strip $(FILES))),) + define Package/kmod-$(1)/install @for mod in $$(call version_filter,$$(FILES)); do \ if grep -q "$$$$$$$${mod##$(LINUX_DIR)/}" "$(LINUX_DIR)/modules.builtin"; then \ echo "NOTICE: module '$$$$$$$$mod' is built-in."; \ @@ -195,22 +201,23 @@ $(call KernelPackage/$(1)/config) done; $(call ModuleAutoLoad,$(1),$$(1),$(AUTOLOAD)) $(call KernelPackage/$(1)/install,$$(1)) - endef - endif - $(if $(CONFIG_PACKAGE_kmod-$(1)), - else - compile: $(1)-disabled - $(1)-disabled: + endef + endif + $(if $(CONFIG_PACKAGE_kmod-$(1)), + else + compile: $(1)-disabled + $(1)-disabled: @echo "WARNING: kmod-$(1) is not available in the kernel config - generating empty package" >&2 - define Package/kmod-$(1)/install + define Package/kmod-$(1)/install true - endef - ) - endif - $$(eval $$(call BuildPackage,kmod-$(1))) + endef + ) + endif + $$(eval $$(call BuildPackage,kmod-$(1))) - $$(IPKG_kmod-$(1)): $$(wildcard $$(FILES)) + $$(IPKG_kmod-$(1)): $$(wildcard $$(FILES)) + endif endef version_filter=$(if $(findstring @,$(1)),$(shell $(SCRIPT_DIR)/metadata.pl version_filter $(KERNEL_PATCHVER) $(1)),$(1)) diff --git a/include/package.mk b/include/package.mk index 6538afe..57d004f 100644 --- a/include/package.mk +++ b/include/package.mk @@ -7,7 +7,7 @@ __package_mk:=1 -all: $(if $(DUMP),dumpinfo,compile) +all: $(if $(DUMP),dumpinfo,compile markforsdk) PKG_BUILD_DIR ?= $(BUILD_DIR)/$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION)) PKG_INSTALL_DIR ?= $(PKG_BUILD_DIR)/ipkg-install @@ -65,6 +65,11 @@ STAMP_INSTALLED:=$(STAGING_DIR)/stamp/.$(PKG_NAME)$(if $(BUILD_VARIANT),.$(BUILD STAGING_FILES_LIST:=$(PKG_NAME)$(if $(BUILD_VARIANT),.$(BUILD_VARIANT),).list define CleanStaging + $(if $(PKG_NAME), \ + rm -f $(STAGING_DIR)/pkgstamp-current/$(PKG_NAME)$(if $(BUILD_VARIANT),-$(BUILD_VARIANT)) \ + ,\ + rm -rf $(STAGING_DIR)/pkgstamp-current \ + ) rm -f $(STAMP_INSTALLED) @-(\ cd "$(STAGING_DIR)"; \ @@ -214,6 +219,10 @@ define Build/DefaultTargets rm -rf $(TMP_DIR)/stage-$(PKG_NAME) touch $$@ + markforsdk: + mkdir -p $(STAGING_DIR)/pkgstamp-current + touch $(STAGING_DIR)/pkgstamp-current/$(PKG_NAME)$(if $(BUILD_VARIANT),-$(BUILD_VARIANT)) + ifdef Build/InstallDev compile: $(STAMP_INSTALLED) endif @@ -262,10 +271,23 @@ endif $(foreach target, \ $(if $(Package/$(1)/targets),$(Package/$(1)/targets), \ $(if $(PKG_TARGETS),$(PKG_TARGETS), ipkg) \ - ), $(BuildTarget/$(target)) \ + ), \ + $(if $(filter $(FORCE_SDK),$(PKG_NAME)$(if $(BUILD_VARIANT),-$(BUILD_VARIANT))), \ + $(BuildTarget/$(target)) \ + , \ + $(if $(wildcard $(TOPDIR)/pkgstamp/$(PKG_NAME)$(if $(BUILD_VARIANT),-$(BUILD_VARIANT))),, \ + $(BuildTarget/$(target)) \ + ) \ + ) \ ) \ ) - $(if $(PKG_HOST_ONLY)$(DUMP),,$(call Build/DefaultTargets,$(1))) + $(if $(filter $(FORCE_SDK),$(PKG_NAME)$(if $(BUILD_VARIANT),-$(BUILD_VARIANT))), \ + $(if $(PKG_HOST_ONLY)$(DUMP),,$(call Build/DefaultTargets,$(1))) \ + , \ + $(if $(wildcard $(TOPDIR)/pkgstamp/$(PKG_NAME)$(if $(BUILD_VARIANT),-$(BUILD_VARIANT))),, \ + $(if $(PKG_HOST_ONLY)$(DUMP),,$(call Build/DefaultTargets,$(1))) \ + ) \ + ) endef define pkg_install_files @@ -298,6 +320,7 @@ dumpinfo: download: prepare: configure: +markforsdk: compile: prepare-package-install install: compile diff --git a/include/subdir.mk b/include/subdir.mk index 8dc9a78..7c65fdf 100644 --- a/include/subdir.mk +++ b/include/subdir.mk @@ -9,7 +9,7 @@ ifeq ($(MAKECMDGOALS),prereq) SUBTARGETS:=prereq PREREQ_ONLY:=1 else - SUBTARGETS:=clean download prepare compile install update refresh prereq dist distcheck configure + SUBTARGETS:=clean download prepare compile markforsdk install update refresh prereq dist distcheck configure endif subtarget-default = $(filter-out ., \ diff --git a/package/Makefile b/package/Makefile index aa5d522..4dba4c8 100644 --- a/package/Makefile +++ b/package/Makefile @@ -22,6 +22,7 @@ ifneq ($(IGNORE_ERRORS),) package-ignore-errors := $(if $(package-ignore-errors),$(package-ignore-errors),n m) $(curdir)/builddirs-ignore-download := $(foreach m,$(package-ignore-errors),$(package-$(m)-filter)) $(curdir)/builddirs-ignore-compile := $(foreach m,$(package-ignore-errors),$(package-$(m)-filter)) + $(curdir)/builddirs-ignore-markforsdk := $(foreach m,$(package-ignore-errors),$(package-$(m)-filter)) endif ifdef CONFIG_USE_MKLIBS @@ -186,6 +187,7 @@ $(curdir)/flags-install:= -j1 $(eval $(call stampfile,$(curdir),package,prereq,.config)) $(eval $(call stampfile,$(curdir),package,cleanup,$(TMP_DIR)/.build)) $(eval $(call stampfile,$(curdir),package,compile,$(TMP_DIR)/.build)) +$(eval $(call stampfile,$(curdir),package,markforsdk,$(TMP_DIR)/.build)) $(eval $(call stampfile,$(curdir),package,install,$(TMP_DIR)/.build)) $(eval $(call subdir,$(curdir))) diff --git a/scripts/feeds b/scripts/feeds index 79b5284..6aca11f 100755 --- a/scripts/feeds +++ b/scripts/feeds @@ -452,6 +452,10 @@ sub install_target { return do_install_target($target); } +sub is_in_sdk($) { + return (-e "$ENV{TOPDIR}/pkgstamp/$_[0]"); +} + sub install_package { my $feed = shift; my $name = shift; @@ -469,7 +473,7 @@ sub install_package { $feed or do { $installed{$name} and return 0; # TODO: check if it's already installed within ./package directory - $feed_src->{$name} or is_core_package($name) or warn "WARNING: No feed for package '$name' found, maybe it's already part of the standard packages?\n"; + $feed_src->{$name} or is_core_package($name) or is_in_sdk($name) or ($name =~ /kmod-/) or warn "WARNING: No feed for package '$name' found and not in SDK, is this a dependency of a unselected package?\n"; return 0; }; @@ -477,16 +481,21 @@ sub install_package { my $cur = get_feed($feed->[1]); my $pkg = $cur->{$name} or return 1; + $pkg->{name} or do { $installed{$name} and return 0; # TODO: check if this is an alias package, maybe it's known by another name warn "WARNING: Package '$name' is not available in feed $feed->[1].\n"; return 0; }; + my $src = $pkg->{src}; my $type = $feed->[0]; $src or $src = $name; + # If the package is in the sdk and we don't want to override it, just return + !$force and is_in_sdk($name) and return 0; + # If it's a core package and we don't want to override, just return !$force and is_core_package($src) and return 0; diff --git a/target/sdk/Makefile b/target/sdk/Makefile index 80a87a8..9b1c192 100644 --- a/target/sdk/Makefile +++ b/target/sdk/Makefile @@ -21,6 +21,7 @@ STAGING_SUBDIR_TOOLCHAIN := staging_dir/toolchain-$(ARCH)$(ARCH_SUFFIX)_gcc-$(GC EXCLUDE_DIRS:=*/ccache \ */stamp \ + */pkgstamp-current \ */stampfiles \ */man \ */info \ @@ -105,6 +106,10 @@ $(BIN_DIR)/$(SDK_NAME).tar.bz2: clean $(TOPDIR)/package/Makefile \ $(SDK_BUILD_DIR)/package/ + # Prevent feeds install and/or rebuilt of packages already built (unless + # forced). + mkdir -p $(SDK_BUILD_DIR)/$(STAGING_DIR_TARGET)/pkgstamp + -$(CP) $(STAGING_DIR)/pkgstamp-current/* $(SDK_BUILD_DIR)/pkgstamp/ -rm -f $(SDK_BUILD_DIR)/feeds.conf.default $(if $(BASE_FEED),echo "$(BASE_FEED)" > $(SDK_BUILD_DIR)/feeds.conf.default) if [ -f $(TOPDIR)/feeds.conf ]; then \ -- 2.4.3 _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
