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

Commit baced71c authored by Liz Kammer's avatar Liz Kammer
Browse files

Add libbuildversion in converion instead of macro

Test: bp2build.sh
Change-Id: I96fa6e4dda7d54224a20bcb35414d61c6f70cf7e
parent a37ef683
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ func generateBazelTargetsForTest(targets []testBazelTarget, hod android.HostOrDe

type ccBinaryBp2buildTestCase struct {
	description string
	filesystem  map[string]string
	blueprint   string
	targets     []testBazelTarget
}
@@ -79,6 +80,7 @@ func runCcBinaryTestCase(t *testing.T, testCase ccBinaryBp2buildTestCase) {
			ModuleTypeUnderTestFactory: cc.BinaryFactory,
			Description:                description,
			Blueprint:                  binaryReplacer.Replace(testCase.blueprint),
			Filesystem:                 testCase.filesystem,
		})
	})
}
@@ -94,6 +96,7 @@ func runCcHostBinaryTestCase(t *testing.T, testCase ccBinaryBp2buildTestCase) {
			ModuleTypeUnderTestFactory: cc.BinaryHostFactory,
			Description:                description,
			Blueprint:                  hostBinaryReplacer.Replace(testCase.blueprint),
			Filesystem:                 testCase.filesystem,
		})
	})
}
@@ -101,6 +104,9 @@ func runCcHostBinaryTestCase(t *testing.T, testCase ccBinaryBp2buildTestCase) {
func TestBasicCcBinary(t *testing.T) {
	runCcBinaryTests(t, ccBinaryBp2buildTestCase{
		description: "basic -- properties -> attrs with little/no transformation",
		filesystem: map[string]string{
			soongCcVersionLibBpPath: soongCcVersionLibBp,
		},
		blueprint: `
{rule_name} {
    name: "foo",
@@ -149,6 +155,7 @@ func TestBasicCcBinary(t *testing.T) {
				"sdk_version":        `"current"`,
				"min_sdk_version":    `"29"`,
				"use_version_lib":    `True`,
				"whole_archive_deps": `["//build/soong/cc/libbuildversion:libbuildversion"]`,
			},
			},
		},
+19 −7
Original line number Diff line number Diff line
@@ -27,7 +27,16 @@ const (
	soongCcLibraryPreamble = `
cc_defaults {
    name: "linux_bionic_supported",
}`
}
`

	soongCcVersionLibBpPath = "build/soong/cc/libbuildversion/Android.bp"
	soongCcVersionLibBp     = `
cc_library_static {
	name: "libbuildversion",
	bazel_module: { bp2build_available: false },
}
`

	soongCcProtoLibraries = `
cc_library {
@@ -62,6 +71,7 @@ func TestCcLibrarySimple(t *testing.T) {
		ModuleTypeUnderTest:        "cc_library",
		ModuleTypeUnderTestFactory: cc.LibraryFactory,
		Filesystem: map[string]string{
			soongCcVersionLibBpPath: soongCcVersionLibBp,
			"android.cpp":           "",
			"bionic.cpp":            "",
			"darwin.cpp":            "",
@@ -146,6 +156,7 @@ cc_library {
			"sdk_version":                       `"current"`,
			"min_sdk_version":                   `"29"`,
			"use_version_lib":                   `True`,
			"implementation_whole_archive_deps": `["//build/soong/cc/libbuildversion:libbuildversion"]`,
		}),
	})
}
@@ -1337,6 +1348,7 @@ func makeCcLibraryTargets(name string, attrs AttrNameToString) []string {
		"strip":                    true,
		"inject_bssl_hash":         true,
		"has_stubs":                true,
		"use_version_lib":          true,
	}

	sharedAttrs := AttrNameToString{}
+5 −1
Original line number Diff line number Diff line
@@ -454,6 +454,9 @@ func TestCcLibrarySharedProto(t *testing.T) {

func TestCcLibrarySharedUseVersionLib(t *testing.T) {
	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
		Filesystem: map[string]string{
			soongCcVersionLibBpPath: soongCcVersionLibBp,
		},
		Blueprint: soongCcProtoPreamble + `cc_library_shared {
        name: "foo",
        use_version_lib: true,
@@ -462,6 +465,7 @@ func TestCcLibrarySharedUseVersionLib(t *testing.T) {
		ExpectedBazelTargets: []string{
			MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{
				"use_version_lib":                   "True",
				"implementation_whole_archive_deps": `["//build/soong/cc/libbuildversion:libbuildversion"]`,
			}),
		},
	})
+24 −1
Original line number Diff line number Diff line
@@ -1485,14 +1485,37 @@ func TestCcLibraryStaticProto(t *testing.T) {

func TestCcLibraryStaticUseVersionLib(t *testing.T) {
	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
		Filesystem: map[string]string{
			soongCcVersionLibBpPath: soongCcVersionLibBp,
		},
		Blueprint: soongCcProtoPreamble + `cc_library_static {
	name: "foo",
	use_version_lib: true,
	static_libs: ["libbuildversion"],
	include_build_directory: false,
}`,
		ExpectedBazelTargets: []string{
			MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
				"implementation_whole_archive_deps": `["//build/soong/cc/libbuildversion:libbuildversion"]`,
			}),
		},
	})
}

func TestCcLibraryStaticUseVersionLibHasDep(t *testing.T) {
	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
		Filesystem: map[string]string{
			soongCcVersionLibBpPath: soongCcVersionLibBp,
		},
		Blueprint: soongCcProtoPreamble + `cc_library_static {
	name: "foo",
	use_version_lib: true,
	whole_static_libs: ["libbuildversion"],
	include_build_directory: false,
}`,
		ExpectedBazelTargets: []string{
			MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
				"use_version_lib": "True",
				"whole_archive_deps": `["//build/soong/cc/libbuildversion:libbuildversion"]`,
			}),
		},
	})
+20 −6
Original line number Diff line number Diff line
@@ -838,6 +838,7 @@ type linkerAttributes struct {

var (
	soongSystemSharedLibs = []string{"libc", "libm", "libdl"}
	versionLib            = "libbuildversion"
)

// resolveTargetApex re-adds the shared and static libs in target.apex.exclude_shared|static_libs props to non-apex variant
@@ -877,10 +878,27 @@ func (la *linkerAttributes) bp2buildForAxisAndConfig(ctx android.BazelConversion
	var axisFeatures []string

	wholeStaticLibs := android.FirstUniqueStrings(props.Whole_static_libs)
	la.wholeArchiveDeps.SetSelectValue(axis, config, bazelLabelForWholeDepsExcludes(ctx, wholeStaticLibs, props.Exclude_static_libs))
	staticLibs := android.FirstUniqueStrings(android.RemoveListFromList(props.Static_libs, wholeStaticLibs))
	if axis == bazel.NoConfigAxis {
		la.useVersionLib.SetSelectValue(axis, config, props.Use_version_lib)
		if proptools.Bool(props.Use_version_lib) {
			versionLibAlreadyInDeps := android.InList(versionLib, wholeStaticLibs)
			// remove from static libs so there is no duplicate dependency
			_, staticLibs = android.RemoveFromList(versionLib, staticLibs)
			// only add the dep if it is not in progress
			if !versionLibAlreadyInDeps {
				if isBinary {
					wholeStaticLibs = append(wholeStaticLibs, versionLib)
				} else {
					la.implementationWholeArchiveDeps.SetSelectValue(axis, config, bazelLabelForWholeDepsExcludes(ctx, []string{versionLib}, props.Exclude_static_libs))
				}
			}
		}
	}

	// Excludes to parallel Soong:
	// https://cs.android.com/android/platform/superproject/+/master:build/soong/cc/linker.go;l=247-249;drc=088b53577dde6e40085ffd737a1ae96ad82fc4b0
	staticLibs := android.FirstUniqueStrings(android.RemoveListFromList(props.Static_libs, wholeStaticLibs))
	la.wholeArchiveDeps.SetSelectValue(axis, config, bazelLabelForWholeDepsExcludes(ctx, wholeStaticLibs, props.Exclude_static_libs))

	staticDeps := maybePartitionExportedAndImplementationsDepsExcludes(
		ctx,
@@ -1006,10 +1024,6 @@ func (la *linkerAttributes) bp2buildForAxisAndConfig(ctx android.BazelConversion
	la.linkopts.SetSelectValue(axis, config, parseCommandLineFlags(linkerFlags, false, filterOutClangUnknownCflags))
	la.useLibcrt.SetSelectValue(axis, config, props.libCrt())

	if axis == bazel.NoConfigAxis {
		la.useVersionLib.SetSelectValue(axis, config, props.Use_version_lib)
	}

	// it's very unlikely for nocrt to be arch variant, so bp2build doesn't support it.
	if props.crt() != nil {
		if axis == bazel.NoConfigAxis {
Loading