blob: 8a8eca98efc8146e5102250177971c940d0ba7f3 [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##################################
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700114# Generate the system/etc/fs_config_dirs binary file for the target
115# Add fs_config_dirs to PRODUCT_PACKAGES in the device make file to enable
116include $(CLEAR_VARS)
117
118LOCAL_MODULE := fs_config_dirs
119LOCAL_MODULE_CLASS := ETC
Mark Salyzyneb8dc722017-04-27 07:50:14 -0700120LOCAL_REQUIRED_MODULES := $(foreach t,$(fs_config_generate_extra_partition_list),$(LOCAL_MODULE)_$(t))
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700121include $(BUILD_SYSTEM)/base_rules.mk
122$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
123 @mkdir -p $(dir $@)
Mark Salyzyn1fd588c2017-03-22 15:53:12 -0700124 $< -D $(if $(fs_config_generate_extra_partition_list), \
125 -P '$(subst $(space),$(comma),$(addprefix -,$(fs_config_generate_extra_partition_list)))') \
126 -o $@
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700127
William Robertsc950a352016-03-04 18:12:29 -0800128##################################
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700129# Generate the system/etc/fs_config_files binary file for the target
130# Add fs_config_files to PRODUCT_PACKAGES in the device make file to enable
131include $(CLEAR_VARS)
132
133LOCAL_MODULE := fs_config_files
134LOCAL_MODULE_CLASS := ETC
Mark Salyzyneb8dc722017-04-27 07:50:14 -0700135LOCAL_REQUIRED_MODULES := $(foreach t,$(fs_config_generate_extra_partition_list),$(LOCAL_MODULE)_$(t))
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700136include $(BUILD_SYSTEM)/base_rules.mk
137$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
138 @mkdir -p $(dir $@)
Mark Salyzyn1fd588c2017-03-22 15:53:12 -0700139 $< -F $(if $(fs_config_generate_extra_partition_list), \
140 -P '$(subst $(space),$(comma),$(addprefix -,$(fs_config_generate_extra_partition_list)))') \
141 -o $@
142
143ifneq ($(filter vendor,$(fs_config_generate_extra_partition_list)),)
144##################################
145# Generate the vendor/etc/fs_config_dirs binary file for the target
146# Add fs_config_dirs or fs_config_dirs_vendor to PRODUCT_PACKAGES in
147# the device make file to enable.
148include $(CLEAR_VARS)
149
150LOCAL_MODULE := fs_config_dirs_vendor
151LOCAL_MODULE_CLASS := ETC
152LOCAL_INSTALLED_MODULE_STEM := fs_config_dirs
153LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/etc
154include $(BUILD_SYSTEM)/base_rules.mk
155$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
156 @mkdir -p $(dir $@)
157 $< -D -P vendor -o $@
158
159##################################
160# Generate the vendor/etc/fs_config_files binary file for the target
161# Add fs_config_files or fs_config_files_vendor to PRODUCT_PACKAGES in
162# the device make file to enable
163include $(CLEAR_VARS)
164
165LOCAL_MODULE := fs_config_files_vendor
166LOCAL_MODULE_CLASS := ETC
167LOCAL_INSTALLED_MODULE_STEM := fs_config_files
168LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/etc
169include $(BUILD_SYSTEM)/base_rules.mk
170$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
171 @mkdir -p $(dir $@)
172 $< -F -P vendor -o $@
173
174endif
175
176ifneq ($(filter oem,$(fs_config_generate_extra_partition_list)),)
177##################################
178# Generate the oem/etc/fs_config_dirs binary file for the target
179# Add fs_config_dirs or fs_config_dirs_oem to PRODUCT_PACKAGES in
180# the device make file to enable
181include $(CLEAR_VARS)
182
183LOCAL_MODULE := fs_config_dirs_oem
184LOCAL_MODULE_CLASS := ETC
185LOCAL_INSTALLED_MODULE_STEM := fs_config_dirs
186LOCAL_MODULE_PATH := $(TARGET_OUT_OEM)/etc
187include $(BUILD_SYSTEM)/base_rules.mk
188$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
189 @mkdir -p $(dir $@)
190 $< -D -P oem -o $@
191
192##################################
193# Generate the oem/etc/fs_config_files binary file for the target
194# Add fs_config_files or fs_config_files_oem to PRODUCT_PACKAGES in
195# the device make file to enable
196include $(CLEAR_VARS)
197
198LOCAL_MODULE := fs_config_files_oem
199LOCAL_MODULE_CLASS := ETC
200LOCAL_INSTALLED_MODULE_STEM := fs_config_files
201LOCAL_MODULE_PATH := $(TARGET_OUT_OEM)/etc
202include $(BUILD_SYSTEM)/base_rules.mk
203$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
204 @mkdir -p $(dir $@)
205 $< -F -P oem -o $@
206
207endif
208
209ifneq ($(filter odm,$(fs_config_generate_extra_partition_list)),)
210##################################
211# Generate the odm/etc/fs_config_dirs binary file for the target
212# Add fs_config_dirs or fs_config_dirs_odm to PRODUCT_PACKAGES in
213# the device make file to enable
214include $(CLEAR_VARS)
215
216LOCAL_MODULE := fs_config_dirs_odm
217LOCAL_MODULE_CLASS := ETC
218LOCAL_INSTALLED_MODULE_STEM := fs_config_dirs
219LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/etc
220include $(BUILD_SYSTEM)/base_rules.mk
221$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
222 @mkdir -p $(dir $@)
223 $< -D -P odm -o $@
224
225##################################
226# Generate the odm/etc/fs_config_files binary file for the target
227# Add fs_config_files of fs_config_files_odm to PRODUCT_PACKAGES in
228# the device make file to enable
229include $(CLEAR_VARS)
230
231LOCAL_MODULE := fs_config_files_odm
232LOCAL_MODULE_CLASS := ETC
233LOCAL_INSTALLED_MODULE_STEM := fs_config_files
234LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/etc
235include $(BUILD_SYSTEM)/base_rules.mk
236$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
237 @mkdir -p $(dir $@)
238 $< -F -P odm -o $@
239
240endif
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700241
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000242##################################
Tom Cherry7a95c152018-04-04 11:21:29 -0700243# Build the oemaid header library when fs config files are present.
244# Intentionally break build if you require generated AIDs
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000245# header file, but are not using any fs config files.
Tom Cherry53940fd2018-06-14 12:19:19 -0700246ifneq ($(TARGET_FS_CONFIG_GEN),)
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000247include $(CLEAR_VARS)
Tom Cherry7a95c152018-04-04 11:21:29 -0700248LOCAL_MODULE := oemaids_headers
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000249LOCAL_EXPORT_C_INCLUDE_DIRS := $(dir $(my_gen_oem_aid))
250LOCAL_EXPORT_C_INCLUDE_DEPS := $(my_gen_oem_aid)
Tom Cherry7a95c152018-04-04 11:21:29 -0700251include $(BUILD_HEADER_LIBRARY)
Tom Cherry53940fd2018-06-14 12:19:19 -0700252endif
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000253
254##################################
Tom Cherry2d197a12018-05-14 13:14:41 -0700255# Generate the vendor/etc/passwd text file for the target
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000256# This file may be empty if no AIDs are defined in
257# TARGET_FS_CONFIG_GEN files.
258include $(CLEAR_VARS)
259
260LOCAL_MODULE := passwd
261LOCAL_MODULE_CLASS := ETC
Tom Cherry55d01042018-02-08 13:15:21 -0800262LOCAL_VENDOR_MODULE := true
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000263
264include $(BUILD_SYSTEM)/base_rules.mk
265
Tom Cherry53940fd2018-06-14 12:19:19 -0700266ifneq ($(TARGET_FS_CONFIG_GEN),)
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000267$(LOCAL_BUILT_MODULE): PRIVATE_TARGET_FS_CONFIG_GEN := $(TARGET_FS_CONFIG_GEN)
Tom Cherry53940fd2018-06-14 12:19:19 -0700268else
269$(LOCAL_BUILT_MODULE): PRIVATE_TARGET_FS_CONFIG_GEN := /dev/null
270endif
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000271$(LOCAL_BUILT_MODULE): PRIVATE_ANDROID_FS_HDR := $(system_android_filesystem_config)
272$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/fs_config_generator.py $(TARGET_FS_CONFIG_GEN) $(system_android_filesystem_config)
273 @mkdir -p $(dir $@)
Tom Cherry2d197a12018-05-14 13:14:41 -0700274 $(hide) $< passwd --required-prefix=vendor_ --aid-header=$(PRIVATE_ANDROID_FS_HDR) $(PRIVATE_TARGET_FS_CONFIG_GEN) > $@
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000275
276##################################
Tom Cherry2d197a12018-05-14 13:14:41 -0700277# Generate the vendor/etc/group text file for the target
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000278# This file may be empty if no AIDs are defined in
279# TARGET_FS_CONFIG_GEN files.
280include $(CLEAR_VARS)
281
282LOCAL_MODULE := group
283LOCAL_MODULE_CLASS := ETC
Tom Cherry55d01042018-02-08 13:15:21 -0800284LOCAL_VENDOR_MODULE := true
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000285
286include $(BUILD_SYSTEM)/base_rules.mk
287
Tom Cherry53940fd2018-06-14 12:19:19 -0700288ifneq ($(TARGET_FS_CONFIG_GEN),)
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000289$(LOCAL_BUILT_MODULE): PRIVATE_TARGET_FS_CONFIG_GEN := $(TARGET_FS_CONFIG_GEN)
Tom Cherry53940fd2018-06-14 12:19:19 -0700290else
291$(LOCAL_BUILT_MODULE): PRIVATE_TARGET_FS_CONFIG_GEN := /dev/null
292endif
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000293$(LOCAL_BUILT_MODULE): PRIVATE_ANDROID_FS_HDR := $(system_android_filesystem_config)
294$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/fs_config_generator.py $(TARGET_FS_CONFIG_GEN) $(system_android_filesystem_config)
295 @mkdir -p $(dir $@)
Tom Cherry2d197a12018-05-14 13:14:41 -0700296 $(hide) $< group --required-prefix=vendor_ --aid-header=$(PRIVATE_ANDROID_FS_HDR) $(PRIVATE_TARGET_FS_CONFIG_GEN) > $@
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000297
298system_android_filesystem_config :=
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000299
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700300ANDROID_FS_CONFIG_H :=
301my_fs_config_h :=
302fs_config_generate_bin :=
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000303my_gen_oem_aid :=
William Roberts6b19e492017-05-15 11:02:53 -0700304fs_config_generate_extra_partition_list :=