Базель билд не уважает мои мерзавцы
Я бегу bazel build
в проекте, который состоит из подмодулей git со следующей структурой:
/work/
├── tensorflow/ [git submodule]
└── train/
└── DeepSpeech/ [git submodule]
└── native_client/
Команда build выглядит так:
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
и я получаю следующую ошибку:
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
Кажется, что жалуется, что /work/train/DeepSpeech/.git
не каталог, и это было бы правильно, потому что /work/train/DeepSpeech/.git
это файл, содержащий путь к дереву git подмодуля git.
Вот содержимое /work/train/DeepSpeech/.git
:
gitdir: ../../.git/modules/train/DeepSpeech
Мой вопрос: есть ли способ заставить Базеля уважать структуру субмодуля моего хранилища? В идеале, было бы несколько флагов, которые я мог бы передать в моем bazel build
команда, которая заставила бы это волшебно работать, но я открыт для других вариантов.
Спасибо за вашу помощь!
1 ответ
Базель действительно не понимает подмодули Git.
Bazel, однако, имеет представление о репозиториях, и вы можете указать структуру своих репозиториев в WORKSPACE
файл, который находится в корне вашего рабочего пространства, с использованием так называемых правил хранилища.
Эта страница объясняет концепцию WORKSPACE
файл, и я считаю, что это правило вам нужно.