blob: de610f0991449747a1c33fc054d92a3341b9e0e1 [file] [log] [blame]
"""A macro to generate table of contents files of symbols from a shared library."""
def _shared_library_toc_impl(ctx):
so_name = "lib" + ctx.attr.name + ".so"
toc_name = so_name + ".toc"
out_file = ctx.actions.declare_file(toc_name)
d_file = ctx.actions.declare_file(toc_name + ".d")
ctx.actions.run(
env = {
"CLANG_BIN": ctx.executable._readelf.dirname,
},
inputs = ctx.files.src,
tools = [
ctx.executable._readelf,
],
outputs = [out_file, d_file],
executable = ctx.executable._toc_script,
arguments = [
# Only Linux shared libraries for now.
"--elf",
"-i",
ctx.file.src.path,
"-o",
out_file.path,
"-d",
d_file.path,
],
)
return [
DefaultInfo(files = depset([out_file])),
]
shared_library_toc = rule(
implementation = _shared_library_toc_impl,
attrs = {
"src": attr.label(allow_single_file = True, mandatory = True),
"_toc_script": attr.label(
cfg = "host",
executable = True,
allow_single_file = True,
default = "//build/soong/scripts:toc.sh",
),
"_readelf": attr.label(
cfg = "host",
executable = True,
allow_single_file = True,
default = "//prebuilts/clang/host/linux-x86:llvm-readelf",
),
},
toolchains = ["@bazel_tools//tools/cpp:toolchain_type"],
)