Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Support mixed building for cc_prebuilt_binary

Enable cc_prebuilt_binary to also take part in mixed builds.

Bug: 241415823
Test: TestPrebuiltBinaryWithBazel
Test: mixed_droid yields stats-log-api-gen under bazel-out/
Change-Id: I18b2906c91ea90370ab851a1287c2890546d633f
parent b12ff59f
Loading
Loading
Loading
Loading
+30 −1
Original line number Diff line number Diff line
@@ -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,
@@ -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
+24 −0
Original line number Diff line number Diff line
@@ -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())
}