Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 17 additions & 14 deletions l/llvmlite/build_info.json
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
{
"maintainer": "shivansh-ibm",
"package_name": "llvmlite",
"github_url": "https://github.com/numba/llvmlite",
"required_versions":{"Releases": ["*"], "Tags": ["v0.44.0rc1","v0.45.0"]},
"version": "v0.45.0",
"default_branch": "main",
"build_script": "llvmlite_v0.45.0_ubi_9_3.sh",
"wheel_build" : true,
"package_dir": "l/llvmlite",
"docker_build": false,
"validate_build_script": true,
"use_non_root_user": false,
"v0.40.0": {
"maintainer": "Siddesh-Sangodkar1",
"package_name": "llvmlite",
"github_url": "https://github.com/numba/llvmlite",
"required_versions":{"Releases": ["*"], "Tags": ["v0.44.0rc1","v0.45.0"]},
"version": "v0.49.0",
"default_branch": "main",
"build_script": "llvmlite_0.49.0_ubi_10.2.sh",
"wheel_build" : true,
"package_dir": "l/llvmlite",
"docker_build": false,
"validate_build_script": true,
"use_non_root_user": false,
"v0.40.0": {
"build_script": "llvmlite_ubi_9.3.sh"
},
"v0.41.1": {
Expand All @@ -28,5 +28,8 @@
},
"v0.45.*": {
"build_script": "llvmlite_v0.45.0_ubi_9_3.sh"
}
},
"v0.49.0": {
"build_script": "llvmlite_0.49.0_ubi_10.2.sh"
}
}
184 changes: 184 additions & 0 deletions l/llvmlite/llvmlite_0.49.0_ubi_10.2.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
#!/bin/bash -e
# -----------------------------------------------------------------------------
#
# Package : llvmlite
# Version : 0.49.0
# Source repo : https://github.com/numba/llvmlite
# Tested on : UBI:10.2
# Language : Python
# Ci-Check : True
# Script License : Apache License, Version 2 or later
# Maintainer : Siddesh Sangodkar <siddesh.sangodkar1@ibm.com>
#
# Disclaimer: This script has been tested in root mode on given
# ========== platform using the mentioned version of the package.
# It may not work as expected with newer versions of the
# package and/or distribution. In such case, please
# contact "Maintainer" of this script.
#
# Note: llvmlite 0.49.0 requires LLVM 22 (22.1.0). LLVM has no ppc64le
# pre-built binary so this script builds LLVM 22.1.0 from source
# using CMake + Ninja, then builds llvmlite against it.
# numpy is installed directly from PyPI as a runtime companion
# required by numba.
#
# -----------------------------------------------------------------------------

set -e

PACKAGE_NAME=llvmlite
PACKAGE_VERSION=${1:-v0.49.0}
PACKAGE_URL=https://github.com/numba/llvmlite
PACKAGE_DIR=llvmlite
CURRENT_DIR=$(pwd)

LLVM_VERSION=22.1.0
LLVM_SHORT=22
NUMPY_VERSION=2.5.0

# ---------------------------------------------------------------------------
# System dependencies
# ---------------------------------------------------------------------------
yum install -y python3.14 python3.14-devel python3.14-pip \
git gcc-toolset-15 gcc-toolset-15-gcc gcc-toolset-15-gcc-c++ \
gcc-toolset-15-gcc-gfortran \
cmake ninja-build \
openblas-devel pkg-config \
libffi-devel zlib-devel \
curl tar xz which patch diffutils

# UBI 10 dropped SCL — guard block
if [[ -f /opt/rh/gcc-toolset-15/enable ]]; then
source /opt/rh/gcc-toolset-15/enable
elif [[ -d /opt/rh/gcc-toolset-15/root/usr/bin ]]; then
export PATH="/opt/rh/gcc-toolset-15/root/usr/bin:$PATH"
export LD_LIBRARY_PATH="/opt/rh/gcc-toolset-15/root/usr/lib64:$LD_LIBRARY_PATH"
else
echo "ERROR: gcc-toolset-15 not found"
exit 1
fi

echo "Using gcc: $(gcc --version | head -1)"
echo "Using cmake: $(cmake --version | head -1)"
echo "Using ninja: $(ninja --version)"

# ---------------------------------------------------------------------------
# Python build tools
# ---------------------------------------------------------------------------
python3.14 -m pip install --upgrade pip setuptools wheel build

# ---------------------------------------------------------------------------
# Install numpy from PyPI (runtime companion required by numba)
# ---------------------------------------------------------------------------
echo "=== Installing numpy ${NUMPY_VERSION} from PyPI ==="
python3.14 -m pip install "numpy==${NUMPY_VERSION}"
echo "numpy ${NUMPY_VERSION} installed successfully"

# ---------------------------------------------------------------------------
# Build LLVM 22.1.0 from source for ppc64le
# llvmlite 0.49.0 hard-requires LLVM major version 22 (CMakeLists.txt line 27)
# ---------------------------------------------------------------------------
LLVM_SRC_URL="https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz"
LLVM_BUILD_DIR="/tmp/llvm-${LLVM_VERSION}-build"
LLVM_INSTALL_PREFIX="/usr/local/llvm${LLVM_SHORT}"

echo "=== Building LLVM ${LLVM_VERSION} from source ==="
mkdir -p "${LLVM_BUILD_DIR}"
cd "${LLVM_BUILD_DIR}"
curl -sSL --fail -o "llvm-project.src.tar.xz" "${LLVM_SRC_URL}"
tar -xJf llvm-project.src.tar.xz
cd "llvm-project-${LLVM_VERSION}.src"

mkdir -p build
cd build

# ppc64le: disable -fno-plt (known compiler bug with LLVM build on ppc64le)
# See: https://bugs.llvm.org/show_bug.cgi?id=51863
CFLAGS_SAVE="${CFLAGS}"
CXXFLAGS_SAVE="${CXXFLAGS}"
export CFLAGS="$(echo ${CFLAGS:-} | sed 's/-fno-plt//g')"
export CXXFLAGS="$(echo ${CXXFLAGS:-} | sed 's/-fno-plt//g')"

cmake ../llvm \
-G Ninja \
-DCMAKE_INSTALL_PREFIX="${LLVM_INSTALL_PREFIX}" \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_TARGETS_TO_BUILD="PowerPC" \
-DLLVM_ENABLE_RTTI=OFF \
-DLLVM_ENABLE_FFI=ON \
-DLLVM_INCLUDE_TESTS=OFF \
-DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir libffi 2>/dev/null || echo /usr/include) \
-DFFI_LIBRARY_DIR=$(pkg-config --variable=libdir libffi 2>/dev/null || echo /usr/lib64)

ninja -j"$(nproc)"
ninja install

# Restore CFLAGS/CXXFLAGS
export CFLAGS="${CFLAGS_SAVE}"
export CXXFLAGS="${CXXFLAGS_SAVE}"

echo "LLVM ${LLVM_VERSION} installed to ${LLVM_INSTALL_PREFIX}"
echo "llvm-config: $(${LLVM_INSTALL_PREFIX}/bin/llvm-config --version)"

# Make llvm-config findable for llvmlite's CMake probe
export PATH="${LLVM_INSTALL_PREFIX}/bin:${PATH}"
export LLVM_CONFIG="${LLVM_INSTALL_PREFIX}/bin/llvm-config"

cd "${CURRENT_DIR}"

# ---------------------------------------------------------------------------
# Clone and checkout llvmlite
# ---------------------------------------------------------------------------
git clone "${PACKAGE_URL}" "${PACKAGE_DIR}"
cd "${PACKAGE_DIR}"

if git rev-parse "v${PACKAGE_VERSION}" &>/dev/null; then
git checkout "v${PACKAGE_VERSION}"
elif git rev-parse "${PACKAGE_VERSION}" &>/dev/null; then
git checkout "${PACKAGE_VERSION}"
else
echo "ERROR: No git tag found for version '${PACKAGE_VERSION}'"
exit 1
fi

# ---------------------------------------------------------------------------
# Build llvmlite wheel
# ---------------------------------------------------------------------------
export LLVMLITE_PACKAGE_FORMAT="wheel"
export LLVMLITE_USE_RTTI="OFF"

# Ensure libffi headers are visible to CMake
export CXXFLAGS="${CXXFLAGS:-} -fPIC"

if ! python3.14 setup.py bdist_wheel; then
echo "------------------$PACKAGE_NAME:Build_fails-------------------------------------"
echo "$PACKAGE_URL $PACKAGE_NAME"
echo "$PACKAGE_NAME | $PACKAGE_URL | $PACKAGE_VERSION | GitHub | Fail | Build_Fails"
exit 1
fi

WHEEL_DIR="${CURRENT_DIR}/wheels"
mkdir -p "${WHEEL_DIR}"
cp dist/*.whl "${WHEEL_DIR}/"
cp dist/*.whl "${CURRENT_DIR}/" 2>/dev/null || true

# ---------------------------------------------------------------------------
# Install wheel and test
# ---------------------------------------------------------------------------
python3.14 -m pip install installer
WHL=$(ls "${WHEEL_DIR}"/llvmlite-*.whl | head -1)
python3.14 -m installer "${WHL}"

# Run tests
cd "${CURRENT_DIR}"
if ! python3.14 -m llvmlite.tests ; then
echo "------------------$PACKAGE_NAME:Install_success_but_test_fails---------------------"
echo "$PACKAGE_URL $PACKAGE_NAME"
echo "$PACKAGE_NAME | $PACKAGE_URL | $PACKAGE_VERSION | GitHub | Fail | Install_success_but_test_Fails"
exit 2
else
echo "------------------$PACKAGE_NAME:Install_&_test_both_success-------------------------"
echo "$PACKAGE_URL $PACKAGE_NAME"
echo "$PACKAGE_NAME | $PACKAGE_URL | $PACKAGE_VERSION | GitHub | Pass | Both_Install_and_Test_Success"
exit 0
fi
Loading