ci: Make ccache optional
authorMichel Dänzer <mdaenzer@redhat.com>
Tue, 14 Mar 2023 08:38:18 +0000 (09:38 +0100)
committerMarge Bot <emma+marge@anholt.net>
Fri, 17 Mar 2023 16:08:34 +0000 (16:08 +0000)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21781>

.gitlab-ci/build/g++-link-werror.sh [new file with mode: 0755]
.gitlab-ci/build/gcc-link-werror.sh [new file with mode: 0755]
.gitlab-ci/build/gitlab-ci.yml
.gitlab-ci/build/meson-native-lto-wrappers-ccache.txt [new file with mode: 0644]
.gitlab-ci/build/meson-native-lto-wrappers.txt
.gitlab-ci/container/container_post_build.sh
.gitlab-ci/container/container_pre_build.sh

diff --git a/.gitlab-ci/build/g++-link-werror.sh b/.gitlab-ci/build/g++-link-werror.sh
new file mode 100755 (executable)
index 0000000..5aa9f84
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh -e
+
+if [ "$(ps -p $(ps -p $PPID -o ppid --no-headers) -o comm --no-headers)" != ninja ]; then
+    # Not invoked by ninja (e.g. for a meson feature check)
+    exec g++ "$@"
+fi
+
+if [ "$(eval printf "'%s'" "\"\${$(($#-1))}\"")" = "-c" ]; then
+    # Not invoked for linking
+    exec g++ "$@"
+fi
+
+# Compiler invoked by ninja for linking. Add -Werror to turn compiler warnings into errors
+# with LTO. (meson's werror should arguably do this, but meanwhile we need to)
+exec g++ "$@" -Werror
diff --git a/.gitlab-ci/build/gcc-link-werror.sh b/.gitlab-ci/build/gcc-link-werror.sh
new file mode 100755 (executable)
index 0000000..aa92a41
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh -e
+
+if [ "$(ps -p $(ps -p $PPID -o ppid --no-headers) -o comm --no-headers)" != ninja ]; then
+    # Not invoked by ninja (e.g. for a meson feature check)
+    exec gcc "$@"
+fi
+
+if [ "$(eval printf "'%s'" "\"\${$(($#-1))}\"")" = "-c" ]; then
+    # Not invoked for linking
+    exec gcc "$@"
+fi
+
+# Compiler invoked by ninja for linking. Add -Werror to turn compiler warnings into errors
+# with LTO. (meson's werror should arguably do this, but meanwhile we need to)
+exec gcc "$@" -Werror
index fd799eb..2b107d1 100644 (file)
     - |
       export PATH="/usr/lib/ccache:$PATH"
       export CCACHE_BASEDIR="$PWD"
-      section_start ccache_before "ccache stats before build"
-      ccache --show-stats
-      section_end ccache_before
+      if test -x /usr/bin/ccache; then
+        section_start ccache_before "ccache stats before build"
+        ccache --show-stats
+        section_end ccache_before
+      fi
   after_script:
-    - ccache --show-stats | grep "cache hit rate"
+    - if test -x /usr/bin/ccache; then ccache --show-stats | grep "cache hit rate"; fi
     - !reference [default, after_script]
 
 .build-windows:
@@ -182,7 +184,7 @@ debian-build-testing:
     GALLIUM_DRIVERS: "iris,nouveau,kmsro,r300,r600,freedreno,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,d3d12,asahi,crocus"
     VULKAN_DRIVERS: swrast
     EXTRA_OPTION: >
-      --native-file .gitlab-ci/build/meson-native-lto-wrappers.txt
+      --native-file .gitlab-ci/build/meson-native-lto-wrappers-ccache.txt
       -D spirv-to-dxil=true
       -D osmesa=true
       -D tools=drm-shim,etnaviv,freedreno,glsl,intel,intel-ui,nir,nouveau,lima,panfrost,asahi
diff --git a/.gitlab-ci/build/meson-native-lto-wrappers-ccache.txt b/.gitlab-ci/build/meson-native-lto-wrappers-ccache.txt
new file mode 100644 (file)
index 0000000..e17f64f
--- /dev/null
@@ -0,0 +1,3 @@
+[binaries]
+c = 'ccache-gcc-link-werror.sh'
+cpp = 'ccache-g++-link-werror.sh'
index e17f64f..7bdd293 100644 (file)
@@ -1,3 +1,3 @@
 [binaries]
-c = 'ccache-gcc-link-werror.sh'
-cpp = 'ccache-g++-link-werror.sh'
+c = 'gcc-link-werror.sh'
+cpp = 'g++-link-werror.sh'
index 818dc1e..498274f 100755 (executable)
@@ -7,4 +7,6 @@ fi
 # Clean up any build cache for rust.
 rm -rf /.cargo
 
-ccache --show-stats
+if test -x /usr/bin/ccache; then
+    ccache --show-stats
+fi
index 5490e5f..7df5ebf 100755 (executable)
@@ -1,24 +1,28 @@
 #!/bin/sh
 
-if test -f /etc/debian_version; then
-    CCACHE_PATH=/usr/lib/ccache
-elif test -f /etc/alpine-release; then
-    CCACHE_PATH=/usr/lib/ccache/bin
-else
-    CCACHE_PATH=/usr/lib64/ccache
+if test -x /usr/bin/ccache; then
+    if test -f /etc/debian_version; then
+        CCACHE_PATH=/usr/lib/ccache
+    elif test -f /etc/alpine-release; then
+        CCACHE_PATH=/usr/lib/ccache/bin
+    else
+        CCACHE_PATH=/usr/lib64/ccache
+    fi
+
+    # Common setup among container builds before we get to building code.
+
+    export CCACHE_COMPILERCHECK=content
+    export CCACHE_COMPRESS=true
+    export CCACHE_DIR=/cache/$CI_PROJECT_NAME/ccache
+    export PATH=$CCACHE_PATH:$PATH
+
+    # CMake ignores $PATH, so we have to force CC/GCC to the ccache versions.
+    export CC="${CCACHE_PATH}/gcc"
+    export CXX="${CCACHE_PATH}/g++"
+
+    ccache --show-stats
 fi
 
-# Common setup among container builds before we get to building code.
-
-export CCACHE_COMPILERCHECK=content
-export CCACHE_COMPRESS=true
-export CCACHE_DIR=/cache/$CI_PROJECT_NAME/ccache
-export PATH=$CCACHE_PATH:$PATH
-
-# CMake ignores $PATH, so we have to force CC/GCC to the ccache versions.
-export CC="${CCACHE_PATH}/gcc"
-export CXX="${CCACHE_PATH}/g++"
-
 # When not using the mold linker (e.g. unsupported architecture), force
 # linkers to gold, since it's so much faster for building.  We can't use
 # lld because we're on old debian and it's buggy.  ming fails meson builds
@@ -27,8 +31,6 @@ find /usr/bin -name \*-ld -o -name ld | \
     grep -v mingw | \
     xargs -n 1 -I '{}' ln -sf '{}.gold' '{}'
 
-ccache --show-stats
-
 # Make a wrapper script for ninja to always include the -j flags
 {
     echo '#!/bin/sh -x'