关于使用Bazel进行config_setting的疑问

时间:2017-04-12 18:47:11

标签: bazel

我试图理解config_setting检测底层平台并有一些疑问。你能帮我澄清一下吗?

  1. x64_windowsx64_windows_(msvc|msys) cpus有什么区别?如果我为所有人创建config_setting,那么只会触发其中一个吗?我应该忽略x64_windows

  2. 要检测Windows,推荐的方法是什么?目前我正在做:

    config_setting(
        name = "windows",
        values = {"crosstool_top": "//crosstools/windows"},
    )
    
    config_setting(
        name = "windows_msvc",
        values = {
            "crosstool_top": "//crosstools/windows",
            "cpu": "x64_windows_msvc",
        },
    )
    
    config_setting(
        name = "windows_msys",
        values = {
            "crosstool_top": "//crosstools/windows",
            "cpu": "x64_windows_msys",
        },
    )
    

    通过使用此功能,我希望使用:windows来匹配所有 Windows版本和:windows_msvc,例如,仅匹配MSVC。这是最好的方法吗?

  3. darwindarwin_x86_64 cpus有什么区别?我知道它们与macOS匹配,但是在为macOS选择内容时是否需要始终指定两者?如果没有,是否有更好的方法来检测只有一个config_setting的macOS?就像在Windows上使用//crosstools一样?

  4. 如何检测Linux?我知道你可以先检测你关心的操作系统,然后使用//conditions:default,但是有一种方法可以检测专门的Linux,而不是将它作为默认值。

    < / LI>
  5. 什么是k8piii等?是否有任何文档描述了所有可能的cpu值及其含义?

  6. 如果我想使用//crosstools检测每个平台,是否可以在某处找到所有可用的crosstools?

  7. 谢谢!

1 个答案:

答案 0 :(得分:1)

很棒的问题,都是。让我一个一个地解决它们:

  1. --cpu=x64_windows_msys触发依赖于MSYS / Cygwin的C ++工具链。 --cpu=x64_windows_msvc触发Windows本机(MSVC)工具链。 -cpu=x64_windows会触发默认值,即MSYS,但being converted为MSVC。

    你想要支持哪些是由你决定的,但是支持所有通用性可能是最安全的(如果一个只是另一个的别名,它不需要非常复杂的逻辑)。

    一次只能触发一个config_setting

  2. 除非您使用自定义-crosstool_top=标志来指定Windows版本,否则您可能希望在--cpu上触发,例如:

    config_setting(
        name = "windows",
        values = {"cpu": "x64_windows"}
    

    现在没有很好的方法来定义所有 Windows。这是Bazel识别平台的能力的当前缺陷,--cpu--crosstool_top这样的设置并没有完全正确地建模。 Ongoing work创建一流的平台概念将为您提供最佳解决方案。但目前--cpu可能是您最好的选择。

  3. 这基本上和Windows一样。但据我所知,默认的crosstools只有darwin,没有darwin_x86_64

  4. 目前最好使用//conditions:default方法,而不是做。一旦有了一流的平台,它将为您提供您想要的保真度。

  5. k8piii分别是86个64位和32位CPU的假名。它们也倾向于按照惯例与“Linux”相关联,尽管这不是保证的1-1匹配。

    没有明确的“所有可能的CPU值”。基本上,--cpu只是一个字符串,它在CROSSTOOL文件中被解析为具有与该字符串匹配的标识符的工具链。这允许您为要自己编码的新CPU类型编写新的CROSSTOOL文件。因此,确切的可用CPU集取决于谁使用Bazel以及他们如何设置工作区。

  6. 出于与5.相同的原因,没有明确的清单。请参阅Bazel的github tools/目录以获取对默认值的引用。