From 7c6a7d09baae72fdbf3f17c97fb41205d09562cd Mon Sep 17 00:00:00 2001 From: Christopher Wiley Date: Wed, 14 Oct 2015 17:27:24 -0700 Subject: [PATCH] Invoke the aidl-cpp compiler to generate C++ (cherry picked from commit 2df75d17a8d7aacd538cf1c34cf4e11c2af53251) Bug: 23599697 Change-Id: Iae25f62fa9e2375a36d1a930887b2bcfd9e3f8a2 Test: test application compiles generated code --- core/binary.mk | 32 ++++++++++++++++++++++++++++++++ core/config.mk | 1 + core/definitions.mk | 8 ++++++++ 3 files changed, 41 insertions(+) diff --git a/core/binary.mk b/core/binary.mk index b8003d711..e6ad7889b 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -587,6 +587,38 @@ endif endif # $(proto_sources) non-empty ########################################################### +## AIDL: Compile .aidl files to .cpp and .h files +########################################################### +aidl_src := $(strip $(filter %.aidl,$(my_src_files))) +aidl_gen_cpp := +ifneq ($(aidl_src),) + +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)) + +# 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 path. +my_c_includes += $(aidl_gen_include_root) +# Pick up the generated C++ files later for transformation to .o files. +my_generated_sources += $(aidl_gen_cpp) + +endif # $(aidl_src) non-empty + +########################################################### ## YACC: Compile .y and .yy files to .cpp and the to .o. ########################################################### diff --git a/core/config.mk b/core/config.mk index 51810aa19..136b2049e 100644 --- a/core/config.mk +++ b/core/config.mk @@ -398,6 +398,7 @@ YASM := prebuilts/misc/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/yasm/yasm DOXYGEN:= doxygen AAPT := $(HOST_OUT_EXECUTABLES)/aapt$(HOST_EXECUTABLE_SUFFIX) AIDL := $(HOST_OUT_EXECUTABLES)/aidl$(HOST_EXECUTABLE_SUFFIX) +AIDL_CPP := $(HOST_OUT_EXECUTABLES)/aidl-cpp$(HOST_EXECUTABLE_SUFFIX) PROTOC := $(HOST_OUT_EXECUTABLES)/aprotoc$(HOST_EXECUTABLE_SUFFIX) SIGNAPK_JAR := $(HOST_OUT_JAVA_LIBRARIES)/signapk$(COMMON_JAVA_PACKAGE_SUFFIX) MKBOOTFS := $(HOST_OUT_EXECUTABLES)/mkbootfs$(HOST_EXECUTABLE_SUFFIX) diff --git a/core/definitions.mk b/core/definitions.mk index 9dea18c20..9df23fd09 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -1002,6 +1002,14 @@ $(hide) $(AIDL) -d$(patsubst %.java,%.P,$@) $(PRIVATE_AIDL_FLAGS) $< $@ endef #$(AIDL) $(PRIVATE_AIDL_FLAGS) $< - | indent -nut -br -npcs -l1000 > $@ +define transform-aidl-to-cpp +@mkdir -p $(dir $@) +@mkdir -p $(PRIVATE_HEADER_OUTPUT_DIR) +@echo "Generating C++ from AIDL: $(PRIVATE_MODULE) <= $<" +$(hide) $(AIDL_CPP) -d$(basename $@).P $(PRIVATE_AIDL_FLAGS) \ + $< $(PRIVATE_HEADER_OUTPUT_DIR) $@ +endef + ########################################################### ## Commands for running java-event-log-tags.py -- 2.11.0