Bazel не удалось создать образец C++ с ccache

Я следовал инструкциям для OSX здесь. Я установил bazel, клонировал образец и попытался собрать его с помощью bazel build //main:hello-world. Но здесь, где это было неправильно.

INFO: Analysed target //main:hello-world (0 packages loaded). INFO:
Found 1 target... ERROR:
/Users/myuser/work/temp/bazel-sample/examples/cpp-tutorial/stage1/main/BUILD:1:1:
Linking of rule '//main:hello-world' failed (Exit 1) ccache: error:
Failed to create temporary file for
/Users/myuser/.ccache/6/stats.tmp: Operation not
permitted Target //main:hello-world failed to build Use
--verbose_failures to see the command lines of failed build steps. INFO: Elapsed time: 0.295s, Critical Path: 0.07s INFO: 0 processes.
FAILED: Build did NOT complete successfully

Похоже, есть проблема с ccache, который я установил. После запуска той же команды с --verbose_failures

INFO: Analysed target //main:hello-world (0 packages loaded). INFO:
Found 1 target... ERROR:
/Users/myuser/work/temp/bazel-sample/examples/cpp-tutorial/stage1/main/BUILD:1:1:
Linking of rule '//main:hello-world' failed (Exit 1): cc_wrapper.sh
failed: error executing command    (cd
/private/var/tmp/_bazel_myuser/550c05da61518b4bbbb0ffdfd033154f/execroot/__main__
&& \   exec env - \
    APPLE_SDK_PLATFORM='' \
    APPLE_SDK_VERSION_OVERRIDE='' \
    PATH=/Users/myuser/Library/Android/sdk/platform-tools:/Users/myuser/Library/Android/sdk/tools:/Users/myuser/Library/Android/sdk/build-tools/25.0.0:/Users/myuser/Library/Android/ndk/android-ndk-r10c:/Applications/CMake.app/Contents/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/Users/myuser/bin
\
    XCODE_VERSION_OVERRIDE=9.3.0 \   external/local_config_cc/cc_wrapper.sh -fobjc-link-runtime -Wl,-S -o
bazel-out/darwin-fastbuild/bin/main/hello-world
bazel-out/darwin-fastbuild/bin/main/_objs/hello-world/main/hello-world.o
-headerpad_max_install_names -lc++ -no-canonical-prefixes)

Use --sandbox_debug to see verbose messages from the sandbox ccache:
error: Failed to create temporary file for
/Users/myuser/.ccache/0/stats.tmp: Operation not permitted Target
//main:hello-world failed to build INFO: Elapsed time: 0.294s,
Critical Path: 0.07s INFO: 0 processes. FAILED: Build did NOT complete
successfully

Я понял, что есть проблема с песочницей. Добавление --sandbox_debug отпечатков:

INFO: Analysed target //main:hello-world (0 packages loaded).
INFO: Found 1 target...
ERROR: /Users/myuser/work/temp/bazel-sample/examples/cpp-tutorial/stage1/main/BUILD:1:1: Linking of rule '//main:hello-world' failed (Exit 1): sandbox-exec failed: error executing command 
  (cd /private/var/tmp/_bazel_myuser/550c05da61518b4bbbb0ffdfd033154f/execroot/__main__ && \
  exec env - \
    APPLE_SDK_PLATFORM='' \
    APPLE_SDK_VERSION_OVERRIDE='' \
    DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer \
    PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/myuser/bin \
    SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk \
    TMPDIR=/var/folders/x3/r5tf7wfx3_q0xnyx95s3r5400000gq/T/ \
    XCODE_VERSION_OVERRIDE=9.3.0 \
  /usr/bin/sandbox-exec -f /private/var/tmp/_bazel_myuser/550c05da61518b4bbbb0ffdfd033154f/sandbox/darwin-sandbox/1/sandbox.sb /private/var/tmp/_bazel_myuser/550c05da61518b4bbbb0ffdfd033154f/execroot/__main__/_bin/process-wrapper '--timeout=0' '--kill_delay=15' external/local_config_cc/cc_wrapper.sh -fobjc-link-runtime -Wl,-S -o bazel-out/darwin-fastbuild/bin/main/hello-world bazel-out/darwin-fastbuild/bin/main/_objs/hello-world/main/hello-world.o -headerpad_max_install_names -lc++ -no-canonical-prefixes)
ccache: error: Failed to create temporary file for /Users/myuser/.ccache/b/stats.tmp: Operation not permitted
Target //main:hello-world failed to build
INFO: Elapsed time: 0.268s, Critical Path: 0.06s
INFO: 0 processes.
FAILED: Build did NOT complete successfully

содержимое файла песочницы sandbox.sb:

(version 1)
(debug deny)
(allow default)
(deny file-write*)
(allow file-write*
    (subpath "/dev")
    (subpath "/Users/myuser/Library/Logs")
    (subpath "/Users/myuser/Library/Developer")
    (subpath "/private/var/folders/x3/r5tf7wfx3_q0xnyx95s3r5400000gq/T")
    (subpath "/private/var/tmp/_bazel_myuser/550c05da61518b4bbbb0ffdfd033154f/sandbox/darwin-sandbox/1/execroot/__main__")
    (subpath "/private/var/tmp")
    (subpath "/private/var/folders/x3/r5tf7wfx3_q0xnyx95s3r5400000gq/C")
    (subpath "/private/tmp")
)

По-видимому, отсутствуют права на запись в каталог /Users/myuser/.ccache. Я попытался отключить ccache с помощью export CCACHE_DISABLE=1, но ничего не изменилось. Как я могу исправить это, не удаляя ccache?


person Teivaz    schedule 14.06.2018    source источник
comment
Домашний каталог будет доступен в песочнице, но доступен только для чтения. Если вы должны использовать .ccache (и выйти за пределы дерева сборки для записи), вы должны отключить песочницу... но мне интересно, почему бы вам не оставить кэширование для bazel?   -  person Ondrej K.    schedule 19.06.2018
comment
Я, наверное, должен. Но мой ccache заменяет clang, а gcc символическими ссылками на себя и динамически решает, что использовать   -  person Teivaz    schedule 19.06.2018
comment
Ну, а если очень надо... есть вариант --sandbox_writable_path. Или отдельные правила могут использовать тег no-sandbox, или вы можете отключить его в целом с помощью --spawn_strategy=standalone. Но... я бы все равно не советовал все это. ;)   -  person Ondrej K.    schedule 19.06.2018


Ответы (2)


Можно ли установить абсолютный путь к компилятору и передать его в переменную окружения CC? Вам может понадобиться использовать BAZEL_USE_CPP_ONLY_TOOLCHAIN=1, если у вас установлен Xcode.

person hlopko    schedule 27.06.2018

export CC=/usr/bin/clang
export CXX=/usr/bin/clang++
<your bazel command>

можно заменить clang на gcc

person Daniel Garvey    schedule 27.01.2020