Selaa lähdekoodia

build: implement support for selecting multiple device profiles

Signed-off-by: Felix Fietkau <[email protected]>
Felix Fietkau 9 vuotta sitten
vanhempi
sitoutus
f8ebbbc568
3 muutettua tiedostoa jossa 48 lisäystä ja 1 poistoa
  1. 1 1
      include/image.mk
  2. 1 0
      scripts/metadata.pm
  3. 46 0
      scripts/target-metadata.pl

+ 1 - 1
include/image.mk

@@ -482,7 +482,7 @@ endef
 ifdef IB
   DEVICE_CHECK_PROFILE = $(filter $(1),$(PROFILE))
 else
-  DEVICE_CHECK_PROFILE = $(CONFIG_TARGET_$(call target_conf,$(BOARD)$(if $(SUBTARGET),_$(SUBTARGET)))_$(1))
+  DEVICE_CHECK_PROFILE = $(CONFIG_TARGET_$(if $(CONFIG_TARGET_MULTI_PROFILE),DEVICE_)$(call target_conf,$(BOARD)$(if $(SUBTARGET),_$(SUBTARGET)))_$(1))
 endif
 
 define Device/Check

+ 1 - 0
scripts/metadata.pm

@@ -87,6 +87,7 @@ sub parse_target_metadata($) {
 				priority => 999,
 				packages => []
 			};
+			$1 =~ /^DEVICE_/ and $target->{has_devices} = 1;
 			push @{$target->{profiles}}, $profile;
 		};
 		/^Target-Profile-Name:\s*(.+)\s*$/ and $profile->{name} = $1;

+ 46 - 0
scripts/target-metadata.pl

@@ -102,6 +102,9 @@ EOF
 		if ($target->{arch} =~ /\w/) {
 			$confstr .= "\tselect $target->{arch}\n";
 		}
+		if ($target->{has_devices}) {
+			$confstr .= "\tselect HAS_DEVICES\n";
+		}
 	}
 
 	foreach my $dep (@{$target->{depends}}) {
@@ -186,6 +189,21 @@ endchoice
 choice
 	prompt "Target Profile"
 
+EOF
+	foreach my $target (@target) {
+		my $profile = $target->{profiles}->[0];
+		$profile or next;
+		print <<EOF;
+	default TARGET_$target->{conf}_$profile->{id} if TARGET_$target->{conf}
+EOF
+	}
+
+	print <<EOF;
+
+config TARGET_MULTI_PROFILE
+	bool "Multiple devices"
+	depends on HAS_DEVICES
+
 EOF
 
 	foreach my $target (@target) {
@@ -215,9 +233,37 @@ EOF
 	print <<EOF;
 endchoice
 
+menu "Target Devices"
+	depends on TARGET_MULTI_PROFILE
+
+EOF
+	foreach my $target (@target) {
+		my $profiles = $target->{profiles};
+		foreach my $profile (@{$target->{profiles}}) {
+			next unless $profile->{id} =~ /^DEVICE_/;
+			print <<EOF;
+config TARGET_DEVICE_$target->{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;
+			}
+		}
+	}
+
+	print <<EOF;
+
+endmenu
+
 config HAS_SUBTARGETS
 	bool
 
+config HAS_DEVICES
+	bool
+
 config TARGET_BOARD
 	string