Keep aidl generated C++ inside the generated folder
Transform ../ to dotdot/ for C++ generateds from .aidl source files. This forces us to use one layer of indirection to calculate the build rules for .aidl files, since we can no longer use a pattern rule. This was tested by modifying system/tools/aidl's Android.mk to refer to its .aidl files by going up two directories and then repeating the directories again. When I print the build rules with $(info) I see that dotdot/ appears in appropriate places (C++ paths, but not .aidl paths). Bug: 26407018 Test: Described above. Change-Id: I397c9d10408c0c66d8b5a247a1f34eb4bf4f74ce
This commit is contained in:
parent
5c3f812507
commit
257796c62d
2 changed files with 18 additions and 10 deletions
|
@ -733,24 +733,20 @@ aidl_src := $(strip $(filter %.aidl,$(my_src_files)))
|
|||
aidl_gen_cpp :=
|
||||
ifneq ($(aidl_src),)
|
||||
|
||||
# Use the intermediates directory to avoid writing our own .cpp -> .o rules.
|
||||
aidl_gen_cpp_root := $(intermediates)/aidl-generated/src
|
||||
aidl_gen_include_root := $(intermediates)/aidl-generated/include
|
||||
|
||||
aidl_gen_cpp := $(patsubst %.aidl,%$(LOCAL_CPP_EXTENSION),$(aidl_src))
|
||||
aidl_gen_cpp := $(addprefix $(aidl_gen_cpp_root)/,$(aidl_gen_cpp))
|
||||
# Multi-architecture builds have distinct intermediates directories.
|
||||
# Thus we'll actually generate source for each architecture.
|
||||
$(foreach s,$(aidl_src),\
|
||||
$(eval $(call define-aidl-cpp-rule,$(s),$(aidl_gen_cpp_root),aidl_gen_cpp)))
|
||||
-include $(addsuffix .P,$(basename $(aidl_gen_cpp)))
|
||||
|
||||
# TODO(wiley): we could pass down a flag here to only generate the server or
|
||||
# client side of the binder interface.
|
||||
$(aidl_gen_cpp) : PRIVATE_MODULE := $(LOCAL_MODULE)
|
||||
$(aidl_gen_cpp) : PRIVATE_HEADER_OUTPUT_DIR := $(aidl_gen_include_root)
|
||||
$(aidl_gen_cpp) : PRIVATE_AIDL_FLAGS := $(addprefix -I,$(LOCAL_AIDL_INCLUDES))
|
||||
|
||||
# Multi-architecture builds have distinct intermediates directories.
|
||||
# Define rules for both architectures.
|
||||
$(aidl_gen_cpp) : $(aidl_gen_cpp_root)/%$(LOCAL_CPP_EXTENSION) : $(LOCAL_PATH)/%.aidl $(AIDL_CPP)
|
||||
$(transform-aidl-to-cpp)
|
||||
-include $(addsuffix .P,$(basename $(aidl_gen_cpp)))
|
||||
|
||||
# Add generated headers to include paths.
|
||||
my_c_includes += $(aidl_gen_include_root)
|
||||
my_export_c_include_dirs += $(aidl_gen_include_root)
|
||||
|
|
|
@ -993,6 +993,18 @@ $(hide) $(AIDL_CPP) -d$(basename $@).P $(PRIVATE_AIDL_FLAGS) \
|
|||
$< $(PRIVATE_HEADER_OUTPUT_DIR) $@
|
||||
endef
|
||||
|
||||
## Given a .aidl file path generate the rule to compile it a .cpp file.
|
||||
# $(1): a .aidl source file
|
||||
# $(2): a directory to place the generated .cpp files in
|
||||
# $(3): name of a variable to add the path to the generated source file to
|
||||
#
|
||||
# You must call this with $(eval).
|
||||
define define-aidl-cpp-rule
|
||||
define-aidl-cpp-rule-src := $(patsubst %.aidl,%$(LOCAL_CPP_EXTENSION),$(subst ../,dotdot/,$(addprefix $(2)/,$(1))))
|
||||
$$(define-aidl-cpp-rule-src) : $(LOCAL_PATH)/$(1) $(AIDL_CPP)
|
||||
$$(transform-aidl-to-cpp)
|
||||
$(3) += $$(define-aidl-cpp-rule-src)
|
||||
endef
|
||||
|
||||
###########################################################
|
||||
## Commands for running java-event-log-tags.py
|
||||
|
|
Loading…
Reference in a new issue