bp2build conversion for rscript srcs in cc modules
Bazel does not support using .rscrip/.fs files as cc srcs.
For a module foo with foo srcs, Bp2build will create a bazel
target of rule class rscript_to_cpp with name foo_renderscript
which will have only the renderscript files as srcs.
Bp2build will also create a target foo with the expected cc rule class.
The foo target will have all other src files as srcs and will also
have the target foo_renderscript as another src.
Bug: 210509914
Test: bp2build testing & b build target rstest-latency
Change-Id: Ifdc55051a3595f5fcf54eab8b59e11e9351e141c
diff --git a/cc/rs.go b/cc/rs.go
index fbc86e2..6507259 100644
--- a/cc/rs.go
+++ b/cc/rs.go
@@ -15,11 +15,12 @@
package cc
import (
- "android/soong/android"
"path/filepath"
"runtime"
"strings"
+ "android/soong/android"
+ "android/soong/bazel"
"github.com/google/blueprint"
)
@@ -132,3 +133,35 @@
return flags
}
+
+type rscriptAttributes struct {
+ // Renderscript source files
+ Srcs bazel.LabelListAttribute
+}
+
+func bp2buildRScript(ctx android.Bp2buildMutatorContext, m *Module, ca compilerAttributes) (bazel.LabelAttribute, bazel.StringListAttribute, bazel.StringListAttribute) {
+ var rscriptAttrs rscriptAttributes
+ var rsAbsIncludes bazel.StringListAttribute
+ var localIncludes bazel.StringListAttribute
+ var rsModuleName string
+ var convertedRsSrcsLabel bazel.LabelAttribute
+
+ if !ca.rscriptSrcs.IsEmpty() {
+ rscriptAttrs.Srcs = ca.rscriptSrcs
+ rsModuleName = m.Name() + "_renderscript"
+
+ localIncludes.Value = []string{"."}
+ rsAbsIncludes.Value = []string{"frameworks/rs", "frameworks/rs/cpp"}
+ convertedRsSrcsLabel = bazel.LabelAttribute{Value: &bazel.Label{Label: rsModuleName}}
+
+ ctx.CreateBazelTargetModule(
+ bazel.BazelTargetModuleProperties{
+ Rule_class: "rscript_to_cpp",
+ Bzl_load_location: "//build/bazel/rules/cc:rscript_to_cpp.bzl",
+ },
+ android.CommonAttributes{Name: rsModuleName},
+ &rscriptAttrs)
+ }
+
+ return convertedRsSrcsLabel, rsAbsIncludes, localIncludes
+}