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

Commit d5384e83 authored by Alex Márquez Pérez Muñíz Díaz Púras Thaureaux's avatar Alex Márquez Pérez Muñíz Díaz Púras Thaureaux Committed by Gerrit Code Review
Browse files

Merge "Support mixed building for cc_prebuilt_binary"

parents c0115ce5 256e3b45
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())
}