diff --git a/Android.mk b/Android.mk index aad7f8032..d16d063b9 100644 --- a/Android.mk +++ b/Android.mk @@ -148,7 +148,7 @@ built_general_sepolicy := $(LOCAL_BUILT_MODULE) ################################## include $(CLEAR_VARS) -LOCAL_MODULE := file_contexts +LOCAL_MODULE := file_contexts.bin LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_TAGS := optional LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT) @@ -161,32 +161,44 @@ ifeq (address,$(strip $(SANITIZE_TARGET))) endif all_fc_files := $(call build_policy, $(all_fc_files)) -$(LOCAL_BUILT_MODULE): PRIVATE_SEPOLICY := $(built_sepolicy) -$(LOCAL_BUILT_MODULE): PRIVATE_FC_FILES := $(all_fc_files) -$(LOCAL_BUILT_MODULE): PRIVATE_ADDITIONAL_M4DEFS := $(LOCAL_ADDITIONAL_M4DEFS) -$(LOCAL_BUILT_MODULE): $(all_fc_files) $(built_sepolicy) $(HOST_OUT_EXECUTABLES)/checkfc +file_contexts.tmp := $(intermediates)/file_contexts.tmp +$(file_contexts.tmp): PRIVATE_SEPOLICY := $(built_sepolicy) +$(file_contexts.tmp): PRIVATE_FC_FILES := $(all_fc_files) +$(file_contexts.tmp): PRIVATE_ADDITIONAL_M4DEFS := $(LOCAL_ADDITIONAL_M4DEFS) +$(file_contexts.tmp): $(all_fc_files) $(built_sepolicy) $(HOST_OUT_EXECUTABLES)/checkfc @mkdir -p $(dir $@) $(hide) m4 -s $(PRIVATE_ADDITIONAL_M4DEFS) $(PRIVATE_FC_FILES) > $@ $(hide) $(HOST_OUT_EXECUTABLES)/checkfc $(PRIVATE_SEPOLICY) $@ +$(LOCAL_BUILT_MODULE): $(file_contexts.tmp) $(HOST_OUT_EXECUTABLES)/sefcontext_compile + @mkdir -p $(dir $@) + $(hide) $(HOST_OUT_EXECUTABLES)/sefcontext_compile -o $@ $< + built_fc := $(LOCAL_BUILT_MODULE) all_fc_files := +file_contexts.tmp := ################################## include $(CLEAR_VARS) -LOCAL_MODULE := general_file_contexts +LOCAL_MODULE := general_file_contexts.bin LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_TAGS := tests include $(BUILD_SYSTEM)/base_rules.mk -$(LOCAL_BUILT_MODULE): PRIVATE_SEPOLICY := $(built_general_sepolicy) -$(LOCAL_BUILT_MODULE): $(addprefix $(LOCAL_PATH)/, file_contexts) $(built_general_sepolicy) $(HOST_OUT_EXECUTABLES)/checkfc +general_file_contexts.tmp := $(intermediates)/general_file_contexts.tmp +$(general_file_contexts.tmp): PRIVATE_SEPOLICY := $(built_general_sepolicy) +$(general_file_contexts.tmp): $(addprefix $(LOCAL_PATH)/, file_contexts) $(built_general_sepolicy) $(HOST_OUT_EXECUTABLES)/checkfc @mkdir -p $(dir $@) $(hide) m4 -s $< > $@ $(hide) $(HOST_OUT_EXECUTABLES)/checkfc $(PRIVATE_SEPOLICY) $@ +$(LOCAL_BUILT_MODULE): $(general_file_contexts.tmp) $(HOST_OUT_EXECUTABLES)/sefcontext_compile + @mkdir -p $(dir $@) + $(hide) $(HOST_OUT_EXECUTABLES)/sefcontext_compile -o $@ $< + +general_file_contexts.tmp := GENERAL_FILE_CONTEXTS := $(LOCAL_BUILT_MODULE) ################################## diff --git a/CleanSpec.mk b/CleanSpec.mk new file mode 100644 index 000000000..f141e341b --- /dev/null +++ b/CleanSpec.mk @@ -0,0 +1,52 @@ +# 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. +# + +# If you don't need to do a full clean build but would like to touch +# a file or delete some intermediate files, add a clean step to the end +# of the list. These steps will only be run once, if they haven't been +# run before. +# +# E.g.: +# $(call add-clean-step, touch -c external/sqlite/sqlite3.h) +# $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates) +# +# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with +# files that are missing or have been moved. +# +# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory. +# Use $(OUT_DIR) to refer to the "out" directory. +# +# If you need to re-do something that's already mentioned, just copy +# the command and add it to the bottom of the list. E.g., if a change +# that you made last week required touching a file and a change you +# made today requires touching the same file, just copy the old +# touch step and add it to the end of the list. +# +# ************************************************ +# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST +# ************************************************ + +# For example: +#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates) +#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates) +#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f) +#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*) + +# ************************************************ +# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST +# ************************************************ + +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/root/file_contexts) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/recovery/root/file_contexts)