Цель
Я использую Bazel для создания мультиплатформенного клиента C ++ (iOS, OSX, Android, Windows).
iOS и OSX создаются локально на моей маме c (по необходимости). Android и Windows встроены в контейнер Docker.
В конце сборки у меня есть правило Базеля, которое берет каждое правило cc_binary
для каждой платформы и помещает их в .zip
.
Я хотел бы использовать API удаленного выполнения Bazel для создания некоторых из моих двоичных файлов в контейнере и других локально, а затем ссылаться на общий кэш для их сопоставления - все с помощью одной команды bazel build
.
Поддержка Bazel
Bazel утверждает, что эти типы сборок multiplatform
- там, где платформы host
(OSX x64), execution
(Linux x64) и target
( многие) все разные - возможны.
См. https://docs.bazel.build/versions/master/platforms.html
Мой опыт
Однако я столкнулся с этой точной проблемой: https://github.com/bazelbuild/bazel/issues/5397 (где docker-sandbox
- правильный прокси для remote
сборок.)
Это, наряду с проблемой Github, приведенной ниже, заставляет меня усомниться в утверждении Базеля о multiplatform
сборках.
https://github.com/bazelbuild/bazel/issues/5309
По сути, эти проблемы говорят о том, что локальные цели для одной платформы (например, OSX) нельзя построить рядом с удаленными целями на другой платформе (например, * 1067). *).
Вопрос
Мне было интересно:
(1) То, что я пытаюсь сделать в корне, противоречит замыслу Базеля? Если так, что означает, что Bazel означает multiplatform
?
(2) Есть ли обходной путь, который я могу использовать, который поддерживает герметичность и остается в системе сборки Bazel? Можно было бы смонтировать том Docker и затем написать сценарий, который объединяет кэш Docker с моим локальным кешем, но кажется, что Bazel был создан для обработки моего варианта использования. Я что-то здесь упускаю?
Смежные вопросы: Поддерживает ли Bazel удаленное выполнение на разных платформах? (Не дает удовлетворительного ответа.)