Home | History | Annotate | Download | only in core
      1 ###############################################################
      2 ## Renderscript support for java
      3 ## Adds rules to convert .rs files to .java and .bc files
      4 ###############################################################
      5 
      6 renderscript_sources := $(filter %.rs,$(LOCAL_SRC_FILES))
      7 LOCAL_SRC_FILES := $(filter-out %.rs,$(LOCAL_SRC_FILES))
      8 
      9 rs_generated_res_zip :=
     10 rs_generated_src_jar :=
     11 rs_compatibility_jni_libs :=
     12 ifneq ($(renderscript_sources),)
     13 renderscript_sources_fullpath := $(addprefix $(LOCAL_PATH)/, $(renderscript_sources))
     14 renderscript_intermediate.COMMON := $(intermediates.COMMON)/renderscript
     15 rs_generated_res_zip := $(renderscript_intermediate.COMMON)/res.zip
     16 rs_generated_src_jar := $(renderscript_intermediate.COMMON)/rs.srcjar
     17 
     18 LOCAL_SRCJARS += $(rs_generated_src_jar)
     19 
     20 # Defaulting to an empty string uses the latest available platform SDK.
     21 renderscript_target_api :=
     22 
     23 ifneq (,$(LOCAL_RENDERSCRIPT_TARGET_API))
     24   renderscript_target_api := $(LOCAL_RENDERSCRIPT_TARGET_API)
     25 else
     26   ifneq (,$(LOCAL_SDK_VERSION))
     27     # Set target-api for LOCAL_SDK_VERSIONs other than current.
     28     ifneq (,$(filter-out current system_current test_current core_current, $(LOCAL_SDK_VERSION)))
     29       renderscript_target_api := $(call get-numeric-sdk-version,$(LOCAL_SDK_VERSION))
     30     endif
     31   endif  # LOCAL_SDK_VERSION is set
     32 endif  # LOCAL_RENDERSCRIPT_TARGET_API is set
     33 
     34 # For 64-bit, we always have to upgrade to at least 21 for compat build.
     35 ifneq ($(LOCAL_RENDERSCRIPT_COMPATIBILITY),)
     36   ifeq ($(TARGET_IS_64_BIT),true)
     37     ifneq ($(filter $(RSCOMPAT_32BIT_ONLY_API_LEVELS),$(renderscript_target_api)),)
     38       renderscript_target_api := 21
     39     endif
     40   endif
     41 endif
     42 
     43 ifeq ($(LOCAL_RENDERSCRIPT_CC),)
     44 LOCAL_RENDERSCRIPT_CC := $(LLVM_RS_CC)
     45 endif
     46 
     47 # Turn on all warnings and warnings as errors for RS compiles.
     48 # This can be disabled with LOCAL_RENDERSCRIPT_FLAGS := -Wno-error
     49 renderscript_flags := -Wall -Werror
     50 renderscript_flags += $(LOCAL_RENDERSCRIPT_FLAGS)
     51 
     52 # prepend the RenderScript system include path
     53 ifneq ($(filter-out current system_current test_current core_current,$(LOCAL_SDK_VERSION))$(if $(TARGET_BUILD_APPS),$(filter current system_current test_current,$(LOCAL_SDK_VERSION))),)
     54 # if a numeric LOCAL_SDK_VERSION, or current LOCAL_SDK_VERSION with TARGET_BUILD_APPS
     55 LOCAL_RENDERSCRIPT_INCLUDES := \
     56     $(HISTORICAL_SDK_VERSIONS_ROOT)/renderscript/clang-include \
     57     $(HISTORICAL_SDK_VERSIONS_ROOT)/renderscript/include \
     58     $(LOCAL_RENDERSCRIPT_INCLUDES)
     59 else
     60 LOCAL_RENDERSCRIPT_INCLUDES := \
     61     $(TOPDIR)external/clang/lib/Headers \
     62     $(TOPDIR)frameworks/rs/script_api/include \
     63     $(LOCAL_RENDERSCRIPT_INCLUDES)
     64 endif
     65 
     66 ifneq ($(LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE),)
     67 LOCAL_RENDERSCRIPT_INCLUDES := $(LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE)
     68 endif
     69 
     70 bc_files := $(patsubst %.rs,%.bc, $(notdir $(renderscript_sources)))
     71 bc_dep_files := $(addprefix $(renderscript_intermediate.COMMON)/,$(patsubst %.bc,%.d,$(bc_files)))
     72 
     73 $(rs_generated_src_jar): PRIVATE_RS_INCLUDES := $(LOCAL_RENDERSCRIPT_INCLUDES)
     74 $(rs_generated_src_jar): PRIVATE_RS_CC := $(LOCAL_RENDERSCRIPT_CC)
     75 $(rs_generated_src_jar): PRIVATE_RS_FLAGS := $(renderscript_flags)
     76 $(rs_generated_src_jar): PRIVATE_RS_SOURCE_FILES := $(renderscript_sources_fullpath)
     77 $(rs_generated_src_jar): PRIVATE_RS_OUTPUT_DIR := $(renderscript_intermediate.COMMON)
     78 $(rs_generated_src_jar): PRIVATE_RS_TARGET_API := $(patsubst current,0,$(renderscript_target_api))
     79 $(rs_generated_src_jar): PRIVATE_DEP_FILES := $(bc_dep_files)
     80 $(rs_generated_src_jar): PRIVATE_RS_OUTPUT_RES_ZIP := $(rs_generated_res_zip)
     81 $(rs_generated_src_jar): .KATI_IMPLICIT_OUTPUTS := $(rs_generated_res_zip)
     82 $(rs_generated_src_jar): $(renderscript_sources_fullpath) $(LOCAL_RENDERSCRIPT_CC) $(SOONG_ZIP)
     83 	$(transform-renderscripts-to-java-and-bc)
     84 
     85 # include the dependency files (.d) generated by llvm-rs-cc.
     86 $(call include-depfile,$(rs_generated_src_jar).d,$(rs_generated_src_jar))
     87 
     88 ifneq ($(LOCAL_RENDERSCRIPT_COMPATIBILITY),)
     89 
     90 
     91 ifeq ($(filter $(RSCOMPAT_32BIT_ONLY_API_LEVELS),$(renderscript_target_api)),)
     92 ifeq ($(TARGET_IS_64_BIT),true)
     93 renderscript_intermediate.bc_folder := $(renderscript_intermediate.COMMON)/res/raw/bc64/
     94 else
     95 renderscript_intermediate.bc_folder := $(renderscript_intermediate.COMMON)/res/raw/bc32/
     96 endif
     97 else
     98 renderscript_intermediate.bc_folder := $(renderscript_intermediate.COMMON)/res/raw/
     99 endif
    100 
    101 rs_generated_bc := $(addprefix \
    102     $(renderscript_intermediate.bc_folder), $(bc_files))
    103 
    104 renderscript_intermediate := $(intermediates)/renderscript
    105 
    106 # We don't need the .so files in bundled branches
    107 # Prevent these from showing up on the device
    108 # One exception is librsjni.so, which is needed for
    109 # both native path and compat path.
    110 rs_jni_lib := $(call intermediates-dir-for,SHARED_LIBRARIES,librsjni.so)/librsjni.so
    111 LOCAL_JNI_SHARED_LIBRARIES += librsjni
    112 
    113 ifneq (,$(TARGET_BUILD_APPS)$(FORCE_BUILD_RS_COMPAT))
    114 
    115 rs_compatibility_jni_libs := $(addprefix \
    116     $(renderscript_intermediate)/librs., \
    117     $(patsubst %.bc,%.so, $(bc_files)))
    118 
    119 $(rs_generated_src_jar): .KATI_IMPLICIT_OUTPUTS += $(rs_generated_bc)
    120 
    121 rs_support_lib := $(call intermediates-dir-for,SHARED_LIBRARIES,libRSSupport)/libRSSupport.so
    122 LOCAL_JNI_SHARED_LIBRARIES += libRSSupport
    123 
    124 rs_support_io_lib :=
    125 # check if the target api level support USAGE_IO
    126 ifeq ($(filter $(RSCOMPAT_NO_USAGEIO_API_LEVELS),$(renderscript_target_api)),)
    127 rs_support_io_lib := $(call intermediates-dir-for,SHARED_LIBRARIES,libRSSupportIO)/libRSSupportIO.so
    128 LOCAL_JNI_SHARED_LIBRARIES += libRSSupportIO
    129 endif
    130 
    131 my_arch := $(TARGET_$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)
    132 ifneq (,$(filter arm64 mips64 x86_64,$(my_arch)))
    133   my_min_sdk_version := 21
    134 else
    135   my_min_sdk_version := $(MIN_SUPPORTED_SDK_VERSION)
    136 endif
    137 
    138 $(rs_compatibility_jni_libs): $(RS_PREBUILT_CLCORE) \
    139     $(rs_support_lib) $(rs_support_io_lib) $(rs_jni_lib) $(rs_compiler_rt)
    140 $(rs_compatibility_jni_libs): $(BCC_COMPAT)
    141 $(rs_compatibility_jni_libs): PRIVATE_CXX := $(CXX_WRAPPER) $(CLANG_CXX)
    142 $(rs_compatibility_jni_libs): PRIVATE_SDK_VERSION := $(my_min_sdk_version)
    143 $(rs_compatibility_jni_libs): $(renderscript_intermediate)/librs.%.so: \
    144     $(renderscript_intermediate.bc_folder)%.bc \
    145     $(SOONG_OUT_DIR)/ndk.timestamp
    146 	$(transform-bc-to-so)
    147 
    148 endif
    149 
    150 endif
    151 
    152 LOCAL_INTERMEDIATE_TARGETS += $(rs_generated_src_jar)
    153 # Make sure the generated resource will be added to the apk.
    154 LOCAL_RESOURCE_DIR := $(renderscript_intermediate.COMMON)/res $(LOCAL_RESOURCE_DIR)
    155 endif
    156