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 280// system 281genrule { 282 name: "fs_config_dirs_system_gen", 283 defaults: ["fs_config_defaults"], 284 cmd: fs_config_cmd_dirs + 285 "--partition system " + 286 "--all-partitions vendor,oem,odm,vendor_dlkm,odm_dlkm,system_dlkm " + 287 "$(locations :target_fs_config_gen)", 288} 289 290prebuilt_etc { 291 name: "fs_config_dirs_system", 292 filename: "fs_config_dirs", 293 src: ":fs_config_dirs_system_gen", 294} 295 296genrule { 297 name: "fs_config_files_system_gen", 298 defaults: ["fs_config_defaults"], 299 cmd: fs_config_cmd_files + 300 "--partition system " + 301 "--all-partitions vendor,oem,odm,vendor_dlkm,odm_dlkm,system_dlkm " + 302 "$(locations :target_fs_config_gen)", 303} 304 305prebuilt_etc { 306 name: "fs_config_files_system", 307 filename: "fs_config_files", 308 src: ":fs_config_files_system_gen", 309} 310 311// system_ext 312genrule { 313 name: "fs_config_dirs_system_ext_gen", 314 defaults: ["fs_config_defaults"], 315 cmd: fs_config_cmd_dirs + 316 "--partition system_ext " + 317 "$(locations :target_fs_config_gen)", 318} 319 320prebuilt_etc { 321 name: "fs_config_dirs_system_ext", 322 filename: "fs_config_dirs", 323 src: ":fs_config_dirs_system_ext_gen", 324 system_ext_specific: true, 325} 326 327genrule { 328 name: "fs_config_files_system_ext_gen", 329 defaults: ["fs_config_defaults"], 330 cmd: fs_config_cmd_files + 331 "--partition system_ext " + 332 "$(locations :target_fs_config_gen)", 333} 334 335prebuilt_etc { 336 name: "fs_config_files_system_ext", 337 filename: "fs_config_files", 338 src: ":fs_config_files_system_ext_gen", 339 system_ext_specific: true, 340} 341 342// product 343genrule { 344 name: "fs_config_dirs_product_gen", 345 defaults: ["fs_config_defaults"], 346 cmd: fs_config_cmd_dirs + 347 "--partition product " + 348 "$(locations :target_fs_config_gen)", 349} 350 351prebuilt_etc { 352 name: "fs_config_dirs_product", 353 filename: "fs_config_dirs", 354 src: ":fs_config_dirs_product_gen", 355 product_specific: true, 356} 357 358genrule { 359 name: "fs_config_files_product_gen", 360 defaults: ["fs_config_defaults"], 361 cmd: fs_config_cmd_files + 362 "--partition product " + 363 "$(locations :target_fs_config_gen)", 364} 365 366prebuilt_etc { 367 name: "fs_config_files_product", 368 filename: "fs_config_files", 369 src: ":fs_config_files_product_gen", 370 product_specific: true, 371} 372 373// vendor 374genrule { 375 name: "fs_config_dirs_vendor_gen", 376 defaults: ["fs_config_defaults"], 377 cmd: fs_config_cmd_dirs + 378 "--partition vendor " + 379 "$(locations :target_fs_config_gen)", 380} 381 382prebuilt_etc { 383 name: "fs_config_dirs_vendor", 384 filename: "fs_config_dirs", 385 src: ":fs_config_dirs_vendor_gen", 386 vendor: true, 387} 388 389genrule { 390 name: "fs_config_files_vendor_gen", 391 defaults: ["fs_config_defaults"], 392 cmd: fs_config_cmd_files + 393 "--partition vendor " + 394 "$(locations :target_fs_config_gen)", 395} 396 397prebuilt_etc { 398 name: "fs_config_files_vendor", 399 filename: "fs_config_files", 400 src: ":fs_config_files_vendor_gen", 401 vendor: true, 402} 403 404// odm 405genrule { 406 name: "fs_config_dirs_odm_gen", 407 defaults: ["fs_config_defaults"], 408 cmd: fs_config_cmd_dirs + 409 "--partition odm " + 410 "$(locations :target_fs_config_gen)", 411} 412 413prebuilt_etc { 414 name: "fs_config_dirs_odm", 415 filename: "fs_config_dirs", 416 src: ":fs_config_dirs_odm_gen", 417 device_specific: true, 418} 419 420genrule { 421 name: "fs_config_files_odm_gen", 422 defaults: ["fs_config_defaults"], 423 cmd: fs_config_cmd_files + 424 "--partition odm " + 425 "$(locations :target_fs_config_gen)", 426} 427 428prebuilt_etc { 429 name: "fs_config_files_odm", 430 filename: "fs_config_files", 431 src: ":fs_config_files_odm_gen", 432 device_specific: true, 433} 434 435// system_dlkm 436genrule { 437 name: "fs_config_dirs_system_dlkm_gen", 438 defaults: ["fs_config_defaults"], 439 cmd: fs_config_cmd_dirs + 440 "--partition system_dlkm " + 441 "$(locations :target_fs_config_gen)", 442} 443 444prebuilt_etc { 445 name: "fs_config_dirs_system_dlkm", 446 filename: "fs_config_dirs", 447 src: ":fs_config_dirs_system_dlkm_gen", 448 system_dlkm_specific: true, 449} 450 451genrule { 452 name: "fs_config_files_system_dlkm_gen", 453 defaults: ["fs_config_defaults"], 454 cmd: fs_config_cmd_files + 455 "--partition system_dlkm " + 456 "$(locations :target_fs_config_gen)", 457} 458 459prebuilt_etc { 460 name: "fs_config_files_system_dlkm", 461 filename: "fs_config_files", 462 src: ":fs_config_files_system_dlkm_gen", 463 system_dlkm_specific: true, 464} 465 466// vendor_dlkm 467genrule { 468 name: "fs_config_dirs_vendor_dlkm_gen", 469 defaults: ["fs_config_defaults"], 470 cmd: fs_config_cmd_dirs + 471 "--partition vendor_dlkm " + 472 "$(locations :target_fs_config_gen)", 473} 474 475prebuilt_etc { 476 name: "fs_config_dirs_vendor_dlkm", 477 filename: "fs_config_dirs", 478 src: ":fs_config_dirs_vendor_dlkm_gen", 479 vendor_dlkm_specific: true, 480} 481 482genrule { 483 name: "fs_config_files_vendor_dlkm_gen", 484 defaults: ["fs_config_defaults"], 485 cmd: fs_config_cmd_files + 486 "--partition vendor_dlkm " + 487 "$(locations :target_fs_config_gen)", 488} 489 490prebuilt_etc { 491 name: "fs_config_files_vendor_dlkm", 492 filename: "fs_config_files", 493 src: ":fs_config_files_vendor_dlkm_gen", 494 vendor_dlkm_specific: true, 495} 496 497// odm_dlkm 498genrule { 499 name: "fs_config_dirs_odm_dlkm_gen", 500 defaults: ["fs_config_defaults"], 501 cmd: fs_config_cmd_dirs + 502 "--partition odm_dlkm " + 503 "$(locations :target_fs_config_gen)", 504} 505 506prebuilt_etc { 507 name: "fs_config_dirs_odm_dlkm", 508 filename: "fs_config_dirs", 509 src: ":fs_config_dirs_odm_dlkm_gen", 510 odm_dlkm_specific: true, 511} 512 513genrule { 514 name: "fs_config_files_odm_dlkm_gen", 515 defaults: ["fs_config_defaults"], 516 cmd: fs_config_cmd_files + 517 "--partition odm_dlkm " + 518 "$(locations :target_fs_config_gen)", 519} 520 521prebuilt_etc { 522 name: "fs_config_files_odm_dlkm", 523 filename: "fs_config_files", 524 src: ":fs_config_files_odm_dlkm_gen", 525 odm_dlkm_specific: true, 526} 527 528// oem 529genrule { 530 name: "fs_config_dirs_oem_gen", 531 defaults: ["fs_config_defaults"], 532 cmd: fs_config_cmd_dirs + 533 "--partition oem " + 534 "$(locations :target_fs_config_gen)", 535} 536 537prebuilt_etc { 538 name: "fs_config_dirs_oem", 539 filename: "fs_config_dirs", 540 src: ":fs_config_dirs_oem_gen", 541 oem_specific: true, 542} 543 544genrule { 545 name: "fs_config_files_oem_gen", 546 defaults: ["fs_config_defaults"], 547 cmd: fs_config_cmd_files + 548 "--partition oem " + 549 "$(locations :target_fs_config_gen)", 550} 551 552prebuilt_etc { 553 name: "fs_config_files_oem", 554 filename: "fs_config_files", 555 src: ":fs_config_files_oem_gen", 556 oem_specific: true, 557} 558 559// Generate the <p>/etc/fs_config_dirs binary files for each partition. 560// Add fs_config_dirs to PRODUCT_PACKAGES in the device make file to enable. 561phony { 562 name: "fs_config_dirs", 563 required: [ 564 "fs_config_dirs_system", 565 "fs_config_dirs_system_ext", 566 "fs_config_dirs_product", 567 "fs_config_dirs_nonsystem", 568 ], 569} 570 571// Generate the <p>/etc/fs_config_files binary files for each partition. 572// Add fs_config_files to PRODUCT_PACKAGES in the device make file to enable. 573phony { 574 name: "fs_config_files", 575 required: [ 576 "fs_config_files_system", 577 "fs_config_files_system_ext", 578 "fs_config_files_product", 579 "fs_config_files_nonsystem", 580 ], 581} 582 583// Generate the <p>/etc/fs_config_dirs binary files for all enabled partitions 584// excluding /system, /system_ext and /product. Add fs_config_dirs_nonsystem to 585// PRODUCT_PACKAGES in the device make file to enable. 586phony { 587 name: "fs_config_dirs_nonsystem", 588 required: [] + 589 select(soong_config_variable("fs_config", "vendor"), { 590 true: ["fs_config_dirs_vendor"], 591 default: [], 592 }) + 593 select(soong_config_variable("fs_config", "oem"), { 594 true: ["fs_config_dirs_oem"], 595 default: [], 596 }) + 597 select(soong_config_variable("fs_config", "odm"), { 598 true: ["fs_config_dirs_odm"], 599 default: [], 600 }) + 601 select(soong_config_variable("fs_config", "vendor_dlkm"), { 602 true: ["fs_config_dirs_vendor_dlkm"], 603 default: [], 604 }) + 605 select(soong_config_variable("fs_config", "odm_dlkm"), { 606 true: ["fs_config_dirs_odm_dlkm"], 607 default: [], 608 }) + 609 select(soong_config_variable("fs_config", "system_dlkm"), { 610 true: ["fs_config_dirs_system_dlkm"], 611 default: [], 612 }), 613} 614 615// Generate the <p>/etc/fs_config_files binary files for all enabled partitions 616// excluding /system, /system_ext and /product. Add fs_config_files_nonsystem to 617// PRODUCT_PACKAGES in the device make file to enable. 618phony { 619 name: "fs_config_files_nonsystem", 620 required: [] + 621 select(soong_config_variable("fs_config", "vendor"), { 622 true: ["fs_config_files_vendor"], 623 default: [], 624 }) + 625 select(soong_config_variable("fs_config", "oem"), { 626 true: ["fs_config_files_oem"], 627 default: [], 628 }) + 629 select(soong_config_variable("fs_config", "odm"), { 630 true: ["fs_config_files_odm"], 631 default: [], 632 }) + 633 select(soong_config_variable("fs_config", "vendor_dlkm"), { 634 true: ["fs_config_files_vendor_dlkm"], 635 default: [], 636 }) + 637 select(soong_config_variable("fs_config", "odm_dlkm"), { 638 true: ["fs_config_files_odm_dlkm"], 639 default: [], 640 }) + 641 select(soong_config_variable("fs_config", "system_dlkm"), { 642 true: ["fs_config_files_system_dlkm"], 643 default: [], 644 }), 645} 646