bazel存储库_规则未执行

bazel存储库_规则未执行,bazel,Bazel,我有这个工作区文件 workspace(name = "libedgetpu") load(":workspace.bzl", "libedgetpu_dependencies") libedgetpu_dependencies() load("@org_tensorflow//tensorflow:workspace.bzl", "tf_workspace") tf_workspace(tf

我有这个工作区文件

workspace(name = "libedgetpu")

load(":workspace.bzl", "libedgetpu_dependencies")

libedgetpu_dependencies()
load("@org_tensorflow//tensorflow:workspace.bzl", "tf_workspace")
tf_workspace(tf_repo_name = "org_tensorflow")

#load("@coral_crosstool//:configure.bzl", "cc_crosstool")
#cc_crosstool(name = "crosstool")

local_repository(name = 'coral_crosstool1', path = 'coral_crosstool1')
load("@coral_crosstool1//:configure.bzl", "cc_crosstool1")
cc_crosstool1(name = "crosstool")
我正在尝试加载它加载的本地存储库coral#u crosstool1(因为我看到它打印了#####1,但没有运行存储库规则。如何执行该规则

def _impl(repository_ctx):
    dir_labels = repository_ctx.attr.additional_system_include_directories
    additional_include_dirs = ", ".join([
        '"%s"' % repository_ctx.path(dir_label.relative("BUILD")).dirname
        for dir_label in dir_labels
    ])
    print("#############################2")

    gcc_version = repository_ctx.execute(["/bin/bash", "-c", "gcc -dumpversion | cut -f1 -d."]).stdout
    bcm2708_toolchain_root = repository_ctx.os.environ.get("BCM2708_TOOLCHAIN_ROOT", "/tools/arm-bcm2708")
    repository_ctx.symlink(Label("//:BUILD.tpl"), "BUILD")
    repository_ctx.template(
        "cc_toolchain_config.bzl",
        Label("//:cc_toolchain_config.bzl.tpl"),
        {
            "%{gcc_version}%": gcc_version,
            "%{c_version}%": repository_ctx.attr.c_version,
            "%{cpp_version}%": repository_ctx.attr.cpp_version,
            "%{bcm2708_toolchain_root}%": bcm2708_toolchain_root,
            "%{additional_system_include_directories}%": additional_include_dirs,
        },
    )

cc_crosstool1 = repository_rule(
    environ = [
        "BCM2708_TOOLCHAIN_ROOT",
    ],
    attrs = {
        # Consult https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html for
        # valid c_version and cpp_version values (-std option).
        "c_version": attr.string(default = "c99"),
        "cpp_version": attr.string(default = "c++11"),
        "additional_system_include_directories": attr.label_list(allow_files = True),
    },
    implementation = _impl,
    local = True,
)
print("#############################1")
我的目录树如下所示:

edgetpu
   +- WORKSPACE //shown above
   +- BUILD
   +- coral_crosstool1
              +- BUILD //this is empty
              +- WORKSPACE // also empty
              +- configure.bzl  //shown above
              +- cc_toolchain_config.bzl.tpl
              +- BUILD.tpl
我需要执行该规则,以便它可以从cc_toolchain_config.bzl.tpl生成cc_toolchain_config.bzl

这件事我已经做了很多天了。任何帮助都将不胜感激

这是输出

bazel build --sandbox_debug --subcommands --experimental_repo_remote_exec --compilation_mode=opt --define darwinn_portable=1 --action_env PYTHON_BIN_PATH=/usr/bin/python3 --cpu=armv6 --embed_label='TENSORFLOW_COMMIT=f394a768719a55b5c351ed1ecab2ec6f16f99dd4' --stamp -s --crosstool_top=@coral_crosstool1//:toolchains --cpu=armv6 --compiler=gcc --linkopt=-L/usr/lib/arm-linux-gnueabihf/ //tflite/public:libedgetpu_direct_all.so
DEBUG: /home/dev/.cache/bazel/_bazel_dev/770af56a999066d501f5c33777691c07/external/coral_crosstool1/configure.bzl:53:6: #############################1
ERROR: /home/dev/oosman/.leila/lib/edgetpu/tflite/public/BUILD:95:21: every rule of type cc_binary implicitly depends upon the target '@coral_crosstool1//:toolchains', but this target could not be found because of: no such target '@coral_crosstool1//:toolchains': target 'toolchains' not declared in package '' defined by /home/dev/.cache/bazel/_bazel_dev/770af56a999066d501f5c33777691c07/external/coral_crosstool1/BUILD
ERROR: Analysis of target '//tflite/public:libedgetpu_direct_all.so' failed; build aborted: Analysis failed

我很确定你的问题出在由存储库规则生成的常规规则/目标中,而不是存储库规则本身。缺少的标签来自命令行中的
--crosstool\u top=@coral\u crosstool1//:toolschains
coral\u crosstool1/BUILD
为空,因此它肯定没有该目标。也许你想要
--crosstool\u top=@crosstool//:toolschains
?或者从
@crosstool/:cc\u toolschain\u config.bzl
加载并调用函数?如果不理解存储库规则的意图,很难说


通常,我通过查看生成的外部存储库文件夹来调试存储库规则。它应该位于
bazel out/../../../../external/coral_crosstool1
,或者您可以使用
find$(bazel info output_base)-name coral_crosstool1
找到它(尽管这也会找到您的源文件夹,但请注意查看哪一个)。该文件夹是生成的存储库。有时,将整个内容复制到其他地方会很有帮助,可以在
工作区中用
本地存储库
替换存储库规则,然后按照您希望的方式编辑内容,而无需担心如何编写存储库规则来生成这些内容。然后,您可以处理这些存储库我很确定你的问题出在由存储库规则生成的常规规则/目标中,而不是存储库规则本身。缺少的标签来自命令行中的
--crosstool\u top=@coral\u crosstool1//:toolschains
coral\u crosstool1/BUILD
为空,因此它肯定没有这个目标。也许你想要
--crosstool\u top=@crosstool//:toolschains
?或者从
@crosstool//:cc\u toolschain\u config.bzl
加载并调用函数?如果不理解你的存储库规则的意图,很难说


通常,我通过查看生成的外部存储库文件夹来调试存储库规则。它应该位于
bazel out/../../../../external/coral_crosstool1
,或者您可以使用
find$(bazel info output_base)-name coral_crosstool1
找到它(尽管这也会找到您的源文件夹,但请注意查看哪一个)。该文件夹是生成的存储库。有时,将整个内容复制到其他地方会很有帮助,可以在
工作区中用
本地存储库
替换存储库规则,然后按照您希望的方式编辑内容,而无需担心如何编写存储库规则来生成这些内容。然后,您可以处理这些存储库在生成这些相同的文件之前,必须遵守规则。

BUILD.tpl也在那里,我忘记在我的问题中提到它,现在已经更新了。名为toolchains的目标将由BUILD和cc_toolchain_config.bzl创建,但首先这两个文件需要由repository_ctx.template和repository_ctx.symlink生成,这两个文件没有发生,因为规则没有运行。我想我需要让我的目标依赖于我的存储库规则来确保规则被执行。但我不知道如何执行。在存储库规则被执行之前,你的目标不存在。当你使用
--crosstool\u top=@coral\u crosstool1/:toolschains
构建时(这个标签就是从那里来的),bazel首先加载包,这需要评估存储库规则。BUILD.tpl也在那里,我忘了在我的问题中提到它,现在更新了。名为toolchains的目标将由BUILD和cc_toolchain_config.bzl创建,但首先这两个文件需要由repository_ctx.template和repository_ctx.sym生成链接没有发生,因为规则没有运行。我想我需要让我的目标依赖于我的存储库规则来确保规则被执行。但我不知道如何执行。在执行存储库规则之前,你的目标不存在。当你使用
--crosstool\u top=@coral\u crosstool1/:toolschains
(这就是标签的来源),bazel首先加载包,这需要评估存储库规则。