[OpenWrt-Devel] [PATCH 14/14] target/sdk: Allow building buildroot + kernel only SDK/IB

openwrt at daniel.thecshore.com openwrt at daniel.thecshore.com
Sun Jan 3 01:03:02 EST 2016


From: Daniel Dickinson <openwrt at daniel.thecshore.com>

In keeping with the theme of building a common base and branching
out we introduce the concept of a minimal SDK which is essentially
the build machinery plus the kernel and it's dependencies (e.g.
hostapd on which mac80211 depends, and usign on which package
signing depends).  The minimal package selection may be tailored
further (e.g. if one does not want to build all kernel modules)
via the usual means as the minimal SDK package selection is
done via defaults, not requirements.

The same build that builds the minimal SDK would be used to
build a non-standalone SDK (since by default with minimal SDK
not all packages required for a working image are built) which
can be used with repositories containing the packages built at
the various stages to create viable images.

Signed-off-by: Daniel Dickinson <openwrt at daniel.thecshore.com>
---
 config/Config-build.in      |  13 +++++
 config/Config-images.in     |  13 +++++
 include/target.mk           | 124 ++++++++++++++++++++++++++++++++++++++++++++
 scripts/metadata.pl         |  19 ++++++-
 scripts/metadata.pm         |   1 +
 target/convert-config.pl    |   3 ++
 target/sdk/Config-in-sdk.in |   4 ++
 7 files changed, 176 insertions(+), 1 deletion(-)

diff --git a/config/Config-build.in b/config/Config-build.in
index bf10922..46ac59a 100644
--- a/config/Config-build.in
+++ b/config/Config-build.in
@@ -8,12 +8,25 @@ menu "Global build settings"
 
 	config ALL_KMODS
 		bool "Select all kernel module packages by default"
+		default y if SDK_CORE
 		default ALL
 
 	config ALL
 		bool "Select all userspace packages by default"
 		default n
 
+	config NO_KMODS
+		bool "Deselect all kernel module packages by default"
+		default n
+		depends on !ALL_KMODS
+		depends on !SDK_CORE
+
+	config NONE
+		bool "Deselect all userspace packages by default"
+		default y if SDK_CORE
+		default n
+		depends on !ALL
+
 	config SIGNED_PACKAGES
 		bool "Cryptographically signed package lists"
 		default y
diff --git a/config/Config-images.in b/config/Config-images.in
index a60dd50..1731f94 100644
--- a/config/Config-images.in
+++ b/config/Config-images.in
@@ -8,6 +8,7 @@ menu "Target Images"
 
 	menuconfig TARGET_ROOTFS_INITRAMFS
 		bool "ramdisk"
+		default n if SDK_CORE
 		default y if USES_INITRAMFS
 		help
 		  Embed the root filesystem into the kernel (initramfs).
@@ -54,12 +55,14 @@ menu "Target Images"
 
 	config TARGET_ROOTFS_CPIOGZ
 		bool "cpio.gz"
+		default n if SDK_CORE
 		default y if USES_CPIOGZ
 		help
 		  Build a compressed cpio archive of the root filesystem.
 
 	config TARGET_ROOTFS_TARGZ
 		bool "tar.gz"
+		default n if SDK_CORE
 		default y if USES_TARGZ
 		help
 		  Build a compressed tar archive of the root filesystem.
@@ -68,6 +71,7 @@ menu "Target Images"
 
 	menuconfig TARGET_ROOTFS_EXT4FS
 		bool "ext4"
+		default n if SDK_CORE
 		default y if USES_EXT4
 		help
 		  Build an ext4 root filesystem.
@@ -119,6 +123,7 @@ menu "Target Images"
 
 	config TARGET_ROOTFS_ISO
 		bool "iso"
+		default n if SDK_CORE
 		default n
 		depends on TARGET_x86_generic
 		help
@@ -126,12 +131,14 @@ menu "Target Images"
 
 	config TARGET_ROOTFS_JFFS2
 		bool "jffs2"
+		default n if SDK_CORE
 		default y if USES_JFFS2
 		help
 		  Build a JFFS2 root filesystem.
 
 	config TARGET_ROOTFS_JFFS2_NAND
 		bool "jffs2 for NAND"
+		default n if SDK_CORE
 		default y if USES_JFFS2_NAND
 		depends on USES_JFFS2_NAND
 		help
@@ -139,6 +146,7 @@ menu "Target Images"
 
 	menuconfig TARGET_ROOTFS_SQUASHFS
 		bool "squashfs"
+		default n if SDK_CORE
 		default y if USES_SQUASHFS
 		help
 		  Build a squashfs-lzma root filesystem.
@@ -151,6 +159,7 @@ menu "Target Images"
 
 	menuconfig TARGET_ROOTFS_UBIFS
 		bool "ubifs"
+		default n if SDK_CORE
 		default y if USES_UBIFS
 		depends on USES_UBIFS
 		help
@@ -186,6 +195,7 @@ menu "Target Images"
 
 	config GRUB_IMAGES
 		bool "Build GRUB images (Linux x86 or x86_64 host only)"
+		default n if SDK_CORE
 		depends on TARGET_x86_64 || (TARGET_x86 && !TARGET_x86_rdc)
 		depends on TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_ISO || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS
 		select PACKAGE_grub2
@@ -226,6 +236,7 @@ menu "Target Images"
 
 	config VDI_IMAGES
 		bool "Build VirtualBox image files (VDI)"
+		default n if SDK_CORE
 		depends on TARGET_x86 || TARGET_x86_64
 		select GRUB_IMAGES
 		select TARGET_IMAGES_PAD
@@ -233,6 +244,7 @@ menu "Target Images"
 
 	config VMDK_IMAGES
 		bool "Build VMware image files (VMDK)"
+		default n if SDK_CORE
 		depends on TARGET_x86 || TARGET_x86_64
 		select GRUB_IMAGES
 		select TARGET_IMAGES_PAD
@@ -245,6 +257,7 @@ menu "Target Images"
 	config TARGET_IMAGES_GZIP
 		bool "GZip images"
 		depends on TARGET_IMAGES_PAD || TARGET_ROOTFS_EXT4FS
+		default n if SDK_CORE
 		default y
 
 	comment "Image Options"
diff --git a/include/target.mk b/include/target.mk
index f129298..30c02de 100644
--- a/include/target.mk
+++ b/include/target.mk
@@ -11,6 +11,129 @@ __target_inc=1
 # default device type
 DEVICE_TYPE?=router
 
+# Default packages when building SDK_CORE (minimal set of source packages
+# required by a 'build machinery plus all kernel module build', but do build
+# all packages of the same variant from dependency chain source packages
+# by default).  This approach is taken to avoid potentially conflicting packages,
+# which could be an issue with multiple builds of the same variant (e.g. due to
+# one binary package of the variant built for the SDK and another by the SDK in
+# a separate build).
+#   Hostapd source package is required by mac80211, ubus by hostapd, libubox
+#   by ubus, lua by ubus, libjson-c by libubox,
+#   usign is required for package signing, and wireless-tools is required by
+#   broadcom-wl and hostap-driver, toolchain by the toolchain, various firmware
+#   are required by kernel packages, iptables by netfilter kernel modules,
+#  and opkg by by build system, and signing-key is required for the signing key
+#
+# Note this is done one package per-line for both ease of editing
+# and because as one long line it exceed's git send-email's line
+# length limit.
+DEFAULT_SDK_CORE_PACKAGES:=\
+hostapd-common \
+hostadp-common-old \
+hostapd-mini \
+hostapd-utils \
+wpad-mini \
+wpa-supplicant-mini \
+wpa-cli \
+libubus \
+libubus-lua \
+ubus \
+ubusd \
+libubox \
+libblobmsg-json \
+jshn \
+libjson-script \
+libubox-lua \
+liblua \
+lua \
+luac \
+lua-examples \
+usign \
+wireless-tools \
+libiw \
+libgcc \
+libatomic \
+libssp \
+libstdcpp \
+libc \
+libpthread \
+libphtread-db \
+librt \
+libgfortran \
+ldd \
+ldconfig \
+glibc \
+musl \
+uClibc \
+wlc \
+wl \
+nas \
+om-watchdog \
+ltq-vdsl-vr9 \
+kmod-ltq-adsl-danube-fw-a \
+kmod-ltq-adsl-danube-fw-ba \
+kmod-ltq-adsl-ase-fw-a \
+kmod-ltq-adsl-ase-fw-b \
+kmod-ltq-adsl-ar9-fw-a \
+kmod-ltq-adsl-ar9-fw-b \
+ltq-vsdl-mei_test \
+ar3k-firmware \
+ibt-firmware \
+r8169-firmware \
+r8189eu-firmware \
+iptables \
+iptables-mod-conntrack-extra \
+iptables-mod-extra \
+iptables-mod-filter \
+iptables-mod-ipopt \
+iptables-mod-ipsec \
+iptables-mod-ipset \
+iptables-mod-nat-extra \
+iptables-mod-iprange \
+iptables-mod-cluster \
+iptables-mod-clusterip \
+iptables-mod-ulog \
+iptables-mod-hashlimit \
+iptables-mod-led \
+iptables-mod-tproxy \
+iptables-mod-tee \
+iptables-mod-u32 \
+iptables-mod-nflog \
+iptables-mod-nfqueue \
+ip6tables \
+ip6tables-extra \
+ip6tables-mod-nat \
+libiptc \
+libip4tc \
+libip6tc \
+libxtables \
+iptables-mod-compat-xtables \
+iptables-mod-nathelper-rtsp \
+iptables-mod-account \
+iptables-mod-chaos \
+iptables-mod-condition \
+iptables-mod-delude \
+iptables-mod-dhcpmac \
+iptables-mod-dnetmap \
+iptables-mod-fuzzy \
+iptables-mod-geoip \
+iptables-mod-iface \
+iptables-mod-ipmark \
+iptables-mod-ipp2p \
+iptables-mod-ipv4options \
+iptables-mod-length2 \
+iptables-mod-logmark \
+iptables-mod-lscan \
+iptables-mod-lua \
+iptables-mod-psd \
+iptables-mod-quota2 \
+iptables-mod-sysrq \
+iptables-mod-tarpit \
+iptaccount \
+opkg \
+signing-key
+
 # Default packages - the really basic set
 DEFAULT_PACKAGES:=base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools
 # For nas targets
@@ -290,6 +413,7 @@ define BuildTargets/DumpCurrent
 	 echo "$$$$DESCRIPTION"; \
 	 echo '@@'; \
 	 echo 'Default-Packages: $(DEFAULT_PACKAGES) $(call extra_packages,$(DEFAULT_PACKAGES))'; \
+         echo 'Default-SDK-Core-Packages: $(DEFAULT_SDK_CORE_PACKAGES)'; \
 	 $(DUMPINFO)
 	$(if $(SUBTARGET),,@$(foreach SUBTARGET,$(SUBTARGETS),$(SUBMAKE) -s DUMP=1 SUBTARGET=$(SUBTARGET); ))
 endef
diff --git a/scripts/metadata.pl b/scripts/metadata.pl
index 54341c4..a5d6abe 100755
--- a/scripts/metadata.pl
+++ b/scripts/metadata.pl
@@ -232,6 +232,7 @@ sub gen_target_config() {
 	my $file = shift @ARGV;
 	my @target = parse_target_metadata($file);
 	my %defaults;
+	my %sdk_core_defaults;
 
 	my @target_sort = sort {
 		target_name($a) cmp target_name($b);
@@ -295,6 +296,10 @@ EOF
 				print "\tselect DEFAULT_$pkg\n";
 				$defaults{$pkg} = 1;
 			}
+			foreach my $sdk_core_pkg (@{$target->{sdk_core_packages}}) {
+				print "\tselect DEFAULT_SDK_CORE_$sdk_core_pkg\n";
+				$sdk_core_defaults{$sdk_core_pkg} = 1;
+			}
 			my $help = $profile->{desc};
 			if ($help =~ /\w+/) {
 				$help =~ s/^\s*/\t  /mg;
@@ -365,6 +370,10 @@ EOF
 		print "\tconfig DEFAULT_".$def."\n";
 		print "\t\tbool\n\n";
 	}
+	foreach my $sdk_core_def (sort keys %sdk_core_defaults) {
+		print "\tconfig DEFAULT_SDK_CORE_".$sdk_core_def."\n";
+		print "\t\tbool\n\n";
+	}
 }
 
 my %dep_check;
@@ -543,12 +552,15 @@ sub print_package_config_category($) {
 			print "config PACKAGE_".$pkg->{name}."\n";
 			$pkg->{hidden} and $title = "";
 			print "\t\t".($pkg->{tristate} ? 'tristate' : 'bool')." $title\n";
-			print "\t\tdefault y if DEFAULT_".$pkg->{name}."\n";
+			print "\t\tdefault y if ( DEFAULT_SDK_CORE_".$pkg->{name}." && SDK_CORE ) \n";
+			print "\t\tdefault y if ( DEFAULT_".$pkg->{name}." && !SDK_CORE )\n";
 			unless ($pkg->{hidden}) {
 				if ($pkg->{name} =~ /^kmod-/) {
 					$pkg->{default} ||= "m if ALL_KMODS";
+					$pkg->{defaultno} ||= "n if NO_KMODS";
 				} else {
 					$pkg->{default} ||= "m if ALL";
+					$pkg->{defaultno} ||= "n if NONE";
 				}
 			}
 			if ($pkg->{default}) {
@@ -556,6 +568,11 @@ sub print_package_config_category($) {
 					print "\t\tdefault $default\n";
 				}
 			}
+			if ($pkg->{defaultno}) {
+				foreach my $default (split /\s*,\s*/, $pkg->{defaultno}) {
+					print "\t\tdefault $default\n";
+				}
+			}
 			print mconf_depends($pkg->{name}, $pkg->{depends}, 0);
 			print mconf_depends($pkg->{name}, $pkg->{mdepends}, 0);
 			print mconf_conflicts($pkg->{name}, $pkg->{conflicts});
diff --git a/scripts/metadata.pm b/scripts/metadata.pm
index 09273df..8d7defa 100644
--- a/scripts/metadata.pm
+++ b/scripts/metadata.pm
@@ -80,6 +80,7 @@ sub parse_target_metadata($) {
 		/^Linux-Kernel-Arch:\s*(.+)\s*$/ and $target->{karch} = $1;
 		/^Default-Subtarget:\s*(.+)\s*$/ and $target->{def_subtarget} = $1;
 		/^Default-Packages:\s*(.+)\s*$/ and $target->{packages} = [ split(/\s+/, $1) ];
+		/^Default-SDK-Core-Packages:\s*(.+)\s*$/ and $target->{sdk_core_packages} = [ split(/\s+/, $1) ];
 		/^Target-Profile:\s*(.+)\s*$/ and do {
 			$profile = {
 				id => $1,
diff --git a/target/convert-config.pl b/target/convert-config.pl
index e701b42..3bbc5fa 100755
--- a/target/convert-config.pl
+++ b/target/convert-config.pl
@@ -18,6 +18,9 @@ while (<>) {
 	my $type;
 
 	next if $var eq 'ALL';
+	next if $var eq 'ALL_KMODS';
+	next if $var eq 'NONE';
+	next if $var eq 'NO_KMODS';
 
 	if ($val eq 'y') {
 		$type = "bool";
diff --git a/target/sdk/Config-in-sdk.in b/target/sdk/Config-in-sdk.in
index 7ed95dc..cd33055 100644
--- a/target/sdk/Config-in-sdk.in
+++ b/target/sdk/Config-in-sdk.in
@@ -6,3 +6,7 @@ config SDK
 	  SDK plus the STAGING_DIR results of compiling packages
 	  selected for build.
 
+config SDK_CORE
+	bool
+	default n
+
-- 
2.4.3
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list