2017-04-12 16 views
0

私は基礎となるプラットフォームを検出するためにconfig_settingを理解しようとしており、疑問がありました。それらを明確にするのを助けてくれますか?Bazelでconfig_settingに関する疑問

  1. x64_windowsx64_windows_(msvc|msys)のCPUの違いは何ですか?私がconfig_settingをすべて作成すると、それらのうちの1つだけがトリガされますか?私はちょうど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", 
        }, 
    ) 
    

    のみMSVCを一致させるために、例えば、すべて Windowsバージョンと:windows_msvcに一致するように、私は:windowsを使用したい、これを使用することにより。これはこれを行う最善の方法ですか?

  3. darwindarwin_x86_64cpusの違いは何ですか?私はそれらがmacOSと一致することを知っていますが、私はいつもmacOSのために何かを選択するときに両方を指定する必要がありますか?そうでない場合は、config_settingの1つだけでMacOSを検出するより良い方法がありますか? Windowsで//crosstoolsを使用するのと同じですか?

  4. どのようにLinuxを検出しますか?最初に気にするオペレーティングシステムを検出してから//conditions:defaultを使用することは知っていますが、特にLinuxを検出してデフォルトとして残すことはできません。

  5. k8,piiiなどとは何ですか? cpuの値とその意味を説明する文書がありますか?

  6. //crosstoolsを使用して各プラットフォームを検出したい場合は、利用可能なすべてのクロスツールを検索できますか?

ありがとう!

答えて

1

素晴らしい質問です。私はそれらを一つずつ取り組みましょう

  1. --cpu=x64_windows_msysはMSYS/Cygwinのに依存しているC++ツールチェーンをトリガします。 --cpu=x64_windows_msvcは、Windowsネイティブ(MSVC)ツールチェーンを起動します。 -cpu=x64_windowsがデフォルトをトリガしますが、それでもMSYSですが、being convertedはMSVCになります。

    あなたがサポートしたいものはあなた次第ですが、一般的にすべてのものをサポートするのが最も安全です(そして、別のもののエイリアスであれば、非常に複雑なロジックを必要としません)。

    config_settingは一度に1つしかトリガーできません。

  2. you'eは、例えば、あなたはおそらく--cpuでトリガしたいと思う、Windowsのビルドを指定するためのカスタム-crosstool_top=フラグを使用していない場合:

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

    を素晴らしい方法がすべてのWindowsを定義するために、今はありません。これは、--cpu--crosstool_topのような設定が正しい方法をあまりモデル化していない、プラットフォームを認識するBazelの現在の欠陥です。 Ongoing workは、プラットフォームのファーストクラスのコンセプトを作成することで、あなたが望むものに最適なソリューションを提供します。しかし、今のところ--cpuはおそらくあなたの最善の選択肢です。

  3. これは基本的にWindowsと同じ話です。しかし、私の知る限り、デフォルトのクロスコンパイルはdarwindarwin_x86_64はありません。

  4. しばらくお待ちください。//conditions:defaultアプローチを使用することをお勧めします。ファーストクラスのプラットフォームが利用可能になると、必要な忠実度が得られます。

  5. k8およびpiiiはそれぞれ86個の64ビットCPUと32ビットCPUの仮名です。また、これは保証された1-1マッチではありませんが、大会では「Linux」に関連する傾向があります。

    「すべての可能なCPU値」の確定セットはありません。基本的に--cpuは、CROSSTOOLファイルでその文字列に一致する識別子を持つツールチェーンに解決される文字列です。これにより、自分でエンコードしたい新しいCPUタイプ用の新しいCROSSTOOLファイルを書くことができます。利用可能なCPUの正確なセットは、誰がBazelを使用しているか、どのように作業スペースを設定しているかによって異なります。

  6. 5.と同じ理由で、決定的なリストはありません。デフォルトへの参照については、Bazelのgithub tools/ディレクトリを参照してください。

+0

非常に詳細な説明をありがとう!私はこの機能が今どのように優れているかを理解しています。 – RenatoUtsch

+0

新しいプラットフォームの機能がリリースされるのを待って、私のビルドのマルチプラットフォーム化を考え始めると思います。問題のリンクをありがとう、私は問題のリストを検索したときに私はそれを見ていない。それは多くの助けになるでしょう。 – RenatoUtsch

関連する問題