LTO Bp2build

Bug: 261733821
Test: Unit Tests
Change-Id: I8c3721d35c464e296012145b2e95a7f0866aac37
This commit is contained in:
Trevor Radcliffe
2023-02-06 21:58:30 +00:00
parent 7720f5704c
commit 56b1a2b575
6 changed files with 636 additions and 0 deletions

View File

@@ -4137,3 +4137,172 @@ cc_library {
},
})
}
func TestCcLibraryWithThinLto(t *testing.T) {
runCcLibraryTestCase(t, Bp2buildTestCase{
Description: "cc_library has correct features when thin LTO is enabled",
ModuleTypeUnderTest: "cc_library",
ModuleTypeUnderTestFactory: cc.LibraryFactory,
Blueprint: `
cc_library {
name: "foo",
lto: {
thin: true,
},
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
"features": `["android_thin_lto"]`,
"local_includes": `["."]`,
}),
MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{
"features": `["android_thin_lto"]`,
"local_includes": `["."]`,
}),
},
})
}
func TestCcLibraryWithLtoNever(t *testing.T) {
runCcLibraryTestCase(t, Bp2buildTestCase{
Description: "cc_library has correct features when LTO is explicitly disabled",
ModuleTypeUnderTest: "cc_library",
ModuleTypeUnderTestFactory: cc.LibraryFactory,
Blueprint: `
cc_library {
name: "foo",
lto: {
never: true,
},
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
"features": `["-android_thin_lto"]`,
"local_includes": `["."]`,
}),
MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{
"features": `["-android_thin_lto"]`,
"local_includes": `["."]`,
}),
},
})
}
func TestCcLibraryWithThinLtoArchSpecific(t *testing.T) {
runCcLibraryTestCase(t, Bp2buildTestCase{
Description: "cc_library has correct features when LTO differs across arch and os variants",
ModuleTypeUnderTest: "cc_library",
ModuleTypeUnderTestFactory: cc.LibraryFactory,
Blueprint: `
cc_library {
name: "foo",
target: {
android: {
lto: {
thin: true,
},
},
},
arch: {
riscv64: {
lto: {
thin: false,
},
},
},
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
"local_includes": `["."]`,
"features": `select({
"//build/bazel/platforms/os_arch:android_arm": ["android_thin_lto"],
"//build/bazel/platforms/os_arch:android_arm64": ["android_thin_lto"],
"//build/bazel/platforms/os_arch:android_riscv64": ["-android_thin_lto"],
"//build/bazel/platforms/os_arch:android_x86": ["android_thin_lto"],
"//build/bazel/platforms/os_arch:android_x86_64": ["android_thin_lto"],
"//conditions:default": [],
})`}),
MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{
"local_includes": `["."]`,
"features": `select({
"//build/bazel/platforms/os_arch:android_arm": ["android_thin_lto"],
"//build/bazel/platforms/os_arch:android_arm64": ["android_thin_lto"],
"//build/bazel/platforms/os_arch:android_riscv64": ["-android_thin_lto"],
"//build/bazel/platforms/os_arch:android_x86": ["android_thin_lto"],
"//build/bazel/platforms/os_arch:android_x86_64": ["android_thin_lto"],
"//conditions:default": [],
})`}),
},
})
}
func TestCcLibraryWithThinLtoDisabledDefaultEnabledVariant(t *testing.T) {
runCcLibraryTestCase(t, Bp2buildTestCase{
Description: "cc_library has correct features when LTO disabled by default but enabled on a particular variant",
ModuleTypeUnderTest: "cc_library",
ModuleTypeUnderTestFactory: cc.LibraryFactory,
Blueprint: `
cc_library {
name: "foo",
lto: {
never: true,
},
target: {
android: {
lto: {
thin: true,
never: false,
},
},
},
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
"local_includes": `["."]`,
"features": `select({
"//build/bazel/platforms/os:android": ["android_thin_lto"],
"//conditions:default": ["-android_thin_lto"],
})`,
}),
MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{
"local_includes": `["."]`,
"features": `select({
"//build/bazel/platforms/os:android": ["android_thin_lto"],
"//conditions:default": ["-android_thin_lto"],
})`,
}),
},
})
}
func TestCcLibraryWithThinLtoWholeProgramVtables(t *testing.T) {
runCcLibraryTestCase(t, Bp2buildTestCase{
Description: "cc_library has correct features when thin LTO is enabled with whole_program_vtables",
ModuleTypeUnderTest: "cc_library",
ModuleTypeUnderTestFactory: cc.LibraryFactory,
Blueprint: `
cc_library {
name: "foo",
lto: {
thin: true,
},
whole_program_vtables: true,
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
"features": `[
"android_thin_lto",
"android_thin_lto_whole_program_vtables",
]`,
"local_includes": `["."]`,
}),
MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{
"features": `[
"android_thin_lto",
"android_thin_lto_whole_program_vtables",
]`,
"local_includes": `["."]`,
}),
},
})
}