0

以下のbazelルールを使用して、bazelで静的ライブラリを構築しました:

def _cc_static_library_impl(ctx):
    cc_deps = [dep[CcInfo] for dep in ctx.attr.deps]
    libraries = []
    for cc_dep in cc_deps:
        for link_input in cc_dep.linking_context.linker_inputs.to_list():
            for library in link_input.libraries:
                libraries += library.pic_objects
    args = ["r", ctx.outputs.out.path] + [f.path for f in libraries]
    ctx.actions.run(
        inputs = libraries,
        outputs = [ctx.outputs.out],
        executable = "/usr/bin/ar",
        arguments = args,
    )
    return [DefaultInfo()]

cc_static_library = rule(
    implementation = _cc_static_library_impl,
    attrs = {
        "deps": attr.label_list(providers = [CcInfo]),
    },
    outputs = {"out": "lib%{name}.a"},
)

ハードコーディングされたコマンドを使用する代わりに、現在のツールチェーンから使用するコマンドを抽出するにはどうすればよい/usr/bin/arですか? 私はインターネットで見つけたものに基づいてルールを作成しましたが、これに関する知識は非常に限られています。この例は、関連することをしているようです: https://github.com/bazelbuild/rules_cc/blob/main/examples/my_c_archive/my_c_archive.bzl

4

1 に答える 1