On correction on the comments in the patch: The install target is actually not applicable because it only applies to packages selected as y vs. m and refers to install into an actual image. Packages which are m can only be recorded as built from a compile section, and marking packages from the compile section is non-trivial due to number of way in which compile sections come into being (i.e. there is no single convenient place to alter the compile target).

Regards,

Daniel

On 11/01/16 05:21 AM, open...@lists.openwrt.org wrote:
From: Daniel Dickinson <open...@daniel.thecshore.com>

If packages have already been built by the base system we don't want
a different version in another repo (e.g. built by SDK) because this
could cause conflicts with packaes that depend on it.  Therefore for
packages built by the base system, prevent the SDK from reconfiguring
the build options.

The approach taken is the one which least perturbs the build system
while still being reliable, of the ones considered.  Other approachs
involved modifying package-ipkg.mk and packages.mk in order to
override the compile or install targets, however there are rather a
lot of 'moving parts' to the compile target, and the number of fragile
changes required is quite high.  In addition, simply looking for .built
stamps is unreliable because packages which were once built due to a
previous configuration, but which are out-of-date and/or no longer
desired, would get recorded as built unless you remove the .built
stamp when doing package/compile, however that would result in every
package attempting to do a rebuild, even with no changes.

In any event the change to subdir.mk is required because of the
fact that the package name we need is the 'source' package name,
which corresponds to the last part of the subdirectory path in
which the package resides.

Signed-off-by: Daniel Dickinson <open...@daniel.thecshore.com>
---
  Makefile            |  5 +++--
  include/package.mk  | 12 +++++++++++-
  include/subdir.mk   |  4 ++--
  include/toplevel.mk |  2 +-
  package/Makefile    |  8 ++++++++
  target/sdk/Makefile |  2 ++
  6 files changed, 27 insertions(+), 6 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/package.mk b/include/package.mk
index 1dfbd68..0fd3455 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
@@ -66,6 +66,11 @@ STAMP_INSTALLED:=$(STAGING_DIR)/stamp/.$(PKG_DIR_NAME)$(if 
$(BUILD_VARIANT),.$(B
  STAGING_FILES_LIST:=$(PKG_DIR_NAME)$(if 
$(BUILD_VARIANT),.$(BUILD_VARIANT),).list

  define CleanStaging
+       $(if $(PKG_NAME), \
+               rm -f $(STAGING_DIR)/pkgstamp-current/$(PKG_NAME)
+       ,\
+               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_DIR_NAME)
        touch $$@

+   markforsdk:
+       mkdir -p $(STAGING_DIR)/pkgstamp-current
+       touch $(STAGING_DIR)/pkgstamp-current/$(SRC_PKG_NAME)
+
    ifdef Build/InstallDev
      compile: $(STAMP_INSTALLED)
    endif
@@ -298,6 +307,7 @@ dumpinfo:
  download:
  prepare:
  configure:
+markforsdk:
  compile: prepare-package-install
  install: compile

diff --git a/include/subdir.mk b/include/subdir.mk
index 8dc9a78..380e602 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 ., \
@@ -43,7 +43,7 @@ define subdir
        $(call warn_eval,$(1)/$(bd),t,T,$(1)/$(bd)/$(target): $(if 
$(QUILT),,$($(1)/$(bd)/$(target)) $(call $(1)//$(target),$(1)/$(bd))))
                $(if $(BUILD_LOG),@mkdir -p $(BUILD_LOG_DIR)/$(1)/$(bd))
          $(foreach variant,$(if $(BUILD_VARIANT),$(BUILD_VARIANT),$(if $(strip 
$($(1)/$(bd)/variants)),$($(1)/$(bd)/variants),$(if 
$($(1)/$(bd)/default-variant),$($(1)/$(bd)/default-variant),__default))),
-                       $(if $(call debug,$(1)/$(bd),v),,@)+$(if $(BUILD_LOG),set -o pipefail;) 
$$(SUBMAKE) -r -C $(1)/$(bd) $(target) BUILD_VARIANT="$(filter-out 
__default,$(variant))" $(if $(BUILD_LOG),SILENT= 2>&1 | tee 
$(BUILD_LOG_DIR)/$(1)/$(bd)/$(target).txt) $(if $(findstring 
$(bd),$($(1)/builddirs-ignore-$(target))), || $(call ERROR,$(1),   ERROR: $(1)/$(bd) failed to 
build$(if $(filter-out __default,$(variant)), (build variant: $(variant))).))
+                       $(if $(call debug,$(1)/$(bd),v),,@)+$(if $(BUILD_LOG),set -o pipefail;) 
$$(SUBMAKE) -r -C $(1)/$(bd) $(target) BUILD_VARIANT="$(filter-out 
__default,$(variant))" SRC_PKG_NAME=$(notdir /$(bd)) $(if $(BUILD_LOG),SILENT= 2>&1 
| tee $(BUILD_LOG_DIR)/$(1)/$(bd)/$(target).txt) $(if $(findstring 
$(bd),$($(1)/builddirs-ignore-$(target))), || $(call ERROR,$(1),   ERROR: $(1)/$(bd) failed to 
build$(if $(filter-out __default,$(variant)), (build variant: $(variant))).))
          )
        $(if $(PREREQ_ONLY)$(DUMP_TARGET_DB),,
          # aliases
diff --git a/include/toplevel.mk b/include/toplevel.mk
index d13a370..2eff39e 100644
--- a/include/toplevel.mk
+++ b/include/toplevel.mk
@@ -70,7 +70,7 @@ ULIMIT_FIX=_limit=`ulimit -n`; [ "$$_limit" = "unlimited" -o 
"$$_limit" -ge 1024
  prepare-mk: FORCE ;

  ifdef SDK
-  IGNORE_PACKAGES = linux
+  include $(TOPDIR)/ignore-packages.mk
  endif

  _ignore = $(foreach p,$(IGNORE_PACKAGES),--ignore $(p))
diff --git a/package/Makefile b/package/Makefile
index aa5d522..0b0c8d0 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
@@ -183,9 +184,16 @@ $(curdir)/preconfig:

  $(curdir)/flags-install:= -j1

+# If rebuilding all packages, clean out the record (for sdk) of built packages 
so
+# that it is guaranteed to not include packages which were built at some 
point, but
+# which are no longer part of the build.
+package/compile:
+       rm -f $(STAGING_DIR)/pkgstamp-current/*
+
  $(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/target/sdk/Makefile b/target/sdk/Makefile
index 4fec516..e2010a4 100644
--- a/target/sdk/Makefile
+++ b/target/sdk/Makefile
@@ -104,6 +104,8 @@ $(BIN_DIR)/$(SDK_NAME).tar.bz2: clean
                $(TOPDIR)/package/Makefile \
                $(SDK_BUILD_DIR)/package/

+       # Used to prevent altering compile options for already build packages
+       (echo -n "IGNORE_PACKAGES = "; cd $(STAGING_DIR)/pkgstamp-current && ls -A 
|tr $$'\n' ' ') >>$(SDK_BUILD_DIR)/ignore-packages.mk
        -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 \

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to