es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo configurar el espacio de trabajo para agregar una dependencia solo para una plataforma en particular?

Estoy usando Bazel para construir mi proyecto de Golang. Quiero usar bibliotecas de criptografía compatibles con FIPS.

He realizado estos cambios en mi archivo 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/{}"],
)

Esto funciona bien y la compilación es exitosa en Ubuntu. Pero si lo ejecuto en MacOS, obtengo un error de plataforma no compatible.

El SDK de boringcrypto anterior no está disponible para MacOS. Por lo tanto, quiero eliminar esta dependencia en caso de que la plataforma sea darwinamd64. ¿Cómo puedo agregar selectivamente esta dependencia en función del sistema operativo? Quiero agregar este SDK si el sistema operativo es Linux y no si el sistema operativo es MacOS.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para agregar selectivamente la dependencia sdk de boringcrypto basándose en el SO, puede utilizar la función select() en su archivo WORKSPACE.bazel.

    Aquí hay un fragmento actualizado que debería funcionar:

    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 = select({
            "linux_amd64": {
                "@io_bazel_rules_go//go:linux_amd64_sdk": "boringcrypto",
            },
            "//conditions:default": {
                "@io_bazel_rules_go//go:darwin_amd64_sdk": None,
            },
        }),
    )
    

    Con este código actualizado, el objetivo go_sdk dependerá del objetivo linux_amd64_sdk (que incluye el sdk de boringcrypto) solo en sistemas Linux. En macOS, el objetivo darwin_amd64_sdk proporcionará el SDK de Go sin las bibliotecas de boringcrypto.

    ¡Espero que esto ayude!

Comments are closed.