blob: cb32b9e35ae6a13fbd41861961a937363f5501a4 [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
166$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
167 @mkdir -p $(dir $@)
Mark Salyzyn1fd588c2017-03-22 15:53:12 -0700168 $< -D $(if $(fs_config_generate_extra_partition_list), \
169 -P '$(subst $(space),$(comma),$(addprefix -,$(fs_config_generate_extra_partition_list)))') \
170 -o $@
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700171
William Robertsc950a352016-03-04 18:12:29 -0800172##################################
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700173# Generate the system/etc/fs_config_files binary file for the target
Anton Hanssone85ec842018-06-26 14:03:38 +0100174# Add fs_config_files or fs_config_files_system to PRODUCT_PACKAGES in
175# the device make file to enable
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700176include $(CLEAR_VARS)
177
Anton Hanssone85ec842018-06-26 14:03:38 +0100178LOCAL_MODULE := fs_config_files_system
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700179LOCAL_MODULE_CLASS := ETC
Anton Hanssone85ec842018-06-26 14:03:38 +0100180LOCAL_INSTALLED_MODULE_STEM := fs_config_files
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700181include $(BUILD_SYSTEM)/base_rules.mk
182$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
183 @mkdir -p $(dir $@)
Mark Salyzyn1fd588c2017-03-22 15:53:12 -0700184 $< -F $(if $(fs_config_generate_extra_partition_list), \
185 -P '$(subst $(space),$(comma),$(addprefix -,$(fs_config_generate_extra_partition_list)))') \
186 -o $@
187
188ifneq ($(filter vendor,$(fs_config_generate_extra_partition_list)),)
189##################################
190# Generate the vendor/etc/fs_config_dirs binary file for the target
191# Add fs_config_dirs or fs_config_dirs_vendor to PRODUCT_PACKAGES in
192# the device make file to enable.
193include $(CLEAR_VARS)
194
195LOCAL_MODULE := fs_config_dirs_vendor
196LOCAL_MODULE_CLASS := ETC
197LOCAL_INSTALLED_MODULE_STEM := fs_config_dirs
198LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/etc
199include $(BUILD_SYSTEM)/base_rules.mk
200$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
201 @mkdir -p $(dir $@)
202 $< -D -P vendor -o $@
203
204##################################
205# Generate the vendor/etc/fs_config_files binary file for the target
206# Add fs_config_files or fs_config_files_vendor to PRODUCT_PACKAGES in
207# the device make file to enable
208include $(CLEAR_VARS)
209
210LOCAL_MODULE := fs_config_files_vendor
211LOCAL_MODULE_CLASS := ETC
212LOCAL_INSTALLED_MODULE_STEM := fs_config_files
213LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/etc
214include $(BUILD_SYSTEM)/base_rules.mk
215$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
216 @mkdir -p $(dir $@)
217 $< -F -P vendor -o $@
218
219endif
220
221ifneq ($(filter oem,$(fs_config_generate_extra_partition_list)),)
222##################################
223# Generate the oem/etc/fs_config_dirs binary file for the target
224# Add fs_config_dirs or fs_config_dirs_oem to PRODUCT_PACKAGES in
225# the device make file to enable
226include $(CLEAR_VARS)
227
228LOCAL_MODULE := fs_config_dirs_oem
229LOCAL_MODULE_CLASS := ETC
230LOCAL_INSTALLED_MODULE_STEM := fs_config_dirs
231LOCAL_MODULE_PATH := $(TARGET_OUT_OEM)/etc
232include $(BUILD_SYSTEM)/base_rules.mk
233$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
234 @mkdir -p $(dir $@)
235 $< -D -P oem -o $@
236
237##################################
238# Generate the oem/etc/fs_config_files binary file for the target
239# Add fs_config_files or fs_config_files_oem to PRODUCT_PACKAGES in
240# the device make file to enable
241include $(CLEAR_VARS)
242
243LOCAL_MODULE := fs_config_files_oem
244LOCAL_MODULE_CLASS := ETC
245LOCAL_INSTALLED_MODULE_STEM := fs_config_files
246LOCAL_MODULE_PATH := $(TARGET_OUT_OEM)/etc
247include $(BUILD_SYSTEM)/base_rules.mk
248$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
249 @mkdir -p $(dir $@)
250 $< -F -P oem -o $@
251
252endif
253
254ifneq ($(filter odm,$(fs_config_generate_extra_partition_list)),)
255##################################
256# Generate the odm/etc/fs_config_dirs binary file for the target
257# Add fs_config_dirs or fs_config_dirs_odm to PRODUCT_PACKAGES in
258# the device make file to enable
259include $(CLEAR_VARS)
260
261LOCAL_MODULE := fs_config_dirs_odm
262LOCAL_MODULE_CLASS := ETC
263LOCAL_INSTALLED_MODULE_STEM := fs_config_dirs
264LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/etc
265include $(BUILD_SYSTEM)/base_rules.mk
266$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
267 @mkdir -p $(dir $@)
268 $< -D -P odm -o $@
269
270##################################
271# Generate the odm/etc/fs_config_files binary file for the target
272# Add fs_config_files of fs_config_files_odm to PRODUCT_PACKAGES in
273# the device make file to enable
274include $(CLEAR_VARS)
275
276LOCAL_MODULE := fs_config_files_odm
277LOCAL_MODULE_CLASS := ETC
278LOCAL_INSTALLED_MODULE_STEM := fs_config_files
279LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/etc
280include $(BUILD_SYSTEM)/base_rules.mk
281$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
282 @mkdir -p $(dir $@)
283 $< -F -P odm -o $@
284
285endif
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700286
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000287##################################
Tom Cherry7a95c152018-04-04 11:21:29 -0700288# Build the oemaid header library when fs config files are present.
289# Intentionally break build if you require generated AIDs
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000290# header file, but are not using any fs config files.
Tom Cherry53940fd2018-06-14 12:19:19 -0700291ifneq ($(TARGET_FS_CONFIG_GEN),)
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000292include $(CLEAR_VARS)
Tom Cherry7a95c152018-04-04 11:21:29 -0700293LOCAL_MODULE := oemaids_headers
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000294LOCAL_EXPORT_C_INCLUDE_DIRS := $(dir $(my_gen_oem_aid))
295LOCAL_EXPORT_C_INCLUDE_DEPS := $(my_gen_oem_aid)
Tom Cherry7a95c152018-04-04 11:21:29 -0700296include $(BUILD_HEADER_LIBRARY)
Tom Cherry53940fd2018-06-14 12:19:19 -0700297endif
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000298
299##################################
Tom Cherry2d197a12018-05-14 13:14:41 -0700300# Generate the vendor/etc/passwd text file for the target
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000301# This file may be empty if no AIDs are defined in
302# TARGET_FS_CONFIG_GEN files.
303include $(CLEAR_VARS)
304
305LOCAL_MODULE := passwd
306LOCAL_MODULE_CLASS := ETC
Tom Cherry55d01042018-02-08 13:15:21 -0800307LOCAL_VENDOR_MODULE := true
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000308
309include $(BUILD_SYSTEM)/base_rules.mk
310
Tom Cherry53940fd2018-06-14 12:19:19 -0700311ifneq ($(TARGET_FS_CONFIG_GEN),)
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000312$(LOCAL_BUILT_MODULE): PRIVATE_TARGET_FS_CONFIG_GEN := $(TARGET_FS_CONFIG_GEN)
Tom Cherry53940fd2018-06-14 12:19:19 -0700313else
314$(LOCAL_BUILT_MODULE): PRIVATE_TARGET_FS_CONFIG_GEN := /dev/null
315endif
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000316$(LOCAL_BUILT_MODULE): PRIVATE_ANDROID_FS_HDR := $(system_android_filesystem_config)
317$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/fs_config_generator.py $(TARGET_FS_CONFIG_GEN) $(system_android_filesystem_config)
318 @mkdir -p $(dir $@)
Tom Cherry2d197a12018-05-14 13:14:41 -0700319 $(hide) $< passwd --required-prefix=vendor_ --aid-header=$(PRIVATE_ANDROID_FS_HDR) $(PRIVATE_TARGET_FS_CONFIG_GEN) > $@
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000320
321##################################
Tom Cherry2d197a12018-05-14 13:14:41 -0700322# Generate the vendor/etc/group text file for the target
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000323# This file may be empty if no AIDs are defined in
324# TARGET_FS_CONFIG_GEN files.
325include $(CLEAR_VARS)
326
327LOCAL_MODULE := group
328LOCAL_MODULE_CLASS := ETC
Tom Cherry55d01042018-02-08 13:15:21 -0800329LOCAL_VENDOR_MODULE := true
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000330
331include $(BUILD_SYSTEM)/base_rules.mk
332
Tom Cherry53940fd2018-06-14 12:19:19 -0700333ifneq ($(TARGET_FS_CONFIG_GEN),)
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000334$(LOCAL_BUILT_MODULE): PRIVATE_TARGET_FS_CONFIG_GEN := $(TARGET_FS_CONFIG_GEN)
Tom Cherry53940fd2018-06-14 12:19:19 -0700335else
336$(LOCAL_BUILT_MODULE): PRIVATE_TARGET_FS_CONFIG_GEN := /dev/null
337endif
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000338$(LOCAL_BUILT_MODULE): PRIVATE_ANDROID_FS_HDR := $(system_android_filesystem_config)
339$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/fs_config_generator.py $(TARGET_FS_CONFIG_GEN) $(system_android_filesystem_config)
340 @mkdir -p $(dir $@)
Tom Cherry2d197a12018-05-14 13:14:41 -0700341 $(hide) $< group --required-prefix=vendor_ --aid-header=$(PRIVATE_ANDROID_FS_HDR) $(PRIVATE_TARGET_FS_CONFIG_GEN) > $@
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000342
343system_android_filesystem_config :=
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000344
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700345ANDROID_FS_CONFIG_H :=
346my_fs_config_h :=
347fs_config_generate_bin :=
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000348my_gen_oem_aid :=
William Roberts6b19e492017-05-15 11:02:53 -0700349fs_config_generate_extra_partition_list :=