Build system support for RenderScript

With this change, you can add your .rs files to LOCAL_SRC_FILES.
The .rs files will be compiled by slang and the output .java files
will be compiled into the jar, while the generated .bc files will
be put into the final apk as raw resources.

Change-Id: Icde3d6139951d6d039b4b37376e72e1fc5c8b0d4
This commit is contained in:
Ying Wang
2010-07-15 17:17:52 -07:00
parent 79960bbaf0
commit 0bd59a0a58
4 changed files with 67 additions and 1 deletions

View File

@@ -216,6 +216,7 @@ E2FSCK := $(HOST_OUT_EXECUTABLES)/e2fsck$(HOST_EXECUTABLE_SUFFIX)
JARJAR := $(HOST_OUT_JAVA_LIBRARIES)/jarjar.jar JARJAR := $(HOST_OUT_JAVA_LIBRARIES)/jarjar.jar
PROGUARD := external/proguard/bin/proguard.sh PROGUARD := external/proguard/bin/proguard.sh
JAVATAGS := build/tools/java-event-log-tags.py JAVATAGS := build/tools/java-event-log-tags.py
SLANG := $(HOST_OUT_EXECUTABLES)/slang$(HOST_EXECUTABLE_SUFFIX)
# ACP is always for the build OS, not for the host OS # ACP is always for the build OS, not for the host OS
ACP := $(BUILD_OUT_EXECUTABLES)/acp$(BUILD_EXECUTABLE_SUFFIX) ACP := $(BUILD_OUT_EXECUTABLES)/acp$(BUILD_EXECUTABLE_SUFFIX)

View File

@@ -235,6 +235,19 @@ $(patsubst ./%,%, \
) )
endef endef
###########################################################
## Find all of the RenderScript files under the named directories.
## Meant to be used like:
## SRC_FILES := $(call all-renderscript-files-under,src)
###########################################################
define all-renderscript-files-under
$(patsubst ./%,%, \
$(shell cd $(LOCAL_PATH) ; \
find $(1) -name "*.rs" -and -not -name ".*") \
)
endef
########################################################### ###########################################################
## Find all of the html files under the named directories. ## Find all of the html files under the named directories.
## Meant to be used like: ## Meant to be used like:
@@ -732,6 +745,29 @@ echo '#endif' >> $(@:$1=.h)
rm -f $(@:$1=$(YACC_HEADER_SUFFIX)) rm -f $(@:$1=$(YACC_HEADER_SUFFIX))
endef endef
###########################################################
## Commands to compile RenderScript
###########################################################
# $(1) the .rs file
define _compile-one-rs-file
$(hide) $(SLANG) \
--allow-rs-prefix \
-o $(PRIVATE_RS_OUTPUT_DIR)/res/raw/$(patsubst %.rs,%.bc,$(notdir $(1))) \
-p $(PRIVATE_RS_OUTPUT_DIR)/src \
$(1)
endef
define transform-renderscripts-to-java-and-bc
@echo "RenderScript: $(PRIVATE_MODULE) <= $(PRIVATE_RS_SOURCE_FILES)"
$(hide) rm -rf $(PRIVATE_RS_OUTPUT_DIR)
$(hide) mkdir -p $(PRIVATE_RS_OUTPUT_DIR)/res/raw
$(hide) mkdir -p $(PRIVATE_RS_OUTPUT_DIR)/src
$(foreach rs,$(PRIVATE_RS_SOURCE_FILES),$(call _compile-one-rs-file,$(rs)))
$(hide) mkdir -p $(dir $@)
$(hide) touch $@
endef
########################################################### ###########################################################
## Commands for running aidl ## Commands for running aidl

View File

@@ -94,6 +94,30 @@ LOCAL_INTERMEDIATE_TARGETS += \
LOCAL_INTERMEDIATE_SOURCE_DIR := $(intermediates.COMMON)/src LOCAL_INTERMEDIATE_SOURCE_DIR := $(intermediates.COMMON)/src
###############################################################
## .rs files: RenderScript sources to .java files and .bc files
###############################################################
renderscript_sources := $(filter %.rs,$(LOCAL_SRC_FILES))
# Because names of the java files from RenderScript are unknown until the
# .rs file(s) are compiled, we have to depend on a timestamp file.
RenderScript_file_stamp :=
ifneq ($(renderscript_sources),)
renderscript_sources_fullpath := $(addprefix $(LOCAL_PATH)/, $(renderscript_sources))
RenderScript_file_stamp := $(LOCAL_INTERMEDIATE_SOURCE_DIR)/RenderScript.stamp
$(RenderScript_file_stamp): PRIVATE_RS_SOURCE_FILES := $(renderscript_sources_fullpath)
# By putting the generated java files into $(LOCAL_INTERMEDIATE_SOURCE_DIR), they will be
# automatically found by the java compiling function transform-java-to-classes.jar.
$(RenderScript_file_stamp): PRIVATE_RS_OUTPUT_DIR := $(LOCAL_INTERMEDIATE_SOURCE_DIR)/renderscript
# TODO: slang support to generate implicit dependency derived from "include" directives.
$(RenderScript_file_stamp): $(renderscript_sources_fullpath) $(SLANG)
$(transform-renderscripts-to-java-and-bc)
LOCAL_INTERMEDIATE_TARGETS += $(RenderScript_file_stamp)
# Make sure the generated resource will be added to the apk.
LOCAL_RESOURCE_DIR := $(LOCAL_INTERMEDIATE_SOURCE_DIR)/renderscript/res $(LOCAL_RESOURCE_DIR)
endif
# TODO: It looks like the only thing we need from base_rules is # TODO: It looks like the only thing we need from base_rules is
# all_java_sources. See if we can get that by adding a # all_java_sources. See if we can get that by adding a
# common_java.mk, and moving the include of base_rules.mk to # common_java.mk, and moving the include of base_rules.mk to
@@ -151,6 +175,11 @@ $(full_classes_compiled_jar): PRIVATE_JAVACFLAGS := $(LOCAL_JAVACFLAGS)
$(full_classes_compiled_jar): $(java_sources) $(full_java_lib_deps) $(full_classes_compiled_jar): $(java_sources) $(full_java_lib_deps)
$(transform-java-to-classes.jar) $(transform-java-to-classes.jar)
# source files generated from RenderScript must be generated before java compiling
ifneq ($(RenderScript_file_stamp),)
$(full_classes_compiled_jar): $(RenderScript_file_stamp)
endif
# All of the rules after full_classes_compiled_jar are very unlikely # All of the rules after full_classes_compiled_jar are very unlikely
# to fail except for bugs in their respective tools. If you would # to fail except for bugs in their respective tools. If you would
# like to run these rules, add the "all" modifier goal to the make # like to run these rules, add the "all" modifier goal to the make

View File

@@ -183,7 +183,7 @@ endif
$(R_file_stamp): PRIVATE_RESOURCE_PUBLICS_OUTPUT := \ $(R_file_stamp): PRIVATE_RESOURCE_PUBLICS_OUTPUT := \
$(intermediates.COMMON)/public_resources.xml $(intermediates.COMMON)/public_resources.xml
$(R_file_stamp): PRIVATE_PROGUARD_OPTIONS_FILE := $(proguard_options_file) $(R_file_stamp): PRIVATE_PROGUARD_OPTIONS_FILE := $(proguard_options_file)
$(R_file_stamp): $(all_res_assets) $(full_android_manifest) $(AAPT) | $(ACP) $(R_file_stamp): $(all_res_assets) $(full_android_manifest) $(RenderScript_file_stamp) $(AAPT) | $(ACP)
@echo "target R.java/Manifest.java: $(PRIVATE_MODULE) ($@)" @echo "target R.java/Manifest.java: $(PRIVATE_MODULE) ($@)"
@rm -f $@ @rm -f $@
$(create-resource-java-files) $(create-resource-java-files)