1// Copyright (C) 2008 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 { 16 // See: http://go/android-license-faq 17 default_applicable_licenses: ["Android-Apache-2.0"], 18} 19 20bootstrap_go_package { 21 name: "soong-fs_config", 22 pkgPath: "android/soong/fs_config", 23 deps: [ 24 "soong-android", 25 "soong-genrule", 26 ], 27 srcs: [ 28 "fs_config.go", 29 ], 30 pluginFor: ["soong_build"], 31} 32 33cc_binary_host { 34 name: "fs_config", 35 srcs: ["fs_config.c"], 36 shared_libs: [ 37 "libcutils", 38 ], 39 cflags: ["-Werror"], 40} 41 42python_binary_host { 43 name: "fs_config_generator", 44 srcs: ["fs_config_generator.py"], 45} 46 47python_test_host { 48 name: "test_fs_config_generator", 49 main: "test_fs_config_generator.py", 50 srcs: [ 51 "test_fs_config_generator.py", 52 "fs_config_generator.py", 53 ], 54} 55 56target_fs_config_gen_filegroup { 57 name: "target_fs_config_gen", 58} 59 60genrule { 61 name: "oemaids_header_gen", 62 tools: ["fs_config_generator"], 63 cmd: "$(location fs_config_generator) oemaid --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)", 64 srcs: [ 65 ":target_fs_config_gen", 66 ":android_filesystem_config_header", 67 ], 68 out: ["generated_oem_aid.h"], 69} 70 71cc_library_headers { 72 name: "oemaids_headers", 73 vendor_available: true, 74 generated_headers: ["oemaids_header_gen"], 75 export_generated_headers: ["oemaids_header_gen"], 76} 77 78// Generate the */etc/passwd text files for the target 79// These files may be empty if no AIDs are defined in 80// TARGET_FS_CONFIG_GEN files. 81genrule { 82 name: "passwd_gen_system", 83 tools: ["fs_config_generator"], 84 cmd: "$(location fs_config_generator) passwd --partition=system --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)", 85 srcs: [ 86 ":target_fs_config_gen", 87 ":android_filesystem_config_header", 88 ], 89 out: ["passwd"], 90} 91 92prebuilt_etc { 93 name: "passwd_system", 94 filename: "passwd", 95 src: ":passwd_gen_system", 96} 97 98genrule { 99 name: "passwd_gen_vendor", 100 tools: ["fs_config_generator"], 101 cmd: "$(location fs_config_generator) passwd --partition=vendor --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)", 102 srcs: [ 103 ":target_fs_config_gen", 104 ":android_filesystem_config_header", 105 ], 106 out: ["passwd"], 107} 108 109prebuilt_etc { 110 name: "passwd_vendor", 111 filename: "passwd", 112 vendor: true, 113 src: ":passwd_gen_vendor", 114} 115 116genrule { 117 name: "passwd_gen_odm", 118 tools: ["fs_config_generator"], 119 cmd: "$(location fs_config_generator) passwd --partition=odm --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)", 120 srcs: [ 121 ":target_fs_config_gen", 122 ":android_filesystem_config_header", 123 ], 124 out: ["passwd"], 125} 126 127prebuilt_etc { 128 name: "passwd_odm", 129 filename: "passwd", 130 device_specific: true, 131 src: ":passwd_gen_odm", 132} 133 134genrule { 135 name: "passwd_gen_product", 136 tools: ["fs_config_generator"], 137 cmd: "$(location fs_config_generator) passwd --partition=product --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)", 138 srcs: [ 139 ":target_fs_config_gen", 140 ":android_filesystem_config_header", 141 ], 142 out: ["passwd"], 143} 144 145prebuilt_etc { 146 name: "passwd_product", 147 filename: "passwd", 148 product_specific: true, 149 src: ":passwd_gen_product", 150} 151 152genrule { 153 name: "passwd_gen_system_ext", 154 tools: ["fs_config_generator"], 155 cmd: "$(location fs_config_generator) passwd --partition=system_ext --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)", 156 srcs: [ 157 ":target_fs_config_gen", 158 ":android_filesystem_config_header", 159 ], 160 out: ["passwd"], 161} 162 163prebuilt_etc { 164 name: "passwd_system_ext", 165 filename: "passwd", 166 system_ext_specific: true, 167 src: ":passwd_gen_system_ext", 168} 169 170// Generate the */etc/group text files for the target 171// These files may be empty if no AIDs are defined in 172// TARGET_FS_CONFIG_GEN files. 173genrule { 174 name: "group_gen_system", 175 tools: ["fs_config_generator"], 176 cmd: "$(location fs_config_generator) group --partition=system --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)", 177 srcs: [ 178 ":target_fs_config_gen", 179 ":android_filesystem_config_header", 180 ], 181 out: ["group"], 182} 183 184prebuilt_etc { 185 name: "group_system", 186 filename: "group", 187 src: ":group_gen_system", 188} 189 190genrule { 191 name: "group_gen_vendor", 192 tools: ["fs_config_generator"], 193 cmd: "$(location fs_config_generator) group --partition=vendor --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)", 194 srcs: [ 195 ":target_fs_config_gen", 196 ":android_filesystem_config_header", 197 ], 198 out: ["group"], 199} 200 201prebuilt_etc { 202 name: "group_vendor", 203 filename: "group", 204 vendor: true, 205 src: ":group_gen_vendor", 206} 207 208genrule { 209 name: "group_gen_odm", 210 tools: ["fs_config_generator"], 211 cmd: "$(location fs_config_generator) group --partition=odm --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)", 212 srcs: [ 213 ":target_fs_config_gen", 214 ":android_filesystem_config_header", 215 ], 216 out: ["group"], 217} 218 219prebuilt_etc { 220 name: "group_odm", 221 filename: "group", 222 device_specific: true, 223 src: ":group_gen_odm", 224} 225 226genrule { 227 name: "group_gen_product", 228 tools: ["fs_config_generator"], 229 cmd: "$(location fs_config_generator) group --partition=product --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)", 230 srcs: [ 231 ":target_fs_config_gen", 232 ":android_filesystem_config_header", 233 ], 234 out: ["group"], 235} 236 237prebuilt_etc { 238 name: "group_product", 239 filename: "group", 240 product_specific: true, 241 src: ":group_gen_product", 242} 243 244genrule { 245 name: "group_gen_system_ext", 246 tools: ["fs_config_generator"], 247 cmd: "$(location fs_config_generator) group --partition=system_ext --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)", 248 srcs: [ 249 ":target_fs_config_gen", 250 ":android_filesystem_config_header", 251 ], 252 out: ["group"], 253} 254 255prebuilt_etc { 256 name: "group_system_ext", 257 filename: "group", 258 system_ext_specific: true, 259 src: ":group_gen_system_ext", 260} 261 262fs_config_cmd = "$(location fs_config_generator) fsconfig " + 263 "--aid-header $(location :android_filesystem_config_header) " + 264 "--capability-header $(location :linux_capability_header) " + 265 "--out_file $(out) " 266fs_config_cmd_dirs = fs_config_cmd + "--dirs " 267fs_config_cmd_files = fs_config_cmd + "--files " 268 269genrule_defaults { 270 name: "fs_config_defaults", 271 tools: ["fs_config_generator"], 272 srcs: [ 273 ":android_filesystem_config_header", 274 ":linux_capability_header", 275 ":target_fs_config_gen", 276 ], 277 out: ["out"], 278} 279 280genrule { 281 name: "fs_config_dirs_system_gen", 282 defaults: ["fs_config_defaults"], 283 cmd: fs_config_cmd_dirs + 284 "--partition system " + 285 "--all-partitions vendor,oem,odm,vendor_dlkm,odm_dlkm,system_dlkm " + 286 "$(locations :target_fs_config_gen)", 287} 288 289prebuilt_etc { 290 name: "fs_config_dirs_system", 291 filename: "fs_config_dirs", 292 src: ":fs_config_dirs_system_gen", 293} 294 295genrule { 296 name: "fs_config_files_system_gen", 297 defaults: ["fs_config_defaults"], 298 cmd: fs_config_cmd_files + 299 "--partition system " + 300 "--all-partitions vendor,oem,odm,vendor_dlkm,odm_dlkm,system_dlkm " + 301 "$(locations :target_fs_config_gen)", 302} 303 304prebuilt_etc { 305 name: "fs_config_files_system", 306 filename: "fs_config_files", 307 src: ":fs_config_files_system_gen", 308} 309 310genrule { 311 name: "fs_config_dirs_system_ext_gen", 312 defaults: ["fs_config_defaults"], 313 cmd: fs_config_cmd_dirs + 314 "--partition system_ext " + 315 "$(locations :target_fs_config_gen)", 316} 317 318prebuilt_etc { 319 name: "fs_config_dirs_system_ext", 320 filename: "fs_config_dirs", 321 src: ":fs_config_dirs_system_ext_gen", 322 system_ext_specific: true, 323} 324 325genrule { 326 name: "fs_config_files_system_ext_gen", 327 defaults: ["fs_config_defaults"], 328 cmd: fs_config_cmd_files + 329 "--partition system_ext " + 330 "$(locations :target_fs_config_gen)", 331} 332 333prebuilt_etc { 334 name: "fs_config_files_system_ext", 335 filename: "fs_config_files", 336 src: ":fs_config_files_system_ext_gen", 337 system_ext_specific: true, 338} 339 340genrule { 341 name: "fs_config_dirs_product_gen", 342 defaults: ["fs_config_defaults"], 343 cmd: fs_config_cmd_dirs + 344 "--partition product " + 345 "$(locations :target_fs_config_gen)", 346} 347 348prebuilt_etc { 349 name: "fs_config_dirs_product", 350 filename: "fs_config_dirs", 351 src: ":fs_config_dirs_product_gen", 352 product_specific: true, 353} 354 355genrule { 356 name: "fs_config_files_product_gen", 357 defaults: ["fs_config_defaults"], 358 cmd: fs_config_cmd_files + 359 "--partition product " + 360 "$(locations :target_fs_config_gen)", 361} 362 363prebuilt_etc { 364 name: "fs_config_files_product", 365 filename: "fs_config_files", 366 src: ":fs_config_files_product_gen", 367 product_specific: true, 368} 369 370genrule { 371 name: "fs_config_dirs_vendor_gen", 372 defaults: ["fs_config_defaults"], 373 cmd: fs_config_cmd_dirs + 374 "--partition vendor " + 375 "$(locations :target_fs_config_gen)", 376} 377 378prebuilt_etc { 379 name: "fs_config_dirs_vendor", 380 filename: "fs_config_dirs", 381 src: ":fs_config_dirs_vendor_gen", 382 vendor: true, 383} 384 385genrule { 386 name: "fs_config_files_vendor_gen", 387 defaults: ["fs_config_defaults"], 388 cmd: fs_config_cmd_files + 389 "--partition vendor " + 390 "$(locations :target_fs_config_gen)", 391} 392 393prebuilt_etc { 394 name: "fs_config_files_vendor", 395 filename: "fs_config_files", 396 src: ":fs_config_files_vendor_gen", 397 vendor: true, 398} 399 400genrule { 401 name: "fs_config_dirs_odm_gen", 402 defaults: ["fs_config_defaults"], 403 cmd: fs_config_cmd_dirs + 404 "--partition odm " + 405 "$(locations :target_fs_config_gen)", 406} 407 408prebuilt_etc { 409 name: "fs_config_dirs_odm", 410 filename: "fs_config_dirs", 411 src: ":fs_config_dirs_odm_gen", 412 device_specific: true, 413} 414 415genrule { 416 name: "fs_config_files_odm_gen", 417 defaults: ["fs_config_defaults"], 418 cmd: fs_config_cmd_files + 419 "--partition odm " + 420 "$(locations :target_fs_config_gen)", 421} 422 423prebuilt_etc { 424 name: "fs_config_files_odm", 425 filename: "fs_config_files", 426 src: ":fs_config_files_odm_gen", 427 device_specific: true, 428} 429 430// TODO(jiyong): add fs_config for oem, system_dlkm, vendor_dlkm, odm_dlkm partitions 431