[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