From fb0b4c7e278bbeb275458f2c2dfd5c2ca1576e20 Mon Sep 17 00:00:00 2001
From: lat9nq <22451773+lat9nq@users.noreply.github.com>
Date: Tue, 9 Feb 2021 21:17:53 -0500
Subject: [PATCH] ci: Add clang build scripts

Adds scripts that instruct CI to build yuzu with the installed Clang
compiler on yuzuemu/build-environments:linux-fresh.

These scripts are based on the .ci/scripts/linux scripts, minus AppImage
building since that isn't necessary. Re-uses linux-fresh since that
container has Clang 12 installed.
---
 .ci/scripts/clang/docker.sh      | 18 ++++++++++++++++++
 .ci/scripts/clang/exec.sh        |  8 ++++++++
 .ci/scripts/clang/upload.sh      | 20 ++++++++++++++++++++
 .ci/templates/build-standard.yml |  5 ++++-
 4 files changed, 50 insertions(+), 1 deletion(-)
 create mode 100755 .ci/scripts/clang/docker.sh
 create mode 100644 .ci/scripts/clang/exec.sh
 create mode 100644 .ci/scripts/clang/upload.sh

diff --git a/.ci/scripts/clang/docker.sh b/.ci/scripts/clang/docker.sh
new file mode 100755
index 000000000..885d74e97
--- /dev/null
+++ b/.ci/scripts/clang/docker.sh
@@ -0,0 +1,18 @@
+#!/bin/bash -ex
+
+# Exit on error, rather than continuing with the rest of the script.
+set -e
+
+cd /yuzu
+
+ccache -s
+
+mkdir build || true && cd build
+cmake .. -DDISPLAY_VERSION=$1 -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/usr/lib/ccache/clang -DCMAKE_CXX_COMPILER=/usr/lib/ccache/clang++ -DYUZU_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DUSE_DISCORD_PRESENCE=ON -DENABLE_QT_TRANSLATION=ON -DCMAKE_INSTALL_PREFIX="/usr"
+
+make -j$(nproc)
+
+ccache -s
+
+ctest -VV -C Release
+
diff --git a/.ci/scripts/clang/exec.sh b/.ci/scripts/clang/exec.sh
new file mode 100644
index 000000000..e56cd4325
--- /dev/null
+++ b/.ci/scripts/clang/exec.sh
@@ -0,0 +1,8 @@
+#!/bin/bash -ex
+
+mkdir -p "ccache"  || true
+chmod a+x ./.ci/scripts/clang/docker.sh
+# the UID for the container yuzu user is 1027
+sudo chown -R 1027 ./
+docker run -e ENABLE_COMPATIBILITY_REPORTING -e CCACHE_DIR=/yuzu/ccache -v $(pwd):/yuzu yuzuemu/build-environments:linux-fresh /bin/bash /yuzu/.ci/scripts/clang/docker.sh $1
+sudo chown -R $UID ./
diff --git a/.ci/scripts/clang/upload.sh b/.ci/scripts/clang/upload.sh
new file mode 100644
index 000000000..fe4e6b2ac
--- /dev/null
+++ b/.ci/scripts/clang/upload.sh
@@ -0,0 +1,20 @@
+#!/bin/bash -ex
+
+. .ci/scripts/common/pre-upload.sh
+
+REV_NAME="yuzu-linux-${GITDATE}-${GITREV}"
+ARCHIVE_NAME="${REV_NAME}.tar.xz"
+COMPRESSION_FLAGS="-cJvf"
+
+if [ "${RELEASE_NAME}" = "mainline" ]; then
+    DIR_NAME="${REV_NAME}"
+else
+    DIR_NAME="${REV_NAME}_${RELEASE_NAME}"
+fi
+
+mkdir "$DIR_NAME"
+
+cp build/bin/yuzu-cmd "$DIR_NAME"
+cp build/bin/yuzu "$DIR_NAME"
+
+. .ci/scripts/common/post-upload.sh
diff --git a/.ci/templates/build-standard.yml b/.ci/templates/build-standard.yml
index 7422c8346..57d36f813 100644
--- a/.ci/templates/build-standard.yml
+++ b/.ci/templates/build-standard.yml
@@ -12,6 +12,9 @@ jobs:
       windows:
         BuildSuffix: 'windows-mingw'
         ScriptFolder: 'windows'
+      clang:
+        BuildSuffix: 'clang'
+        ScriptFolder: 'clang'
       linux:
         BuildSuffix: 'linux'
         ScriptFolder: 'linux'
@@ -24,4 +27,4 @@ jobs:
     parameters:
       artifactSource: 'false'
       cache: $(parameters.cache)
-      version: $(parameters.version)
\ No newline at end of file
+      version: $(parameters.version)