Loading cc/prebuilt.go +30 −1 Original line number Diff line number Diff line Loading @@ -674,9 +674,15 @@ func PrebuiltBinaryFactory() android.Module { return module.Init() } type prebuiltBinaryBazelHandler struct { module *Module decorator *binaryDecorator } func NewPrebuiltBinary(hod android.HostOrDeviceSupported) (*Module, *binaryDecorator) { module, binary := newBinary(hod, false) module, binary := newBinary(hod, true) module.compiler = nil module.bazelHandler = &prebuiltBinaryBazelHandler{module, binary} prebuilt := &prebuiltBinaryLinker{ binaryDecorator: binary, Loading @@ -690,6 +696,29 @@ func NewPrebuiltBinary(hod android.HostOrDeviceSupported) (*Module, *binaryDecor return module, binary } var _ BazelHandler = (*prebuiltBinaryBazelHandler)(nil) func (h *prebuiltBinaryBazelHandler) QueueBazelCall(ctx android.BaseModuleContext, label string) { bazelCtx := ctx.Config().BazelContext bazelCtx.QueueBazelRequest(label, cquery.GetOutputFiles, android.GetConfigKey(ctx)) } func (h *prebuiltBinaryBazelHandler) ProcessBazelQueryResponse(ctx android.ModuleContext, label string) { bazelCtx := ctx.Config().BazelContext outputs, err := bazelCtx.GetOutputFiles(label, android.GetConfigKey(ctx)) if err != nil { ctx.ModuleErrorf(err.Error()) return } if len(outputs) != 1 { ctx.ModuleErrorf("Expected a single output for `%s`, but got:\n%v", label, outputs) return } out := android.PathForBazelOut(ctx, outputs[0]) h.module.outputFile = android.OptionalPathForPath(out) h.module.maybeUnhideFromMake() } type bazelPrebuiltBinaryAttributes struct { Src bazel.LabelAttribute Strip stripAttributes Loading cc/prebuilt_test.go +24 −0 Original line number Diff line number Diff line Loading @@ -683,3 +683,27 @@ cc_prebuilt_binary { }` testCcError(t, `Android.bp:4:6: module "bintest" variant "android_arm64_armv8-a": srcs: multiple prebuilt source files`, bp) } func TestPrebuiltBinaryWithBazel(t *testing.T) { const bp = ` cc_prebuilt_binary { name: "bintest", srcs: ["bin"], bazel_module: { label: "//bin/foo:foo" }, }` const outBaseDir = "outputbase" const expectedOut = outBaseDir + "/execroot/__main__/bin" config := TestConfig(t.TempDir(), android.Android, nil, bp, nil) config.BazelContext = android.MockBazelContext{ OutputBaseDir: outBaseDir, LabelToOutputFiles: map[string][]string{"//bin/foo:foo": []string{"bin"}}, } ctx := testCcWithConfig(t, config) bin := ctx.ModuleForTests("bintest", "android_arm64_armv8-a").Module().(*Module) out := bin.OutputFile() if !out.Valid() { t.Error("Invalid output file") return } android.AssertStringEquals(t, "output file", expectedOut, out.String()) } Loading
cc/prebuilt.go +30 −1 Original line number Diff line number Diff line Loading @@ -674,9 +674,15 @@ func PrebuiltBinaryFactory() android.Module { return module.Init() } type prebuiltBinaryBazelHandler struct { module *Module decorator *binaryDecorator } func NewPrebuiltBinary(hod android.HostOrDeviceSupported) (*Module, *binaryDecorator) { module, binary := newBinary(hod, false) module, binary := newBinary(hod, true) module.compiler = nil module.bazelHandler = &prebuiltBinaryBazelHandler{module, binary} prebuilt := &prebuiltBinaryLinker{ binaryDecorator: binary, Loading @@ -690,6 +696,29 @@ func NewPrebuiltBinary(hod android.HostOrDeviceSupported) (*Module, *binaryDecor return module, binary } var _ BazelHandler = (*prebuiltBinaryBazelHandler)(nil) func (h *prebuiltBinaryBazelHandler) QueueBazelCall(ctx android.BaseModuleContext, label string) { bazelCtx := ctx.Config().BazelContext bazelCtx.QueueBazelRequest(label, cquery.GetOutputFiles, android.GetConfigKey(ctx)) } func (h *prebuiltBinaryBazelHandler) ProcessBazelQueryResponse(ctx android.ModuleContext, label string) { bazelCtx := ctx.Config().BazelContext outputs, err := bazelCtx.GetOutputFiles(label, android.GetConfigKey(ctx)) if err != nil { ctx.ModuleErrorf(err.Error()) return } if len(outputs) != 1 { ctx.ModuleErrorf("Expected a single output for `%s`, but got:\n%v", label, outputs) return } out := android.PathForBazelOut(ctx, outputs[0]) h.module.outputFile = android.OptionalPathForPath(out) h.module.maybeUnhideFromMake() } type bazelPrebuiltBinaryAttributes struct { Src bazel.LabelAttribute Strip stripAttributes Loading
cc/prebuilt_test.go +24 −0 Original line number Diff line number Diff line Loading @@ -683,3 +683,27 @@ cc_prebuilt_binary { }` testCcError(t, `Android.bp:4:6: module "bintest" variant "android_arm64_armv8-a": srcs: multiple prebuilt source files`, bp) } func TestPrebuiltBinaryWithBazel(t *testing.T) { const bp = ` cc_prebuilt_binary { name: "bintest", srcs: ["bin"], bazel_module: { label: "//bin/foo:foo" }, }` const outBaseDir = "outputbase" const expectedOut = outBaseDir + "/execroot/__main__/bin" config := TestConfig(t.TempDir(), android.Android, nil, bp, nil) config.BazelContext = android.MockBazelContext{ OutputBaseDir: outBaseDir, LabelToOutputFiles: map[string][]string{"//bin/foo:foo": []string{"bin"}}, } ctx := testCcWithConfig(t, config) bin := ctx.ModuleForTests("bintest", "android_arm64_armv8-a").Module().(*Module) out := bin.OutputFile() if !out.Valid() { t.Error("Invalid output file") return } android.AssertStringEquals(t, "output file", expectedOut, out.String()) }