From 9ae952cf8cf2f0d7df95434c8b16d13bc1b47fca Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sun, 22 May 2016 21:31:37 +0200 Subject: [PATCH] build: split scripts/metadata.pl into target-metadata.pl and package-metadata.pl Signed-off-by: Felix Fietkau --- include/kernel-defaults.mk | 2 +- include/kernel.mk | 2 +- include/toplevel.mk | 6 +- scripts/{metadata.pl => package-metadata.pl} | 336 +------------------ scripts/target-metadata.pl | 329 ++++++++++++++++++ target/imagebuilder/files/Makefile | 2 +- 6 files changed, 348 insertions(+), 329 deletions(-) rename scripts/{metadata.pl => package-metadata.pl} (65%) create mode 100755 scripts/target-metadata.pl diff --git a/include/kernel-defaults.mk b/include/kernel-defaults.mk index 406fd46343..3679daeb84 100644 --- a/include/kernel-defaults.mk +++ b/include/kernel-defaults.mk @@ -111,7 +111,7 @@ define Kernel/Configure/Default echo "# CONFIG_KALLSYMS_EXTRA_PASS is not set" >> $(LINUX_DIR)/.config.target echo "# CONFIG_KALLSYMS_ALL is not set" >> $(LINUX_DIR)/.config.target echo "CONFIG_KALLSYMS_UNCOMPRESSED=y" >> $(LINUX_DIR)/.config.target - $(SCRIPT_DIR)/metadata.pl kconfig $(TMP_DIR)/.packageinfo $(TOPDIR)/.config $(KERNEL_PATCHVER) > $(LINUX_DIR)/.config.override + $(SCRIPT_DIR)/package-metadata.pl kconfig $(TMP_DIR)/.packageinfo $(TOPDIR)/.config $(KERNEL_PATCHVER) > $(LINUX_DIR)/.config.override $(SCRIPT_DIR)/kconfig.pl 'm+' '+' $(LINUX_DIR)/.config.target /dev/null $(LINUX_DIR)/.config.override > $(LINUX_DIR)/.config.set $(call Kernel/SetNoInitramfs) rm -rf $(KERNEL_BUILD_DIR)/modules diff --git a/include/kernel.mk b/include/kernel.mk index 2b87aeba33..8ce4df8f2d 100644 --- a/include/kernel.mk +++ b/include/kernel.mk @@ -215,7 +215,7 @@ $(call KernelPackage/$(1)/config) $$(IPKG_kmod-$(1)): $$(wildcard $$(FILES)) endef -version_filter=$(if $(findstring @,$(1)),$(shell $(SCRIPT_DIR)/metadata.pl version_filter $(KERNEL_PATCHVER) $(1)),$(1)) +version_filter=$(if $(findstring @,$(1)),$(shell $(SCRIPT_DIR)/package-metadata.pl version_filter $(KERNEL_PATCHVER) $(1)),$(1)) define AutoLoad add_module "$(1)" "$(call version_filter,$(2))" "$(3)"; diff --git a/include/toplevel.mk b/include/toplevel.mk index e00a24ab6a..581083d912 100644 --- a/include/toplevel.mk +++ b/include/toplevel.mk @@ -81,11 +81,11 @@ prepare-tmpinfo: FORCE $(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f include/scan.mk SCAN_TARGET="targetinfo" SCAN_DIR="target/linux" SCAN_NAME="target" SCAN_DEPS="image/Makefile profiles/*.mk $(TOPDIR)/include/kernel*.mk $(TOPDIR)/include/target.mk" SCAN_DEPTH=2 SCAN_EXTRA="" SCAN_MAKEOPTS="TARGET_BUILD=1" for type in package target; do \ f=tmp/.$${type}info; t=tmp/.config-$${type}.in; \ - [ "$$t" -nt "$$f" ] || ./scripts/metadata.pl $(_ignore) $${type}_config "$$f" > "$$t" || { rm -f "$$t"; echo "Failed to build $$t"; false; break; }; \ + [ "$$t" -nt "$$f" ] || ./scripts/$${type}-metadata.pl $(_ignore) config "$$f" > "$$t" || { rm -f "$$t"; echo "Failed to build $$t"; false; break; }; \ done [ tmp/.config-feeds.in -nt tmp/.packagesubdirs ] || ./scripts/feeds feed_config > tmp/.config-feeds.in - ./scripts/metadata.pl package_mk tmp/.packageinfo > tmp/.packagedeps || { rm -f tmp/.packagedeps; false; } - ./scripts/metadata.pl package_subdirs tmp/.packageinfo > tmp/.packagesubdirs || { rm -f tmp/.packagesubdirs; false; } + ./scripts/package-metadata.pl mk tmp/.packageinfo > tmp/.packagedeps || { rm -f tmp/.packagedeps; false; } + ./scripts/package-metadata.pl subdirs tmp/.packageinfo > tmp/.packagesubdirs || { rm -f tmp/.packagesubdirs; false; } touch $(TOPDIR)/tmp/.build .config: ./scripts/config/conf $(if $(CONFIG_HAVE_DOT_CONFIG),,prepare-tmpinfo) diff --git a/scripts/metadata.pl b/scripts/package-metadata.pl similarity index 65% rename from scripts/metadata.pl rename to scripts/package-metadata.pl index 822382cd6c..92c989d3a2 100755 --- a/scripts/metadata.pl +++ b/scripts/package-metadata.pl @@ -97,298 +97,6 @@ sub gen_kconfig_overrides() { } } -sub merge_package_lists($$) { - my $list1 = shift; - my $list2 = shift; - my @l = (); - my %pkgs; - - foreach my $pkg (@$list1, @$list2) { - $pkgs{$pkg} = 1; - } - foreach my $pkg (keys %pkgs) { - push @l, $pkg unless ($pkg =~ /^-/ or $pkgs{"-$pkg"}); - } - return sort(@l); -} - -sub target_config_features(@) { - my $ret; - - while ($_ = shift @_) { - /arm_v(\w+)/ and $ret .= "\tselect arm_v$1\n"; - /broken/ and $ret .= "\tdepends on BROKEN\n"; - /audio/ and $ret .= "\tselect AUDIO_SUPPORT\n"; - /display/ and $ret .= "\tselect DISPLAY_SUPPORT\n"; - /dt/ and $ret .= "\tselect USES_DEVICETREE\n"; - /gpio/ and $ret .= "\tselect GPIO_SUPPORT\n"; - /pci/ and $ret .= "\tselect PCI_SUPPORT\n"; - /pcie/ and $ret .= "\tselect PCIE_SUPPORT\n"; - /usb/ and $ret .= "\tselect USB_SUPPORT\n"; - /usbgadget/ and $ret .= "\tselect USB_GADGET_SUPPORT\n"; - /pcmcia/ and $ret .= "\tselect PCMCIA_SUPPORT\n"; - /rtc/ and $ret .= "\tselect RTC_SUPPORT\n"; - /squashfs/ and $ret .= "\tselect USES_SQUASHFS\n"; - /jffs2$/ and $ret .= "\tselect USES_JFFS2\n"; - /jffs2_nand/ and $ret .= "\tselect USES_JFFS2_NAND\n"; - /ext4/ and $ret .= "\tselect USES_EXT4\n"; - /targz/ and $ret .= "\tselect USES_TARGZ\n"; - /cpiogz/ and $ret .= "\tselect USES_CPIOGZ\n"; - /ubifs/ and $ret .= "\tselect USES_UBIFS\n"; - /fpu/ and $ret .= "\tselect HAS_FPU\n"; - /spe_fpu/ and $ret .= "\tselect HAS_SPE_FPU\n"; - /ramdisk/ and $ret .= "\tselect USES_INITRAMFS\n"; - /powerpc64/ and $ret .= "\tselect powerpc64\n"; - /nommu/ and $ret .= "\tselect NOMMU\n"; - /mips16/ and $ret .= "\tselect HAS_MIPS16\n"; - /rfkill/ and $ret .= "\tselect RFKILL_SUPPORT\n"; - /low_mem/ and $ret .= "\tselect LOW_MEMORY_FOOTPRINT\n"; - /nand/ and $ret .= "\tselect NAND_SUPPORT\n"; - } - return $ret; -} - -sub target_name($) { - my $target = shift; - my $parent = $target->{parent}; - if ($parent) { - return $target->{parent}->{name}." - ".$target->{name}; - } else { - return $target->{name}; - } -} - -sub kver($) { - my $v = shift; - $v =~ tr/\./_/; - if (substr($v,0,2) eq "2_") { - $v =~ /(\d+_\d+_\d+)(_\d+)?/ and $v = $1; - } else { - $v =~ /(\d+_\d+)(_\d+)?/ and $v = $1; - } - return $v; -} - -sub print_target($) { - my $target = shift; - my $features = target_config_features(@{$target->{features}}); - my $help = $target->{desc}; - my $confstr; - - chomp $features; - $features .= "\n"; - if ($help =~ /\w+/) { - $help =~ s/^\s*/\t /mg; - $help = "\thelp\n$help"; - } else { - undef $help; - } - - my $v = kver($target->{version}); - if (@{$target->{subtargets}} == 0) { - $confstr = <{conf} - bool "$target->{name}" - select LINUX_$v -EOF - } - else { - $confstr = <{conf} - bool "$target->{name}" -EOF - } - if ($target->{subtarget}) { - $confstr .= "\tdepends on TARGET_$target->{boardconf}\n"; - } - if (@{$target->{subtargets}} > 0) { - $confstr .= "\tselect HAS_SUBTARGETS\n"; - grep { /broken/ } @{$target->{features}} and $confstr .= "\tdepends on BROKEN\n"; - } else { - $confstr .= $features; - if ($target->{arch} =~ /\w/) { - $confstr .= "\tselect $target->{arch}\n"; - } - } - - foreach my $dep (@{$target->{depends}}) { - my $mode = "depends on"; - my $flags; - my $name; - - $dep =~ /^([@\+\-]+)(.+)$/; - $flags = $1; - $name = $2; - - next if $name =~ /:/; - $flags =~ /-/ and $mode = "deselect"; - $flags =~ /\+/ and $mode = "select"; - $flags =~ /@/ and $confstr .= "\t$mode $name\n"; - } - $confstr .= "$help\n\n"; - print $confstr; -} - -sub gen_target_config() { - my $file = shift @ARGV; - my @target = parse_target_metadata($file); - my %defaults; - - my @target_sort = sort { - target_name($a) cmp target_name($b); - } @target; - - - print <{subtarget}; - print_target($target); - } - - print <{def_subtarget}; - print <{conf}_$target->{def_subtarget} if TARGET_$target->{conf} -EOF - } - print <{subtarget}; - print_target($target); - } - -print <{profiles}; - foreach my $profile (@{$target->{profiles}}) { - print <{conf}_$profile->{id} - bool "$profile->{name}" - depends on TARGET_$target->{conf} -EOF - my @pkglist = merge_package_lists($target->{packages}, $profile->{packages}); - foreach my $pkg (@pkglist) { - print "\tselect DEFAULT_$pkg\n"; - $defaults{$pkg} = 1; - } - my $help = $profile->{desc}; - if ($help =~ /\w+/) { - $help =~ s/^\s*/\t /mg; - $help = "\thelp\n$help"; - } else { - undef $help; - } - print "$help\n"; - } - } - - print <{subtarget} or print "\t\tdefault \"".$target->{board}."\" if TARGET_".$target->{conf}."\n"; - } - print <{subtargets}}) { - print "\t\tdefault \"$subtarget\" if TARGET_".$target->{conf}."_$subtarget\n"; - } - } - print <{profiles}; - foreach my $profile (@$profiles) { - print "\tdefault \"$profile->{id}\" if TARGET_$target->{conf}_$profile->{id}\n"; - } - } - - print <{subtargets}} > 0; - print "\t\tdefault \"".($target->{arch_packages} || $target->{board})."\" if TARGET_".$target->{conf}."\n"; - } - print <{subtargets}} > 0; - print "\tdefault \"".$target->{cflags}."\" if TARGET_".$target->{conf}."\n"; - } - print "\tdefault \"-Os -pipe -funit-at-a-time\"\n"; - print <{subtargets}} > 0; - print "\tdefault \"".$target->{cputype}."\" if TARGET_".$target->{conf}."\n"; - } - print "\tdefault \"\"\n"; - - my %kver; - foreach my $target (@target) { - my $v = kver($target->{version}); - next if $kver{$v}; - $kver{$v} = 1; - print <{id} eq $target; - print "PROFILE_NAMES = ".join(" ", map { $_->{id} } @{$cur->{profiles}})."\n"; - foreach my $profile (@{$cur->{profiles}}) { - print $profile->{id}.'_NAME:='.$profile->{name}."\n"; - print $profile->{id}.'_PACKAGES:='.join(' ', @{$profile->{packages}})."\n"; - } - } -} - sub parse_command() { GetOptions("ignore=s", \@ignore); my $cmd = shift @ARGV; for ($cmd) { - /^target_config$/ and return gen_target_config(); - /^profile_mk$/ and return gen_profile_mk(); - /^package_mk$/ and return gen_package_mk(); - /^package_config$/ and return gen_package_config(); + /^mk$/ and return gen_package_mk(); + /^config$/ and return gen_package_config(); /^kconfig/ and return gen_kconfig_overrides(); - /^package_source$/ and return gen_package_source(); - /^package_subdirs$/ and return gen_package_subdirs(); - /^package_license$/ and return gen_package_license(0); - /^package_licensefull$/ and return gen_package_license(1); + /^source$/ and return gen_package_source(); + /^subdirs$/ and return gen_package_subdirs(); + /^license$/ and return gen_package_license(0); + /^licensefull$/ and return gen_package_license(1); /^version_filter$/ and return gen_version_filtered_list(); } - print <{parent}; + if ($parent) { + return $target->{parent}->{name}." - ".$target->{name}; + } else { + return $target->{name}; + } +} + +sub kver($) { + my $v = shift; + $v =~ tr/\./_/; + if (substr($v,0,2) eq "2_") { + $v =~ /(\d+_\d+_\d+)(_\d+)?/ and $v = $1; + } else { + $v =~ /(\d+_\d+)(_\d+)?/ and $v = $1; + } + return $v; +} + +sub print_target($) { + my $target = shift; + my $features = target_config_features(@{$target->{features}}); + my $help = $target->{desc}; + my $confstr; + + chomp $features; + $features .= "\n"; + if ($help =~ /\w+/) { + $help =~ s/^\s*/\t /mg; + $help = "\thelp\n$help"; + } else { + undef $help; + } + + my $v = kver($target->{version}); + if (@{$target->{subtargets}} == 0) { + $confstr = <{conf} + bool "$target->{name}" + select LINUX_$v +EOF + } + else { + $confstr = <{conf} + bool "$target->{name}" +EOF + } + if ($target->{subtarget}) { + $confstr .= "\tdepends on TARGET_$target->{boardconf}\n"; + } + if (@{$target->{subtargets}} > 0) { + $confstr .= "\tselect HAS_SUBTARGETS\n"; + grep { /broken/ } @{$target->{features}} and $confstr .= "\tdepends on BROKEN\n"; + } else { + $confstr .= $features; + if ($target->{arch} =~ /\w/) { + $confstr .= "\tselect $target->{arch}\n"; + } + } + + foreach my $dep (@{$target->{depends}}) { + my $mode = "depends on"; + my $flags; + my $name; + + $dep =~ /^([@\+\-]+)(.+)$/; + $flags = $1; + $name = $2; + + next if $name =~ /:/; + $flags =~ /-/ and $mode = "deselect"; + $flags =~ /\+/ and $mode = "select"; + $flags =~ /@/ and $confstr .= "\t$mode $name\n"; + } + $confstr .= "$help\n\n"; + print $confstr; +} + +sub merge_package_lists($$) { + my $list1 = shift; + my $list2 = shift; + my @l = (); + my %pkgs; + + foreach my $pkg (@$list1, @$list2) { + $pkgs{$pkg} = 1; + } + foreach my $pkg (keys %pkgs) { + push @l, $pkg unless ($pkg =~ /^-/ or $pkgs{"-$pkg"}); + } + return sort(@l); +} + +sub gen_target_config() { + my $file = shift @ARGV; + my @target = parse_target_metadata($file); + my %defaults; + + my @target_sort = sort { + target_name($a) cmp target_name($b); + } @target; + + + print <{subtarget}; + print_target($target); + } + + print <{def_subtarget}; + print <{conf}_$target->{def_subtarget} if TARGET_$target->{conf} +EOF + } + print <{subtarget}; + print_target($target); + } + +print <{profiles}; + foreach my $profile (@{$target->{profiles}}) { + print <{conf}_$profile->{id} + bool "$profile->{name}" + depends on TARGET_$target->{conf} +EOF + my @pkglist = merge_package_lists($target->{packages}, $profile->{packages}); + foreach my $pkg (@pkglist) { + print "\tselect DEFAULT_$pkg\n"; + $defaults{$pkg} = 1; + } + my $help = $profile->{desc}; + if ($help =~ /\w+/) { + $help =~ s/^\s*/\t /mg; + $help = "\thelp\n$help"; + } else { + undef $help; + } + print "$help\n"; + } + } + + print <{subtarget} or print "\t\tdefault \"".$target->{board}."\" if TARGET_".$target->{conf}."\n"; + } + print <{subtargets}}) { + print "\t\tdefault \"$subtarget\" if TARGET_".$target->{conf}."_$subtarget\n"; + } + } + print <{profiles}; + foreach my $profile (@$profiles) { + print "\tdefault \"$profile->{id}\" if TARGET_$target->{conf}_$profile->{id}\n"; + } + } + + print <{subtargets}} > 0; + print "\t\tdefault \"".($target->{arch_packages} || $target->{board})."\" if TARGET_".$target->{conf}."\n"; + } + print <{subtargets}} > 0; + print "\tdefault \"".$target->{cflags}."\" if TARGET_".$target->{conf}."\n"; + } + print "\tdefault \"-Os -pipe -funit-at-a-time\"\n"; + print <{subtargets}} > 0; + print "\tdefault \"".$target->{cputype}."\" if TARGET_".$target->{conf}."\n"; + } + print "\tdefault \"\"\n"; + + my %kver; + foreach my $target (@target) { + my $v = kver($target->{version}); + next if $kver{$v}; + $kver{$v} = 1; + print <{id} eq $target; + print "PROFILE_NAMES = ".join(" ", map { $_->{id} } @{$cur->{profiles}})."\n"; + foreach my $profile (@{$cur->{profiles}}) { + print $profile->{id}.'_NAME:='.$profile->{name}."\n"; + print $profile->{id}.'_PACKAGES:='.join(' ', @{$profile->{packages}})."\n"; + } + } +} + +sub parse_command() { + GetOptions("ignore=s", \@ignore); + my $cmd = shift @ARGV; + for ($cmd) { + /^config$/ and return gen_target_config(); + /^profile_mk$/ and return gen_profile_mk(); + } + die < $@ + $(SCRIPT_DIR)/target-metadata.pl profile_mk $< '$(BOARD)$(if $(SUBTARGET),/$(SUBTARGET))' > $@ staging_dir/host/.prereq-build: include/prereq-build.mk mkdir -p tmp -- 2.30.2