169 lines
4.7 KiB
Python
169 lines
4.7 KiB
Python
"""Copyright (C) 2022 The Android Open Source Project
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
"""
|
|
|
|
load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
|
|
load(
|
|
"//build/bazel/rules/test_common:flags.bzl",
|
|
"action_flags_absent_for_mnemonic_test",
|
|
"action_flags_present_only_for_mnemonic_test",
|
|
)
|
|
|
|
# Include these different file types to make sure that all actions types are
|
|
# triggered
|
|
test_srcs = [
|
|
"foo.cpp",
|
|
"bar.c",
|
|
"baz.s",
|
|
"blah.S",
|
|
]
|
|
|
|
compile_action_mnemonic = "CppCompile"
|
|
link_action_mnemonic = "CppLink"
|
|
|
|
def test_thin_lto_feature_defaults():
|
|
name = "thin_lto_feature"
|
|
|
|
native.cc_binary(
|
|
name = name,
|
|
srcs = test_srcs,
|
|
features = ["android_thin_lto"],
|
|
tags = ["manual"],
|
|
)
|
|
|
|
test_name = name + "_test"
|
|
test_names = [test_name]
|
|
action_flags_present_only_for_mnemonic_test(
|
|
name = test_name,
|
|
target_under_test = name,
|
|
mnemonics = [compile_action_mnemonic, link_action_mnemonic],
|
|
expected_flags = [
|
|
"-flto=thin",
|
|
"-fsplit-lto-unit",
|
|
],
|
|
)
|
|
limit_cross_tu_inline_test_name = "limit_cross_tu_inline_feature_enabled_by_default"
|
|
test_names += [limit_cross_tu_inline_test_name]
|
|
action_flags_present_only_for_mnemonic_test(
|
|
name = limit_cross_tu_inline_test_name,
|
|
target_under_test = name,
|
|
mnemonics = [link_action_mnemonic],
|
|
expected_flags = ["-Wl,-plugin-opt,-import-instr-limit=5"],
|
|
)
|
|
return test_names
|
|
|
|
def test_whole_program_vtables_feature():
|
|
name = "whole_program_vtables_feature"
|
|
test_name = name + "_test"
|
|
|
|
native.cc_binary(
|
|
name = name,
|
|
srcs = test_srcs,
|
|
features = [
|
|
"android_thin_lto",
|
|
"android_thin_lto_whole_program_vtables",
|
|
],
|
|
tags = ["manual"],
|
|
)
|
|
action_flags_present_only_for_mnemonic_test(
|
|
name = test_name,
|
|
target_under_test = name,
|
|
mnemonics = [link_action_mnemonic],
|
|
expected_flags = ["-fwhole-program-vtables"],
|
|
)
|
|
|
|
return test_name
|
|
|
|
def test_whole_program_vtables_requires_thinlto_feature():
|
|
name = "whole_program_vtables_requires_thinlto"
|
|
test_name = name + "_test"
|
|
|
|
native.cc_binary(
|
|
name = name,
|
|
srcs = test_srcs,
|
|
features = [
|
|
"android_thin_lto_whole_program_vtables",
|
|
],
|
|
tags = ["manual"],
|
|
)
|
|
action_flags_absent_for_mnemonic_test(
|
|
name = test_name,
|
|
target_under_test = name,
|
|
mnemonics = [
|
|
compile_action_mnemonic,
|
|
link_action_mnemonic,
|
|
],
|
|
expected_absent_flags = ["-fwhole-program-vtables"],
|
|
)
|
|
|
|
return test_name
|
|
|
|
def test_limit_cross_tu_inline_requires_thinlto_feature():
|
|
name = "limit_cross_tu_inline_requires_thinlto"
|
|
test_name = name + "_test"
|
|
|
|
native.cc_binary(
|
|
name = name,
|
|
srcs = test_srcs,
|
|
features = [
|
|
"android_thin_lto_limit_cross_tu_inline",
|
|
],
|
|
tags = ["manual"],
|
|
)
|
|
action_flags_absent_for_mnemonic_test(
|
|
name = test_name,
|
|
target_under_test = name,
|
|
mnemonics = [
|
|
link_action_mnemonic,
|
|
],
|
|
expected_absent_flags = ["-Wl,-plugin-opt,-import-instr-limit=5"],
|
|
)
|
|
|
|
return test_name
|
|
|
|
def test_limit_cross_tu_inline_disabled_when_autofdo_enabled():
|
|
name = "limit_cross_tu_inline_disabled_when_autofdo_enabled"
|
|
test_name = name + "_test"
|
|
|
|
native.cc_binary(
|
|
name = name,
|
|
srcs = test_srcs,
|
|
features = [
|
|
"android_thin_lto",
|
|
"autofdo",
|
|
],
|
|
tags = ["manual"],
|
|
)
|
|
action_flags_absent_for_mnemonic_test(
|
|
name = test_name,
|
|
target_under_test = name,
|
|
mnemonics = [
|
|
link_action_mnemonic,
|
|
],
|
|
expected_absent_flags = ["-Wl,-plugin-opt,-import-instr-limit=5"],
|
|
)
|
|
|
|
return test_name
|
|
|
|
def cc_toolchain_features_lto_test_suite(name):
|
|
native.test_suite(
|
|
name = name,
|
|
tests = [
|
|
test_whole_program_vtables_feature(),
|
|
test_whole_program_vtables_requires_thinlto_feature(),
|
|
test_limit_cross_tu_inline_requires_thinlto_feature(),
|
|
test_limit_cross_tu_inline_disabled_when_autofdo_enabled(),
|
|
] + test_thin_lto_feature_defaults(),
|
|
)
|