Introduce android_device module type
android_device module works as an entry point for building a specific
device image. The module can specify the name of the partition modules
that it depend on. Note that the board-specific configurations are not
specified in this module type. This will be specified in the
"configuration" modules, and the android_device module can specify the
name of the "configuration" module that it will inherit the board
configurations from.
Test: m nothing
Bug: 372486444
Change-Id: Iaaa065adc2f1018f68a33132e83caa8a6f168f80
diff --git a/filesystem/android_device.go b/filesystem/android_device.go
new file mode 100644
index 0000000..68e6053
--- /dev/null
+++ b/filesystem/android_device.go
@@ -0,0 +1,73 @@
+// Copyright (C) 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package filesystem
+
+import (
+ "android/soong/android"
+
+ "github.com/google/blueprint"
+ "github.com/google/blueprint/proptools"
+)
+
+type PartitionNameProperties struct {
+ // Name of the Boot_partition_name partition filesystem module
+ Boot_partition_name *string
+ // Name of the System partition filesystem module
+ System_partition_name *string
+ // Name of the System_ext partition filesystem module
+ System_ext_partition_name *string
+ // Name of the Product partition filesystem module
+ Product_partition_name *string
+ // Name of the Vendor partition filesystem module
+ Vendor_partition_name *string
+}
+
+type androidDevice struct {
+ android.ModuleBase
+
+ partitionProps PartitionNameProperties
+}
+
+func AndroidDeviceFactory() android.Module {
+ module := &androidDevice{}
+ module.AddProperties(&module.partitionProps)
+ android.InitAndroidMultiTargetsArchModule(module, android.DeviceSupported, android.MultilibCommon)
+
+ return module
+}
+
+type partitionDepTagType struct {
+ blueprint.BaseDependencyTag
+}
+
+var filesystemDepTag partitionDepTagType
+
+func (a *androidDevice) DepsMutator(ctx android.BottomUpMutatorContext) {
+ addDependencyIfDefined := func(dep *string) {
+ if dep != nil {
+ ctx.AddDependency(ctx.Module(), filesystemDepTag, proptools.String(dep))
+ }
+ }
+
+ addDependencyIfDefined(a.partitionProps.Boot_partition_name)
+ addDependencyIfDefined(a.partitionProps.System_partition_name)
+ addDependencyIfDefined(a.partitionProps.System_ext_partition_name)
+ addDependencyIfDefined(a.partitionProps.Product_partition_name)
+ addDependencyIfDefined(a.partitionProps.Vendor_partition_name)
+}
+
+func (a *androidDevice) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+
+}