Compiling Tensorflow with a custom Clang + Libc++ (instead of stdlibc++)

Viewed 3844

I am trying to compile tensorflow with a custom clang/llvm toolchain and using clang's native libc++ (instead of borrowing Gcc's stdlibc++).

It looks like bazel plain assumes that every clang will use Gcc's libraries because I get these errors:

$ 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'

I tried to hack into tools/cpp/CROSSTOOL inside bazel as some posts suggested to add the line

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

but to no avail, it does not seem to make any difference.

Then I tried to follow a bazel tutorial to create a custom toolchain. The text does not help much because they are actually writing a cross tool while what I am trying to do is to tweak the existing host rules and somehow bazel seems to undo every attempt I try to tweak its parameters.

I have got to the point that is currently in my github repository https://github.com/HFTrader/BazelCustomToolchain

However it does not compile and I cannot even figure out how to start debugging this message.

$  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  

I have appended these lines to my tensorflow/WORKSPACE

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

I have asked this question on bazel's google groups but they redirected me to stackoverflow. At this point I am about to give up.

Have someone attempted to do this or I'm breaking ground here?

Thank you.

2 Answers
Related