[OpenWrt-Devel] [PATCH] build: reflect DEVICE_TYPE to top level config
Adrian Schmutzler
mail at adrianschmutzler.de
Thu Aug 6 17:29:08 EDT 2020
Hi,
> -----Original Message-----
> From: openwrt-devel [mailto:openwrt-devel-bounces at lists.openwrt.org]
> On Behalf Of Linus Walleij
> Sent: Freitag, 29. Mai 2020 14:21
> To: openwrt-devel at lists.openwrt.org
> Cc: Linus Walleij <linus.walleij at linaro.org>
> Subject: [OpenWrt-Devel] [PATCH] build: reflect DEVICE_TYPE to top level
> config
>
> I made a patch to select a tool inside busybox by default on NAS type boxes,
> but this does not properly work because the package and image build
> processes are cleanly separate entities.
>
> I also noticed that this becomes a problem if you build multiple profiles:
> maybe one of them is NAS and one of them is a router. You still want the
> least common denominator to decide: if you selected both NAS:es and
> routers, build packages that will be suitable for both NAS and routers.
>
> To achieve this I reflect the DEVICE_TYPE up to the Kconfig level and define
> two Kconfig symbols:
>
> config DEVICE_TYPE_ROUTER
> bool
>
> config DEVICE_TYPE_NAS
> bool
I just had a look at this again, and had a different idea:
You could exploit the "FEATURES" at the target/subtarget level, as e.g. done for small_flash:
E.g. at ath79/tiny "small_flash" is added to FEATURES:
https://github.com/openwrt/openwrt/blob/80c61c161ac5943137ade233d62cf89d746de5a2/target/linux/ath79/tiny/target.mk#L2
Then a config symbol SMALL_FLASH is defined:
https://github.com/openwrt/openwrt/blob/4a0f426ba5044af2fe45be8cc553f1580484883c/target/Config.in#L79
This CONFIG would be selected based on FEATURES in target_metadata.pl:
https://github.com/openwrt/openwrt/blob/e9f7923a1d4b327ef4b9ac25fbe197f2b4ea61d7/scripts/target-metadata.pl#L40
And then you could make other config symbols dependent on the config symbol, e.g.
https://github.com/openwrt/openwrt/blob/7f2b230b3b9d0a7fb758db3a9b1958845506a5a3/package/libs/openssl/Config.in#L19
This could essentially work the same way for a feature "nas". You could then either use CONFIG_NAS directly or, as in the last example, via dependencies. I think this would actually be the easiest way to get this working for switching stuff in packages.
Best
Adrian
>
> These will be set from the DEVICE_TYPE of each profile and it is possible to
> select both.
>
> I then modify the busybox config to take this into account and conditionally
> build hdparm for CONFIG_DEVICE_TYPE_NAS.
>
> Signed-off-by: Linus Walleij <linus.walleij at linaro.org>
> ---
> include/image.mk | 1 +
> include/target.mk | 1 +
> package/utils/busybox/Makefile | 2 +-
> scripts/metadata.pm | 2 ++
> scripts/target-metadata.pl | 12 ++++++++++++
> 5 files changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/include/image.mk b/include/image.mk index
> 984b64fb9c73..8104c040a1f7 100644
> --- a/include/image.mk
> +++ b/include/image.mk
> @@ -634,6 +634,7 @@ endef
> define Device/DumpInfo
> Target-Profile: DEVICE_$(1)
> Target-Profile-Name: $(DEVICE_DISPLAY)
> +Target-Profile-Devicetype: $(DEVICE_TYPE)
> Target-Profile-Packages: $(DEVICE_PACKAGES)
> Target-Profile-hasImageMetadata: $(if $(foreach
> image,$(IMAGES),$(findstring append-metadata,$(IMAGE/$(image)))),1,0)
> Target-Profile-SupportedDevices: $(SUPPORTED_DEVICES) diff --git
> a/include/target.mk b/include/target.mk index 9bd4c14936c1..e6f26cbfdf3d
> 100644
> --- a/include/target.mk
> +++ b/include/target.mk
> @@ -73,6 +73,7 @@ define Profile
> echo "Target-Profile: $(1)"; \
> $(if $(PRIORITY), echo "Target-Profile-Priority: $(PRIORITY)"; ) \
> echo "Target-Profile-Name: $(NAME)"; \
> + echo "Target-Profile-Devicetype: $(DEVICE_TYPE)"; \
> echo "Target-Profile-Packages: $(PACKAGES) $(call
> extra_packages,$(DEFAULT_PACKAGES) $(PACKAGES))"; \
> echo "Target-Profile-Description:"; \
> echo "$$$$$$$$$(call shvar,Profile/$(1)/Description)"; \ diff --git
> a/package/utils/busybox/Makefile b/package/utils/busybox/Makefile index
> 01441d1e87d1..f504117f60f3 100644
> --- a/package/utils/busybox/Makefile
> +++ b/package/utils/busybox/Makefile
> @@ -94,7 +94,7 @@ endif
> define Build/Configure
> rm -f $(PKG_BUILD_DIR)/.config
> touch $(PKG_BUILD_DIR)/.config
> -ifeq ($(DEVICE_TYPE),nas)
> +ifeq ($(CONFIG_DEVICE_TYPE_NAS),y)
> echo "CONFIG_HDPARM=y" >> $(PKG_BUILD_DIR)/.config endif
> grep 'CONFIG_BUSYBOX_$(BUSYBOX_SYM)' $(TOPDIR)/.config | sed
> -e "s,\\(#
> \)\\?CONFIG_BUSYBOX_$(BUSYBOX_SYM)_\\(.*\\),\\1CONFIG_\\2,g" >>
> $(PKG_BUILD_DIR)/.config diff --git a/scripts/metadata.pm
> b/scripts/metadata.pm index 1826a040a116..5062dba37ec0 100644
> --- a/scripts/metadata.pm
> +++ b/scripts/metadata.pm
> @@ -140,6 +140,7 @@ sub parse_target_metadata($) {
> $profile = {
> id => $1,
> name => $1,
> + device_type => "router",
> has_image_metadata => 0,
> supported_devices => [],
> priority => 999,
> @@ -150,6 +151,7 @@ sub parse_target_metadata($) {
> push @{$target->{profiles}}, $profile;
> };
> /^Target-Profile-Name:\s*(.+)\s*$/ and $profile->{name} =
> $1;
> + /^Target-Profile-Devicetype:\s*(.+)\s*$/ and $profile-
> >{device_type}
> += $1;
> /^Target-Profile-hasImageMetadata:\s*(\d+)\s*$/ and
> $profile->{has_image_metadata} = $1;
> /^Target-Profile-SupportedDevices:\s*(.+)\s*$/ and $profile-
> >{supported_devices} = [ split(/\s+/, $1) ];
> /^Target-Profile-Priority:\s*(\d+)\s*$/ and do { diff --git
> a/scripts/target-metadata.pl b/scripts/target-metadata.pl index
> ee0ab5a71811..fbd9fa70c08b 100755
> --- a/scripts/target-metadata.pl
> +++ b/scripts/target-metadata.pl
> @@ -244,6 +244,12 @@ EOF
> print "\tselect DEFAULT_$pkg\n";
> $defaults{$pkg} = 1;
> }
> + if ($profile->{device_type} =~ "router") {
> + print "\tselect DEVICE_TYPE_ROUTER\n";
> + }
> + if ($profile->{device_type} =~ "nas") {
> + print "\tselect DEVICE_TYPE_NAS\n";
> + }
> my $help = $profile->{desc};
> if ($help =~ /\w+/) {
> $help =~ s/^\s*/\t /mg;
> @@ -328,6 +334,12 @@ config HAS_SUBTARGETS config HAS_DEVICES
> bool
>
> +config DEVICE_TYPE_ROUTER
> + bool
> +
> +config DEVICE_TYPE_NAS
> + bool
> +
> config TARGET_BOARD
> string
>
> --
> 2.26.2
>
>
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel at lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: openpgp-digital-signature.asc
Type: application/pgp-signature
Size: 834 bytes
Desc: not available
URL: <http://lists.openwrt.org/pipermail/openwrt-devel/attachments/20200806/a575e745/attachment-0001.sig>
More information about the openwrt-devel
mailing list