【问题标题】:How to configure workspace to add a dependency only for a particular platform?如何配置工作区以仅为特定平台添加依赖项?
【发布时间】:2021-11-29 14:37:52
【问题描述】:

我正在使用 bazel 来构建我的 golang 项目。我想使用符合 fips 的加密库。

我已在我的 WORKSPACE.bazel 中进行了这些更改 -

load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies", "go_download_sdk")

go_rules_dependencies()

go_register_toolchains(version = "1.14.8")

go_download_sdk(
    name = "go_sdk",
    sdks = {
       "linux_amd64": ("go1.14.15b4.linux-amd64.tar.gz", "82ba7297d26afcdade439de5621bdcb16e5261877f204aa60d03b5e07223a5c8"),
    },
    urls = ["https://go-boringcrypto.storage.googleapis.com/{}"],
)

这工作正常,并且在 Ubuntu 上构建成功。但是如果我在 MacOS 上运行它,我会得到不受支持的平台错误。

以上无聊的crypto sdk 不适用于macos。因此,如果平台是 darwinamd64,我想删除这种依赖关系。如何根据操作系统有选择地添加此依赖项?如果 OS 是 linux 而不是 OS 是 MacOS,我想添加这个 sdk。

【问题讨论】:

    标签: bazel bazel-rules


    【解决方案1】:

    config_settingselect 可以在这里为您提供帮助,例如:

    config_setting(
        name = "macos",
        constraint_values = [
            "@bazel_tools//platforms:osx",
        ],
        visibility = ["//visibility:public"],
    )
    
    cc_test(
        name = "test",
        srcs = ["test.cc"],
        copts = select({
            ":macos": ["/std:c++17"],
            "//conditions:default": ["-std=c++1z"],
        }),
    )
    

    【讨论】:

    • 我正在使用 go_rules,特别是 go_dowload_sdk。在 go_download_sdk 中没有我可以使用的属性 copts 。我也尝试了带有 attribute_files 属性的 go_wrap_sdk 仍然对我不起作用。
    猜你喜欢
    • 1970-01-01
    • 2013-04-09
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多