2017-06-05 51 views
1

我試圖在最近的提交中從源代碼ppc64le中創建Tensorflow,但我在來自bazebuild/rules_closure的一些問題(https://github.com/tensorflow/tensorflow/issues/10306https://github.com/bazelbuild/rules_closure/issues/207)上磕磕絆絆。Bazel-Skylark檢查體系結構

大多數情況下,我需要檢查目標機器是否是ppc64le(是否有任何本地Bazel方式來運行uname -m之類的東西?)。然後,我們不應該將'-client'傳遞給JVM調用 - 不幸的是,截至今天,對於ppc64le在openjdk8中不支持C1(客戶端)編譯器。

另外還有一些預先構建的x64二進制文件(nodejs和protoc),它們在構建rules_closure時下載 - 這在preability的可移植性之前。我想知道是否有辦法繞過這個問題,例如添加指向包含ppcle64二進制文件的存儲庫的鏈接或回退到系統的二進制文件。

(我也問過這個在巴澤爾 - 討論郵件列表)

+0

你不能使用'TARGET_CPU' [make variables](https://bazel.build/versions/master/docs/be/make-variables.html)嗎? – gut

+0

我試過了,但似乎Skylark看不到「make」變量。 –

回答

0

爲什麼-client標誌需要在所有?它可以被移除所有體系結構嗎? Bazel內置的調整JDK配置的方式是java_toolchain() rule(您可以在源存儲庫中看到Bazel使用的default java_toolchain)。如果在某些平臺上確實需要該標誌,而不是其他標準,那麼應該添加一個java_toolchain來提供它,不支持該標誌的平臺可以使用不帶該標誌的自定義工具鏈。

就二進制文件而言,現在唯一可用的選擇是使用select()規則,檢查host_cpu設置,選擇一個可在本地平臺上工作的二進制文件。

我正在積極致力於爲Bazel平臺(design doc公開提供)的新功能。這將允許諸如TensorFlow或rules_closure之類的項目定義它們支持的平臺,並提供不同的工具鏈和配置,最終包括諸如protoc二進制文件和JDK標誌之類的內容。不幸的是,雖然開發進展順利,但更新本地Java規則需要一些時間。您可以在問題#2219上追蹤Github上的進度。

+0

我將在'bazelbuild/rules_closure'中開始討論'-client'的需求,然後查看select()規則。 –

+0

開上rules_closure一個新問題:https://github.com/bazelbuild/rules_closure/issues/208 –