1// Copyright (C) 2024 The Android Open Source Project 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15package filesystem 16 17import ( 18 "android/soong/android" 19 20 "github.com/google/blueprint" 21 "github.com/google/blueprint/proptools" 22) 23 24type PartitionNameProperties struct { 25 // Name of the Boot_partition_name partition filesystem module 26 Boot_partition_name *string 27 // Name of the System partition filesystem module 28 System_partition_name *string 29 // Name of the System_ext partition filesystem module 30 System_ext_partition_name *string 31 // Name of the Product partition filesystem module 32 Product_partition_name *string 33 // Name of the Vendor partition filesystem module 34 Vendor_partition_name *string 35 // Name of the Odm partition filesystem module 36 Odm_partition_name *string 37 // The vbmeta partition and its "chained" partitions 38 Vbmeta_partitions []string 39 // Name of the Userdata partition filesystem module 40 Userdata_partition_name *string 41} 42 43type androidDevice struct { 44 android.ModuleBase 45 46 partitionProps PartitionNameProperties 47} 48 49func AndroidDeviceFactory() android.Module { 50 module := &androidDevice{} 51 module.AddProperties(&module.partitionProps) 52 android.InitAndroidMultiTargetsArchModule(module, android.DeviceSupported, android.MultilibCommon) 53 return module 54} 55 56type partitionDepTagType struct { 57 blueprint.BaseDependencyTag 58} 59 60var filesystemDepTag partitionDepTagType 61 62func (a *androidDevice) DepsMutator(ctx android.BottomUpMutatorContext) { 63 addDependencyIfDefined := func(dep *string) { 64 if dep != nil { 65 ctx.AddDependency(ctx.Module(), filesystemDepTag, proptools.String(dep)) 66 } 67 } 68 69 addDependencyIfDefined(a.partitionProps.Boot_partition_name) 70 addDependencyIfDefined(a.partitionProps.System_partition_name) 71 addDependencyIfDefined(a.partitionProps.System_ext_partition_name) 72 addDependencyIfDefined(a.partitionProps.Product_partition_name) 73 addDependencyIfDefined(a.partitionProps.Vendor_partition_name) 74 addDependencyIfDefined(a.partitionProps.Odm_partition_name) 75 addDependencyIfDefined(a.partitionProps.Userdata_partition_name) 76 for _, vbmetaPartition := range a.partitionProps.Vbmeta_partitions { 77 ctx.AddDependency(ctx.Module(), filesystemDepTag, vbmetaPartition) 78 } 79} 80 81func (a *androidDevice) GenerateAndroidBuildActions(ctx android.ModuleContext) { 82 83} 84