Skip to content

Commit 099f54b

Browse files
committed
Fix Linux LLVM wheel setup
1 parent f20055a commit 099f54b

5 files changed

Lines changed: 104 additions & 9 deletions

File tree

.github/workflows/julia-release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ jobs:
134134
LLVM_PREFIX="$(brew --prefix llvm@21)"
135135
else
136136
echo "Installing LLVM 21.1 using PECOS-managed packages..."
137-
cargo run --locked -p pecos-cli --release -- llvm ensure --managed --no-configure || bash scripts/ci/install-llvm-21-release.sh
137+
cargo run --locked -p pecos-cli --release -- llvm ensure --managed --no-configure || bash scripts/ci/install-llvm-21-conda-linux.sh
138138
LLVM_PREFIX="$HOME/.pecos/deps/llvm-21.1"
139139
fi
140140

.github/workflows/python-release.yml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -212,15 +212,15 @@ jobs:
212212
# Linux configuration - GCC Toolset and CUDA paths are conditional via matrix variables
213213
CIBW_ENVIRONMENT_LINUX: >
214214
PATH=${{ matrix.gcc_path_prefix }}$HOME/.cargo/bin:$HOME/.pecos/deps/llvm-21.1/bin:$HOME/.pecos/deps/cmake-${{ env.PECOS_CMAKE_VERSION }}/bin:/usr/local/cuda-12.6/bin:$PATH
215-
LD_LIBRARY_PATH=${{ matrix.gcc_ld_path }}$LD_LIBRARY_PATH
215+
LD_LIBRARY_PATH=${{ matrix.gcc_ld_path }}$HOME/.pecos/deps/llvm-21.1/lib:$LD_LIBRARY_PATH
216216
LLVM_SYS_211_PREFIX=$HOME/.pecos/deps/llvm-21.1
217217
CMAKE=$HOME/.pecos/deps/cmake-${{ env.PECOS_CMAKE_VERSION }}/bin/cmake
218218
CUDA_PATH=/usr/local/cuda-12.6
219219
MATURIN_PEP517_ARGS="--locked --features=extension-module,mwpf"
220220
CIBW_BEFORE_ALL_LINUX: |
221221
bash scripts/ci/ensure-rust.sh stable minimal
222222
export PATH=$HOME/.cargo/bin:$PATH
223-
dnf install -y libffi-devel xz
223+
dnf install -y bzip2 libffi-devel xz
224224
# Install CUDA Toolkit for GPU support on x86_64 (compile-time only, no GPU needed)
225225
if [ "${{ matrix.install_cuda }}" = "true" ]; then
226226
echo "Installing GCC 13 (required for CUDA 12.6 compatibility)..."
@@ -239,7 +239,7 @@ jobs:
239239
else
240240
echo "Skipping CUDA installation (GPU support not enabled for this build)"
241241
fi
242-
cargo run --locked --release -p pecos-cli -- install llvm --force || bash scripts/ci/install-llvm-21-release.sh
242+
bash scripts/ci/install-llvm-21-conda-linux.sh
243243
cargo run --locked --release -p pecos-cli -- llvm configure "$HOME/.pecos/deps/llvm-21.1"
244244
cargo run --locked --release -p pecos-cli -- install cmake --force
245245
CIBW_REPAIR_WHEEL_COMMAND_LINUX: >
@@ -315,12 +315,13 @@ jobs:
315315
CIBW_MANYLINUX_AARCH64_IMAGE: "manylinux_2_34"
316316
CIBW_ENVIRONMENT_LINUX: >
317317
PATH=$HOME/.cargo/bin:$HOME/.pecos/deps/llvm-21.1/bin:$PATH
318+
LD_LIBRARY_PATH=$HOME/.pecos/deps/llvm-21.1/lib:$LD_LIBRARY_PATH
318319
LLVM_SYS_211_PREFIX=$HOME/.pecos/deps/llvm-21.1
319320
CIBW_BEFORE_ALL_LINUX: |
320321
bash scripts/ci/ensure-rust.sh stable minimal
321322
export PATH=$HOME/.cargo/bin:$PATH
322-
dnf install -y libffi-devel xz
323-
cargo run --locked --release -p pecos-cli -- install llvm --force || bash scripts/ci/install-llvm-21-release.sh
323+
dnf install -y bzip2 libffi-devel xz
324+
bash scripts/ci/install-llvm-21-conda-linux.sh
324325
cargo run --locked --release -p pecos-cli -- llvm configure "$HOME/.pecos/deps/llvm-21.1"
325326
CIBW_REPAIR_WHEEL_COMMAND_LINUX: >
326327
auditwheel repair -w {dest_dir} {wheel} &&

Justfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ ci-env: _msvc-bootstrap
6161
LLVM_RELEASE_VERSION="${LLVM_RELEASE_VERSION:-21.1.8}"
6262
case "${RUNNER_OS:-$(uname -s)}" in
6363
Linux)
64-
{{pecos}} llvm ensure --managed --no-configure || bash scripts/ci/install-llvm-21-release.sh
64+
{{pecos}} llvm ensure --managed --no-configure || bash scripts/ci/install-llvm-21-conda-linux.sh
6565
{{pecos}} llvm configure
6666
;;
6767
macOS|Darwin)
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
LLVM_VERSION="${LLVM_VERSION:-21.1}"
5+
LLVM_RELEASE_VERSION="${LLVM_RELEASE_VERSION:-21.1.8}"
6+
INSTALL_DIR="${LLVM_INSTALL_DIR:-$HOME/.pecos/deps/llvm-$LLVM_VERSION}"
7+
MAMBA_VERSION="${MAMBA_VERSION:-latest}"
8+
MAMBA_ROOT_PREFIX="${MAMBA_ROOT_PREFIX:-$HOME/.cache/pecos-micromamba}"
9+
10+
case "$(uname -m)" in
11+
x86_64|amd64)
12+
MAMBA_PLATFORM="linux-64"
13+
;;
14+
aarch64|arm64)
15+
MAMBA_PLATFORM="linux-aarch64"
16+
;;
17+
*)
18+
echo "Unsupported Linux architecture for conda-forge LLVM ${LLVM_RELEASE_VERSION}: $(uname -m)" >&2
19+
exit 1
20+
;;
21+
esac
22+
23+
llvm_is_valid() {
24+
local llvm_config="$1"
25+
26+
[ -x "$llvm_config" ] || return 1
27+
"$llvm_config" --version | grep -q '^21\.1' || return 1
28+
[ "$("$llvm_config" --shared-mode)" = "shared" ] || return 1
29+
"$llvm_config" --libnames --link-shared | grep -q 'libLLVM-21\.so'
30+
}
31+
32+
LLVM_CONFIG="$INSTALL_DIR/bin/llvm-config"
33+
if llvm_is_valid "$LLVM_CONFIG"; then
34+
echo "Shared LLVM $("$LLVM_CONFIG" --version) already installed at $INSTALL_DIR"
35+
exit 0
36+
fi
37+
38+
if [ -e "$INSTALL_DIR" ]; then
39+
echo "Removing invalid or non-shared LLVM install at $INSTALL_DIR"
40+
rm -rf "$INSTALL_DIR"
41+
fi
42+
43+
TMP_DIR="$(mktemp -d)"
44+
trap 'rm -rf "$TMP_DIR"' EXIT
45+
46+
if command -v micromamba >/dev/null 2>&1; then
47+
MAMBA_BIN="$(command -v micromamba)"
48+
else
49+
MAMBA_URL="https://micro.mamba.pm/api/micromamba/${MAMBA_PLATFORM}/${MAMBA_VERSION}"
50+
MAMBA_ARCHIVE="$TMP_DIR/micromamba.tar.bz2"
51+
52+
echo "Downloading micromamba for ${MAMBA_PLATFORM}"
53+
curl --fail --location --retry 5 --retry-delay 5 --output "$MAMBA_ARCHIVE" "$MAMBA_URL"
54+
tar -xjf "$MAMBA_ARCHIVE" -C "$TMP_DIR" bin/micromamba
55+
MAMBA_BIN="$TMP_DIR/bin/micromamba"
56+
fi
57+
58+
echo "Installing conda-forge LLVM ${LLVM_RELEASE_VERSION} to $INSTALL_DIR"
59+
MAMBA_ROOT_PREFIX="$MAMBA_ROOT_PREFIX" "$MAMBA_BIN" create \
60+
-y \
61+
-p "$INSTALL_DIR" \
62+
--override-channels \
63+
-c conda-forge \
64+
"llvmdev=${LLVM_RELEASE_VERSION}"
65+
66+
if ! llvm_is_valid "$LLVM_CONFIG"; then
67+
echo "conda-forge LLVM install did not provide shared LLVM ${LLVM_RELEASE_VERSION}" >&2
68+
"$LLVM_CONFIG" --version >&2 || true
69+
"$LLVM_CONFIG" --shared-mode >&2 || true
70+
"$LLVM_CONFIG" --libnames --link-shared >&2 || true
71+
exit 1
72+
fi
73+
74+
"$LLVM_CONFIG" --version
75+
"$LLVM_CONFIG" --shared-mode
76+
"$LLVM_CONFIG" --libnames --link-shared
77+
echo "Installed shared LLVM ${LLVM_RELEASE_VERSION} to $INSTALL_DIR"

scripts/ci/install-llvm-21-release.sh

100644100755
Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,21 @@ case "$(uname -m)" in
2020
;;
2121
esac
2222

23-
if [ -x "$INSTALL_DIR/bin/llvm-config" ] && "$INSTALL_DIR/bin/llvm-config" --version | grep -q '^21\.1'; then
24-
echo "LLVM $("$INSTALL_DIR/bin/llvm-config" --version) already installed at $INSTALL_DIR"
23+
llvm_is_shared() {
24+
local llvm_config="$1"
25+
26+
[ -x "$llvm_config" ] || return 1
27+
"$llvm_config" --version | grep -q '^21\.1' || return 1
28+
[ "$("$llvm_config" --shared-mode)" = "shared" ] || return 1
29+
"$llvm_config" --libnames --link-shared | grep -q 'libLLVM-21\.so'
30+
}
31+
32+
if llvm_is_shared "$INSTALL_DIR/bin/llvm-config"; then
33+
echo "Shared LLVM $("$INSTALL_DIR/bin/llvm-config" --version) already installed at $INSTALL_DIR"
2534
exit 0
35+
elif [ -e "$INSTALL_DIR" ]; then
36+
echo "Removing invalid or non-shared LLVM install at $INSTALL_DIR"
37+
rm -rf "$INSTALL_DIR"
2638
fi
2739

2840
URL="https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_RELEASE_VERSION}/${ASSET}"
@@ -57,4 +69,9 @@ mv "$EXTRACT_DIR" "$INSTALL_DIR"
5769

5870
"$INSTALL_DIR/bin/llvm-config" --version
5971
"$INSTALL_DIR/bin/llvm-config" --shared-mode
72+
if ! llvm_is_shared "$INSTALL_DIR/bin/llvm-config"; then
73+
echo "The official LLVM ${LLVM_RELEASE_VERSION} Linux archive does not provide libLLVM-21.so." >&2
74+
echo "PECOS CI needs a shared LLVM build; use scripts/ci/install-llvm-21-conda-linux.sh instead." >&2
75+
exit 1
76+
fi
6077
echo "Installed LLVM ${LLVM_RELEASE_VERSION} to $INSTALL_DIR"

0 commit comments

Comments
 (0)