blob: a2176009c30f318a9859ea2de100ae74bef59319 [file] [log] [blame]
Jihoon Kang0a453892024-12-09 22:16:26 +00001// 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 fsgen
16
17import (
18 "android/soong/filesystem"
19
20 "github.com/google/blueprint/proptools"
21)
22
23var (
24 // Most of the symlinks and directories listed here originate from create_root_structure.mk,
25 // but the handwritten generic system image also recreates them:
26 // https://cs.android.com/android/platform/superproject/main/+/main:build/make/target/product/generic/Android.bp;l=33;drc=db08311f1b6ef6cb0a4fbcc6263b89849360ce04
27 // TODO(b/377734331): only generate the symlinks if the relevant partitions exist
28 commonSymlinksFromRoot = []filesystem.SymlinkDefinition{
29 {
30 Target: proptools.StringPtr("/system/bin/init"),
31 Name: proptools.StringPtr("init"),
32 },
33 {
34 Target: proptools.StringPtr("/system/etc"),
35 Name: proptools.StringPtr("etc"),
36 },
37 {
38 Target: proptools.StringPtr("/system/bin"),
39 Name: proptools.StringPtr("bin"),
40 },
41 {
42 Target: proptools.StringPtr("/data/user_de/0/com.android.shell/files/bugreports"),
43 Name: proptools.StringPtr("bugreports"),
44 },
45 {
46 Target: proptools.StringPtr("/sys/kernel/debug"),
47 Name: proptools.StringPtr("d"),
48 },
49 {
50 Target: proptools.StringPtr("/product/etc/security/adb_keys"),
51 Name: proptools.StringPtr("adb_keys"),
52 },
53 {
54 Target: proptools.StringPtr("/vendor/odm/app"),
55 Name: proptools.StringPtr("odm/app"),
56 },
57 {
58 Target: proptools.StringPtr("/vendor/odm/bin"),
59 Name: proptools.StringPtr("odm/bin"),
60 },
61 {
62 Target: proptools.StringPtr("/vendor/odm/etc"),
63 Name: proptools.StringPtr("odm/etc"),
64 },
65 {
66 Target: proptools.StringPtr("/vendor/odm/firmware"),
67 Name: proptools.StringPtr("odm/firmware"),
68 },
69 {
70 Target: proptools.StringPtr("/vendor/odm/framework"),
71 Name: proptools.StringPtr("odm/framework"),
72 },
73 {
74 Target: proptools.StringPtr("/vendor/odm/lib"),
75 Name: proptools.StringPtr("odm/lib"),
76 },
77 {
78 Target: proptools.StringPtr("/vendor/odm/lib64"),
79 Name: proptools.StringPtr("odm/lib64"),
80 },
81 {
82 Target: proptools.StringPtr("/vendor/odm/overlay"),
83 Name: proptools.StringPtr("odm/overlay"),
84 },
85 {
86 Target: proptools.StringPtr("/vendor/odm/priv-app"),
87 Name: proptools.StringPtr("odm/priv-app"),
88 },
89 {
90 Target: proptools.StringPtr("/vendor/odm/usr"),
91 Name: proptools.StringPtr("odm/usr"),
92 },
93 // For Treble Generic System Image (GSI), system-as-root GSI needs to work on
94 // both devices with and without /odm_dlkm partition. Those symlinks are for
95 // devices without /odm_dlkm partition. For devices with /odm_dlkm
96 // partition, mount odm_dlkm.img under /odm_dlkm will hide those symlinks.
97 // Note that /odm_dlkm/lib is omitted because odm DLKMs should be accessed
98 // via /odm/lib/modules directly. All of this also applies to the vendor_dlkm symlink
99 {
100 Target: proptools.StringPtr("/odm/odm_dlkm/etc"),
101 Name: proptools.StringPtr("odm_dlkm/etc"),
102 },
103 {
104 Target: proptools.StringPtr("/vendor/vendor_dlkm/etc"),
105 Name: proptools.StringPtr("vendor_dlkm/etc"),
106 },
107 }
108
109 // Common directories between partitions that may be listed as `Dirs` property in the
110 // filesystem module.
111 commonPartitionDirs = []string{
112 // From generic_rootdirs in build/make/target/product/generic/Android.bp
Jihoon Kang0a453892024-12-09 22:16:26 +0000113 "apex",
114 "bootstrap-apex",
115 "config",
116 "data",
117 "data_mirror",
118 "debug_ramdisk",
119 "dev",
120 "linkerconfig",
121 "metadata",
122 "mnt",
123 "odm",
124 "odm_dlkm",
125 "oem",
126 "postinstall",
127 "proc",
128 "second_stage_resources",
129 "storage",
130 "sys",
131 "system",
132 "system_dlkm",
133 "tmp",
134 "vendor",
135 "vendor_dlkm",
136
137 // from android_rootdirs in build/make/target/product/generic/Android.bp
138 "system_ext",
139 "product",
140 }
141)