// 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 fsgen import ( "android/soong/filesystem" "github.com/google/blueprint/proptools" ) var ( // Most of the symlinks and directories listed here originate from create_root_structure.mk, // but the handwritten generic system image also recreates them: // https://cs.android.com/android/platform/superproject/main/+/main:build/make/target/product/generic/Android.bp;l=33;drc=db08311f1b6ef6cb0a4fbcc6263b89849360ce04 // TODO(b/377734331): only generate the symlinks if the relevant partitions exist commonSymlinksFromRoot = []filesystem.SymlinkDefinition{ { Target: proptools.StringPtr("/system/bin/init"), Name: proptools.StringPtr("init"), }, { Target: proptools.StringPtr("/system/etc"), Name: proptools.StringPtr("etc"), }, { Target: proptools.StringPtr("/system/bin"), Name: proptools.StringPtr("bin"), }, { Target: proptools.StringPtr("/data/user_de/0/com.android.shell/files/bugreports"), Name: proptools.StringPtr("bugreports"), }, { Target: proptools.StringPtr("/sys/kernel/debug"), Name: proptools.StringPtr("d"), }, { Target: proptools.StringPtr("/product/etc/security/adb_keys"), Name: proptools.StringPtr("adb_keys"), }, { Target: proptools.StringPtr("/vendor/odm/app"), Name: proptools.StringPtr("odm/app"), }, { Target: proptools.StringPtr("/vendor/odm/bin"), Name: proptools.StringPtr("odm/bin"), }, { Target: proptools.StringPtr("/vendor/odm/etc"), Name: proptools.StringPtr("odm/etc"), }, { Target: proptools.StringPtr("/vendor/odm/firmware"), Name: proptools.StringPtr("odm/firmware"), }, { Target: proptools.StringPtr("/vendor/odm/framework"), Name: proptools.StringPtr("odm/framework"), }, { Target: proptools.StringPtr("/vendor/odm/lib"), Name: proptools.StringPtr("odm/lib"), }, { Target: proptools.StringPtr("/vendor/odm/lib64"), Name: proptools.StringPtr("odm/lib64"), }, { Target: proptools.StringPtr("/vendor/odm/overlay"), Name: proptools.StringPtr("odm/overlay"), }, { Target: proptools.StringPtr("/vendor/odm/priv-app"), Name: proptools.StringPtr("odm/priv-app"), }, { Target: proptools.StringPtr("/vendor/odm/usr"), Name: proptools.StringPtr("odm/usr"), }, // For Treble Generic System Image (GSI), system-as-root GSI needs to work on // both devices with and without /odm_dlkm partition. Those symlinks are for // devices without /odm_dlkm partition. For devices with /odm_dlkm // partition, mount odm_dlkm.img under /odm_dlkm will hide those symlinks. // Note that /odm_dlkm/lib is omitted because odm DLKMs should be accessed // via /odm/lib/modules directly. All of this also applies to the vendor_dlkm symlink { Target: proptools.StringPtr("/odm/odm_dlkm/etc"), Name: proptools.StringPtr("odm_dlkm/etc"), }, { Target: proptools.StringPtr("/vendor/vendor_dlkm/etc"), Name: proptools.StringPtr("vendor_dlkm/etc"), }, } // Common directories between partitions that may be listed as `Dirs` property in the // filesystem module. commonPartitionDirs = []string{ // From generic_rootdirs in build/make/target/product/generic/Android.bp "apex", "bootstrap-apex", "config", "data", "data_mirror", "debug_ramdisk", "dev", "linkerconfig", "metadata", "mnt", "odm", "odm_dlkm", "oem", "postinstall", "proc", "second_stage_resources", "storage", "sys", "system", "system_dlkm", "tmp", "vendor", "vendor_dlkm", // from android_rootdirs in build/make/target/product/generic/Android.bp "system_ext", "product", } )