blob: dcd41aae3fb3bb8552f331cb3f14fa34e5c8af83 [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
The Android Open Source Project88b60792009-03-03 19:28:42 -080017include $(CLEAR_VARS)
18
The Android Open Source Project88b60792009-03-03 19:28:42 -080019LOCAL_SRC_FILES := fs_config.c
20LOCAL_MODULE := fs_config
Mark Salyzyn073a9eb2015-04-15 12:53:39 -070021LOCAL_SHARED_LIBRARIES := libcutils libselinux
Mark Salyzyn1c5f19e2015-04-01 12:54:46 -070022LOCAL_CFLAGS := -Werror
The Android Open Source Project88b60792009-03-03 19:28:42 -080023
24include $(BUILD_HOST_EXECUTABLE)
Mark Salyzyn06b91b92015-04-01 14:41:29 -070025
William Robertsc950a352016-03-04 18:12:29 -080026# One can override the default android_filesystem_config.h file in one of two ways:
27#
28# 1. The old way:
29# To Build the custom target binary for the host to generate the fs_config
30# override files. The executable is hard coded to include the
31# $(TARGET_ANDROID_FILESYSTEM_CONFIG_H) file if it exists.
32# Expectations:
33# device/<vendor>/<device>/android_filesystem_config.h
34# fills in struct fs_path_config android_device_dirs[] and
35# struct fs_path_config android_device_files[]
36# device/<vendor>/<device>/device.mk
37# PRODUCT_PACKAGES += fs_config_dirs fs_config_files
38# If not specified, check if default one to be found
39#
40# 2. The new way:
41# set TARGET_FS_CONFIG_GEN to contain a list of intermediate format files
42# for generating the android_filesystem_config.h file.
43#
44# More information can be found in the README
Mark Salyzyn06b91b92015-04-01 14:41:29 -070045ANDROID_FS_CONFIG_H := android_filesystem_config.h
46
47ifneq ($(TARGET_ANDROID_FILESYSTEM_CONFIG_H),)
William Robertsc950a352016-03-04 18:12:29 -080048ifneq ($(TARGET_FS_CONFIG_GEN),)
49$(error Cannot set TARGET_ANDROID_FILESYSTEM_CONFIG_H and TARGET_FS_CONFIG_GEN simultaneously)
50endif
William Roberts78626c42016-02-11 10:35:07 -080051
52# One and only one file can be specified.
53ifneq ($(words $(TARGET_ANDROID_FILESYSTEM_CONFIG_H)),1)
54$(error Multiple fs_config files specified, \
55 see "$(TARGET_ANDROID_FILESYSTEM_CONFIG_H)".)
56endif
57
Mark Salyzyn06b91b92015-04-01 14:41:29 -070058ifeq ($(filter %/$(ANDROID_FS_CONFIG_H),$(TARGET_ANDROID_FILESYSTEM_CONFIG_H)),)
59$(error TARGET_ANDROID_FILESYSTEM_CONFIG_H file name must be $(ANDROID_FS_CONFIG_H), \
60 see "$(notdir $(TARGET_ANDROID_FILESYSTEM_CONFIG_H))".)
61endif
62
63my_fs_config_h := $(TARGET_ANDROID_FILESYSTEM_CONFIG_H)
64else ifneq ($(wildcard $(TARGET_DEVICE_DIR)/$(ANDROID_FS_CONFIG_H)),)
William Robertsc950a352016-03-04 18:12:29 -080065
66ifneq ($(TARGET_FS_CONFIG_GEN),)
67$(error Cannot provide $(TARGET_DEVICE_DIR)/$(ANDROID_FS_CONFIG_H) and set TARGET_FS_CONFIG_GEN simultaneously)
68endif
Mark Salyzyn06b91b92015-04-01 14:41:29 -070069my_fs_config_h := $(TARGET_DEVICE_DIR)/$(ANDROID_FS_CONFIG_H)
William Robertsc950a352016-03-04 18:12:29 -080070
Mark Salyzyn06b91b92015-04-01 14:41:29 -070071else
72my_fs_config_h := $(LOCAL_PATH)/default/$(ANDROID_FS_CONFIG_H)
73endif
74
William Robertsc950a352016-03-04 18:12:29 -080075##################################
Mark Salyzyn06b91b92015-04-01 14:41:29 -070076include $(CLEAR_VARS)
77LOCAL_SRC_FILES := fs_config_generate.c
78LOCAL_MODULE := fs_config_generate_$(TARGET_DEVICE)
William Robertsc950a352016-03-04 18:12:29 -080079LOCAL_MODULE_CLASS := EXECUTABLES
Mark Salyzyn06b91b92015-04-01 14:41:29 -070080LOCAL_SHARED_LIBRARIES := libcutils
81LOCAL_CFLAGS := -Werror -Wno-error=\#warnings
William Robertsc950a352016-03-04 18:12:29 -080082
83ifneq ($(TARGET_FS_CONFIG_GEN),)
Elliott Hughes2d7c86d2016-12-13 23:37:07 +000084system_android_filesystem_config := system/core/include/private/android_filesystem_config.h
85
86# Generate the "generated_oem_aid.h" file
87oem := $(local-generated-sources-dir)/generated_oem_aid.h
88$(oem): PRIVATE_LOCAL_PATH := $(LOCAL_PATH)
89$(oem): PRIVATE_TARGET_FS_CONFIG_GEN := $(TARGET_FS_CONFIG_GEN)
90$(oem): PRIVATE_ANDROID_FS_HDR := $(system_android_filesystem_config)
91$(oem): PRIVATE_CUSTOM_TOOL = $(PRIVATE_LOCAL_PATH)/fs_config_generator.py oemaid --aid-header=$(PRIVATE_ANDROID_FS_HDR) $(PRIVATE_TARGET_FS_CONFIG_GEN) > $@
92$(oem): $(TARGET_FS_CONFIG_GEN) $(LOCAL_PATH)/fs_config_generator.py
93 $(transform-generated-source)
94
95# Generate the fs_config header
William Robertsc950a352016-03-04 18:12:29 -080096gen := $(local-generated-sources-dir)/$(ANDROID_FS_CONFIG_H)
97$(gen): PRIVATE_LOCAL_PATH := $(LOCAL_PATH)
98$(gen): PRIVATE_TARGET_FS_CONFIG_GEN := $(TARGET_FS_CONFIG_GEN)
Elliott Hughes2d7c86d2016-12-13 23:37:07 +000099$(gen): PRIVATE_ANDROID_FS_HDR := $(system_android_filesystem_config)
100$(gen): PRIVATE_CUSTOM_TOOL = $(PRIVATE_LOCAL_PATH)/fs_config_generator.py fsconfig --aid-header=$(PRIVATE_ANDROID_FS_HDR) $(PRIVATE_TARGET_FS_CONFIG_GEN) > $@
101$(gen): $(TARGET_FS_CONFIG_GEN) $(system_android_filesystem_config) $(LOCAL_PATH)/fs_config_generator.py
William Robertsc950a352016-03-04 18:12:29 -0800102 $(transform-generated-source)
103
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000104LOCAL_GENERATED_SOURCES := $(oem) $(gen)
105
William Robertsc950a352016-03-04 18:12:29 -0800106my_fs_config_h := $(gen)
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000107my_gen_oem_aid := $(oem)
William Robertsc950a352016-03-04 18:12:29 -0800108gen :=
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000109oem :=
William Robertsc950a352016-03-04 18:12:29 -0800110endif
111
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000112LOCAL_C_INCLUDES := $(dir $(my_fs_config_h)) $(dir $(my_gen_oem_aid))
William Robertsc950a352016-03-04 18:12:29 -0800113
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700114include $(BUILD_HOST_EXECUTABLE)
115fs_config_generate_bin := $(LOCAL_INSTALLED_MODULE)
Mark Salyzyn1fd588c2017-03-22 15:53:12 -0700116# List of all supported vendor, oem and odm Partitions
117fs_config_generate_extra_partition_list := $(strip \
118 $(if $(BOARD_USES_VENDORIMAGE)$(BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE),vendor) \
119 $(if $(BOARD_USES_OEMIMAGE)$(BOARD_OEMIMAGE_FILE_SYSTEM_TYPE),oem) \
120 $(if $(BOARD_USES_ODMIMAGE)$(BOARD_ODMIMAGE_FILE_SYSTEM_TYPE),odm))
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700121
William Robertsc950a352016-03-04 18:12:29 -0800122##################################
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700123# Generate the system/etc/fs_config_dirs binary file for the target
124# Add fs_config_dirs to PRODUCT_PACKAGES in the device make file to enable
125include $(CLEAR_VARS)
126
127LOCAL_MODULE := fs_config_dirs
128LOCAL_MODULE_CLASS := ETC
Mark Salyzyneb8dc722017-04-27 07:50:14 -0700129LOCAL_REQUIRED_MODULES := $(foreach t,$(fs_config_generate_extra_partition_list),$(LOCAL_MODULE)_$(t))
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700130include $(BUILD_SYSTEM)/base_rules.mk
131$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
132 @mkdir -p $(dir $@)
Mark Salyzyn1fd588c2017-03-22 15:53:12 -0700133 $< -D $(if $(fs_config_generate_extra_partition_list), \
134 -P '$(subst $(space),$(comma),$(addprefix -,$(fs_config_generate_extra_partition_list)))') \
135 -o $@
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700136
William Robertsc950a352016-03-04 18:12:29 -0800137##################################
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700138# Generate the system/etc/fs_config_files binary file for the target
139# Add fs_config_files to PRODUCT_PACKAGES in the device make file to enable
140include $(CLEAR_VARS)
141
142LOCAL_MODULE := fs_config_files
143LOCAL_MODULE_CLASS := ETC
Mark Salyzyneb8dc722017-04-27 07:50:14 -0700144LOCAL_REQUIRED_MODULES := $(foreach t,$(fs_config_generate_extra_partition_list),$(LOCAL_MODULE)_$(t))
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700145include $(BUILD_SYSTEM)/base_rules.mk
146$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
147 @mkdir -p $(dir $@)
Mark Salyzyn1fd588c2017-03-22 15:53:12 -0700148 $< -F $(if $(fs_config_generate_extra_partition_list), \
149 -P '$(subst $(space),$(comma),$(addprefix -,$(fs_config_generate_extra_partition_list)))') \
150 -o $@
151
152ifneq ($(filter vendor,$(fs_config_generate_extra_partition_list)),)
153##################################
154# Generate the vendor/etc/fs_config_dirs binary file for the target
155# Add fs_config_dirs or fs_config_dirs_vendor to PRODUCT_PACKAGES in
156# the device make file to enable.
157include $(CLEAR_VARS)
158
159LOCAL_MODULE := fs_config_dirs_vendor
160LOCAL_MODULE_CLASS := ETC
161LOCAL_INSTALLED_MODULE_STEM := fs_config_dirs
162LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/etc
163include $(BUILD_SYSTEM)/base_rules.mk
164$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
165 @mkdir -p $(dir $@)
166 $< -D -P vendor -o $@
167
168##################################
169# Generate the vendor/etc/fs_config_files binary file for the target
170# Add fs_config_files or fs_config_files_vendor to PRODUCT_PACKAGES in
171# the device make file to enable
172include $(CLEAR_VARS)
173
174LOCAL_MODULE := fs_config_files_vendor
175LOCAL_MODULE_CLASS := ETC
176LOCAL_INSTALLED_MODULE_STEM := fs_config_files
177LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/etc
178include $(BUILD_SYSTEM)/base_rules.mk
179$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
180 @mkdir -p $(dir $@)
181 $< -F -P vendor -o $@
182
183endif
184
185ifneq ($(filter oem,$(fs_config_generate_extra_partition_list)),)
186##################################
187# Generate the oem/etc/fs_config_dirs binary file for the target
188# Add fs_config_dirs or fs_config_dirs_oem to PRODUCT_PACKAGES in
189# the device make file to enable
190include $(CLEAR_VARS)
191
192LOCAL_MODULE := fs_config_dirs_oem
193LOCAL_MODULE_CLASS := ETC
194LOCAL_INSTALLED_MODULE_STEM := fs_config_dirs
195LOCAL_MODULE_PATH := $(TARGET_OUT_OEM)/etc
196include $(BUILD_SYSTEM)/base_rules.mk
197$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
198 @mkdir -p $(dir $@)
199 $< -D -P oem -o $@
200
201##################################
202# Generate the oem/etc/fs_config_files binary file for the target
203# Add fs_config_files or fs_config_files_oem to PRODUCT_PACKAGES in
204# the device make file to enable
205include $(CLEAR_VARS)
206
207LOCAL_MODULE := fs_config_files_oem
208LOCAL_MODULE_CLASS := ETC
209LOCAL_INSTALLED_MODULE_STEM := fs_config_files
210LOCAL_MODULE_PATH := $(TARGET_OUT_OEM)/etc
211include $(BUILD_SYSTEM)/base_rules.mk
212$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
213 @mkdir -p $(dir $@)
214 $< -F -P oem -o $@
215
216endif
217
218ifneq ($(filter odm,$(fs_config_generate_extra_partition_list)),)
219##################################
220# Generate the odm/etc/fs_config_dirs binary file for the target
221# Add fs_config_dirs or fs_config_dirs_odm to PRODUCT_PACKAGES in
222# the device make file to enable
223include $(CLEAR_VARS)
224
225LOCAL_MODULE := fs_config_dirs_odm
226LOCAL_MODULE_CLASS := ETC
227LOCAL_INSTALLED_MODULE_STEM := fs_config_dirs
228LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/etc
229include $(BUILD_SYSTEM)/base_rules.mk
230$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
231 @mkdir -p $(dir $@)
232 $< -D -P odm -o $@
233
234##################################
235# Generate the odm/etc/fs_config_files binary file for the target
236# Add fs_config_files of fs_config_files_odm to PRODUCT_PACKAGES in
237# the device make file to enable
238include $(CLEAR_VARS)
239
240LOCAL_MODULE := fs_config_files_odm
241LOCAL_MODULE_CLASS := ETC
242LOCAL_INSTALLED_MODULE_STEM := fs_config_files
243LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/etc
244include $(BUILD_SYSTEM)/base_rules.mk
245$(LOCAL_BUILT_MODULE): $(fs_config_generate_bin)
246 @mkdir -p $(dir $@)
247 $< -F -P odm -o $@
248
249endif
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700250
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000251# The newer passwd/group targets are only generated if you
252# use the new TARGET_FS_CONFIG_GEN method.
253ifneq ($(TARGET_FS_CONFIG_GEN),)
254
255##################################
256# Build the oemaid library when fs config files are present.
257# Intentionally break build if you require generated AIDS
258# header file, but are not using any fs config files.
259include $(CLEAR_VARS)
260LOCAL_MODULE := liboemaids
261LOCAL_EXPORT_C_INCLUDE_DIRS := $(dir $(my_gen_oem_aid))
262LOCAL_EXPORT_C_INCLUDE_DEPS := $(my_gen_oem_aid)
263include $(BUILD_STATIC_LIBRARY)
264
265##################################
266# Generate the system/etc/passwd text file for the target
267# This file may be empty if no AIDs are defined in
268# TARGET_FS_CONFIG_GEN files.
269include $(CLEAR_VARS)
270
271LOCAL_MODULE := passwd
272LOCAL_MODULE_CLASS := ETC
273
274include $(BUILD_SYSTEM)/base_rules.mk
275
276$(LOCAL_BUILT_MODULE): PRIVATE_LOCAL_PATH := $(LOCAL_PATH)
277$(LOCAL_BUILT_MODULE): PRIVATE_TARGET_FS_CONFIG_GEN := $(TARGET_FS_CONFIG_GEN)
278$(LOCAL_BUILT_MODULE): PRIVATE_ANDROID_FS_HDR := $(system_android_filesystem_config)
279$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/fs_config_generator.py $(TARGET_FS_CONFIG_GEN) $(system_android_filesystem_config)
280 @mkdir -p $(dir $@)
281 $(hide) $< passwd --aid-header=$(PRIVATE_ANDROID_FS_HDR) $(PRIVATE_TARGET_FS_CONFIG_GEN) > $@
282
283##################################
284# Generate the system/etc/group text file for the target
285# This file may be empty if no AIDs are defined in
286# TARGET_FS_CONFIG_GEN files.
287include $(CLEAR_VARS)
288
289LOCAL_MODULE := group
290LOCAL_MODULE_CLASS := ETC
291
292include $(BUILD_SYSTEM)/base_rules.mk
293
294$(LOCAL_BUILT_MODULE): PRIVATE_LOCAL_PATH := $(LOCAL_PATH)
295$(LOCAL_BUILT_MODULE): PRIVATE_TARGET_FS_CONFIG_GEN := $(TARGET_FS_CONFIG_GEN)
296$(LOCAL_BUILT_MODULE): PRIVATE_ANDROID_FS_HDR := $(system_android_filesystem_config)
297$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/fs_config_generator.py $(TARGET_FS_CONFIG_GEN) $(system_android_filesystem_config)
298 @mkdir -p $(dir $@)
299 $(hide) $< group --aid-header=$(PRIVATE_ANDROID_FS_HDR) $(PRIVATE_TARGET_FS_CONFIG_GEN) > $@
300
301system_android_filesystem_config :=
302endif
303
Mark Salyzyn06b91b92015-04-01 14:41:29 -0700304ANDROID_FS_CONFIG_H :=
305my_fs_config_h :=
306fs_config_generate_bin :=
Elliott Hughes2d7c86d2016-12-13 23:37:07 +0000307my_gen_oem_aid :=
Mark Salyzyn5649b312017-03-22 08:46:55 -0700308
309# -----------------------------------------------------------------------------
310# Unit tests.
311# -----------------------------------------------------------------------------
312
313test_c_flags := \
314 -fstack-protector-all \
315 -g \
316 -Wall \
317 -Wextra \
318 -Werror \
319 -fno-builtin \
320 -DANDROID_FILESYSTEM_CONFIG='"android_filesystem_config_test_data.h"'
321
322##################################
323# test executable
324include $(CLEAR_VARS)
325LOCAL_MODULE := fs_config_generate_test
326LOCAL_SRC_FILES := fs_config_generate.c
327LOCAL_SHARED_LIBRARIES := libcutils
328LOCAL_CFLAGS := $(test_c_flags)
329LOCAL_MODULE_RELATIVE_PATH := fs_config-unit-tests
330LOCAL_GTEST := false
331include $(BUILD_HOST_NATIVE_TEST)
332
333##################################
334# gTest tool
335include $(CLEAR_VARS)
336LOCAL_MODULE := fs_config-unit-tests
337LOCAL_CFLAGS += $(test_c_flags) -DHOST
338LOCAL_SHARED_LIBRARIES := liblog libcutils libbase
339LOCAL_SRC_FILES := fs_config_test.cpp
340include $(BUILD_HOST_NATIVE_TEST)