diff --git a/include/target.mk b/include/target.mk index 011992b82..9156789c8 100644 --- a/include/target.mk +++ b/include/target.mk @@ -23,15 +23,6 @@ endif TARGETID:=$(BOARD)$(if $(SUBTARGET),/$(SUBTARGET)) PLATFORM_SUBDIR:=$(PLATFORM_DIR)$(if $(SUBTARGET),/$(SUBTARGET)) -define Target - KERNEL_TARGETS+=$(1) - ifeq ($(DUMP),1) - ifeq ($(SUBTARGET),) - BuildTarget=$$(BuildTargets/DumpAll) - endif - endif -endef - ifneq ($(TARGET_BUILD),1) include $(PLATFORM_DIR)/Makefile ifneq ($(PLATFORM_DIR),$(PLATFORM_SUBDIR)) @@ -132,18 +123,13 @@ ifeq ($(DUMP),1) endif endif -define BuildTargets/DumpAll - dumpinfo: - @$(foreach SUBTARGET,$(KERNEL_TARGETS),$(SUBMAKE) -s DUMP=1 SUBTARGET=$(SUBTARGET); ) -endef - define BuildTargets/DumpCurrent - + .PHONY: dumpinfo dumpinfo: @echo 'Target: $(TARGETID)'; \ echo 'Target-Board: $(BOARD)'; \ echo 'Target-Kernel: $(KERNEL)'; \ - echo 'Target-Name: $(BOARDNAME) [$(KERNEL)]'; \ + echo 'Target-Name: $(BOARDNAME)$(if $(SUBTARGET),, [$(KERNEL)])'; \ echo 'Target-Path: $(subst $(TOPDIR)/,,$(PWD))'; \ echo 'Target-Arch: $(ARCH)'; \ echo 'Target-Features: $(FEATURES)'; \ @@ -156,6 +142,7 @@ define BuildTargets/DumpCurrent echo '@@'; \ echo 'Default-Packages: $(DEFAULT_PACKAGES)'; \ $(DUMPINFO) + $(if $(SUBTARGET),,@$(foreach SUBTARGET,$(SUBTARGETS),$(SUBMAKE) -s DUMP=1 SUBTARGET=$(SUBTARGET); )) endef include $(INCLUDE_DIR)/kernel.mk diff --git a/scripts/metadata.pl b/scripts/metadata.pl index 4fa7be041..7b3b74b3c 100755 --- a/scripts/metadata.pl +++ b/scripts/metadata.pl @@ -15,6 +15,8 @@ sub confstr($) { sub parse_target_metadata() { my $file = shift @ARGV; my ($target, @target, $profile); + my %target; + open FILE, "<$file" or do { warn "Can't open file '$file': $!\n"; return; @@ -22,18 +24,26 @@ sub parse_target_metadata() { while () { chomp; /^Target:\s*(.+)\s*$/ and do { + my $name = $1; $target = { - id => $1, - conf => confstr($1), + id => $name, + board => $name, + boardconf => confstr($name), + conf => confstr($name), profiles => [], features => [], - depends => [] + depends => [], + subtargets => [] }; push @target, $target; - }; - /^Target-Board:\s*(.+)\s*$/ and do { - $target->{board} = $1; - $target->{boardconf} = confstr($1); + $target{$name} = $target; + if ($name =~ /([^\/]+)\/([^\/]+)/) { + push @{$target{$1}->{subtargets}}, $2; + $target->{board} = $1; + $target->{boardconf} = confstr($1); + $target->{subtarget} = 1; + $target->{parent} = $target{$1}; + } }; /^Target-Kernel:\s*(\d+\.\d+)\s*$/ and $target->{kernel} = $1; /^Target-Name:\s*(.+)\s*$/ and $target->{name} = $1; @@ -151,47 +161,45 @@ sub target_config_features(@) { 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 gen_target_config() { - my @target = parse_target_metadata(); +sub print_target($) { + my $target = shift; + my $features = target_config_features(@{$target->{features}}); + my $help = $target->{desc}; + my $kernel = $target->{kernel}; + my $confstr; + $kernel =~ tr/./_/; - @target = sort { - $a->{name} cmp $b->{name} - } @target; - - - print <{features}}); - my $help = $target->{desc}; - my $kernel = $target->{kernel}; - $kernel =~ tr/./_/; - - chomp $features; - $features .= "\n"; - if ($help =~ /\w+/) { - $help =~ s/^\s*/\t /mg; - $help = "\thelp\n$help"; - } else { - undef $help; - } - - print <{conf} bool "$target->{name}" - select $target->{arch} select LINUX_$kernel EOF - if ($target->{id} ne $target->{board}) { - print "\tselect TARGET_".$target->{boardconf}."\n"; - } + if ($target->{subtarget}) { + $confstr .= "\tdepends TARGET_$target->{boardconf}\n"; + } + if (@{$target->{subtargets}} > 0) { + $confstr .= "\tselect HAS_SUBTARGETS\n"; + } else { + $confstr .= "\tselect $target->{arch}\n"; foreach my $dep (@{$target->{depends}}) { my $mode = "depends"; my $flags; @@ -203,40 +211,59 @@ EOF $flags =~ /-/ and $mode = "deselect"; $flags =~ /\+/ and $mode = "select"; - $flags =~ /@/ and print "\t$mode $name\n"; + $flags =~ /@/ and $confstr .= "\t$mode $name\n"; } - - print "$features$help\n\n" + $confstr .= $features; + } + + $confstr .= "$help\n\n"; + print $confstr; +} + +sub gen_target_config() { + my @target = parse_target_metadata(); + + my @target_sort = sort { + target_name($a) cmp target_name($b); + } @target; + + + print <{subtarget}; + print_target($target); } print <{board}."\" if TARGET_".$target->{conf}."\n"; + next unless $target->{subtarget}; + print_target($target); } - # add hidden target config options - foreach my $target (@target) { - next if $board{$target->{board}}; - if ($target->{id} ne $target->{board}) { - print "\nconfig TARGET_".$target->{boardconf}."\n\tbool\n"; - $board{$target->{board}} = 1; - } - } - print <{profiles}; - + foreach my $profile (@$profiles) { print <{conf}_$profile->{id} @@ -253,7 +280,20 @@ EOF } } - print "endchoice\n"; + print <{subtarget} or print "\t\tdefault \"".$target->{board}."\" if TARGET_".$target->{conf}."\n"; + } + } my %dep_check; @@ -311,7 +351,7 @@ sub mconf_depends($$) { $depend =~ s/^([@\+]+)//; my $flags = $1; my $vdep; - + if ($vdep = $package{$depend}->{vdepends}) { $depend = join("||", map { "PACKAGE_".$_ } @$vdep); } else { @@ -340,12 +380,12 @@ sub print_package_config_category($) { my $cat = shift; my %menus; my %menu_dep; - + return unless $category{$cat}; - + print "menu \"$cat\"\n\n"; my %spkg = %{$category{$cat}}; - + foreach my $spkg (sort {uc($a) cmp uc($b)} keys %spkg) { foreach my $pkg (@{$spkg{$spkg}}) { my $menu = $pkg->{submenu}; @@ -402,7 +442,7 @@ sub print_package_config_category($) { } } print "endmenu\n\n"; - + undef $category{$cat}; } @@ -437,7 +477,7 @@ sub gen_package_mk() { foreach my $name (sort {uc($a) cmp uc($b)} keys %package) { my $config; my $pkg = $package{$name}; - + next if defined $pkg->{vdepends}; if ($ENV{SDK}) { $conf{$pkg->{src}} or do { @@ -451,7 +491,7 @@ sub gen_package_mk() { print "package-$config += $pkg->{subdir}$pkg->{src}\n"; $pkg->{prereq} and print "prereq-$config += $pkg->{subdir}$pkg->{src}\n"; } - + my $hasdeps = 0; my $depline = ""; foreach my $dep (@{$pkg->{depends}}, @{$pkg->{builddepends}}) { @@ -477,7 +517,7 @@ sub gen_package_mk() { $line .= "\$(curdir)/".$pkg->{subdir}."$pkg->{src}/compile += $depline\n"; } } - + if ($line ne "") { print "\n$line"; } diff --git a/target/linux/adm5120/Makefile b/target/linux/adm5120/Makefile index ed9dce2c4..cb634e521 100644 --- a/target/linux/adm5120/Makefile +++ b/target/linux/adm5120/Makefile @@ -8,13 +8,13 @@ include $(TOPDIR)/rules.mk BOARD:=adm5120 +BOARDNAME:=Infineon ADM5120 LINUX_VERSION:=2.6.23 FEATURES:=squashfs jffs2 tgz broken +SUBTARGETS:=router_le router_be include $(INCLUDE_DIR)/target.mk DEFAULT_PACKAGES += admswconfig -$(eval $(call Target,router_be)) -$(eval $(call Target,router_le)) $(eval $(call BuildTarget)) diff --git a/target/linux/adm5120/router_be/target.mk b/target/linux/adm5120/router_be/target.mk index 0d9154cff..c5f3a1148 100644 --- a/target/linux/adm5120/router_be/target.mk +++ b/target/linux/adm5120/router_be/target.mk @@ -1,6 +1,6 @@ ARCH:=mips SUBTARGET:=router_be -BOARDNAME:=ADM5120 Boards (Big Endian) +BOARDNAME:=Big Endian define Target/Description Build firmware images for Infineon/ADMTek ADM5120 based boards running in big-endian mode diff --git a/target/linux/adm5120/router_le/target.mk b/target/linux/adm5120/router_le/target.mk index 61da3336f..cd8422d93 100644 --- a/target/linux/adm5120/router_le/target.mk +++ b/target/linux/adm5120/router_le/target.mk @@ -1,6 +1,6 @@ ARCH:=mipsel SUBTARGET:=router_le -BOARDNAME:=ADM5120 Boards (Little Endian) +BOARDNAME:=Little Endian define Target/Description Build firmware images for Infineon/ADMtek ADM5120 based boards diff --git a/target/linux/x86/Makefile b/target/linux/x86/Makefile index 452065c38..b0b6ca704 100644 --- a/target/linux/x86/Makefile +++ b/target/linux/x86/Makefile @@ -10,15 +10,15 @@ ARCH=i386 BOARD:=x86 BOARDNAME:=x86 FEATURES:=squashfs jffs2 ext2 +SUBTARGETS=generic mediacenter LINUX_VERSION:=2.6.23 include $(INCLUDE_DIR)/target.mk DEFAULT_PACKAGES += kmod-natsemi kmod-ne2k-pci -$(eval $(call Target,generic)) -$(eval $(call Target,mediacenter)) $(eval $(call BuildTarget)) + $(eval $(call $(if $(CONFIG_TARGET_ROOTFS_ISO),RequireCommand,Ignore),mkisofs, \ Please install mkisofs. \ )) diff --git a/target/linux/x86/generic/target.mk b/target/linux/x86/generic/target.mk index 7cfde7d63..e7c75fe47 100644 --- a/target/linux/x86/generic/target.mk +++ b/target/linux/x86/generic/target.mk @@ -1,4 +1,4 @@ -SUBTARGET:=generic +BOARDNAME:=Generic define Target/Description Build firmware images for x86 based boards diff --git a/target/linux/x86/mediacenter/target.mk b/target/linux/x86/mediacenter/target.mk index 4355a8c84..f0b6ecbe1 100644 --- a/target/linux/x86/mediacenter/target.mk +++ b/target/linux/x86/mediacenter/target.mk @@ -1,6 +1,5 @@ ARCH:=i686 -SUBTARGET:=Mediacenter -BOARDNAME:=X86 (Mediacenter) +BOARDNAME:=Mediacenter define Target/Description Build firmware images for i686 based Mediacenters