openwrt/scripts/gen_target_config.pl

201 lines
3.9 KiB
Perl
Executable File

#!/usr/bin/perl
#
# Copyright (C) 2006 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
use strict;
my @target;
my $target;
my $profiles;
my $profile;
sub features(@) {
my $ret;
while ($_ = shift @_) {
/broken/ and $ret .= "\tdepends BROKEN\n";
/pci/ and $ret .= "\tselect PCI_SUPPORT\n";
/usb/ and $ret .= "\tselect USB_SUPPORT\n";
/atm/ and $ret .= "\tselect ATM_SUPPORT\n";
/pcmcia/ and $ret .= "\tselect PCMCIA_SUPPORT\n";
/squashfs/ and $ret .= "\tselect USES_SQUASHFS\n";
/jffs2/ and $ret .= "\tselect USES_JFFS2\n";
/ext2/ and $ret .= "\tselect USES_EXT2\n";
}
return $ret;
}
while (<>) {
chomp;
/^Target:\s*((.+)-(\d+\.\d+))\s*$/ and do {
my $conf = uc $3.'_'.$2;
$conf =~ tr/\.-/__/;
$target = {
id => $1,
conf => $conf,
board => $2,
kernel => $3
};
$target->{kernel} =~ tr/\./_/;
push @target, $target;
};
/^Target-Name:\s*(.+)\s*$/ and $target->{name} = $1;
/^Target-Path:\s*(.+)\s*$/ and $target->{path} = $1;
/^Target-Arch:\s*(.+)\s*$/ and $target->{arch} = $1;
/^Target-Features:\s*(.+)\s*$/ and do {
my $f = [];
$target->{features} = $f;
@$f = split /\s+/, $1;
};
/^Target-Description:/ and do {
my $desc;
while (<>) {
last if /^@@/;
$desc .= $_;
}
$target->{desc} = $desc;
};
/^Linux-Version:\s*(.+)\s*$/ and $target->{version} = $1;
/^Linux-Release:\s*(.+)\s*$/ and $target->{release} = $1;
/^Linux-Kernel-Arch:\s*(.+)\s*$/ and $target->{karch} = $1;
/^Default-Packages:\s*(.+)\s*$/ and do {
my @pkgs = split /\s+/, $1;
$target->{defaultpkgs} = \@pkgs;
};
/^Target-Profile:\s*(.+)\s*$/ and do {
$profiles = $target->{profiles} or $target->{profiles} = $profiles = [];
$profile = {
id => $1
};
push @$profiles, $profile;
};
/^Target-Profile-Name:\s*(.+)\s*$/ and $profile->{name} = $1;
/^Target-Profile-Packages:\s*(.+)\s*$/ and do {
my @pkgs = split /\s+/, $1;
$profile->{pkgs} = \@pkgs;
};
}
@target = sort {
$a->{name} cmp $b->{name}
} @target;
print <<EOF;
choice
prompt "Target System"
default LINUX_2_4_BRCM
EOF
foreach $target (@target) {
my $features = features(@{$target->{features}});
my $help = $target->{desc};
chomp $features;
$features .= "\n";
if ($help =~ /\w+/) {
$help =~ s/^\s*/\t /mg;
$help = "\thelp\n$help";
} else {
undef $help;
}
print <<EOF
config LINUX_$target->{conf}
bool "$target->{name}"
select $target->{arch}
select LINUX_$target->{kernel}
$features$help
EOF
}
print <<EOF;
if DEVEL
config LINUX_2_6_ARM
bool "UNSUPPORTED little-endian arm platform"
depends BROKEN
select LINUX_2_6
select arm
config LINUX_2_6_CRIS
bool "UNSUPPORTED cris platform"
depends BROKEN
select LINUX_2_6
select cris
config LINUX_2_6_M68K
bool "UNSUPPORTED m68k platform"
depends BROKEN
select LINUX_2_6
select m68k
config LINUX_2_6_SH3
bool "UNSUPPORTED little-endian sh3 platform"
depends BROKEN
select LINUX_2_6
select sh3
config LINUX_2_6_SH3EB
bool "UNSUPPORTED big-endian sh3 platform"
depends BROKEN
select LINUX_2_6
select sh3eb
config LINUX_2_6_SH4
bool "UNSUPPORTED little-endian sh4 platform"
depends BROKEN
select LINUX_2_6
select sh4
config LINUX_2_6_SH4EB
bool "UNSUPPORTED big-endian sh4 platform"
depends BROKEN
select LINUX_2_6
select sh4eb
config LINUX_2_6_SPARC
bool "UNSUPPORTED sparc platform"
depends BROKEN
select LINUX_2_6
select sparc
endif
endchoice
choice
prompt "Target Profile"
EOF
foreach $target (@target) {
my $profiles;
$profiles = $target->{profiles} or $profiles = [
{
id => 'Default',
name => 'Default',
pkgs => []
}
];
foreach my $profile (@$profiles) {
print <<EOF;
config LINUX_$target->{conf}_$profile->{id}
bool "$profile->{name}"
depends LINUX_$target->{conf}
EOF
foreach my $pkg (@{$target->{defaultpkgs}}, @{$profile->{pkgs}}) {
print "\tselect DEFAULT_$pkg\n";
}
print "\n";
}
}
print "endchoice\n";