mirror of
https://github.com/bazel-contrib/rules_foreign_cc
synced 2024-11-28 08:43:26 +00:00
3cbd0a9938
* Add meson support * Modify zlib to be detected via pkgconfig in dependent rules * Modify zlib and expat to be linked to shared libs in dependent rules * Add example usage of Meson rule This commit adds the glib library to the "examples" build. glib requires pcre2, so pcre and libgit2 (a dependent of pcre) have been updated/modified * Add example usage of meson_with_requirements macro This commit adds mesa to the "examples" build. This commit also changes the "examples" build to use the hermetic python toolchain provided by rules_foreign_cc. As such, the python toolchain built by rules_foreign_cc is no longer used, as it cannot be used in workspace rules, .e.g pip_parse(). As such, the python2 build has been removed from the examples as python2 is end-of-life. Until Bazel 4.2.0, the built-in android toolchain required Python 2. As such the minimum supported version has been upversioned to 4.2.0. Note that the BAZEL_VC env var was removed from CI as mesa requires MSVC 2019. * Set visibility for each target in foreign_cc_rule_variant * Apply formatting changes * Get meson examples working with bzlmod Note that a newer version of pkgconfig than that installed in ubuntu 20 must be used to build libxau, therefore the built_pkgconfig_toolchain is now registered
73 lines
2.5 KiB
Python
73 lines
2.5 KiB
Python
"""This file contains rules for configuration transitions"""
|
|
|
|
load("//foreign_cc:providers.bzl", "ForeignCcDepsInfo")
|
|
|
|
def _extra_toolchains_transition_impl(settings, attrs):
|
|
return {"//command_line_option:extra_toolchains": attrs.extra_toolchains + settings["//command_line_option:extra_toolchains"]}
|
|
|
|
_extra_toolchains_transition = transition(
|
|
implementation = _extra_toolchains_transition_impl,
|
|
inputs = ["//command_line_option:extra_toolchains"],
|
|
outputs = ["//command_line_option:extra_toolchains"],
|
|
)
|
|
|
|
def _extra_toolchains_transitioned_foreign_cc_target_impl(ctx):
|
|
# Return the providers from the transitioned foreign_cc target
|
|
return [
|
|
ctx.attr.target[DefaultInfo],
|
|
ctx.attr.target[CcInfo],
|
|
ctx.attr.target[ForeignCcDepsInfo],
|
|
ctx.attr.target[OutputGroupInfo],
|
|
]
|
|
|
|
extra_toolchains_transitioned_foreign_cc_target = rule(
|
|
doc = "A rule for adding extra toolchains to consider when building the given target",
|
|
implementation = _extra_toolchains_transitioned_foreign_cc_target_impl,
|
|
cfg = _extra_toolchains_transition,
|
|
attrs = {
|
|
"extra_toolchains": attr.string_list(
|
|
doc = "Additional toolchains to consider",
|
|
mandatory = True,
|
|
),
|
|
"target": attr.label(
|
|
doc = "The target to build after considering the extra toolchains",
|
|
providers = [ForeignCcDepsInfo],
|
|
mandatory = True,
|
|
),
|
|
"_allowlist_function_transition": attr.label(
|
|
default = "@bazel_tools//tools/allowlists/function_transition_allowlist",
|
|
),
|
|
},
|
|
incompatible_use_toolchain_transition = True,
|
|
)
|
|
|
|
def foreign_cc_rule_variant(name, rule, toolchain, **kwargs):
|
|
""" Wrapper macro around foreign cc rules to force usage of the given toolchain.
|
|
|
|
Args:
|
|
name: The target name
|
|
rule: The foreign cc rule to instantiate, e.g. configure_make
|
|
toolchain: The desired make variant toolchain to use, e.g. @rules_foreign_cc//toolchains:preinstalled_nmake_toolchain
|
|
**kwargs: Remaining keyword arguments
|
|
"""
|
|
|
|
foreign_cc_rule_target_name = name + "_"
|
|
|
|
tags = kwargs.pop("tags", [])
|
|
visibility = kwargs.pop("visibility", [])
|
|
|
|
rule(
|
|
name = foreign_cc_rule_target_name,
|
|
tags = tags + ["manual"],
|
|
visibility = visibility,
|
|
**kwargs
|
|
)
|
|
|
|
extra_toolchains_transitioned_foreign_cc_target(
|
|
name = name,
|
|
extra_toolchains = [toolchain],
|
|
target = foreign_cc_rule_target_name,
|
|
tags = tags,
|
|
visibility = visibility,
|
|
)
|