Как заставить Bazel, ccache и песочницу работать вместе (файловая система ccache только для чтения)

Я пытаюсь построить приложение C++ на Fedora 28, используя Bazel 0.16.1, установленный через copr, и ccache 3.4.2, установленный через DNF. Я использую стандартные правила cc_binary и cc_library. Когда я запускаю команду bazel build, ccache выдает ошибки с:

ccache: error: Failed to create temporary file for /home/mwalker/.ccache/tmp/time.stdout: Read-only file system

Я могу видеть, когда я строю с --verbose_failures --sandbox_debug что мы не монтируем каталог ccache tmp r/w.

Итак, как мне заставить bazel смонтировать мой каталог ccache r/w, или как мне сказать ccache через bazel, где находится правильный каталог кэша для моей рабочей области?

Когда я запускаю ту же команду в Ubuntu 18.04, она успешно выполняется, поэтому я полагаю, что ccache каким-то образом поддерживается.

Похоже, что часть моей проблемы в том, что ccache установил свой драйвер компилятора как gcc. Например which gcc -> /usr/lib64/ccache/gcc, Где в Ubuntu должен явно вызываться ccache, а набор инструментов по умолчанию не вызывает его.

2 ответа

Вы можете добавить существующие каталоги в песочницу с помощью --sandbox_writable_path=<path> [1].


[1] https://docs.bazel.build/versions/master/command-line-reference.html

Была такая же проблема в Fedora 29, в моем случае была решена путем экспорта следующих переменных среды:

export CC="/usr/bin/gcc"
export CXX="/usr/bin/g++"

https://github.com/bazelbuild/bazel/issues/1322

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