From: Daniel Dickinson <[email protected]> This patch allows using and SDK to build additional packages to create a more complete SDK (e.g. you could start with a base system SDK and use it to create an SDK that has libraries from both base and packages feed). This allows for new workflows that build a common base and then branch in different directions depending on the type of system being build (e.g. router vs. NAS).
Signed-off-by: Daniel Dickinson <[email protected]> --- .gitignore | 3 +- config/Config-build.in | 2 ++ config/Config-version.in | 26 ++++++++--------- target/Makefile | 6 ++-- target/imagebuilder/Config.in | 1 + target/sdk/Config-in-sdk.in | 8 ++++++ target/sdk/Config.in | 20 +++++++++++++ target/sdk/Makefile | 67 +++++++++++++++++++++++++++++++++++++++---- target/sdk/files/Config.in | 20 +++++++++++-- target/sdk/files/Makefile | 10 +++++-- 10 files changed, 135 insertions(+), 28 deletions(-) create mode 100644 target/sdk/Config-in-sdk.in diff --git a/.gitignore b/.gitignore index cd86e34..eb85c1f 100644 --- a/.gitignore +++ b/.gitignore @@ -15,7 +15,8 @@ /files /package/feeds /package/openwrt-packages -key-build* +key-base* +key-sdk* *.orig *.rej *~ diff --git a/config/Config-build.in b/config/Config-build.in index 5867f53..bf10922 100644 --- a/config/Config-build.in +++ b/config/Config-build.in @@ -21,6 +21,8 @@ menu "Global build settings" config BUILD_KEY_TYPE string prompt "Name for build key with signed package lists" + default "base" if !IN_SDK + default "sdk" if IN_SDK depends on SIGNED_PACKAGES comment "General build options" diff --git a/config/Config-version.in b/config/Config-version.in index f995b92..e48afd9 100644 --- a/config/Config-version.in +++ b/config/Config-version.in @@ -96,18 +96,18 @@ if VERSIONOPT Enable this to include the version number in firmware image, SDK- and Image Builder archive file names - config VERSION_FLAVOUR - string - prompt "Release flavour" - help - This is an optional string that gets added to - output filenames and is part of the version id, - which identifies a 'flavour' of build (for example - for differentiating between SDK's/images build with - NAS vs router appropriate settings). - It is enabled by default when using the SDK - and building a second SDK (so filenames will - be distinct). - endif +config VERSION_FLAVOUR + string + prompt "Release flavour" if (VERSIONOPT || IN_SDK) + help + This is an optional string that gets added to + output filenames and is part of the version id, + which identifies a 'flavour' of build (for example + for differentiating between SDK's/images build with + NAS vs router appropriate settings). + It is enabled by default when using the SDK + and building a second SDK (so filenames will + be distinct). + diff --git a/target/Makefile b/target/Makefile index cb68454..420d87b 100644 --- a/target/Makefile +++ b/target/Makefile @@ -6,9 +6,9 @@ # curdir:=target -$(curdir)/builddirs:=linux sdk imagebuilder toolchain -$(curdir)/builddirs-default:=linux -$(curdir)/builddirs-install:=linux $(if $(CONFIG_SDK),sdk) $(if $(CONFIG_IB),imagebuilder) $(if $(CONFIG_MAKE_TOOLCHAIN),toolchain) +$(curdir)/builddirs:=$(if $(CONFIG_IN_SDK),,linux) sdk $(if $(CONFIG_IN_SDK),,imagebuilder toolchain) +$(curdir)/builddirs-default:=$(if $(CONFIG_IN_SDK),,linux) +$(curdir)/builddirs-install:=$(if $(CONFIG_IN_SDK),,linux) $(if $(CONFIG_SDK),sdk) $(if $(CONFIG_IN_SDK),,$(if $(CONFIG_IB),imagebuilder) $(if $(CONFIG_MAKE_TOOLCHAIN),toolchain)) $(curdir)/imagebuilder/install:=$(curdir)/linux/install diff --git a/target/imagebuilder/Config.in b/target/imagebuilder/Config.in index 9f50b46..af29411 100644 --- a/target/imagebuilder/Config.in +++ b/target/imagebuilder/Config.in @@ -9,6 +9,7 @@ config IB config IB_STANDALONE bool "Include package repositories" + default n if SDK_CORE default y depends on IB help diff --git a/target/sdk/Config-in-sdk.in b/target/sdk/Config-in-sdk.in new file mode 100644 index 0000000..7ed95dc --- /dev/null +++ b/target/sdk/Config-in-sdk.in @@ -0,0 +1,8 @@ +config SDK + bool "Build the OpenWrt SDK" + depends on !EXTERNAL_TOOLCHAIN || EXTERNAL_TOOLCHAIN_SDK + help + Build a second-stage SDK that contain everything in this + SDK plus the STAGING_DIR results of compiling packages + selected for build. + diff --git a/target/sdk/Config.in b/target/sdk/Config.in index 1a82149..52fb30a 100644 --- a/target/sdk/Config.in +++ b/target/sdk/Config.in @@ -6,4 +6,24 @@ config SDK with a precompiled toolchain. It can be used to develop and test packages for OpenWrt before including them in the buildroot +config SDK_CORE + bool "Build SDK with only Buildroot and Kernel" + depends on !EXTERNAL_TOOLCHAIN || EXTERNAL_TOOLCHAIN_SDK + depends on SDK + + help + This consists only the build machinery (e.g. toolchain), + kernel, and all packages from the source packages on which + the build machinery and toolchain depend (and likewise for + the full dependency chain). It is intended to be able build + all packages including base packages and the 'full' SDK (that + is an SDK with STAGING_DIR populated with the results of + InstallDev sections of packages in base), but this core SDK + only the dependency to satisfy itself; to be useful one must + build the dependencies for other packages (e.g. by taking this + SDK and adding the base feed and building what this SDK doesn't + provide (and that build can build the 'full' SDK). + All packages selected by default by this option come from + a source package on which there is a dependency from toolchain or + kernel being built. diff --git a/target/sdk/Makefile b/target/sdk/Makefile index 9b1c192..57c2c8a 100644 --- a/target/sdk/Makefile +++ b/target/sdk/Makefile @@ -66,7 +66,59 @@ KERNEL_FILES := $(patsubst $(TOPDIR)/%,%,$(wildcard $(addprefix $(LINUX_DIR)/,$( all: compile $(BIN_DIR)/$(SDK_NAME).tar.bz2: clean + rm -rf $(SDK_BUILD_DIR)/package mkdir -p $(SDK_BUILD_DIR)/dl $(SDK_BUILD_DIR)/package + # The package Makefile is always needed + rm -f $(SDK_BUILD_DIR)/package/Makefile + $(CP) \ + $(TOPDIR)/package/Makefile \ + $(SDK_BUILD_DIR)/package/ + # We want to always sign package builds unless deliberately turned off + # rm -f $(SDK_BUILD_DIR)/package/signing-key + $(CP) \ + $(TOPDIR)/package/signing-key \ + $(SDK_BUILD_DIR)/package/ + + # Busybox loooks in package subdir for Config.in files + # So let busybox work from SDK if present (e.g. via base feed) + # Note that the feed name must be base for this to work + # It would be non-trivial to genericize this + mkdir -p $(SDK_BUILD_DIR)/package/utils + rm -f $(SDK_BUILD_DIR)/package/utils/busybox + ln -s \ + ../../package/feeds/base/busybox \ + $(SDK_BUILD_DIR)/package/utils/busybox + + # Use placeholders for KConfig definitions not present in SDK (via conversion from + # .config to placeholders that maintain the current setting) + # Includes making sure signing key is used by default + mkdir -p $(SDK_BUILD_DIR)/config + $(TOPDIR)/target/convert-config.pl $(TOPDIR)/.config > $(SDK_BUILD_DIR)/config/fromdotconfig.in + # Mangle .config and suitable defaults for SDK + # Especially base kernel modules shouldn't be attempted to be rebuilt from SDK + case "$(BUILD_KEY_TYPE)" in \ + sdk*) SDKNUM="$$(echo "$(BUILD_KEY_TYPE)" | sed -e 's/sdk\(.*\)/\1/')" ; \ + if [ "$$SDKNUM" = "" ]; \ + then export SDKNUM=0; \ + fi; \ + export SDKNUM=$$((SDKNUM + 2)) ; \ + export NEXTSDKNUM=$$((SDKNUM + 1)) ; \ + ;; \ + *) export SDKNUM="" ; \ + export NEXTSDKNUM=2 ; \ + ;; \ + esac; \ + sed -e 's/CONFIG_SDK_CORE=y/# CONFIG_SDK_CORE is not set/' $(TOPDIR)/.config | \ + sed -e 's/CONFIG_SDK=y/# CONFIG_SDK is not set/' | \ + sed -e 's/CONFIG_ALL_KMODS=y/# CONFIG_ALL_KMODS is not set/' | \ + sed -e 's/^#\? *CONFIG_ALL\(=\| is\).*/CONFIG_ALL=y/' | \ + sed -e 's/CONFIG_BUILD_KEY_TYPE="base"/CONFIG_BUILD_KEY_TYPE="sdk"/' | \ + sed -e 's/CONFIG_IB=y/# CONFIG_IB is not set/' | \ + sed -e 's/CONFIG_MAKE_TOOLCHAIN=y/# CONFIG_MAKE_TOOLCHAIN is not set/' | \ + sed -e "s/CONFIG_VERSION_FLAVOUR=\"\\(Stage[0-9]*\\)\\?\"/CONFIG_VERSION_FLAVOUR=\"Stage$${NEXTSDKNUM}\"/" | \ + sed -e '$$a\CONFIG_IN_SDK=y' | \ + sed -e "s/CONFIG_BUILD_KEY_TYPE=\"sdk[0-9]*\"/CONFIG_BUILD_KEY_TYPE=\"sdk$${SDKNUM}\"/" | \ + sed -e "/CONFIG_PACKAGE_signing-key/a\\CONFIG_PACKAGE_signing-key-sdk$${SDKNUM}=m" >$(SDK_BUILD_DIR)/.config $(CP) $(INCLUDE_DIR) $(SCRIPT_DIR) $(TOPDIR)/docs $(SDK_BUILD_DIR)/ $(TAR) -cf - -C $(TOPDIR) \ $(foreach exclude,$(EXCLUDE_DIRS),--exclude="$(exclude)") \ @@ -92,23 +144,26 @@ $(BIN_DIR)/$(SDK_NAME).tar.bz2: clean rm -rf \ $(SDK_BUILD_DIR)/target/linux/*/files* \ $(SDK_BUILD_DIR)/target/linux/*/patches* - $(TOPDIR)/target/convert-config.pl $(TOPDIR)/.config > $(SDK_BUILD_DIR)/Config-build.in + mkdir -p $(SDK_BUILD_DIR)/target + $(CP) $(TOPDIR)/target/{sdk,Makefile,convert-config.pl} $(SDK_BUILD_DIR)/target/ $(CP) -L \ $(TOPDIR)/LICENSE \ $(TOPDIR)/rules.mk \ - $(TOPDIR)/.config \ + $(TOPDIR)/config \ ./files/Config.in \ ./files/Makefile \ ./files/include/prepare.mk \ ./files/README.SDK \ $(SDK_BUILD_DIR)/ - $(CP) \ - $(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 + # SDK from SDK should remember previous SDK's built packages + if [ -d $(TOPDIR)/pkgstamp ]; then \ + $(CP) \ + $(TOPDIR)/pkgstamp \ + $(SDK_BUILD_DIR)/; \ + fi -$(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) diff --git a/target/sdk/files/Config.in b/target/sdk/files/Config.in index 45f2faf..bce71f2 100644 --- a/target/sdk/files/Config.in +++ b/target/sdk/files/Config.in @@ -4,14 +4,28 @@ # See /LICENSE for more information. # +mainmenu "OpenWrt Configuration" + +source "config/fromdotconfig.in" + config MODULES + option modules bool default y - option modules -mainmenu "OpenWrt Configuration" +config HAVE_DOT_CONFIG + bool + default y + +config IN_SDK + bool + default y + +source "target/sdk/Config-in-sdk.in" + +source "config/Config-build.in" -source "Config-build.in" +source "config/Config-devel.in" source "config/Config-version.in" diff --git a/target/sdk/files/Makefile b/target/sdk/files/Makefile index 2edf7b3..86d309d 100644 --- a/target/sdk/files/Makefile +++ b/target/sdk/files/Makefile @@ -31,9 +31,15 @@ else include rules.mk include $(INCLUDE_DIR)/depends.mk include $(INCLUDE_DIR)/subdir.mk + include target/Makefile include package/Makefile -$(package/stamp-compile): $(BUILD_DIR)/.prepared +$(package/stamp-compile): $(BUILD_DIR)/.prepared $(target/stamp-cleanup) +$(package/stamp-markforsdk): $(package/stamp-compile) +$(package/stamp-install): $(package/stamp-compile) $(package/stamp-markforsdk) +$(target/stamp-compile): $(package/stamp-compile) $(package/stamp-markforsdk) +$(target/stamp-install): $(package/stamp-compile) $(package/stamp-markforsdk) $(target/stamp-compile) + $(BUILD_DIR)/.prepared: Makefile @mkdir -p $$(dirname $@) @touch $@ @@ -51,7 +57,7 @@ dirclean: clean # check prerequisites before starting to build prereq: $(package/stamp-prereq) ; -world: prepare $(package/stamp-compile) FORCE +world: prepare $(target/stamp-compile) $(package/stamp-compile) $(target/stamp-install) FORCE @$(MAKE) package/index .PHONY: clean dirclean prereq prepare world -- 2.4.3 _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
