
This patch introduces configuration for a Bazel BUILD in a side directory in the monorepo. This is following the approval of https://github.com/llvm/llvm-www/blob/main/proposals/LP0002-BazelBuildConfiguration.md As detailed in the README, the Bazel BUILD is not supported by the community in general, and is maintained only by interested parties. It follows the requirements of the LLVM peripheral tier: https://llvm.org/docs/SupportPolicy.html#peripheral-tier. This is largely copied from https://github.com/google/llvm-bazel, with a few filepath tweaks and the addition of the README. Reviewed By: echristo, keith, dblaikie, kuhar Differential Revision: https://reviews.llvm.org/D90352
82 lines
3.3 KiB
Python
82 lines
3.3 KiB
Python
# This file is licensed under the Apache License v2.0 with LLVM Exceptions.
|
|
# See https://llvm.org/LICENSE.txt for license information.
|
|
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
"""This file contains BUILD extensions for generating source code from LLVM's
|
|
table definition files using the TableGen tool.
|
|
|
|
See http://llvm.org/cmds/tblgen.html for more information on the TableGen
|
|
tool.
|
|
TODO(chandlerc): Currently this expresses include-based dependencies as
|
|
"sources", and has no transitive understanding due to these files not being
|
|
correctly understood by the build system.
|
|
"""
|
|
|
|
def gentbl(
|
|
name,
|
|
tblgen,
|
|
td_file,
|
|
td_srcs,
|
|
tbl_outs,
|
|
library = True,
|
|
tblgen_args = "",
|
|
**kwargs):
|
|
"""gentbl() generates tabular code from a table definition file.
|
|
|
|
Args:
|
|
name: The name of the build rule for use in dependencies.
|
|
tblgen: The binary used to produce the output.
|
|
td_file: The primary table definitions file.
|
|
td_srcs: A list of table definition files included transitively.
|
|
tbl_outs: A list of tuples (opts, out), where each opts is a string of
|
|
options passed to tblgen, and the out is the corresponding output file
|
|
produced.
|
|
library: Whether to bundle the generated files into a library.
|
|
tblgen_args: Extra arguments string to pass to the tblgen binary.
|
|
**kwargs: Keyword arguments to pass to subsidiary cc_library() rule.
|
|
"""
|
|
llvm_project_execroot_path = Label("//llvm:tblgen.bzl", relative_to_caller_repository = False).workspace_root
|
|
|
|
if td_file not in td_srcs:
|
|
td_srcs += [td_file]
|
|
for (opts, out) in tbl_outs:
|
|
rule_suffix = "_".join(opts.replace("-", "_").replace("=", "_").split(" "))
|
|
native.genrule(
|
|
name = "%s_%s_genrule" % (name, rule_suffix),
|
|
srcs = td_srcs,
|
|
outs = [out],
|
|
tools = [tblgen],
|
|
message = "Generating code from table: %s" % td_file,
|
|
cmd = (("$(location %s) -I %s/llvm/include " +
|
|
"-I %s/clang/include " +
|
|
"-I $$(dirname $(location %s)) " +
|
|
"%s $(location %s) %s -o $@") % (
|
|
tblgen,
|
|
llvm_project_execroot_path,
|
|
llvm_project_execroot_path,
|
|
td_file,
|
|
opts,
|
|
td_file,
|
|
tblgen_args,
|
|
)),
|
|
)
|
|
|
|
# For now, all generated files can be assumed to comprise public interfaces.
|
|
# If this is not true, you should specify library = False
|
|
# and list the generated '.inc' files in "srcs".
|
|
if library:
|
|
native.cc_library(
|
|
name = name,
|
|
# FIXME: This should be `textual_hdrs` instead of `hdrs`, but
|
|
# unfortunately that doesn't work with `strip_include_prefix`:
|
|
# https://github.com/bazelbuild/bazel/issues/12424
|
|
#
|
|
# Once that issue is fixed and released, we can switch this to
|
|
# `textual_hdrs` and remove the feature disabling the various Bazel
|
|
# features (both current and under-development) that motivated the
|
|
# distinction between these two.
|
|
hdrs = [f for (_, f) in tbl_outs],
|
|
features = ["-parse_headers", "-header_modules"],
|
|
**kwargs
|
|
)
|