From ed88f7de96091c1ba4c8e863d97dd41bfdf2be6f Mon Sep 17 00:00:00 2001
From: Stewart Miles <smiles@google.com>
Date: Thu, 22 Oct 2015 11:51:33 -0700
Subject: [PATCH] Improved build rule generation for Android flatbuffer
 headers.

* Added the ability to create a build target for generated headers.
* Made it possible for generated header targets to depend upon each
  other or arbitrary build targets.

Tested:
Verified some pretty complex libraries with numerous flatbuffer schema
dependencies build using this macro on Linux with the NDK.
Bug: 25188384

Change-Id: I846855a50808e58c34cdf7086e93e7ea0df69e0d
---
 android/jni/include.mk | 33 +++++++++++++++++++++++++++------
 1 file changed, 27 insertions(+), 6 deletions(-)

diff --git a/android/jni/include.mk b/android/jni/include.mk
index 1e0bcf1f..cf6322dd 100644
--- a/android/jni/include.mk
+++ b/android/jni/include.mk
@@ -158,13 +158,24 @@ define flatbuffers_header_build_rule
 $(eval \
   $(call flatbuffers_fbs_to_h,$(2),$(3),$(1)): $(1) $(flatc_target)
 	$(call host-echo-build-step,generic,Generate) \
-		$(subst $(LOCAL_PATH)/,,$(call flatbuffers_fbs_to_h,$(2),$(3),$(1)))
+      $(subst $(LOCAL_PATH)/,,$(call flatbuffers_fbs_to_h,$(2),$(3),$(1)))
 	$(hide) $$(FLATBUFFERS_FLATC) $(FLATBUFFERS_FLATC_ARGS) \
-	  $(foreach include,$(4),-I $(include)) -o $$(dir $$@) -c $$<)
+      $(foreach include,$(4),-I $(include)) -o $$(dir $$@) -c $$<)
 endef
 
 # $(flatbuffers_header_build_rules schema_files,schema_dir,output_dir,\
-#   schema_include_dirs,src_files))
+#   schema_include_dirs,src_files,[build_target],[dependencies]))
+#
+# $(1) schema_files: Space separated list of flatbuffer schema files.
+# $(2) schema_dir: Directory containing the flatbuffer schemas.
+# $(3) output_dir: Where to place the generated files.
+# $(4) schema_include_dirs: Directories to include when generating schemas.
+# $(5) src_files: Files that should depend upon the headers generated from the
+#   flatbuffer schemas.
+# $(6) build_target: Name of a build target that depends upon all generated
+#   headers.
+# $(7) dependencies: Space seperated list of additional build targets src_files
+#   should depend upon.
 #
 # Use this in your own Android.mk file to generate build rules that will
 # generate header files for your flatbuffer schemas as well as automatically
@@ -176,11 +187,21 @@ endef
 define flatbuffers_header_build_rules
 $(foreach schema,$(1),\
   $(call flatbuffers_header_build_rule,\
-	  $(schema),$(strip $(2)),$(strip $(3)),$(strip $(4))))\
+    $(schema),$(strip $(2)),$(strip $(3)),$(strip $(4))))\
 $(foreach src,$(strip $(5)),\
   $(eval $(PORTABLE_LOCAL_PATH)$$(src): \
-	  $(foreach schema,$(strip $(1)),\
-		  $(call flatbuffers_fbs_to_h,$(strip $(2)),$(strip $(3)),$(schema)))))
+    $(foreach schema,$(strip $(1)),\
+      $(call flatbuffers_fbs_to_h,$(strip $(2)),$(strip $(3)),$(schema)))))\
+$(if $(6),\
+  $(foreach schema,$(strip $(1)),\
+    $(eval $(6): \
+      $(call flatbuffers_fbs_to_h,$(strip $(2)),$(strip $(3)),$(schema)))),)\
+$(if $(7),\
+  $(foreach src,$(strip $(5)),\
+      $(eval $(PORTABLE_LOCAL_PATH)$$(src): $(strip $(7)))),)\
+$(if $(7),\
+  $(foreach dependency,$(strip $(7)),\
+      $(eval $(6): $(dependency))),)
 endef
 
 endif  # FLATBUFFERS_INCLUDE_MK_
-- 
GitLab