Создайте Makefile Target в Bazel - PullRequest
       0

Создайте Makefile Target в Bazel

0 голосов
/ 25 сентября 2019

Я пытаюсь построить openssl с Базелем.Вот мои текущие настройки

В моем /WORKSPACE в корне проекта у меня есть

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "openssl",
    urls = ["https://www.openssl.org/source/openssl-1.1.1c.tar.gz"],
    sha256 = "f6fb3079ad15076154eda9413fed42877d668e7069d9b87396d0804fdb3f4c90",
    strip_prefix = "openssl-1.1.1c",
    build_file = "@//:BUILD.openssl",
)

В моем /BUILD.openssl файле у меня есть

genrule(
    name = "build",
    visibility = ["//visibility:public"],
    srcs = glob(["**"]),
    cmd = '\n'.join([
        './Configure darwin64-x86_64-cc -mmacosx-version-min="10.14" --prefix=$@ --openssldir=$@',
        'make',
        'make install',
    ]),
    outs = ["openssl"],
)

Я надеваюЯ не совсем понимаю, в какой папке я нахожусь, пока работает этот genrule, поскольку он жалуется на

/bin/bash: ./Configure: No such file or directory

Кроме того, что я могу указать для srcs и outs в цели makefile?Какой каталог я бы указал для openssls --prefix и --openssldir в этом случае?

Я немного удивлен, что интеграция целей, которые не настроены в Bazel, так плохо документирована, учитывая, что это, вероятно, самый важныйслучай использования.

1 Ответ

0 голосов
/ 25 сентября 2019

Используйте rules_foreign_cc для интеграции с make проектами.Основываясь на информации в этой ошибке, Я получил базовую сборку openssl:

В вашем WORKSPACE, добавьте:

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

# Group the sources of the library so that rules in rules_foreign_cc have access to it
all_content = """filegroup(name = "all", srcs = glob(["**"]), visibility = ["//visibility:public"])"""

http_archive(
    name = "openssl",
    build_file_content = all_content,
    sha256 = "f6fb3079ad15076154eda9413fed42877d668e7069d9b87396d0804fdb3f4c90",
    strip_prefix = "openssl-1.1.1c",
    urls = ["https://www.openssl.org/source/openssl-1.1.1c.tar.gz"],
)

# Rule repository
http_archive(
    name = "rules_foreign_cc",
    sha256 = "7b350ba8b2ef203626fda7572506111e3d5286db92de3ecafdcbc99c6c271265",
    strip_prefix = "rules_foreign_cc-16ddc00bd4e1b3daf3faee1605a168f5283326fa",
    url = "https://github.com/bazelbuild/rules_foreign_cc/archive/rules_foreign_cc-16ddc00bd4e1b3daf3faee1605a168f5283326fa.zip",
)

load("@rules_foreign_cc//:workspace_definitions.bzl", "rules_foreign_cc_dependencies")

rules_foreign_cc_dependencies()

В вашем файле BUILD, добавьте:

load("@rules_foreign_cc//tools/build_defs:configure.bzl", "configure_make")

configure_make(
    name = "openssl",
    configure_command = "config",
    configure_options = [
        "no-shared",
    ],
    lib_source = "@openssl//:all",
    static_libraries = [
        "libcrypto.a",
        "libssl.a",
    ],
)

Наконец, запустите bazel build:

$ bazel build :all
INFO: Analyzed target //:openssl (1 packages loaded, 1 target configured).
INFO: Found 1 target...
INFO: From CcConfigureMakeRule openssl/include:
Target //:openssl up-to-date:
  bazel-bin/openssl/include
  bazel-bin/openssl/lib/libcrypto.a
  bazel-bin/openssl/lib/libssl.a
  bazel-bin/copy_openssl/openssl
  bazel-bin/openssl/logs/Configure_script.sh
  bazel-bin/openssl/logs/Configure.log
  bazel-bin/openssl/logs/wrapper_script.sh
...