diff --git a/bp2build/gensrcs_conversion_test.go b/bp2build/gensrcs_conversion_test.go index 4845973d8..e808340fa 100644 --- a/bp2build/gensrcs_conversion_test.go +++ b/bp2build/gensrcs_conversion_test.go @@ -33,7 +33,8 @@ func TestGensrcs(t *testing.T) { name: "foo", srcs: ["test/input.txt", ":external_files"], tool_files: ["program.py"], - cmd: "$(location program.py) $(in) $(out)", + cmd: "$(location program.py) $(in) $(out) $(location foo/file.txt) $(location :external_files)", + data: ["foo/file.txt", ":external_files"], output_extension: "out", bazel_module: { bp2build_available: true }, }`, @@ -44,7 +45,11 @@ func TestGensrcs(t *testing.T) { ]`, "tools": `["program.py"]`, "output_extension": `"out"`, - "cmd": `"$(location program.py) $(SRC) $(OUT)"`, + "cmd": `"$(location program.py) $(SRC) $(OUT) $(location foo/file.txt) $(location :external_files__BP2BUILD__MISSING__DEP)"`, + "data": `[ + "foo/file.txt", + ":external_files__BP2BUILD__MISSING__DEP", + ]`, }, }, { diff --git a/genrule/genrule.go b/genrule/genrule.go index fbe2a5d98..889bccd31 100644 --- a/genrule/genrule.go +++ b/genrule/genrule.go @@ -873,6 +873,7 @@ type bazelGensrcsAttributes struct { Output_extension *string Tools bazel.LabelListAttribute Cmd string + Data bazel.LabelListAttribute } const defaultShardSize = 50 @@ -952,6 +953,23 @@ func (m *Module) ConvertWithBp2build(ctx android.TopDownMutatorContext) { allReplacements.Append(tools.Value) allReplacements.Append(bazel.FirstUniqueBazelLabelList(srcs_labels)) + // The Output_extension prop is not in an immediately accessible field + // in the Module struct, so use GetProperties and cast it + // to the known struct prop. + var outputExtension *string + var data bazel.LabelListAttribute + if ctx.ModuleType() == "gensrcs" { + for _, propIntf := range m.GetProperties() { + if props, ok := propIntf.(*genSrcsProperties); ok { + outputExtension = props.Output_extension + dataFiles := android.BazelLabelForModuleSrc(ctx, props.Data) + allReplacements.Append(bazel.FirstUniqueBazelLabelList(dataFiles)) + data = bazel.MakeLabelListAttribute(dataFiles) + break + } + } + } + // Replace in and out variables with $< and $@ var cmd string if m.properties.Cmd != nil { @@ -980,16 +998,6 @@ func (m *Module) ConvertWithBp2build(ctx android.TopDownMutatorContext) { tags := android.ApexAvailableTagsWithoutTestApexes(ctx, m) if ctx.ModuleType() == "gensrcs" { - // The Output_extension prop is not in an immediately accessible field - // in the Module struct, so use GetProperties and cast it - // to the known struct prop. - var outputExtension *string - for _, propIntf := range m.GetProperties() { - if props, ok := propIntf.(*genSrcsProperties); ok { - outputExtension = props.Output_extension - break - } - } props := bazel.BazelTargetModuleProperties{ Rule_class: "gensrcs", Bzl_load_location: "//build/bazel/rules:gensrcs.bzl", @@ -999,6 +1007,7 @@ func (m *Module) ConvertWithBp2build(ctx android.TopDownMutatorContext) { Output_extension: outputExtension, Cmd: cmd, Tools: tools, + Data: data, } ctx.CreateBazelTargetModule(props, android.CommonAttributes{ Name: m.Name(),