Reputation: 31
I'm running a bazel build
in a project that is composed of git submodules,
with the following structure:
/work/
├── tensorflow/ [git submodule]
└── train/
└── DeepSpeech/ [git submodule]
└── native_client/
The build command looks like this:
bazel build \
--config=monolithic \
-c opt \
--copt=-O3 \
--copt="-D_GLIBCXX_USE_CXX11_ABI=0" \
--copt=-fvisibility=hidden \
//native_client:libdeepspeech.so \
//native_client:generate_trie
and I'm getting the following error:
ERROR: /work/tensorflow/native_client/BUILD:6:1: Executing genrule //native_client:ds_git_version failed (Exit 1)
realpath: /work/train/DeepSpeech/native_client/../.git/: Not a directory
It seems to be complaining that /work/train/DeepSpeech/.git
isn't a directory, and it would be correct because /work/train/DeepSpeech/.git
is a file, containing the path to the the git tree of the git submodule.
Here are the contents of /work/train/DeepSpeech/.git
:
gitdir: ../../.git/modules/train/DeepSpeech
My question is: Is there a way to have bazel respect the submodule structure of my repository? Ideally, there would be some flags I could pass in my bazel build
command that would make it magically work, but I'm open to other options.
Thanks for your help!
Upvotes: 2
Views: 2886
Reputation: 4281
Bazel indeed doesn't understand Git submodules.
Bazel however has a notion of repositories, and you can specify the structure of your repositories in the WORKSPACE
file that's in the root of your workspace, using so-called repository rules.
This page explains the concept of the WORKSPACE
file, and I believe this is the rule you'll need.
Upvotes: 2