2017-04-12 76 views
0

config_setting懷疑我試圖瞭解config_setting檢測底層平臺,並有一些疑慮。你能幫我澄清一下嗎?關於與巴澤爾

  1. 是什麼x64_windowsx64_windows_(msvc|msys) CPU之間的區別?如果我爲它們創建了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選擇某些內容時始終指定它們嗎?如果沒有,是否有更好的方法來檢測macros只有一個config_setting?就像在Windows中使用//crosstools一樣?

  4. 如何檢測Linux呢?我知道你可以首先檢測你關心的操作系統,然後使用//conditions:default,但是有一種方法可以專門檢測Linux並且不會將它作爲默認設置。

  5. 什麼是k8,piii等?是否有任何文檔描述了所有可能的cpu值及其含義?

  6. 如果我想用//crosstools來檢測每個平臺,有什麼地方可以查找所有可用的crosstools嗎?

謝謝!

回答

1

偉大的問題,所有。讓我來解決這些問題一個接一個:

  1. --cpu=x64_windows_msys觸發C++工具鏈,依靠MSYS/Cygwin的。 --cpu=x64_windows_msvc觸發Windows本機(MSVC)工具鏈。 -cpu=x64_windows會觸發默認設置,該設置仍然是MSYS,但對於MSVC而言爲being converted

    需要哪些支持是你的,但它可能是最安全的,支持所有的通用性(如果一個只是一個別名爲其他它不需要很複雜的邏輯)。

    只有一個config_setting可以同時觸發。

  2. 除非you'e使用自定義-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/目錄以參考默認值。

+0

感謝您的詳細解釋!我瞭解該功能現在如何更好地工作。 – RenatoUtsch

+0

我想我會等待新平臺功能發佈時開始考慮構建我的多平臺。感謝這個問題鏈接,當我搜索問題列表時,我沒有看到它。這會有很大的幫助。 – RenatoUtsch