-1
我目前正在嘗試使用Bazel將tensorflow c standalone庫編譯爲llvm二進制格式。但是Bazel沒有像clang那樣的參數,如果我想用Bazel發出llvm二進制格式,該怎麼辦?如何在使用Bazel編譯項目時生成llvm ir binary(.bc)?
我目前正在嘗試使用Bazel將tensorflow c standalone庫編譯爲llvm二進制格式。但是Bazel沒有像clang那樣的參數,如果我想用Bazel發出llvm二進制格式,該怎麼辦?如何在使用Bazel編譯項目時生成llvm ir binary(.bc)?
正如我在https://github.com/bazelbuild/bazel/issues/3566中寫的那樣,這可能,但不是很簡單。您需要編寫自己的CROSSTOOL,它將使用clang生成.bc文件,並使用llvm-link進行鏈接。文件擴展名尚未在CROSSTOOL中定製,因此您必須使用.o和.a。
一些資源,讓你開始:
隨意問更多,如果你被卡住/丟失。
我看到其中一些子任務將基於elf的「共享對象」設置爲輸出文件類型,如果我想將這些源代碼編譯爲「.bc」,我應該修改所有這些子任務並使用它們。 o和.a文件全由我自己?我的意思是用新的編譯邏輯重寫所有相關的BUILD文件? – YHSPY
注意:我對llvm bitcode沒有多少經驗,所以請教我一些鹽下人的建議,例如只做幾次谷歌搜索的人。一般來說,我會說你可能會爲靜態庫和共享庫使用llvm-link,所以最後你得到你的libtensorflow.so,它實際上是一個位碼文件。所以理想情況下不需要修改BUILD文件。請注意,BUILD文件只包含很少的「編譯邏輯」,實際的編譯器/鏈接器調用是使用CROSSTOOL生成的。可以從BUILD文件中添加一些額外的標誌(例如copts屬性)。 – mhlopko
我也將從CROSSTOOL開始,它不直接調用llvm工具,而是遍歷包裝器腳本。在這些腳本中,我會過濾掉我還沒有準備好處理(或永遠)的標誌。通過這種方式,你可以從小和重複開始。 – mhlopko