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

Commit 9483e487 authored by Trevor Radcliffe's avatar Trevor Radcliffe Committed by Gerrit Code Review
Browse files

Merge "Block CFI on static libraries" into main

parents 53b33d07 f9abec09
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
@@ -4593,7 +4593,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{
@@ -4622,10 +4621,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{
@@ -4656,10 +4651,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
@@ -1519,7 +1519,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,
@@ -1529,7 +1529,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
@@ -2134,9 +2134,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",
@@ -2146,7 +2146,6 @@ cc_library_static {
}`,
		ExpectedBazelTargets: []string{
			MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
				"features":       `["android_cfi"]`,
				"local_includes": `["."]`,
			}),
		},
@@ -2155,7 +2154,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",
@@ -2169,10 +2168,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": `["."]`,
			}),
		},
@@ -2181,7 +2176,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",
@@ -2194,10 +2189,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