diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/base_rules.mk | 2 | ||||
-rw-r--r-- | core/clear_vars.mk | 1 | ||||
-rw-r--r-- | core/envsetup.mk | 17 | ||||
-rw-r--r-- | core/tasks/build_custom_images.mk | 58 | ||||
-rw-r--r-- | core/tasks/tools/build_custom_image.mk | 105 |
5 files changed, 182 insertions, 1 deletions
diff --git a/core/base_rules.mk b/core/base_rules.mk index ec3b59f4a..dfed3ea52 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -116,6 +116,8 @@ ifeq ($(my_module_path),) partition_tag := _VENDOR else ifeq (true,$(LOCAL_OEM_MODULE)) partition_tag := _OEM + else ifeq (true,$(LOCAL_ODM_MODULE)) + partition_tag := _ODM else # The definition of should-install-to-system will be different depending # on which goal (e.g., sdk or just droid) is being built. diff --git a/core/clear_vars.mk b/core/clear_vars.mk index bf81ebf12..d5a5f03d9 100644 --- a/core/clear_vars.mk +++ b/core/clear_vars.mk @@ -131,6 +131,7 @@ LOCAL_PROTO_JAVA_OUTPUT_PARAMS:= LOCAL_NO_CRT:= LOCAL_PROPRIETARY_MODULE:= LOCAL_OEM_MODULE:= +LOCAL_ODM_MODULE:= LOCAL_PRIVILEGED_MODULE:= LOCAL_MODULE_OWNER:= LOCAL_CTS_TEST_PACKAGE:= diff --git a/core/envsetup.mk b/core/envsetup.mk index 124a91b4f..ad78be333 100644 --- a/core/envsetup.mk +++ b/core/envsetup.mk @@ -120,6 +120,7 @@ endif TARGET_COPY_OUT_SYSTEM := system TARGET_COPY_OUT_DATA := data TARGET_COPY_OUT_OEM := oem +TARGET_COPY_OUT_ODM := odm TARGET_COPY_OUT_ROOT := root TARGET_COPY_OUT_RECOVERY := recovery ########################################### @@ -343,7 +344,7 @@ $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_APPS := $(TARGET_OUT_VENDOR_APPS) TARGET_OUT_OEM := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_OEM) TARGET_OUT_OEM_EXECUTABLES := $(TARGET_OUT_OEM)/bin -ifneq ($(filter %64,$(TARGET_ARCH)),) +ifeq ($(TARGET_IS_64_BIT),true) TARGET_OUT_OEM_SHARED_LIBRARIES := $(TARGET_OUT_OEM)/lib64 else TARGET_OUT_OEM_SHARED_LIBRARIES := $(TARGET_OUT_OEM)/lib @@ -357,6 +358,20 @@ $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_EXECUTABLES := $(TARGET_OUT_OEM_EXEC $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_SHARED_LIBRARIES := $(TARGET_OUT_OEM)/lib $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_APPS := $(TARGET_OUT_OEM_APPS) +TARGET_OUT_ODM := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ODM) +TARGET_OUT_ODM_EXECUTABLES := $(TARGET_OUT_ODM)/bin +ifeq ($(TARGET_IS_64_BIT),true) +TARGET_OUT_ODM_SHARED_LIBRARIES := $(TARGET_OUT_ODM)/lib64 +else +TARGET_OUT_ODM_SHARED_LIBRARIES := $(TARGET_OUT_ODM)/lib +endif +TARGET_OUT_ODM_APPS := $(TARGET_OUT_ODM)/app +TARGET_OUT_ODM_ETC := $(TARGET_OUT_ODM)/etc + +$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_EXECUTABLES := $(TARGET_OUT_ODM_EXECUTABLES) +$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_SHARED_LIBRARIES := $(TARGET_OUT_ODM)/lib +$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS := $(TARGET_OUT_ODM_APPS) + TARGET_OUT_UNSTRIPPED := $(PRODUCT_OUT)/symbols TARGET_OUT_EXECUTABLES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/system/bin TARGET_OUT_SHARED_LIBRARIES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/system/lib diff --git a/core/tasks/build_custom_images.mk b/core/tasks/build_custom_images.mk new file mode 100644 index 000000000..263b81a0d --- /dev/null +++ b/core/tasks/build_custom_images.mk @@ -0,0 +1,58 @@ +# +# Copyright (C) 2015 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Build additional images requested by the product makefile. +# This script gives the ability to build multiple additional images and you can +# configure what modules/files to include in each image. +# 1. Define PRODUCT_CUSTOM_IMAGE_MAKEFILES in your product makefile. +# PRODUCT_CUSTOM_IMAGE_MAKEFILES is a list of makefiles. +# Each makefile configures an image. +# For image configuration makefile foo/bar/xyz.mk, the built image file name +# will be xyz.img. So make sure they won't conflict. +# 2. In each image's configuration makefile, you can define variables: +# - CUSTOM_IMAGE_MOUNT_POINT, the mount point, such as "oem", "odm" etc. +# - CUSTOM_IMAGE_PARTITION_SIZE +# - CUSTOM_IMAGE_FILE_SYSTEM_TYPE +# - CUSTOM_IMAGE_DICT_FILE, a text file defines a dictionary accepted by +# BuildImage() in tools/releasetools/build_image.py. +# - CUSTOM_IMAGE_MODULES, a list of module names you want to include in +# the image; Not only the module itself will be installed to proper path in +# the image, you can also piggyback additional files/directories with the +# module's LOCAL_PICKUP_FILES. +# - CUSTOM_IMAGE_COPY_FILES, a list of "<src>:<dest>" to be copied to the +# image. <dest> is relativ to the root of the image. +# +# To build all those images, run "make custom_images". + +ifneq ($(filter $(MAKECMDGOALS),custom_images),) + +.PHONY: custom_images + +custom_image_parameter_variables := \ + CUSTOM_IMAGE_MOUNT_POINT \ + CUSTOM_IMAGE_PARTITION_SIZE \ + CUSTOM_IMAGE_FILE_SYSTEM_TYPE \ + CUSTOM_IMAGE_DICT_FILE \ + CUSTOM_IMAGE_MODULES \ + CUSTOM_IMAGE_COPY_FILES \ + +# We don't expect product makefile to inherit/override PRODUCT_CUSTOM_IMAGE_MAKEFILES, +# so we don't put it in the _product_var_list. +$(foreach mk, $(PRODUCT_CUSTOM_IMAGE_MAKEFILES),\ + $(eval my_custom_imag_makefile := $(mk))\ + $(eval include $(BUILD_SYSTEM)/tasks/tools/build_custom_image.mk)) + +endif diff --git a/core/tasks/tools/build_custom_image.mk b/core/tasks/tools/build_custom_image.mk new file mode 100644 index 000000000..fa9cda2e7 --- /dev/null +++ b/core/tasks/tools/build_custom_image.mk @@ -0,0 +1,105 @@ +# +# Copyright (C) 2015 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +# Define rule to build one custom image. +# Input variables: my_custom_imag_makefile + +$(call clear-var-list, $(custom_image_parameter_variables)) + +include $(my_custom_imag_makefile) + +my_custom_image_name := $(basename $(notdir $(my_custom_imag_makefile))) + +intermediates := $(call intermediates-dir-for,PACKAGING,$(my_custom_image_name)) +my_built_custom_image := $(intermediates)/$(my_custom_image_name).img +my_staging_dir := $(intermediates)/$(my_custom_image_name) + +# Collect CUSTOM_IMAGE_MODULES's installd files and their PICKUP_FILES. +my_built_modules := +my_copy_pairs := +my_pickup_files := + +$(foreach m,$(CUSTOM_IMAGE_MODULES),\ + $(eval _pickup_files := $(strip $(ALL_MODULES.$(m).PICKUP_FILES)\ + $(ALL_MODULES.$(m)$(TARGET_2ND_ARCH_MODULE_SUFFIX).PICKUP_FILES)))\ + $(eval _built_files := $(strip $(ALL_MODULES.$(m).BUILT_INSTALLED)\ + $(ALL_MODULES.$(m)$(TARGET_2ND_ARCH_MODULE_SUFFIX).BUILT_INSTALLED)))\ + $(if $(_pickup_files)$(_built_files),,\ + $(warning Unknown installed file for module '$(m)'))\ + $(eval my_pickup_files += $(_pickup_files))\ + $(foreach i, $(_built_files),\ + $(eval bui_ins := $(subst :,$(space),$(i)))\ + $(eval ins := $(word 2,$(bui_ins)))\ + $(if $(filter $(TARGET_OUT_ROOT)/%,$(ins)),\ + $(eval bui := $(word 1,$(bui_ins)))\ + $(eval my_built_modules += $(bui))\ + $(eval my_copy_dest := $(patsubst $(PRODUCT_OUT)/%,%,$(ins)))\ + $(eval my_copy_dest := $(subst /,$(space),$(my_copy_dest)))\ + $(eval my_copy_dest := $(wordlist 2,999,$(my_copy_dest)))\ + $(eval my_copy_dest := $(subst $(space),/,$(my_copy_dest)))\ + $(eval my_copy_pairs += $(bui):$(my_staging_dir)/$(my_copy_dest)))\ + )) + +# Collect CUSTOM_IMAGE_COPY_FILES. +my_image_copy_files := +$(foreach f,$(CUSTOM_IMAGE_COPY_FILES),\ + $(eval pair := $(subst :,$(space),$(f)))\ + $(eval src := $(word 1,$(pair)))\ + $(eval my_image_copy_files += $(src))\ + $(eval my_copy_pairs += $(src):$(my_staging_dir)/$(word 2,$(pair)))) + +$(my_built_custom_image): PRIVATE_INTERMEDIATES := $(intermediates) +$(my_built_custom_image): PRIVATE_MOUNT_POINT := $(CUSTOM_IMAGE_MOUNT_POINT) +$(my_built_custom_image): PRIVATE_PARTITION_SIZE := $(CUSTOM_IMAGE_PARTITION_SIZE) +$(my_built_custom_image): PRIVATE_FILE_SYSTEM_TYPE := $(CUSTOM_IMAGE_FILE_SYSTEM_TYPE) +$(my_built_custom_image): PRIVATE_STAGING_DIR := $(my_staging_dir) +$(my_built_custom_image): PRIVATE_COPY_PAIRS := $(my_copy_pairs) +$(my_built_custom_image): PRIVATE_PICKUP_FILES := $(my_pickup_files) +$(my_built_custom_image): PRIVATE_DICT_FILE := $(CUSTOM_IMAGE_DICT_FILE) +$(my_built_custom_image): $(INTERNAL_USERIMAGES_DEPS) $(my_built_modules) $(my_image_copy_files) \ + $(CUSTOM_IMAGE_DICT_FILE) + @echo "Build image $@" + $(hide) rm -rf $(PRIVATE_INTERMEDIATES) && mkdir -p $(PRIVATE_INTERMEDIATES) + $(hide) rm -rf $(PRIVATE_STAGING_DIR) && mkdir -p $(PRIVATE_STAGING_DIR) + # Copy all the files. + $(hide) $(foreach p,$(PRIVATE_COPY_PAIRS),\ + $(eval pair := $(subst :,$(space),$(p)))\ + mkdir -p $(dir $(word 2,$(pair)));\ + cp -Rf $(word 1,$(pair)) $(word 2,$(pair));) + $(if $($(PRIVATE_PICKUP_FILES)),$(hide) cp -Rf $(PRIVATE_PICKUP_FILES) $(PRIVATE_STAGING_DIR)) + # Generate the dict. + $(hide) echo "# For all accepted properties, see BuildImage() in tools/releasetools/build_image.py" > $(PRIVATE_INTERMEDIATES)/image_info.txt + $(hide) echo "mount_point=$(PRIVATE_MOUNT_POINT)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt + $(hide) echo "fs_type=$(PRIVATE_FILE_SYSTEM_TYPE)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt + $(hide) echo "partition_size=$(PRIVATE_PARTITION_SIZE)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt + $(if $(PRIVATE_DICT_FILE),\ + $(hide) echo "# Properties from $(PRIVATE_DICT_FILE)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt;\ + cat $(PRIVATE_DICT_FILE) >> $(PRIVATE_INTERMEDIATES)/image_info.txt) + # Generate the image. + $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ + ./build/tools/releasetools/build_image.py \ + $(PRIVATE_STAGING_DIR) $(PRIVATE_INTERMEDIATES)/image_info.txt $@ + +my_installed_custom_image := $(PRODUCT_OUT)/$(notdir $(my_built_custom_image)) +$(my_installed_custom_image) : $(my_built_custom_image) + $(call copy-file-to-new-target-with-cp) + +.PHONY: $(my_custom_image_name) +custom_images $(my_custom_image_name) : $(my_installed_custom_image) + +# Archive the built image. +$(call dist-for-goals, $(my_custom_image_name) custom_images,$(my_installed_custom_image)) |