From a9d683ca912b2c4837b2e65909c09ca01babe3df Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sat, 8 Sep 2007 19:55:42 +0000 Subject: major target cleanup. it is now possible to have subtargets that can override many target settings, including arch - merge adm5120, adm5120eb. target profiles still need to be adapted for subtargets SVN-Revision: 8694 --- scripts/config.pl | 148 ---------------------------------------------------- scripts/kconfig.pl | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++++ scripts/metadata.pl | 58 +++++--------------- 3 files changed, 161 insertions(+), 193 deletions(-) delete mode 100755 scripts/config.pl create mode 100755 scripts/kconfig.pl (limited to 'scripts') diff --git a/scripts/config.pl b/scripts/config.pl deleted file mode 100755 index 53b8f11025..0000000000 --- a/scripts/config.pl +++ /dev/null @@ -1,148 +0,0 @@ -#!/usr/bin/env perl -# -# Copyright (C) 2006 Felix Fietkau -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -use warnings; -use strict; - -my @arg = @ARGV; - -sub load_config($) { - my $file = shift; - my %config; - - open FILE, "$file" or die "can't open file"; - while () { - chomp; - /^CONFIG_(.+?)=(.+)/ and do { - $config{$1} = $2; - next; - }; - /^# CONFIG_(.+?) is not set/ and do { - $config{$1} = "#undef"; - next; - }; - /^#/ and next; - /^(.+)$/ and print "WARNING: can't parse line: $1\n"; - } - return \%config; -} - - -sub config_and($$) { - my $cfg1 = shift; - my $cfg2 = shift; - my %config; - - foreach my $config (keys %$cfg1) { - my $val1 = $cfg1->{$config}; - my $val2 = $cfg2->{$config}; - $val2 and ($val1 eq $val2) and do { - $config{$config} = $val1; - }; - } - return \%config; -} - - -sub config_add($$$) { - my $cfg1 = shift; - my $cfg2 = shift; - my $mod_plus = shift; - my %config; - - for ($cfg1, $cfg2) { - my %cfg = %$_; - - foreach my $config (keys %cfg) { - next if $mod_plus and $config{$config} and $config{$config} eq "y"; - $config{$config} = $cfg{$config}; - } - } - return \%config; -} - -sub config_diff($$) { - my $cfg1 = shift; - my $cfg2 = shift; - my %config; - - foreach my $config (keys %$cfg2) { - if (!$cfg1->{$config} or $cfg1->{$config} ne $cfg2->{$config}) { - $config{$config} = $cfg2->{$config}; - } - } - return \%config -} - -sub config_sub($$) { - my $cfg1 = shift; - my $cfg2 = shift; - my %config = %{$cfg1}; - - foreach my $config (keys %$cfg2) { - delete $config{$config}; - } - return \%config; -} - -sub print_cfgline($$) { - my $name = shift; - my $val = shift; - if ($val eq '#undef') { - print "# CONFIG_$name is not set\n"; - } else { - print "CONFIG_$name=$val\n"; - } -} - - -sub dump_config($) { - my $cfg = shift; - die "argument error in dump_config" unless ($cfg); - my %config = %$cfg; - foreach my $config (sort keys %config) { - print_cfgline($config, $config{$config}); - } -} - -sub parse_expr($); - -sub parse_expr($) { - my $pos = shift; - my $arg = $arg[$$pos++]; - - die "Parse error" if (!$arg); - - if ($arg eq '&') { - my $arg1 = parse_expr($pos); - my $arg2 = parse_expr($pos); - return config_and($arg1, $arg2); - } elsif ($arg =~ /^\+/) { - my $arg1 = parse_expr($pos); - my $arg2 = parse_expr($pos); - return config_add($arg1, $arg2, 0); - } elsif ($arg =~ /^m\+/) { - my $arg1 = parse_expr($pos); - my $arg2 = parse_expr($pos); - return config_add($arg1, $arg2, 1); - } elsif ($arg eq '>') { - my $arg1 = parse_expr($pos); - my $arg2 = parse_expr($pos); - return config_diff($arg1, $arg2); - } elsif ($arg eq '-') { - my $arg1 = parse_expr($pos); - my $arg2 = parse_expr($pos); - return config_sub($arg1, $arg2); - } else { - return load_config($arg); - } -} - -my $pos = 0; -dump_config(parse_expr(\$pos)); -die "Parse error" if ($arg[$pos]); diff --git a/scripts/kconfig.pl b/scripts/kconfig.pl new file mode 100755 index 0000000000..53b8f11025 --- /dev/null +++ b/scripts/kconfig.pl @@ -0,0 +1,148 @@ +#!/usr/bin/env perl +# +# Copyright (C) 2006 Felix Fietkau +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +use warnings; +use strict; + +my @arg = @ARGV; + +sub load_config($) { + my $file = shift; + my %config; + + open FILE, "$file" or die "can't open file"; + while () { + chomp; + /^CONFIG_(.+?)=(.+)/ and do { + $config{$1} = $2; + next; + }; + /^# CONFIG_(.+?) is not set/ and do { + $config{$1} = "#undef"; + next; + }; + /^#/ and next; + /^(.+)$/ and print "WARNING: can't parse line: $1\n"; + } + return \%config; +} + + +sub config_and($$) { + my $cfg1 = shift; + my $cfg2 = shift; + my %config; + + foreach my $config (keys %$cfg1) { + my $val1 = $cfg1->{$config}; + my $val2 = $cfg2->{$config}; + $val2 and ($val1 eq $val2) and do { + $config{$config} = $val1; + }; + } + return \%config; +} + + +sub config_add($$$) { + my $cfg1 = shift; + my $cfg2 = shift; + my $mod_plus = shift; + my %config; + + for ($cfg1, $cfg2) { + my %cfg = %$_; + + foreach my $config (keys %cfg) { + next if $mod_plus and $config{$config} and $config{$config} eq "y"; + $config{$config} = $cfg{$config}; + } + } + return \%config; +} + +sub config_diff($$) { + my $cfg1 = shift; + my $cfg2 = shift; + my %config; + + foreach my $config (keys %$cfg2) { + if (!$cfg1->{$config} or $cfg1->{$config} ne $cfg2->{$config}) { + $config{$config} = $cfg2->{$config}; + } + } + return \%config +} + +sub config_sub($$) { + my $cfg1 = shift; + my $cfg2 = shift; + my %config = %{$cfg1}; + + foreach my $config (keys %$cfg2) { + delete $config{$config}; + } + return \%config; +} + +sub print_cfgline($$) { + my $name = shift; + my $val = shift; + if ($val eq '#undef') { + print "# CONFIG_$name is not set\n"; + } else { + print "CONFIG_$name=$val\n"; + } +} + + +sub dump_config($) { + my $cfg = shift; + die "argument error in dump_config" unless ($cfg); + my %config = %$cfg; + foreach my $config (sort keys %config) { + print_cfgline($config, $config{$config}); + } +} + +sub parse_expr($); + +sub parse_expr($) { + my $pos = shift; + my $arg = $arg[$$pos++]; + + die "Parse error" if (!$arg); + + if ($arg eq '&') { + my $arg1 = parse_expr($pos); + my $arg2 = parse_expr($pos); + return config_and($arg1, $arg2); + } elsif ($arg =~ /^\+/) { + my $arg1 = parse_expr($pos); + my $arg2 = parse_expr($pos); + return config_add($arg1, $arg2, 0); + } elsif ($arg =~ /^m\+/) { + my $arg1 = parse_expr($pos); + my $arg2 = parse_expr($pos); + return config_add($arg1, $arg2, 1); + } elsif ($arg eq '>') { + my $arg1 = parse_expr($pos); + my $arg2 = parse_expr($pos); + return config_diff($arg1, $arg2); + } elsif ($arg eq '-') { + my $arg1 = parse_expr($pos); + my $arg2 = parse_expr($pos); + return config_sub($arg1, $arg2); + } else { + return load_config($arg); + } +} + +my $pos = 0; +dump_config(parse_expr(\$pos)); +die "Parse error" if ($arg[$pos]); diff --git a/scripts/metadata.pl b/scripts/metadata.pl index fe135418ca..2fcbf82dfa 100755 --- a/scripts/metadata.pl +++ b/scripts/metadata.pl @@ -23,15 +23,16 @@ sub parse_target_metadata() { while (<>) { chomp; /^Target:\s*(.+)\s*$/ and do { - my $conf = uc $1; - $conf =~ tr/\.-/__/; + my $conf = $1; + $conf =~ tr#/\.\-/#___#; $target = { + id => $1, conf => $conf, - board => $1, profiles => [] }; push @target, $target; }; + /^Target-Board:\s*(.+)\s*$/ and $target->{board} = $1; /^Target-Kernel:\s*(\d+\.\d+)\s*$/ and $target->{kernel} = $1; /^Target-Name:\s*(.+)\s*$/ and $target->{name} = $1; /^Target-Path:\s*(.+)\s*$/ and $target->{path} = $1; @@ -198,45 +199,6 @@ sub merge_package_lists($$) { return sort(@l); } -sub gen_target_mk() { - my @target = parse_target_metadata(); - - @target = sort { - $a->{board} cmp $b->{board} - } @target; - - foreach my $target (@target) { - my ($profiles_def, $profiles_eval); - - foreach my $profile (@{$target->{profiles}}) { - $profiles_def .= " - define Profile/$target->{conf}\_$profile->{id} - ID:=$profile->{id} - NAME:=$profile->{name} - PACKAGES:=".join(" ", merge_package_lists($target->{packages}, $profile->{packages}))."\n"; - $profile->{kconfig} and $profiles_def .= " KCONFIG:=1\n"; - $profiles_def .= " endef"; - $profiles_eval .= " -\$(eval \$(call AddProfile,$target->{conf}\_$profile->{id}))" - } - print " -ifeq (\$(CONFIG_TARGET_$target->{conf}),y) - define Target - KERNEL:=$target->{kernel} - BOARD:=$target->{board} - BOARDNAME:=$target->{name} - LINUX_VERSION:=$target->{version} - LINUX_RELEASE:=$target->{release} - LINUX_KARCH:=$target->{karch} - DEFAULT_PACKAGES:=".join(" ", @{$target->{packages}})." - endef$profiles_def -endif$profiles_eval - -" - } - print "\$(eval \$(call Target))\n"; -} - sub target_config_features(@) { my $ret; @@ -265,7 +227,7 @@ sub gen_target_config() { print <{board}."\" if TARGET_".$target->{conf}."\n"; + } + print <