Как настроить рабочую область для добавления зависимости только для определенной платформы?

#bazel #bazel-rules

#базель #базель-правила

Вопрос:

Я использую bazel для создания своего проекта golang. Я хочу использовать крипто-библиотеки, совместимые с fips.

Я внес эти изменения в свое РАБОЧЕЕ пространство.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, я получу ошибку неподдерживаемой платформы.

Вышеуказанный пакет sdk boringcrypto недоступен для macos. Поэтому я хочу удалить эту зависимость в случае, если платформа-darwinamd64. Как я могу выборочно добавить эту зависимость на основе ОС? Я хочу добавить этот sdk, если ОС Linux, а не если ОС macOS.

Ответ №1:

config_setting и select может помочь вам здесь, например:

 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"],  }), )  

Комментарии:

1. Я использую go_rules, в частности go_dowload_sdk. В go_download_sdk нет атрибута copts , который я мог бы использовать. Я также попробовал go_wrap_sdk с атрибутом attribute_files, но у меня это не сработало.