Базель билд не уважает мои мерзавцы

Я бегу 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 файл, и я считаю, что это правило вам нужно.

Другие вопросы по тегам