From 4c474617d491fe98fa02571349138fb757959232 Mon Sep 17 00:00:00 2001 From: Shinichiro Hamaji Date: Thu, 28 Jan 2016 17:00:33 +0900 Subject: [PATCH] Use dependency files generated by llvm-rs-cc for Java This is similar to 2e45fd036ad308cfa6094b181a67f97002ebf10f but this CL is for generated java code. For C++ code llvm-rs-cc defines two targets but it defines three targets for Java. The sed script was updated to handle both cases appropriately. Bug: 26839129 Change-Id: I5c7705c67f3c65c4c14f74558e603f8ec9f35879 --- core/definitions.mk | 40 ++++++++++++++++++++-------------------- core/java.mk | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/core/definitions.mk b/core/definitions.mk index 78b607b631..1a009fb769 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -931,6 +931,24 @@ endef ## Commands to compile RenderScript to Java ########################################################### +## Merge multiple .d files generated by llvm-rs-cc. This is necessary +## because ninja can handle only a single depfile per build target. +## .d files generated by llvm-rs-cc define .stamp, .bc, and optionally +## .java as build targets. However, there's no way to let ninja know +## dependencies to .bc files and .java files, so we give up build +## targets for .bc files. As we write the .stamp file as the target by +## ourselves, the sed script removes the first two lines and append a +## backslash to the last line to concatenate contents of multiple +## files. +# $(1): .d files to be merged +# $(2): merged .d file +define _merge-renderscript-d +$(hide) echo '$@: $(backslash)' > $2 +$(foreach d,$1, \ + $(hide) sed -z 's/.*: \\\n//; s/\n$$/ \\\n/' $d >> $2$(newline)) +$(hide) echo >> $2 +endef + define transform-renderscripts-to-java-and-bc @echo "RenderScript: $(PRIVATE_MODULE) <= $(PRIVATE_RS_SOURCE_FILES)" $(hide) rm -rf $(PRIVATE_RS_OUTPUT_DIR) @@ -945,8 +963,8 @@ $(hide) $(PRIVATE_RS_CC) \ $(PRIVATE_RS_FLAGS) \ $(foreach inc,$(PRIVATE_RS_INCLUDES),$(addprefix -I , $(inc))) \ $(PRIVATE_RS_SOURCE_FILES) - $(foreach d,$(PRIVATE_DEP_FILES),\ - $(call transform-d-to-p-args,$(d),$(d:%.d=%.P))$(newline)) + $(call _merge-renderscript-d,$(PRIVATE_DEP_FILES),$@.d) + $(call transform-d-to-p-args,$@.d,$@.P) $(hide) mkdir -p $(dir $@) $(hide) touch $@ endef @@ -969,24 +987,6 @@ endef ## Commands to compile RenderScript to C++ ########################################################### -## Merge multiple .d files generated by llvm-rs-cc. This is necessary -## because ninja can handle only a single depfile per build target. -## We assume .d files start with two targets and their prerequisites -## follow. The first line is for the stamp file and the second line is -## for .bc file. There's no way to let ninja know dependencies to .bc -## files, so we give up build targets for .bc files. As we write the -## .stamp file as the target by ourselves, the sed script removes the -## first two lines and append a backslash to the last line to -## concatenate contents of multiple files. -# $(1): .d files to be merged -# $(2): merged .d file -define _merge-renderscript-d -$(hide) echo '$@: $(backslash)' > $2 -$(foreach d,$1, \ - $(hide) sed '1d; 2d; s/\( \\\)\?$$/ \\/' $d >> $2$(newline)) -$(hide) echo >> $2 -endef - define transform-renderscripts-to-cpp-and-bc @echo "RenderScript: $(PRIVATE_MODULE) <= $(PRIVATE_RS_SOURCE_FILES)" $(hide) rm -rf $(PRIVATE_RS_OUTPUT_DIR) diff --git a/core/java.mk b/core/java.mk index a0ab4c5c95..c070583ed4 100644 --- a/core/java.mk +++ b/core/java.mk @@ -215,7 +215,7 @@ $(RenderScript_file_stamp): $(renderscript_sources_fullpath) $(LOCAL_RENDERSCRIP $(transform-renderscripts-to-java-and-bc) # include the dependency files (.d/.P) generated by llvm-rs-cc. --include $(bc_dep_files:%.d=%.P) +$(call include-depfile,$(RenderScript_file_stamp).P,$(RenderScript_file_stamp)) ifneq ($(LOCAL_RENDERSCRIPT_COMPATIBILITY),)