blob: bf5e17196dfa40be33c281d84ea79c955f888140 [file] [log] [blame]
The Android Open Source Project88b60792009-03-03 19:28:42 -08001# 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
15LOCAL_PATH := $(call my-dir)
Mark Salyzyn073a9eb2015-04-15 12:53:39 -070016
William Robertsc950a352016-03-04 18:12:29 -080017# One can override the default android_filesystem_config.h file in one of two ways:
18#
19# 1. The old way:
20# To Build the custom target binary for the host to generate the fs_config
21# override files. The executable is hard coded to include the
22# $(TARGET_ANDROID_FILESYSTEM_CONFIG_H) file if it exists.
23# Expectations:
24# device/<vendor>/<device>/android_filesystem_config.h
25# fills in struct fs_path_config android_device_dirs[] and
26# struct fs_path_config android_device_files[]
27# device/<vendor>/<device>/device.mk
28# PRODUCT_PACKAGES += fs_config_dirs fs_config_files
29# If not specified, check if default one to be found
30#
31# 2. The new way:
32# set TARGET_FS_CONFIG_GEN to contain a list of intermediate format files
33# for generating the android_filesystem_config.h file.
34#
35# More information can be found in the README
Mark Salyzyn06b91b92015-04-01 14:41:29 -070036ANDROID_FS_CONFIG_H := android_filesystem_config.h
37
38ifneq ($(TARGET_ANDROID_FILESYSTEM_CONFIG_H),)
William Robertsc950a352016-03-04 18:12:29 -080039ifneq ($(TARGET_FS_CONFIG_GEN),)
40$(error Cannot set TARGET_ANDROID_FILESYSTEM_CONFIG_H and TARGET_FS_CONFIG_GEN simultaneously)
41endif
William Roberts78626c42016-02-11 10:35:07 -080042
43# One and only one file can be specified.
44ifneq ($(words $(TARGET_ANDROID_FILESYSTEM_CONFIG_H)),1)
45$(error Multiple fs_config files specified, \
46 see "$(TARGET_ANDROID_FILESYSTEM_CONFIG_H)".)
47endif
48
Mark Salyzyn06b91b92015-04-01 14:41:29 -070049ifeq ($(filter %/$(ANDROID_FS_CONFIG_H),$(TARGET_ANDROID_FILESYSTEM_CONFIG_H)),)
50$(error TARGET_ANDROID_FILESYSTEM_CONFIG_H file name must be $(ANDROID_FS_CONFIG_H), \
51 see "$(notdir $(TARGET_ANDROID_FILESYSTEM_CONFIG_H))".)
52endif
53
54my_fs_config_h := $(TARGET_ANDROID_FILESYSTEM_CONFIG_H)
55else ifneq ($(wildcard $(TARGET_DEVICE_DIR)/$(ANDROID_FS_CONFIG_H)),)
William Robertsc950a352016-03-04 18:12:29 -080056
57ifneq ($(TARGET_FS_CONFIG_GEN),)
58$(error Cannot provide $(TARGET_DEVICE_DIR)/$(ANDROID_FS_CONFIG_H) and set TARGET_FS_CONFIG_GEN simultaneously)
59endif
Mark Salyzyn06b91b92015-04-01 14:41:29 -070060my_fs_config_h := $(TARGET_DEVICE_DIR)/$(ANDROID_FS_CONFIG_H)
William Robertsc950a352016-03-04 18:12:29 -080061
Mark Salyzyn06b91b92015-04-01 14:41:29 -070062else
63my_fs_config_h := $(LOCAL_PATH)/default/$(ANDROID_FS_CONFIG_H)
64endif
65
Tom Cherry53940fd2018-06-14 12:19:19 -070066system_android_filesystem_config := system/core/include/private/android_filesystem_config.h
67
William Robertsc950a352016-03-04 18:12:29 -080068##################################
Mark Salyzyn06b91b92015-04-01 14:41:29 -070069include $(CLEAR_VARS)
70LOCAL_SRC_FILES := fs_config_generate.c
71LOCAL_MODULE := fs_config_generate_$(TARGET_DEVICE)
William Robertsc950a352016-03-04 18:12:29 -080072LOCAL_MODULE_CLASS := EXECUTABLES
Mark Salyzyn06b91b92015-04-01 14:41:29 -070073LOCAL_SHARED_LIBRARIES := libcutils
74LOCAL_CFLAGS := -Werror -Wno-error=\#warnings
William Robertsc950a352016-03-04 18:12:29 -080075
76ifneq ($(TARGET_FS_CONFIG_GEN),)
Elliott Hughes2d7c86d2016-12-13 23:37:07 +000077# Generate the "generated_oem_aid.h" file
78oem := $(local-generated-sources-dir)/generated_oem_aid.h
79$(oem): PRIVATE_LOCAL_PATH := $(LOCAL_PATH)
80$(oem): PRIVATE_TARGET_FS_CONFIG_GEN := $(TARGET_FS_CONFIG_GEN)
81$(oem): PRIVATE_ANDROID_FS_HDR := $(system_android_filesystem_config)
82$(oem): PRIVATE_CUSTOM_TOOL = $(PRIVATE_LOCAL_PATH)/fs_config_generator.py oemaid --aid-header=$(PRIVATE_ANDROID_FS_HDR) $(PRIVATE_TARGET_FS_CONFIG_GEN) > $@
83$(oem): $(TARGET_FS_CONFIG_GEN) $(LOCAL_PATH)/fs_config_generator.py
84 $(transform-generated-source)
85
86# Generate the fs_config header
William Robertsc950a352016-03-04 18:12:29 -080087gen := $(local-generated-sources-dir)/$(ANDROID_FS_CONFIG_H)
88$(gen): PRIVATE_LOCAL_PATH := $(LOCAL_PATH)
89$(gen): PRIVATE_TARGET_FS_CONFIG_GEN := $(TARGET_FS_CONFIG_GEN)
Elliott Hughes2d7c86d2016-12-13 23:37:07 +000090$(gen): PRIVATE_ANDROID_FS_HDR := $(system_android_filesystem_config)
91$(gen): PRIVATE_CUSTOM_TOOL = $(PRIVATE_LOCAL_PATH)/fs_config_generator.py fsconfig --aid-header=$(PRIVATE_ANDROID_FS_HDR) $(PRIVATE_TARGET_FS_CONFIG_GEN) > $@
92$(gen): $(TARGET_FS_CONFIG_GEN) $(system_android_filesystem_config) $(LOCAL_PATH)/fs_config_generator.py
William Robertsc950a352016-03-04 18:12:29 -080093 $(transform-generated-source)
94
Elliott Hughes2d7c86d2016-12-13 23:37:07 +000095LOCAL_GENERATED_SOURCES := $(oem) $(gen)
96
William Robertsc950a352016-03-04 18:12:29 -080097my_fs_config_h := $(gen)
Elliott Hughes2d7c86d2016-12-13 23:37:07 +000098my_gen_oem_aid := $(oem)
William Robertsc950a352016-03-04 18:12:29 -080099gen :=
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000100oem :=
William Robertsc950a352016-03-04 18:12:29 -0800101endif
102
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000103LOCAL_C_INCLUDES := $(dir $(my_fs_config_h)) $(dir $(my_gen_oem_aid))
William Robertsc950a352016-03-04 18:12:29 -0800104
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700105include $(BUILD_HOST_EXECUTABLE)
106fs_config_generate_bin := $(LOCAL_INSTALLED_MODULE)
Mark Salyzyn1fd588c2017-03-22 15:53:12 -0700107# List of all supported vendor, oem and odm Partitions
108fs_config_generate_extra_partition_list := $(strip \
109 $(if $(BOARD_USES_VENDORIMAGE)$(BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE),vendor) \
110 $(if $(BOARD_USES_OEMIMAGE)$(BOARD_OEMIMAGE_FILE_SYSTEM_TYPE),oem) \
111 $(if $(BOARD_USES_ODMIMAGE)$(BOARD_ODMIMAGE_FILE_SYSTEM_TYPE),odm))
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700112
William Robertsc950a352016-03-04 18:12:29 -0800113##################################
Anton Hanssone85ec842018-06-26 14:03:38 +0100114# Generate the <p>/etc/fs_config_dirs binary files for each partition.
115# Add fs_config_dirs to PRODUCT_PACKAGES in the device make file to enable.
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700116include $(CLEAR_VARS)
117
118LOCAL_MODULE := fs_config_dirs
Anton Hanssone85ec842018-06-26 14:03:38 +0100119LOCAL_REQUIRED_MODULES := \
120 fs_config_dirs_system \
121 $(foreach t,$(fs_config_generate_extra_partition_list),$(LOCAL_MODULE)_$(t))
122include $(BUILD_PHONY_PACKAGE)
123
124
125##################################
126# Generate the <p>/etc/fs_config_files binary files for each partition.
127# Add fs_config_files to PRODUCT_PACKAGES in the device make file to enable.
128include $(CLEAR_VARS)
129
130LOCAL_MODULE := fs_config_files
131LOCAL_REQUIRED_MODULES := \
132 fs_config_files_system \
133 $(foreach t,$(fs_config_generate_extra_partition_list),$(LOCAL_MODULE)_$(t))
134include $(BUILD_PHONY_PACKAGE)
135
136##################################
137# Generate the <p>/etc/fs_config_dirs binary files for all enabled partitions
138# excluding /system. Add fs_config_dirs_nonsystem to PRODUCT_PACKAGES in the
139# device make file to enable.
140include $(CLEAR_VARS)
141
142LOCAL_MODULE := fs_config_dirs_nonsystem
143LOCAL_REQUIRED_MODULES := $(foreach t,$(fs_config_generate_extra_partition_list),fs_config_dirs_$(t))
144include $(BUILD_PHONY_PACKAGE)
145
146##################################
147# Generate the <p>/etc/fs_config_files binary files for all enabled partitions
148# excluding /system. Add fs_config_files_nonsystem to PRODUCT_PACKAGES in the
149# device make file to enable.
150include $(CLEAR_VARS)
151
152LOCAL_MODULE := fs_config_files_nonsystem
153LOCAL_REQUIRED_MODULES := $(foreach t,$(fs_config_generate_extra_partition_list),fs_config_files_$(t))
154include $(BUILD_PHONY_PACKAGE)
155
156##################################
157# Generate the system/etc/fs_config_dirs binary file for the target
158# Add fs_config_dirs or fs_config_dirs_system to PRODUCT_PACKAGES in
159# the device make file to enable
160include $(CLEAR_VARS)
161
162LOCAL_MODULE := fs_config_dirs_system
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700163LOCAL_MODULE_CLASS := ETC
Anton Hanssone85ec842018-06-26 14:03:38 +0100164LOCAL_INSTALLED_MODULE_STEM := fs_config_dirs
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700165include $(BUILD_SYSTEM)/base_rules.mk
Mark Salyzyn705b59e2018-11-16 13:30:37 -0800166$(LOCAL_BUILT_MODULE): PRIVATE_PARTITION_LIST := $(fs_config_generate_extra_partition_list)
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700167$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
168 @mkdir -p $(dir $@)
Mark Salyzyn705b59e2018-11-16 13:30:37 -0800169 $< -D $(if $(PRIVATE_PARTITION_LIST), \
170 -P '$(subst $(space),$(comma),$(addprefix -,$(PRIVATE_PARTITION_LIST)))') \
Mark Salyzyn1fd588c2017-03-22 15:53:12 -0700171 -o $@
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700172
William Robertsc950a352016-03-04 18:12:29 -0800173##################################
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700174# Generate the system/etc/fs_config_files binary file for the target
Anton Hanssone85ec842018-06-26 14:03:38 +0100175# Add fs_config_files or fs_config_files_system to PRODUCT_PACKAGES in
176# the device make file to enable
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700177include $(CLEAR_VARS)
178
Anton Hanssone85ec842018-06-26 14:03:38 +0100179LOCAL_MODULE := fs_config_files_system
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700180LOCAL_MODULE_CLASS := ETC
Anton Hanssone85ec842018-06-26 14:03:38 +0100181LOCAL_INSTALLED_MODULE_STEM := fs_config_files
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700182include $(BUILD_SYSTEM)/base_rules.mk
Mark Salyzyn705b59e2018-11-16 13:30:37 -0800183$(LOCAL_BUILT_MODULE): PRIVATE_PARTITION_LIST := $(fs_config_generate_extra_partition_list)
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700184$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
185 @mkdir -p $(dir $@)
Mark Salyzyn705b59e2018-11-16 13:30:37 -0800186 $< -F $(if $(PRIVATE_PARTITION_LIST), \
187 -P '$(subst $(space),$(comma),$(addprefix -,$(PRIVATE_PARTITION_LIST)))') \
Mark Salyzyn1fd588c2017-03-22 15:53:12 -0700188 -o $@
189
190ifneq ($(filter vendor,$(fs_config_generate_extra_partition_list)),)
191##################################
192# Generate the vendor/etc/fs_config_dirs binary file for the target
193# Add fs_config_dirs or fs_config_dirs_vendor to PRODUCT_PACKAGES in
194# the device make file to enable.
195include $(CLEAR_VARS)
196
197LOCAL_MODULE := fs_config_dirs_vendor
198LOCAL_MODULE_CLASS := ETC
199LOCAL_INSTALLED_MODULE_STEM := fs_config_dirs
200LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/etc
201include $(BUILD_SYSTEM)/base_rules.mk
202$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
203 @mkdir -p $(dir $@)
204 $< -D -P vendor -o $@
205
206##################################
207# Generate the vendor/etc/fs_config_files binary file for the target
208# Add fs_config_files or fs_config_files_vendor to PRODUCT_PACKAGES in
209# the device make file to enable
210include $(CLEAR_VARS)
211
212LOCAL_MODULE := fs_config_files_vendor
213LOCAL_MODULE_CLASS := ETC
214LOCAL_INSTALLED_MODULE_STEM := fs_config_files
215LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/etc
216include $(BUILD_SYSTEM)/base_rules.mk
217$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
218 @mkdir -p $(dir $@)
219 $< -F -P vendor -o $@
220
221endif
222
223ifneq ($(filter oem,$(fs_config_generate_extra_partition_list)),)
224##################################
225# Generate the oem/etc/fs_config_dirs binary file for the target
226# Add fs_config_dirs or fs_config_dirs_oem to PRODUCT_PACKAGES in
227# the device make file to enable
228include $(CLEAR_VARS)
229
230LOCAL_MODULE := fs_config_dirs_oem
231LOCAL_MODULE_CLASS := ETC
232LOCAL_INSTALLED_MODULE_STEM := fs_config_dirs
233LOCAL_MODULE_PATH := $(TARGET_OUT_OEM)/etc
234include $(BUILD_SYSTEM)/base_rules.mk
235$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
236 @mkdir -p $(dir $@)
237 $< -D -P oem -o $@
238
239##################################
240# Generate the oem/etc/fs_config_files binary file for the target
241# Add fs_config_files or fs_config_files_oem to PRODUCT_PACKAGES in
242# the device make file to enable
243include $(CLEAR_VARS)
244
245LOCAL_MODULE := fs_config_files_oem
246LOCAL_MODULE_CLASS := ETC
247LOCAL_INSTALLED_MODULE_STEM := fs_config_files
248LOCAL_MODULE_PATH := $(TARGET_OUT_OEM)/etc
249include $(BUILD_SYSTEM)/base_rules.mk
250$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
251 @mkdir -p $(dir $@)
252 $< -F -P oem -o $@
253
254endif
255
256ifneq ($(filter odm,$(fs_config_generate_extra_partition_list)),)
257##################################
258# Generate the odm/etc/fs_config_dirs binary file for the target
259# Add fs_config_dirs or fs_config_dirs_odm to PRODUCT_PACKAGES in
260# the device make file to enable
261include $(CLEAR_VARS)
262
263LOCAL_MODULE := fs_config_dirs_odm
264LOCAL_MODULE_CLASS := ETC
265LOCAL_INSTALLED_MODULE_STEM := fs_config_dirs
266LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/etc
267include $(BUILD_SYSTEM)/base_rules.mk
268$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
269 @mkdir -p $(dir $@)
270 $< -D -P odm -o $@
271
272##################################
273# Generate the odm/etc/fs_config_files binary file for the target
274# Add fs_config_files of fs_config_files_odm to PRODUCT_PACKAGES in
275# the device make file to enable
276include $(CLEAR_VARS)
277
278LOCAL_MODULE := fs_config_files_odm
279LOCAL_MODULE_CLASS := ETC
280LOCAL_INSTALLED_MODULE_STEM := fs_config_files
281LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/etc
282include $(BUILD_SYSTEM)/base_rules.mk
283$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
284 @mkdir -p $(dir $@)
285 $< -F -P odm -o $@
286
287endif
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700288
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000289##################################
Tom Cherry7a95c152018-04-04 11:21:29 -0700290# Build the oemaid header library when fs config files are present.
291# Intentionally break build if you require generated AIDs
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000292# header file, but are not using any fs config files.
Tom Cherry53940fd2018-06-14 12:19:19 -0700293ifneq ($(TARGET_FS_CONFIG_GEN),)
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000294include $(CLEAR_VARS)
Tom Cherry7a95c152018-04-04 11:21:29 -0700295LOCAL_MODULE := oemaids_headers
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000296LOCAL_EXPORT_C_INCLUDE_DIRS := $(dir $(my_gen_oem_aid))
297LOCAL_EXPORT_C_INCLUDE_DEPS := $(my_gen_oem_aid)
Tom Cherry7a95c152018-04-04 11:21:29 -0700298include $(BUILD_HEADER_LIBRARY)
Tom Cherry53940fd2018-06-14 12:19:19 -0700299endif
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000300
301##################################
Tom Cherry2d197a12018-05-14 13:14:41 -0700302# Generate the vendor/etc/passwd text file for the target
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000303# This file may be empty if no AIDs are defined in
304# TARGET_FS_CONFIG_GEN files.
305include $(CLEAR_VARS)
306
307LOCAL_MODULE := passwd
308LOCAL_MODULE_CLASS := ETC
Tom Cherry55d01042018-02-08 13:15:21 -0800309LOCAL_VENDOR_MODULE := true
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000310
311include $(BUILD_SYSTEM)/base_rules.mk
312
Tom Cherry53940fd2018-06-14 12:19:19 -0700313ifneq ($(TARGET_FS_CONFIG_GEN),)
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000314$(LOCAL_BUILT_MODULE): PRIVATE_TARGET_FS_CONFIG_GEN := $(TARGET_FS_CONFIG_GEN)
Tom Cherry53940fd2018-06-14 12:19:19 -0700315else
316$(LOCAL_BUILT_MODULE): PRIVATE_TARGET_FS_CONFIG_GEN := /dev/null
317endif
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000318$(LOCAL_BUILT_MODULE): PRIVATE_ANDROID_FS_HDR := $(system_android_filesystem_config)
319$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/fs_config_generator.py $(TARGET_FS_CONFIG_GEN) $(system_android_filesystem_config)
320 @mkdir -p $(dir $@)
Tom Cherry2d197a12018-05-14 13:14:41 -0700321 $(hide) $< passwd --required-prefix=vendor_ --aid-header=$(PRIVATE_ANDROID_FS_HDR) $(PRIVATE_TARGET_FS_CONFIG_GEN) > $@
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000322
323##################################
Tom Cherry2d197a12018-05-14 13:14:41 -0700324# Generate the vendor/etc/group text file for the target
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000325# This file may be empty if no AIDs are defined in
326# TARGET_FS_CONFIG_GEN files.
327include $(CLEAR_VARS)
328
329LOCAL_MODULE := group
330LOCAL_MODULE_CLASS := ETC
Tom Cherry55d01042018-02-08 13:15:21 -0800331LOCAL_VENDOR_MODULE := true
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000332
333include $(BUILD_SYSTEM)/base_rules.mk
334
Tom Cherry53940fd2018-06-14 12:19:19 -0700335ifneq ($(TARGET_FS_CONFIG_GEN),)
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000336$(LOCAL_BUILT_MODULE): PRIVATE_TARGET_FS_CONFIG_GEN := $(TARGET_FS_CONFIG_GEN)
Tom Cherry53940fd2018-06-14 12:19:19 -0700337else
338$(LOCAL_BUILT_MODULE): PRIVATE_TARGET_FS_CONFIG_GEN := /dev/null
339endif
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000340$(LOCAL_BUILT_MODULE): PRIVATE_ANDROID_FS_HDR := $(system_android_filesystem_config)
341$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/fs_config_generator.py $(TARGET_FS_CONFIG_GEN) $(system_android_filesystem_config)
342 @mkdir -p $(dir $@)
Tom Cherry2d197a12018-05-14 13:14:41 -0700343 $(hide) $< group --required-prefix=vendor_ --aid-header=$(PRIVATE_ANDROID_FS_HDR) $(PRIVATE_TARGET_FS_CONFIG_GEN) > $@
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000344
345system_android_filesystem_config :=
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000346
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700347ANDROID_FS_CONFIG_H :=
348my_fs_config_h :=
349fs_config_generate_bin :=
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000350my_gen_oem_aid :=
William Roberts6b19e492017-05-15 11:02:53 -0700351fs_config_generate_extra_partition_list :=