1*7594170eSAndroid Build Coastguard Worker"""Copyright (C) 2022 The Android Open Source Project 2*7594170eSAndroid Build Coastguard WorkerLicensed under the Apache License, Version 2.0 (the "License"); 3*7594170eSAndroid Build Coastguard Workeryou may not use this file except in compliance with the License. 4*7594170eSAndroid Build Coastguard WorkerYou may obtain a copy of the License at 5*7594170eSAndroid Build Coastguard Worker http://www.apache.org/licenses/LICENSE-2.0 6*7594170eSAndroid Build Coastguard WorkerUnless required by applicable law or agreed to in writing, software 7*7594170eSAndroid Build Coastguard Workerdistributed under the License is distributed on an "AS IS" BASIS, 8*7594170eSAndroid Build Coastguard WorkerWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 9*7594170eSAndroid Build Coastguard WorkerSee the License for the specific language governing permissions and 10*7594170eSAndroid Build Coastguard Workerlimitations under the License. 11*7594170eSAndroid Build Coastguard Worker""" 12*7594170eSAndroid Build Coastguard Worker 13*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//lib:paths.bzl", "paths") 14*7594170eSAndroid Build Coastguard Workerload("@soong_injection//cc_toolchain:config_constants.bzl", "constants") 15*7594170eSAndroid Build Coastguard Workerload("//build/bazel/platforms:platform_utils.bzl", "platforms") 16*7594170eSAndroid Build Coastguard Worker 17*7594170eSAndroid Build Coastguard Workerdef rs_flags(ctx): 18*7594170eSAndroid Build Coastguard Worker # TODO handle target api flags once there is support for sdk versions b/245584567 19*7594170eSAndroid Build Coastguard Worker flags = ["-Wall", "-Werror"] 20*7594170eSAndroid Build Coastguard Worker 21*7594170eSAndroid Build Coastguard Worker flags.extend(ctx.attr.flags) 22*7594170eSAndroid Build Coastguard Worker 23*7594170eSAndroid Build Coastguard Worker arch = platforms.get_target_arch(ctx.attr._platform_utils) 24*7594170eSAndroid Build Coastguard Worker 25*7594170eSAndroid Build Coastguard Worker if arch in ["x86", "arm"]: 26*7594170eSAndroid Build Coastguard Worker flags.append("-m32") 27*7594170eSAndroid Build Coastguard Worker elif arch in ["x86_64", "arm64"]: 28*7594170eSAndroid Build Coastguard Worker flags.append("-m64") 29*7594170eSAndroid Build Coastguard Worker 30*7594170eSAndroid Build Coastguard Worker for flag in constants.RsGlobalIncludes: 31*7594170eSAndroid Build Coastguard Worker flags.extend(["-I", flag]) 32*7594170eSAndroid Build Coastguard Worker 33*7594170eSAndroid Build Coastguard Worker return flags 34*7594170eSAndroid Build Coastguard Worker 35*7594170eSAndroid Build Coastguard Workerdef _rscript_to_cpp_impl(ctx): 36*7594170eSAndroid Build Coastguard Worker rs_files = ctx.files.srcs 37*7594170eSAndroid Build Coastguard Worker 38*7594170eSAndroid Build Coastguard Worker outputs = [] 39*7594170eSAndroid Build Coastguard Worker 40*7594170eSAndroid Build Coastguard Worker for f in rs_files: 41*7594170eSAndroid Build Coastguard Worker out_file_base = "ScriptC_" + paths.replace_extension(f.basename, "") 42*7594170eSAndroid Build Coastguard Worker outputs.append(ctx.actions.declare_file(out_file_base + ".cpp")) 43*7594170eSAndroid Build Coastguard Worker outputs.append(ctx.actions.declare_file(out_file_base + ".h")) 44*7594170eSAndroid Build Coastguard Worker 45*7594170eSAndroid Build Coastguard Worker args = ctx.actions.args() 46*7594170eSAndroid Build Coastguard Worker output_path = paths.join(ctx.bin_dir.path, ctx.label.package) 47*7594170eSAndroid Build Coastguard Worker args.add("-o", output_path) 48*7594170eSAndroid Build Coastguard Worker args.add("-reflect-c++") 49*7594170eSAndroid Build Coastguard Worker args.add_all(rs_flags(ctx)) 50*7594170eSAndroid Build Coastguard Worker args.add_all([f.path for f in rs_files]) 51*7594170eSAndroid Build Coastguard Worker 52*7594170eSAndroid Build Coastguard Worker ctx.actions.run( 53*7594170eSAndroid Build Coastguard Worker outputs = outputs, 54*7594170eSAndroid Build Coastguard Worker inputs = rs_files + ctx.files._rs_headers, 55*7594170eSAndroid Build Coastguard Worker executable = ctx.executable._rs_to_cc_tool, 56*7594170eSAndroid Build Coastguard Worker arguments = [args], 57*7594170eSAndroid Build Coastguard Worker ) 58*7594170eSAndroid Build Coastguard Worker 59*7594170eSAndroid Build Coastguard Worker return [DefaultInfo(files = depset(outputs))] 60*7594170eSAndroid Build Coastguard Worker 61*7594170eSAndroid Build Coastguard Workerrscript_to_cpp = rule( 62*7594170eSAndroid Build Coastguard Worker implementation = _rscript_to_cpp_impl, 63*7594170eSAndroid Build Coastguard Worker doc = "Generate C/C++ langauge sources from renderscript files", 64*7594170eSAndroid Build Coastguard Worker attrs = { 65*7594170eSAndroid Build Coastguard Worker "srcs": attr.label_list( 66*7594170eSAndroid Build Coastguard Worker allow_files = [".rscript", ".fs"], 67*7594170eSAndroid Build Coastguard Worker mandatory = True, 68*7594170eSAndroid Build Coastguard Worker ), 69*7594170eSAndroid Build Coastguard Worker "flags": attr.string_list( 70*7594170eSAndroid Build Coastguard Worker doc = "", 71*7594170eSAndroid Build Coastguard Worker ), 72*7594170eSAndroid Build Coastguard Worker "_rs_headers": attr.label_list( 73*7594170eSAndroid Build Coastguard Worker default = [ 74*7594170eSAndroid Build Coastguard Worker "//external/clang/lib:rs_clang_headers", 75*7594170eSAndroid Build Coastguard Worker "//frameworks/rs/script_api:rs_script_api", 76*7594170eSAndroid Build Coastguard Worker ], 77*7594170eSAndroid Build Coastguard Worker ), 78*7594170eSAndroid Build Coastguard Worker "_rs_to_cc_tool": attr.label( 79*7594170eSAndroid Build Coastguard Worker # TODO use non-prebuilt llvm-rs-cc b/245736162 80*7594170eSAndroid Build Coastguard Worker default = "//prebuilts/sdk/tools:linux/bin/llvm-rs-cc", 81*7594170eSAndroid Build Coastguard Worker allow_files = True, 82*7594170eSAndroid Build Coastguard Worker cfg = "exec", 83*7594170eSAndroid Build Coastguard Worker executable = True, 84*7594170eSAndroid Build Coastguard Worker ), 85*7594170eSAndroid Build Coastguard Worker "_platform_utils": attr.label( 86*7594170eSAndroid Build Coastguard Worker default = Label("//build/bazel/platforms:platform_utils"), 87*7594170eSAndroid Build Coastguard Worker ), 88*7594170eSAndroid Build Coastguard Worker }, 89*7594170eSAndroid Build Coastguard Worker) 90