xref: /aosp_15_r20/build/make/tools/fs_config/Android.bp (revision 9e94795a3d4ef5c1d47486f9a02bb378756cea8a)
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