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

Commit f9abec09 authored by Trevor Radcliffe's avatar Trevor Radcliffe
Browse files

Block CFI on static libraries

Bug: 295805467
Test: Unit tests and inspecting generated BUILD files
Change-Id: I1bbd2f48ad384e0b5b6f7cc1458b12ded2748e8f
parent 962bcdb1
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
@@ -1296,6 +1296,42 @@ func (sla StringListAttribute) IsEmpty() bool {
	return len(sla.Value) == 0 && !sla.HasConfigurableValues()
}

// RemoveFromAllConfigs removes all instances of the specified value from all configurations
// of the givenStringListAttribute
func (sla *StringListAttribute) RemoveFromAllConfigs(toRemove string) {
	if removed, removalResult := removeFromList(toRemove, sla.Value); removed {
		if len(removalResult) > 0 {
			sla.Value = removalResult
		} else {
			sla.Value = nil
		}
	}
	for axis, slsv := range sla.ConfigurableValues {
		for config, sl := range slsv {
			if removed, removalResult := removeFromList(toRemove, sl); removed {
				if len(removalResult) > 0 {
					sla.SetSelectValue(axis, config, removalResult)
				} else {
					sla.SetSelectValue(axis, config, nil)
				}
			}
		}
	}
}

func removeFromList(s string, list []string) (bool, []string) {
	result := make([]string, 0, len(list))
	var removed bool
	for _, item := range list {
		if item != s {
			result = append(result, item)
		} else {
			removed = true
		}
	}
	return removed, result
}

type configurableStringLists map[ConfigurationAxis]stringListSelectValues

func (csl configurableStringLists) Append(other configurableStringLists) {
+1 −9
Original line number Diff line number Diff line
@@ -4785,7 +4785,6 @@ cc_library {
}`,
		ExpectedBazelTargets: []string{
			MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
				"features":       `["android_cfi"]`,
				"local_includes": `["."]`,
			}),
			MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{
@@ -4814,10 +4813,6 @@ cc_library {
}`,
		ExpectedBazelTargets: []string{
			MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
				"features": `select({
        "//build/bazel/platforms/os:android": ["android_cfi"],
        "//conditions:default": [],
    })`,
				"local_includes": `["."]`,
			}),
			MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{
@@ -4848,10 +4843,7 @@ cc_library {
}`,
		ExpectedBazelTargets: []string{
			MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
				"features": `[
        "android_cfi",
        "android_cfi_assembly_support",
    ]`,
				"features":       `["android_cfi_assembly_support"]`,
				"local_includes": `["."]`,
			}),
			MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{
+2 −2
Original line number Diff line number Diff line
@@ -1522,7 +1522,7 @@ func TestCcLibrarySharedWithCfiAndCfiAssemblySupport(t *testing.T) {
	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
		Description: "cc_library_shared has correct features when cfi is enabled with cfi assembly support",
		Blueprint: `
cc_library_static {
cc_library_shared {
	name: "foo",
	sanitize: {
		cfi: true,
@@ -1532,7 +1532,7 @@ cc_library_static {
	},
}`,
		ExpectedBazelTargets: []string{
			MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
			MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{
				"features": `[
        "android_cfi",
        "android_cfi_assembly_support",
+5 −13
Original line number Diff line number Diff line
@@ -2135,9 +2135,9 @@ cc_library_static {
	})
}

func TestCcLibraryStaticWithCfi(t *testing.T) {
func TestCcLibraryStaticNoCfi(t *testing.T) {
	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
		Description: "cc_library_static has correct features when cfi is enabled",
		Description: "cc_library_static never explicitly enables CFI",
		Blueprint: `
cc_library_static {
	name: "foo",
@@ -2147,7 +2147,6 @@ cc_library_static {
}`,
		ExpectedBazelTargets: []string{
			MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
				"features":       `["android_cfi"]`,
				"local_includes": `["."]`,
			}),
		},
@@ -2156,7 +2155,7 @@ cc_library_static {

func TestCcLibraryStaticWithCfiOsSpecific(t *testing.T) {
	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
		Description: "cc_library_static has correct features when cfi is enabled for specific variants",
		Description: "cc_library_static never explicitly enables CFI even for specific variants",
		Blueprint: `
cc_library_static {
	name: "foo",
@@ -2170,10 +2169,6 @@ cc_library_static {
}`,
		ExpectedBazelTargets: []string{
			MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
				"features": `select({
        "//build/bazel/platforms/os:android": ["android_cfi"],
        "//conditions:default": [],
    })`,
				"local_includes": `["."]`,
			}),
		},
@@ -2182,7 +2177,7 @@ cc_library_static {

func TestCcLibraryStaticWithCfiAndCfiAssemblySupport(t *testing.T) {
	runCcLibraryStaticTestCase(t, Bp2buildTestCase{
		Description: "cc_library_static has correct features when cfi is enabled with cfi_assembly_support",
		Description: "cc_library_static will specify cfi_assembly_support feature but not cfi feature",
		Blueprint: `
cc_library_static {
	name: "foo",
@@ -2195,10 +2190,7 @@ cc_library_static {
}`,
		ExpectedBazelTargets: []string{
			MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
				"features": `[
        "android_cfi",
        "android_cfi_assembly_support",
    ]`,
				"features":       `["android_cfi_assembly_support"]`,
				"local_includes": `["."]`,
			}),
		},
+1 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ bootstrap_go_package {
        "cc.go",
        "ccdeps.go",
        "check.go",
        "constants.go",
        "coverage.go",
        "gen.go",
        "generated_cc_library.go",
Loading