Skip to content

Commit cc72ed9

Browse files
xlaukoJezurko
authored andcommitted
git: Install linter dependencies.
1 parent a6737e2 commit cc72ed9

File tree

2 files changed

+185
-7
lines changed

2 files changed

+185
-7
lines changed

.github/workflows/install-llvm.sh

+170
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
#!/bin/bash
2+
set -eux
3+
4+
usage() {
5+
set +x
6+
echo "Usage: $0 [llvm_major_version] [all] [OPTIONS]" 1>&2
7+
echo -e "all\t\t\tInstall all packages." 1>&2
8+
echo -e "-n=code_name\t\tSpecifies the distro codename, for example bionic" 1>&2
9+
echo -e "-h\t\t\tPrints this help." 1>&2
10+
echo -e "-m=repo_base_url\tSpecifies the base URL from which to download." 1>&2
11+
exit 1;
12+
}
13+
14+
CURRENT_LLVM_STABLE=17
15+
BASE_URL="http://apt.llvm.org"
16+
17+
# Check for required tools
18+
needed_binaries=(lsb_release wget add-apt-repository gpg update-alternatives)
19+
missing_binaries=()
20+
for binary in "${needed_binaries[@]}"; do
21+
if ! which $binary &>/dev/null ; then
22+
missing_binaries+=($binary)
23+
fi
24+
done
25+
if [[ ${#missing_binaries[@]} -gt 0 ]] ; then
26+
echo "You are missing some tools this script requires: ${missing_binaries[@]}"
27+
echo "(hint: apt install lsb-release wget software-properties-common gnupg)"
28+
exit 4
29+
fi
30+
31+
# Set default values for commandline arguments
32+
# We default to the current stable branch of LLVM
33+
LLVM_VERSION=$CURRENT_LLVM_STABLE
34+
ALL=0
35+
DISTRO=$(lsb_release -is)
36+
VERSION=$(lsb_release -sr)
37+
UBUNTU_CODENAME=""
38+
CODENAME_FROM_ARGUMENTS=""
39+
# Obtain VERSION_CODENAME and UBUNTU_CODENAME (for Ubuntu and its derivatives)
40+
source /etc/os-release
41+
DISTRO=${DISTRO,,}
42+
case ${DISTRO} in
43+
debian)
44+
# Debian Trixie has a workaround because of
45+
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1038383
46+
if [[ "${VERSION}" == "unstable" ]] || [[ "${VERSION}" == "testing" ]] || [[ "${VERSION_CODENAME}" == "trixie" ]]; then
47+
CODENAME=unstable
48+
LINKNAME=
49+
else
50+
# "stable" Debian release
51+
CODENAME=${VERSION_CODENAME}
52+
LINKNAME=-${CODENAME}
53+
fi
54+
;;
55+
*)
56+
# ubuntu and its derivatives
57+
if [[ -n "${UBUNTU_CODENAME}" ]]; then
58+
CODENAME=${UBUNTU_CODENAME}
59+
if [[ -n "${CODENAME}" ]]; then
60+
LINKNAME=-${CODENAME}
61+
fi
62+
fi
63+
;;
64+
esac
65+
66+
# read optional command line arguments
67+
if [ "$#" -ge 1 ] && [ "${1::1}" != "-" ]; then
68+
if [ "$1" != "all" ]; then
69+
LLVM_VERSION=$1
70+
else
71+
# special case for ./llvm.sh all
72+
ALL=1
73+
fi
74+
OPTIND=2
75+
if [ "$#" -ge 2 ]; then
76+
if [ "$2" == "all" ]; then
77+
# Install all packages
78+
ALL=1
79+
OPTIND=3
80+
fi
81+
fi
82+
fi
83+
84+
while getopts ":hm:n:" arg; do
85+
case $arg in
86+
h)
87+
usage
88+
;;
89+
m)
90+
BASE_URL=${OPTARG}
91+
;;
92+
n)
93+
CODENAME=${OPTARG}
94+
if [[ "${CODENAME}" == "unstable" ]]; then
95+
# link name does not apply to unstable repository
96+
LINKNAME=
97+
else
98+
LINKNAME=-${CODENAME}
99+
fi
100+
CODENAME_FROM_ARGUMENTS="true"
101+
;;
102+
esac
103+
done
104+
105+
if [[ $EUID -ne 0 ]]; then
106+
echo "This script must be run as root!"
107+
exit 1
108+
fi
109+
110+
declare -A LLVM_VERSION_PATTERNS
111+
LLVM_VERSION_PATTERNS[9]="-9"
112+
LLVM_VERSION_PATTERNS[10]="-10"
113+
LLVM_VERSION_PATTERNS[11]="-11"
114+
LLVM_VERSION_PATTERNS[12]="-12"
115+
LLVM_VERSION_PATTERNS[13]="-13"
116+
LLVM_VERSION_PATTERNS[14]="-14"
117+
LLVM_VERSION_PATTERNS[15]="-15"
118+
LLVM_VERSION_PATTERNS[16]="-16"
119+
LLVM_VERSION_PATTERNS[17]="-17"
120+
LLVM_VERSION_PATTERNS[18]=""
121+
122+
if [ ! ${LLVM_VERSION_PATTERNS[$LLVM_VERSION]+_} ]; then
123+
echo "This script does not support LLVM version $LLVM_VERSION"
124+
exit 3
125+
fi
126+
127+
LLVM_VERSION_STRING=${LLVM_VERSION_PATTERNS[$LLVM_VERSION]}
128+
129+
# join the repository name
130+
if [[ -n "${CODENAME}" ]]; then
131+
REPO_NAME="deb ${BASE_URL}/${CODENAME}/ llvm-toolchain${LINKNAME}${LLVM_VERSION_STRING} main"
132+
133+
# check if the repository exists for the distro and version
134+
if ! wget -q --method=HEAD ${BASE_URL}/${CODENAME} &> /dev/null; then
135+
if [[ -n "${CODENAME_FROM_ARGUMENTS}" ]]; then
136+
echo "Specified codename '${CODENAME}' is not supported by this script."
137+
else
138+
echo "Distribution '${DISTRO}' in version '${VERSION}' is not supported by this script."
139+
fi
140+
exit 2
141+
fi
142+
fi
143+
144+
145+
# install everything
146+
147+
if [[ ! -f /etc/apt/trusted.gpg.d/apt.llvm.org.asc ]]; then
148+
# download GPG key once
149+
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
150+
fi
151+
152+
if [[ -z "`apt-key list 2> /dev/null | grep -i llvm`" ]]; then
153+
# Delete the key in the old format
154+
apt-key del AF4F7421
155+
fi
156+
add-apt-repository "${REPO_NAME}"
157+
apt-get update
158+
159+
PKG="clang-$LLVM_VERSION clangd-$LLVM_VERSION"
160+
if [[ $ALL -eq 1 ]]; then
161+
PKG="$PKG clang-tidy-$LLVM_VERSION clang-format-$LLVM_VERSION clang-tools-$LLVM_VERSION libllvm$LLVM_VERSION llvm-$LLVM_VERSION-dev llvm-$LLVM_VERSION-tools libclang-common-$LLVM_VERSION-dev libclang-$LLVM_VERSION-dev libclang-cpp$LLVM_VERSION-dev"
162+
PKG="$PKG libmlir-$LLVM_VERSION-dev mlir-$LLVM_VERSION-tools"
163+
if test $LLVM_VERSION -gt 14; then
164+
PKG="$PKG libclang-rt-$LLVM_VERSION-dev libpolly-$LLVM_VERSION-dev"
165+
fi
166+
fi
167+
apt-get install -f -y $PKG
168+
169+
update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-16 60
170+
update-alternatives --install /usr/bin/cc cc /usr/bin/clang-16 60

.github/workflows/linter.yml

+15-7
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,22 @@ jobs:
2626
submodules: true
2727
fetch-depth: 1
2828

29-
- name: Export compile commands
30-
uses: devcontainers/ci@v0.2
29+
- name: Install packages
30+
uses: awalsh128/cache-apt-pkgs-action@latest
3131
with:
32-
runCmd: |
33-
export CC=clang-16
34-
export TOOLCHAIN=$(pwd)/cmake/lld.toolchain.cmake
35-
cmake --preset ninja-multi-default --toolchain ${TOOLCHAIN} \
36-
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
32+
packages: software-properties-common ccache cmake lld ninja-build
33+
version: 1.0
34+
35+
- name: Install LLVM
36+
run: sudo bash $(pwd)/.github/workflows/install-llvm.sh 16 all
37+
38+
- name: Export compile commands
39+
run: |
40+
export CC=clang-16
41+
export TOOLCHAIN=$(pwd)/cmake/lld.toolchain.cmake
42+
export CMAKE_PREFIX_PATH="/usr/lib/llvm-16/lib/cmake/mlir/;/usr/lib/llvm-16/lib/cmake/clang/"
43+
cmake --preset ninja-multi-default --toolchain ${TOOLCHAIN} \
44+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
3745
3846
- name: Run C++ Linters
3947
uses: cpp-linter/cpp-linter-action@v2

0 commit comments

Comments
 (0)