首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bazel无法构建项目外部依赖关系

bazel无法构建项目外部依赖关系
EN

Stack Overflow用户
提问于 2022-11-15 06:58:38
回答 1查看 41关注 0票数 0

我们有一个RPC项目。它使用bazel构建。在这个工场里,它还有一些其他的项目。喜欢

代码语言:javascript
复制
http_archive(
    name = "com_github_google_crc32c",  # 2021-10-05T19:47:30Z
    build_file = "//bazel:third_party/crc32c/BUILD.bazel",
    sha256 = "ac07840513072b7fcebda6e821068aa04889018f24e10e46181068fb214d7e56",
    strip_prefix = "crc32c-1.1.2",
    urls = ["https://github.com/google/crc32c/archive/1.1.2.tar.gz"],
)
代码语言:javascript
复制
load("@rules_cc//cc:defs.bzl", "cc_library", "cc_test")

genrule(
    name = "crc32c_config_h",
    srcs = ["src/crc32c_config.h.in"],
    outs = ["crc32c/crc32c_config.h"],
    cmd = """
sed -e 's/#cmakedefine01/#define/' \
""" + select({
        "@//bazel/config:brpc_with_sse42": """-e 's/ HAVE_SSE42/ HAVE_SSE42 1/' \
""",
        "//conditions:default": """-e 's/ HAVE_SSE42/ HAVE_SSE42 0/' \
""",
    }) + select({
        "@//bazel/config:brpc_with_glog": """-e 's/ CRC32C_TESTS_BUILT_WITH_GLOG/ CRC32C_TESTS_BUILT_WITH_GLOG 1/' \
""",
        "//conditions:default": """-e 's/ CRC32C_TESTS_BUILT_WITH_GLOG/ CRC32C_TESTS_BUILT_WITH_GLOG 0/' \
""",
    }) + """-e 's/ BYTE_ORDER_BIG_ENDIAN/ BYTE_ORDER_BIG_ENDIAN 0/' \
    -e 's/ HAVE_BUILTIN_PREFETCH/ HAVE_BUILTIN_PREFETCH 0/' \
    -e 's/ HAVE_MM_PREFETCH/ HAVE_MM_PREFETCH 0/' \
    -e 's/ HAVE_ARM64_CRC32C/ HAVE_ARM64_CRC32C 0/' \
    -e 's/ HAVE_STRONG_GETAUXVAL/ HAVE_STRONG_GETAUXVAL 0/' \
    -e 's/ HAVE_WEAK_GETAUXVAL/ HAVE_WEAK_GETAUXVAL 0/' \
    < $< > $@
""",
)

cc_library(
    name = "crc32c",
    srcs = [
        "src/crc32c.cc",
        "src/crc32c_arm64.cc",
        "src/crc32c_arm64.h",
        "src/crc32c_arm64_check.h",
        "src/crc32c_internal.h",
        "src/crc32c_portable.cc",
        "src/crc32c_prefetch.h",
        "src/crc32c_read_le.h",
        "src/crc32c_round_up.h",
        "src/crc32c_sse42.cc",
        "src/crc32c_sse42.h",
        "src/crc32c_sse42_check.h",
        ":crc32c_config_h",
    ],
    hdrs = [
        "include/crc32c/crc32c.h",
    ],
    copts = select({
        "@//bazel/config:brpc_with_sse42": ["-msse4.2"],
        "//conditions:default": [],
    }),
    strip_include_prefix = "include",
    visibility = ["//visibility:public"],
)

cc_test(
    name = "crc32c_test",
    srcs = [
        "src/crc32c_arm64_unittest.cc",
        "src/crc32c_extend_unittests.h",
        "src/crc32c_portable_unittest.cc",
        "src/crc32c_prefetch_unittest.cc",
        "src/crc32c_read_le_unittest.cc",
        "src/crc32c_round_up_unittest.cc",
        "src/crc32c_sse42_unittest.cc",
        "src/crc32c_test_main.cc",
        "src/crc32c_unittest.cc",
    ],
    deps = [
        ":crc32c",
        "@com_google_googletest//:gtest",
        "@com_google_googletest//:gtest_main",
    ] + select({
        "@//bazel/config:brpc_with_glog": ["@com_github_google_glog//:glog"],
        "//conditions:default": [],
    }),
)

我们必须为它编写构建文件。但是当我们想要使它成为外部依赖时,bazel就无法构建它。

有人知道怎么解决吗?是的,我想也许加点scrpt是个好主意?也许我觉得一些scrpt可以解决它。

EN

回答 1

Stack Overflow用户

发布于 2022-11-15 07:08:14

错误消息声明@com_github_madler_zlib丢失。您需要这种外部依赖,例如将其添加到WORKSPACE文件中:

代码语言:javascript
复制
http_archive(
    name = "com_github_madler_zlib",
    build_file = "//zlib.BUILD",
    sha256 = "629380c90a77b964d896ed37163f5c3a34f6e6d897311f1df2a7016355c45eff",
    strip_prefix = "zlib-1.2.11",
    urls = ["https://zlib.net/zlib-1.2.11.tar.gz"],
)

和zlib.BUILD

代码语言:javascript
复制
load("@rules_cc//cc:defs.bzl", "cc_library")

licenses(["notice"])  # BSD/MIT-like license (for zlib)

_ZLIB_HEADERS = [
    "crc32.h",
    "deflate.h",
    "gzguts.h",
    "inffast.h",
    "inffixed.h",
    "inflate.h",
    "inftrees.h",
    "trees.h",
    "zconf.h",
    "zlib.h",
    "zutil.h",
]

_ZLIB_PREFIXED_HEADERS = ["zlib/include/" + hdr for hdr in _ZLIB_HEADERS]

# In order to limit the damage from the `includes` propagation
# via `:zlib`, copy the public headers to a subdirectory and
# expose those.
genrule(
    name = "copy_public_headers",
    srcs = _ZLIB_HEADERS,
    outs = _ZLIB_PREFIXED_HEADERS,
    cmd = "cp $(SRCS) $(@D)/zlib/include/",
)

cc_library(
    name = "zlib",
    srcs = [
        "adler32.c",
        "compress.c",
        "crc32.c",
        "deflate.c",
        "gzclose.c",
        "gzlib.c",
        "gzread.c",
        "gzwrite.c",
        "infback.c",
        "inffast.c",
        "inflate.c",
        "inftrees.c",
        "trees.c",
        "uncompr.c",
        "zutil.c",
        # Include the un-prefixed headers in srcs to work
        # around the fact that zlib isn't consistent in its
        # choice of <> or "" delimiter when including itself.
    ] + _ZLIB_HEADERS,
    hdrs = _ZLIB_PREFIXED_HEADERS,
    copts = select({
        "@bazel_tools//src/conditions:windows": [],
        "//conditions:default": [
            "-Wno-unused-variable",
            "-Wno-implicit-function-declaration",
        ],
    }),
    includes = ["zlib/include/"],
    visibility = ["//visibility:public"],
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74441681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档