blob: 633d5ae53337d415dad6f10840ece342ddeb15bb [file]
""" This module tests the DebugInfoProvider dwo_files functionality
"""
load("@bazel_features//:features.bzl", "bazel_features")
load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
load("//cc:defs.bzl", "cc_binary", "cc_library")
load("//cc/common:debug_package_info.bzl", "DebugPackageInfo")
def _test_n_dwo_files(ctx, n):
env = analysistest.begin(ctx)
target_under_test = analysistest.target_under_test(env)
# We check if the dwp_file exists as a way to test
# if we should expect dwo files to be present
if target_under_test[DebugPackageInfo].dwp_file != None:
asserts.equals(env, n, len(target_under_test[DebugPackageInfo].dwo_files.to_list())) # copybara-uncomment-this-please
# Internal builds link a very large set of standard libraries.
# asserts.true(env, len(target_under_test[DebugPackageInfo].dwo_files.to_list()) > n) # copybara-comment-this-out-please
return analysistest.end(env)
def _dwo_files_contents(ctx):
# We expect the DebugInfoProvider
# to contain one dwo file per "source" file
# and it must include dwo files from implementation deps
return _test_n_dwo_files(ctx, 3)
def _dwo_files_no_contents(ctx):
# without fission the list should be empty
return _test_n_dwo_files(ctx, 0)
dwo_files_contents_test = analysistest.make(
_dwo_files_contents,
config_settings = {
"//command_line_option:fission": "yes",
"//command_line_option:features": ["per_object_debug_info"],
},
)
dwo_files_no_contents_test = analysistest.make(
_dwo_files_no_contents,
config_settings = {
"//command_line_option:fission": "no",
},
)
def _test_provider_contents():
cc_library(
name = "impl_lib",
hdrs = ["impl_lib.h"],
srcs = ["impl_lib.cc"],
target_compatible_with = ["@platforms//os:linux"],
)
cc_library(
name = "lib",
hdrs = ["lib.h"],
srcs = ["lib.cc"],
implementation_deps = [":impl_lib"],
target_compatible_with = ["@platforms//os:linux"],
)
cc_binary(
name = "main",
srcs = ["main.cc"],
deps = ["lib"],
target_compatible_with = ["@platforms//os:linux"],
)
dwo_files_contents_test(
name = "dwo_files_content_test",
target_under_test = ":main",
target_compatible_with = ["@platforms//os:linux"],
)
dwo_files_no_contents_test(
name = "dwo_files_no_content_test",
target_under_test = ":main",
target_compatible_with = ["@platforms//os:linux"],
)
def dwo_files_test_suite(name):
if bazel_features.cc.cc_common_is_in_rules_cc:
# we only test this if we are on a version where
# the DebugPackageInfo provider is defined by rules_cc
# and not bazel.
_test_provider_contents()
native.test_suite(
name = name,
tests = [
":dwo_files_content_test",
":dwo_files_no_content_test",
],
target_compatible_with = ["@platforms//os:linux"],
)