Компиляция Tensorflow с пользовательским Clang + Libc ++ (вместо stdlibc ++)

Я пытаюсь скомпилировать тензор потока с помощью пользовательского набора инструментов clang / llvm и использую родной libc ++ для clang (вместо того, чтобы заимствовать stdlibc ++ из Gcc).

Похоже, что Bazel plain предполагает, что каждый Clang будет использовать библиотеки Gcc, потому что я получаю эти ошибки:

$ bazel build --cxxopt=-std=c++11 --cxxopt=-stdlib=libc++ tensorflow:libtensorflow.so
INFO: Found 1 target...
INFO: From Compiling
external/protobuf/src/google/protobuf/compiler/js/embed.cc [for host]:
external/protobuf/src/google/protobuf/compiler/js/embed.cc:37:12:
warning: unused variable 'output_file' [-Wunused-const-variable]
const char output_file[] = "well_known_types_embed.cc";
^
1 warning generated.
ERROR: /home/hbucher/.cache/bazel/_bazel_hbucher/ad427c7fddd5b68de5e1cfaa7cd8c8cc/external/com_googlesource_code_re2/BUILD:11:1: undeclared inclusion(s) in rule '@com_googlesource_code_re2//:re2':
this rule is missing dependency declarations for the following files included by 'external/com_googlesource_code_re2/re2/bitstate.cc':
'/home/hbucher/install/include/c++/v1/stddef.h'
'/home/hbucher/install/include/c++/v1/__config'

Я попытался взломать tools / cpp / CROSSTOOL внутри bazel, так как некоторые посты предлагали добавить строку

cxx_builtin_include_directory: "/home/hbucher/install/include/c++/v1"

но безрезультатно, это не имеет никакого значения.

Затем я попытался следовать учебнику Bazel, чтобы создать собственный набор инструментов. Текст не очень помогает, потому что они на самом деле пишут кросс-инструмент, в то время как я пытаюсь настроить существующие правила хоста, и каким-то образом bazel, кажется, отменяет каждую попытку настройки параметров.

Я дошел до того, что в настоящее время в моем хранилище GitHub https://github.com/HFTrader/BazelCustomToolchain

Однако он не компилируется, и я даже не могу понять, как начать отладку этого сообщения.

$  bazel build --crosstool_top=@hbclang//:toolchain tensorflow:libtensorflow.so
.....................
ERROR: The crosstool_top you specified was resolved to
'@hbclang//:toolchain', which does not contain a CROSSTOOL file. You can
use a crosstool from the depot by specifying its label.
INFO: Elapsed time: 2.216s

Я добавил эти строки в мой тензор потока / РАБОЧЕЕ МЕСТО

new_local_repository(
name="hbclang",
path="/home/hbucher/BazelCustomToolchain",
build_file = "/home/hbucher/BazelCustomToolchain/BUILD",
)

Я задал этот вопрос группам gazel в bazel, но они перенаправили меня в stackoverflow. На данный момент я собираюсь сдаться.

Кто-то пытался сделать это, или я здесь прорываюсь?

Спасибо.

3

Решение

Таким образом, в этот вопрос включено слишком много небольших вопросов и вопросов, я дам краткие ответы на все из них и, пожалуйста, спросите больше о тех, о которых вы хотите узнать больше.

Базель не предполагает libstdc ++, он просто делает то, что указывает Crosstool. Как вы уже поняли, при написании Crosstool даже выдающиеся инженеры разочарованно смотрят на экран, Bazel пытается автоматически сгенерировать Crosstool для вас. У этого автогенерации есть свои пределы, и до сих пор никто не просил libc ++ вместо libstdc ++, поэтому мы не учили его обнаруживать. Соответствующая строка в cc_configure.bzl.

Рег. tools / cpp / CROSSTOOL, вы имеете в виду файл в источниках Bazel? Этот файл используется только для начальной загрузки Bazel, когда мы выпускаем новую версию. Обычно Bazel использует автоматически сгенерированный кросс-инструмент, упомянутый выше.

Мне нужно больше информации о том, что именно вы подразумеваете под «bazel, кажется, отменяет каждую попытку, которую я пытаюсь настроить его параметры».

Ваш репозиторий github — хорошая отправная точка, вы на правильном пути.

А для локального репозитория вы должны использовать правило local_repository вместо new_repository_rule. Бывший предназначен для зависимости от существующих проектов Bazel, последний — для проектов, которые не имеют файлов BUILD (например, в зависимости от сборки проекта по make и т. Д.). Соответствующий раздел в документация.

1

Другие решения

Решаемые. Не по назначению, но это работает для меня.

export INSTALL_DIR="$HOME/install"export CC=$INSTALL_DIR/bin/clang
export CXX=$INSTALL_DIR/bin/clang++
export CXXFLAGS="-stdlib=libc++ -L$INSTALL_DIR/lib"export LDFLAGS="-L$INSTALL_DIR/lib -lm -lrt"export LD_LIBRARY_PATH="/usr/lib:/lib/x86_64-linux-gnu/:$INSTALL_DIR/lib"git clone https://github.com/tensorflow/tensorflow.git tensorflow-github
cd tensorflow-github
mkdir build-tmp && cd build-tmp
cmake ../tensorflow/contrib/cmake/
make -j4

Легко как 1-2-3 с помощью cmake

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector