Skip to content

Commit d7ae3d4

Browse files
wmaxeytrxcllnt
andauthored
Add FileCheck to LLVM update-alternatives list. (#256)
* Add FileCheck to LLVM update-alternatives list. Provides `FileCheck` instead of `FileCheck-N` to devcontainers with the LLVM feature. This allows for use of `FileCheck` generically. * bump feature version * add FileCheck to binaries if llvm-tools is specified, fix shellcheck lint * fix parsing container id for newer devcontainers CLI --------- Co-authored-by: ptaylor <[email protected]>
1 parent 838271d commit d7ae3d4

File tree

4 files changed

+106
-68
lines changed

4 files changed

+106
-68
lines changed

features/src/llvm/devcontainer-feature.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "LLVM compilers and tools",
33
"id": "llvm",
4-
"version": "24.6.0",
4+
"version": "24.6.1",
55
"description": "A feature to install LLVM compilers and tools",
66
"options": {
77
"version": {

features/src/llvm/install.sh

+21-9
Original file line numberDiff line numberDiff line change
@@ -38,20 +38,32 @@ fi
3838

3939
echo "Installing llvm-${LLVM_VERSION} compilers and tools";
4040

41-
./llvm.sh $LLVM_VERSION ${PACKAGES:-all};
41+
declare -a bins=();
42+
declare -a pkgs=();
43+
IFS=" " read -r -a pkgs <<< "${PACKAGES:-all}";
4244

43-
if [[ "${PACKAGES:-all}" == "all" ]]; then
44-
PACKAGES=("clang" "clangd" "clang++" "clang-format" "clang-tidy" "lldb" "llvm-config" "llvm-cov");
45+
./llvm.sh "${LLVM_VERSION}" "${pkgs[@]}";
46+
47+
if [[ "${pkgs[*]}" == "all" ]]; then
48+
bins=("clang" "clangd" "clang++" "clang-format" "clang-tidy" "lldb" "llvm-config" "llvm-cov" "FileCheck" "UnicodeNameMappingGenerator");
4549
else
46-
PACKAGES=(${PACKAGES});
50+
IFS=" " read -r -a bins <<< "${PACKAGES}";
51+
declare -A pkgs_map=();
52+
for ((i=0; i < ${#pkgs[@]}; i+=1)); do
53+
pkgs_map["${pkgs[i]}"]=1;
54+
done
55+
if test -v pkgs_map["llvm-tools"] \
56+
|| test -v pkgs_map["llvm-${LLVM_VERSION}-tools"]; then
57+
bins+=("FileCheck" "UnicodeNameMappingGenerator");
58+
fi
4759
fi
4860

4961
# Remove existing, install, and set default clang/llvm alternatives
50-
for ((i=0; i < ${#PACKAGES[@]}; i+=1)); do
51-
x=${PACKAGES[$i]};
52-
if type ${x}-${LLVM_VERSION} >/dev/null 2>&1; then
53-
(update-alternatives --install /usr/bin/${x} ${x} $(which ${x}-${LLVM_VERSION}) 30);
54-
(update-alternatives --set ${x} $(which ${x}-${LLVM_VERSION}));
62+
for ((i=0; i < ${#bins[@]}; i+=1)); do
63+
x=${bins[$i]};
64+
if type "${x}-${LLVM_VERSION}" >/dev/null 2>&1; then
65+
(update-alternatives --install /usr/bin/"${x}" "${x}" "$(which "${x}-${LLVM_VERSION}")" 30);
66+
(update-alternatives --set "${x}" "$(which "${x}-${LLVM_VERSION}")");
5567
fi
5668
done
5769

features/src/llvm/llvm.sh

+56-29
Original file line numberDiff line numberDiff line change
@@ -162,48 +162,75 @@ EOF
162162

163163
add-apt-repository -n -y "${REPO_NAME}"
164164

165-
if [[ "${PKG[@]}" == "" ]]; then
165+
if [[ "${PKG[*]}" == "" ]]; then
166166
PKG=();
167-
PKG+=("clang-$LLVM_VERSION");
168-
PKG+=("lldb-$LLVM_VERSION");
169-
PKG+=("lld-$LLVM_VERSION");
170-
PKG+=("clangd-$LLVM_VERSION");
171-
elif [[ "${PKG[@]}" == "all" ]]; then
167+
PKG+=("clang-${LLVM_VERSION}");
168+
PKG+=("lldb-${LLVM_VERSION}");
169+
PKG+=("lld-${LLVM_VERSION}");
170+
PKG+=("clangd-${LLVM_VERSION}");
171+
elif [[ "${PKG[*]}" == "all" ]]; then
172172
# same as in test-install.sh
173173
# No worries if we have dups
174174
PKG=();
175-
PKG+=("clang-tidy-$LLVM_VERSION");
176-
PKG+=("clang-format-$LLVM_VERSION");
177-
PKG+=("clang-tools-$LLVM_VERSION");
178-
PKG+=("clangd-$LLVM_VERSION");
179-
PKG+=("llvm-$LLVM_VERSION-dev");
180-
PKG+=("lld-$LLVM_VERSION");
181-
PKG+=("lldb-$LLVM_VERSION");
182-
PKG+=("llvm-$LLVM_VERSION-tools");
183-
PKG+=("libomp-$LLVM_VERSION-dev");
184-
PKG+=("libc++-$LLVM_VERSION-dev");
185-
PKG+=("libc++abi-$LLVM_VERSION-dev");
186-
PKG+=("libclang-common-$LLVM_VERSION-dev");
187-
PKG+=("libclang-$LLVM_VERSION-dev");
188-
if test $LLVM_VERSION -gt 9; then
189-
PKG+=("libclang-cpp$LLVM_VERSION-dev");
175+
PKG+=("clang-tidy-${LLVM_VERSION}");
176+
PKG+=("clang-format-${LLVM_VERSION}");
177+
PKG+=("clang-tools-${LLVM_VERSION}");
178+
PKG+=("clangd-${LLVM_VERSION}");
179+
PKG+=("llvm-${LLVM_VERSION}-dev");
180+
PKG+=("lld-${LLVM_VERSION}");
181+
PKG+=("lldb-${LLVM_VERSION}");
182+
PKG+=("llvm-${LLVM_VERSION}-tools");
183+
PKG+=("libomp-${LLVM_VERSION}-dev");
184+
PKG+=("libc++-${LLVM_VERSION}-dev");
185+
PKG+=("libc++abi-${LLVM_VERSION}-dev");
186+
PKG+=("libclang-common-${LLVM_VERSION}-dev");
187+
PKG+=("libclang-${LLVM_VERSION}-dev");
188+
if test "${LLVM_VERSION}" -gt 9; then
189+
PKG+=("libclang-cpp${LLVM_VERSION}-dev");
190190
fi
191-
if test $LLVM_VERSION -gt 11; then
192-
PKG+=("libunwind-$LLVM_VERSION-dev");
191+
if test "${LLVM_VERSION}" -gt 11; then
192+
PKG+=("libunwind-${LLVM_VERSION}-dev");
193193
fi
194-
if test $LLVM_VERSION -gt 14; then
195-
PKG+=("libclang-rt-$LLVM_VERSION-dev");
196-
PKG+=("libpolly-$LLVM_VERSION-dev");
194+
if test "${LLVM_VERSION}" -gt 14; then
195+
PKG+=("libclang-rt-${LLVM_VERSION}-dev");
196+
PKG+=("libpolly-${LLVM_VERSION}-dev");
197197
fi
198198
else
199+
declare -A version_middle=(
200+
["llvm-dev"]=1
201+
["llvm-tools"]=1
202+
["libomp-dev"]=1
203+
["libc++-dev"]=1
204+
["libc++abi-dev"]=1
205+
["libclang-common-dev"]=1
206+
["libclang-dev"]=1
207+
["libunwind-dev"]=1
208+
["libclang-rt-dev"]=1
209+
["libpolly-dev"]=1
210+
);
211+
declare -A version_at_end=(
212+
["clang"]=1
213+
["clang-tidy"]=1
214+
["clang-format"]=1
215+
["clang-tools"]=1
216+
["clangd"]=1
217+
["lld"]=1
218+
["lldb"]=1
219+
);
199220
for ((i=0; i < ${#PKG[@]}; i+=1)); do
200-
if ! grep -q ${LLVM_VERSION} <<< "${PKG[$i]}"; then
201-
PKG[$i]="${PKG[$i]}-${LLVM_VERSION}";
221+
if ! grep -q "${LLVM_VERSION}" <<< "${PKG[$i]}"; then
222+
if test -v version_middle["${PKG[i]}"]; then
223+
PKG[i]="$(sed -r "s/^(.*)-(.*)$/\1-${LLVM_VERSION}-\2/" <<< "${PKG[i]}")";
224+
elif test -v version_at_end["${PKG[i]}"]; then
225+
PKG[i]="${PKG[i]}-${LLVM_VERSION}";
226+
elif test "${PKG[i]}" = "libclang-cpp-dev"; then
227+
PKG[i]="libclang-cpp${LLVM_VERSION}-dev";
228+
fi
202229
fi
203230
done
204231
fi
205232

206233
if test ${#PKG[@]} -gt 0; then
207234
apt-get update;
208-
apt-get install -y ${PKG[@]};
235+
apt-get install -y "${PKG[@]}";
209236
fi

scripts/run.sh

+28-29
Original file line numberDiff line numberDiff line change
@@ -52,37 +52,36 @@ run_devcontainer() {
5252
local vault_host="https://vault.ops.k8s.rapids.ai";
5353

5454
local vars=();
55-
vars+=("TERM=${term}");
56-
vars+=("LINES=${lines}");
57-
vars+=("COLUMNS=${columns}");
58-
vars+=("HISTFILE=${histfile}");
59-
vars+=("VAULT_HOST=${vault_host}");
60-
vars+=("SSH_AUTH_SOCK=${ssh_auth_sock}");
61-
vars+=("SCCACHE_BUCKET=${sccache_bucket}");
62-
vars+=("SCCACHE_REGION=${sccache_region}");
63-
64-
local -r remote_envs="$(echo "${vars[@]}" | xargs -r -d' ' -I% echo -n '--remote-env % ')";
55+
vars+=(--remote-env "TERM=${term}");
56+
vars+=(--remote-env "LINES=${lines}");
57+
vars+=(--remote-env "COLUMNS=${columns}");
58+
vars+=(--remote-env "HISTFILE=${histfile}");
59+
vars+=(--remote-env "VAULT_HOST=${vault_host}");
60+
vars+=(--remote-env "SSH_AUTH_SOCK=${ssh_auth_sock}");
61+
vars+=(--remote-env "SCCACHE_BUCKET=${sccache_bucket}");
62+
vars+=(--remote-env "SCCACHE_REGION=${sccache_region}");
6563

6664
# Start the devcontainer
67-
devcontainer up \
68-
${remote_envs} \
69-
--skip-post-attach \
70-
--remove-existing-container \
71-
--terminal-rows "${lines}" \
72-
--terminal-columns "${columns}" \
73-
--mount-workspace-git-root false \
74-
--workspace-folder "${workspace}" \
75-
--cache-from "docker.io/rapidsai/devcontainers:${tag}" \
76-
--mount "type=bind,source=${SSH_AUTH_SOCK},target=/tmp/ssh-auth-sock" \
77-
--mount "type=bind,source=$(pwd)/.scratch/.aws,target=/home/coder/.aws" \
78-
--mount "type=bind,source=$(pwd)/.scratch/.cache,target=/home/coder/.cache" \
79-
--mount "type=bind,source=$(pwd)/.scratch/.config,target=/home/coder/.config" \
80-
--mount "type=bind,source=$(pwd)/features/src/utils/opt/devcontainer,target=/opt/devcontainer" \
81-
--additional-features '{ "./features/src/rapids-build-utils": {} }' \
82-
--mount "type=bind,source=$(pwd)/features/src/rapids-build-utils/opt/rapids-build-utils,target=/opt/rapids-build-utils" \
83-
;
65+
local -r container_id="$( \
66+
devcontainer up \
67+
"${vars[@]}" \
68+
--skip-post-attach \
69+
--remove-existing-container \
70+
--terminal-rows "${lines}" \
71+
--terminal-columns "${columns}" \
72+
--mount-workspace-git-root false \
73+
--workspace-folder "${workspace}" \
74+
--cache-from "docker.io/rapidsai/devcontainers:${tag}" \
75+
--mount "type=bind,source=${SSH_AUTH_SOCK},target=/tmp/ssh-auth-sock" \
76+
--mount "type=bind,source=$(pwd)/.scratch/.aws,target=/home/coder/.aws" \
77+
--mount "type=bind,source=$(pwd)/.scratch/.cache,target=/home/coder/.cache" \
78+
--mount "type=bind,source=$(pwd)/.scratch/.config,target=/home/coder/.config" \
79+
--mount "type=bind,source=$(pwd)/features/src/utils/opt/devcontainer,target=/opt/devcontainer" \
80+
--additional-features '{ "./features/src/rapids-build-utils": {} }' \
81+
--mount "type=bind,source=$(pwd)/features/src/rapids-build-utils/opt/rapids-build-utils,target=/opt/rapids-build-utils" \
82+
| jq -r '.containerId'
83+
)";
8484

85-
local -r container_id="$(docker ps | grep -P "vsc-${workspace#"${TMPDIR:-/tmp}/"}-[0-9a-z]{64}-uid" | cut -d' ' -f1)";
8685
local -r image_tag="$(
8786
docker image inspect --format '{{index (split (index .RepoTags 0) ":") 0}}' "$(
8887
docker inspect "${container_id}" --format '{{index (split .Image ":") 1}}'
@@ -108,7 +107,7 @@ run_devcontainer() {
108107
local cmds="${@:4}";
109108

110109
devcontainer exec \
111-
${remote_envs} \
110+
"${vars[@]}" \
112111
--terminal-rows "${lines}" \
113112
--terminal-columns "${columns}" \
114113
--mount-workspace-git-root false \

0 commit comments

Comments
 (0)