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

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

Merge "Express no{,_lib}crt via features vs attrs"

parents 789e532a 01ec55ec
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -365,7 +365,7 @@ func TestCcBinaryNocrtTests(t *testing.T) {
		{
			description:   "nocrt: true",
			soongProperty: `nocrt: true,`,
			bazelAttr:     AttrNameToString{"link_crt": `False`},
			bazelAttr:     AttrNameToString{"features": `["-link_crt"]`},
		},
		{
			description:   "nocrt: false",
@@ -408,12 +408,12 @@ func TestCcBinaryNo_libcrtTests(t *testing.T) {
		{
			description:   "no_libcrt: true",
			soongProperty: `no_libcrt: true,`,
			bazelAttr:     AttrNameToString{"use_libcrt": `False`},
			bazelAttr:     AttrNameToString{"features": `["-use_libcrt"]`},
		},
		{
			description:   "no_libcrt: false",
			soongProperty: `no_libcrt: false,`,
			bazelAttr:     AttrNameToString{"use_libcrt": `True`},
			bazelAttr:     AttrNameToString{},
		},
		{
			description: "no_libcrt: not set",
+28 −31
Original line number Diff line number Diff line
@@ -1308,7 +1308,7 @@ cc_library {

func TestCCLibraryNoCrtTrue(t *testing.T) {
	runCcLibraryTestCase(t, Bp2buildTestCase{
		Description:                "cc_library - nocrt: true emits attribute",
		Description:                "cc_library - nocrt: true disables feature",
		ModuleTypeUnderTest:        "cc_library",
		ModuleTypeUnderTestFactory: cc.LibraryFactory,
		Filesystem: map[string]string{
@@ -1323,7 +1323,7 @@ cc_library {
}
`,
		ExpectedBazelTargets: makeCcLibraryTargets("foo-lib", AttrNameToString{
			"link_crt": `False`,
			"features": `["-link_crt"]`,
			"srcs":     `["impl.cpp"]`,
		}),
	},
@@ -1375,7 +1375,13 @@ cc_library {
    include_build_directory: false,
}
`,
		ExpectedErr: fmt.Errorf("module \"foo-lib\": nocrt is not supported for arch variants"),
		ExpectedBazelTargets: makeCcLibraryTargets("foo-lib", AttrNameToString{
			"features": `select({
        "//build/bazel/platforms/arch:arm": ["-link_crt"],
        "//conditions:default": [],
    })`,
			"srcs": `["impl.cpp"]`,
		}),
	})
}

@@ -1395,8 +1401,8 @@ cc_library {
}
`,
		ExpectedBazelTargets: makeCcLibraryTargets("foo-lib", AttrNameToString{
			"features": `["-use_libcrt"]`,
			"srcs":     `["impl.cpp"]`,
			"use_libcrt": `False`,
		}),
	})
}
@@ -1446,7 +1452,6 @@ cc_library {
`,
		ExpectedBazelTargets: makeCcLibraryTargets("foo-lib", AttrNameToString{
			"srcs": `["impl.cpp"]`,
			"use_libcrt": `True`,
		}),
	})
}
@@ -1475,10 +1480,10 @@ cc_library {
`,
		ExpectedBazelTargets: makeCcLibraryTargets("foo-lib", AttrNameToString{
			"srcs": `["impl.cpp"]`,
			"use_libcrt": `select({
        "//build/bazel/platforms/arch:arm": False,
        "//build/bazel/platforms/arch:x86": False,
        "//conditions:default": None,
			"features": `select({
        "//build/bazel/platforms/arch:arm": ["-use_libcrt"],
        "//build/bazel/platforms/arch:x86": ["-use_libcrt"],
        "//conditions:default": [],
    })`,
		}),
	})
@@ -1512,17 +1517,15 @@ cc_library {
}
`,
		ExpectedBazelTargets: makeCcLibraryTargets("foo-lib", AttrNameToString{
			"srcs": `["impl.cpp"]`,
			"use_libcrt": `select({
        "//build/bazel/platforms/os_arch:android_arm": False,
        "//build/bazel/platforms/os_arch:android_x86": False,
        "//build/bazel/platforms/os_arch:darwin_arm64": False,
        "//build/bazel/platforms/os_arch:darwin_x86_64": False,
        "//build/bazel/platforms/os_arch:linux_glibc_x86": False,
        "//build/bazel/platforms/os_arch:linux_musl_x86": False,
        "//build/bazel/platforms/os_arch:windows_x86": False,
        "//conditions:default": None,
			"features": `select({
        "//build/bazel/platforms/arch:arm": ["-use_libcrt"],
        "//build/bazel/platforms/arch:x86": ["-use_libcrt"],
        "//conditions:default": [],
    }) + select({
        "//build/bazel/platforms/os:darwin": ["-use_libcrt"],
        "//conditions:default": [],
    })`,
			"srcs": `["impl.cpp"]`,
		}),
	})
}
@@ -1557,16 +1560,10 @@ cc_library {
`,
		ExpectedBazelTargets: makeCcLibraryTargets("foo-lib", AttrNameToString{
			"srcs": `["impl.cpp"]`,
			"use_libcrt": `select({
        "//build/bazel/platforms/os_arch:android_arm": False,
        "//build/bazel/platforms/os_arch:android_x86_64": False,
        "//build/bazel/platforms/os_arch:darwin_arm64": True,
        "//build/bazel/platforms/os_arch:darwin_x86_64": False,
        "//build/bazel/platforms/os_arch:linux_bionic_x86_64": False,
        "//build/bazel/platforms/os_arch:linux_glibc_x86_64": False,
        "//build/bazel/platforms/os_arch:linux_musl_x86_64": False,
        "//build/bazel/platforms/os_arch:windows_x86_64": False,
        "//conditions:default": None,
			"features": `select({
        "//build/bazel/platforms/arch:arm": ["-use_libcrt"],
        "//build/bazel/platforms/arch:x86_64": ["-use_libcrt"],
        "//conditions:default": [],
    })`,
		}),
	})
+12 −5
Original line number Diff line number Diff line
@@ -15,7 +15,6 @@
package bp2build

import (
	"fmt"
	"testing"

	"android/soong/android"
@@ -405,7 +404,7 @@ cc_library_shared {

func TestCcLibrarySharedNoCrtTrue(t *testing.T) {
	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
		Description: "cc_library_shared - nocrt: true emits attribute",
		Description: "cc_library_shared - nocrt: true disables feature",
		Filesystem: map[string]string{
			"impl.cpp": "",
		},
@@ -419,7 +418,7 @@ cc_library_shared {
`,
		ExpectedBazelTargets: []string{
			MakeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
				"link_crt": `False`,
				"features": `["-link_crt"]`,
				"srcs":     `["impl.cpp"]`,
			}),
		},
@@ -428,7 +427,7 @@ cc_library_shared {

func TestCcLibrarySharedNoCrtFalse(t *testing.T) {
	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
		Description: "cc_library_shared - nocrt: false doesn't emit attribute",
		Description: "cc_library_shared - nocrt: false doesn't disable feature",
		Filesystem: map[string]string{
			"impl.cpp": "",
		},
@@ -469,7 +468,15 @@ cc_library_shared {
    include_build_directory: false,
}
`,
		ExpectedErr: fmt.Errorf("module \"foo_shared\": nocrt is not supported for arch variants"),
		ExpectedBazelTargets: []string{
			MakeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
				"features": `select({
        "//build/bazel/platforms/arch:arm": ["-link_crt"],
        "//conditions:default": [],
    })`,
				"srcs": `["impl.cpp"]`,
			}),
		},
	})
}

+2 −7
Original line number Diff line number Diff line
@@ -151,7 +151,7 @@ func (binary *binaryDecorator) getStem(ctx BaseModuleContext) string {
// modules common to most binaries, such as bionic libraries.
func (binary *binaryDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps {
	deps = binary.baseLinker.linkerDeps(ctx, deps)
	if !Bool(binary.baseLinker.Properties.Nocrt) {
	if binary.baseLinker.Properties.crt() {
		if binary.static() {
			deps.CrtBegin = ctx.toolchain().CrtBeginStaticBinary()
			deps.CrtEnd = ctx.toolchain().CrtEndStaticBinary()
@@ -630,8 +630,6 @@ func binaryBp2buildAttrs(ctx android.TopDownMutatorContext, m *Module) binaryAtt
		Local_includes:    baseAttrs.localIncludes,
		Absolute_includes: baseAttrs.absoluteIncludes,
		Linkopts:          baseAttrs.linkopts,
		Link_crt:          baseAttrs.linkCrt,
		Use_libcrt:        baseAttrs.useLibcrt,
		Use_version_lib:   baseAttrs.useVersionLib,
		Rtti:              baseAttrs.rtti,
		Stl:               baseAttrs.stl,
@@ -695,9 +693,6 @@ type binaryAttributes struct {

	Linkopts                 bazel.StringListAttribute
	Additional_linker_inputs bazel.LabelListAttribute

	Link_crt        bazel.BoolAttribute
	Use_libcrt      bazel.BoolAttribute
	Use_version_lib          bazel.BoolAttribute

	Rtti    bazel.BoolAttribute
+7 −12
Original line number Diff line number Diff line
@@ -965,8 +965,6 @@ type linkerAttributes struct {
	systemDynamicDeps                bazel.LabelListAttribute
	usedSystemDynamicDepAsDynamicDep map[string]bool

	linkCrt                       bazel.BoolAttribute
	useLibcrt                     bazel.BoolAttribute
	useVersionLib                 bazel.BoolAttribute
	linkopts                      bazel.StringListAttribute
	additionalLinkerInputs        bazel.LabelListAttribute
@@ -1138,6 +1136,13 @@ func (la *linkerAttributes) bp2buildForAxisAndConfig(ctx android.BazelConversion
		}
	}

	if !props.libCrt() {
		axisFeatures = append(axisFeatures, "-use_libcrt")
	}
	if !props.crt() {
		axisFeatures = append(axisFeatures, "-link_crt")
	}

	// This must happen before the addition of flags for Version Script and
	// Dynamic List, as these flags must be split on spaces and those must not
	linkerFlags = parseCommandLineFlags(linkerFlags, filterOutClangUnknownCflags)
@@ -1157,16 +1162,6 @@ func (la *linkerAttributes) bp2buildForAxisAndConfig(ctx android.BazelConversion

	la.additionalLinkerInputs.SetSelectValue(axis, config, additionalLinkerInputs)
	la.linkopts.SetSelectValue(axis, config, linkerFlags)
	la.useLibcrt.SetSelectValue(axis, config, props.libCrt())

	// it's very unlikely for nocrt to be arch variant, so bp2build doesn't support it.
	if props.crt() != nil {
		if axis == bazel.NoConfigAxis {
			la.linkCrt.SetSelectValue(axis, config, props.crt())
		} else if axis == bazel.ArchConfigurationAxis {
			ctx.ModuleErrorf("nocrt is not supported for arch variants")
		}
	}

	if axisFeatures != nil {
		la.features.SetSelectValue(axis, config, axisFeatures)
Loading