diff --git a/.github/workflows/posix.yml b/.github/workflows/posix.yml index 712d166..fc6815e 100644 --- a/.github/workflows/posix.yml +++ b/.github/workflows/posix.yml @@ -28,43 +28,15 @@ jobs: fail-fast: false matrix: include: - - { os: ubuntu-latest, PLAT: i686, INTERFACE64: '0', MB_ML_VER: '2014', MB_ML_LIBC: manylinux} - - - { os: ubuntu-latest, PLAT: x86_64, INTERFACE64: '0', MB_ML_VER: '2014', MB_ML_LIBC: manylinux} - - { os: ubuntu-latest, PLAT: x86_64, INTERFACE64: '1', MB_ML_VER: '2014', MB_ML_LIBC: manylinux} - - - { os: macos-14, PLAT: x86_64, INTERFACE64: '0', MB_ML_LIBC: macosx} - - { os: macos-14, PLAT: x86_64, INTERFACE64: '1', MB_ML_LIBC: macosx} - - - { os: macos-latest, PLAT: arm64, INTERFACE64: '0', MB_ML_LIBC: macosx} - - { os: macos-latest, PLAT: arm64, INTERFACE64: '1', MB_ML_LIBC: macosx} - - - { os: ubuntu-latest, PLAT: x86_64, INTERFACE64: '0', MB_ML_VER: '_1_2', MB_ML_LIBC: musllinux} - - { os: ubuntu-latest, PLAT: x86_64, INTERFACE64: '1', MB_ML_VER: '_1_2', MB_ML_LIBC: musllinux} - - - { os: ubuntu-24.04-arm, PLAT: aarch64, INTERFACE64: '0', MB_ML_VER: '2014', MB_ML_LIBC: manylinux} - - { os: ubuntu-24.04-arm, PLAT: aarch64, INTERFACE64: '1', MB_ML_VER: '2014', MB_ML_LIBC: manylinux} - - - { os: ubuntu-24.04-arm, PLAT: aarch64, INTERFACE64: '0', MB_ML_VER: '_1_2', MB_ML_LIBC: musllinux} - - { os: ubuntu-24.04-arm, PLAT: aarch64, INTERFACE64: '1', MB_ML_VER: '_1_2', MB_ML_LIBC: musllinux} - - - { os: ubuntu-24.04-arm, PLAT: ppc64le, INTERFACE64: '0', MB_ML_VER: '2014', MB_ML_LIBC: manylinux} - - { os: ubuntu-24.04-arm, PLAT: ppc64le, INTERFACE64: '1', MB_ML_VER: '2014', MB_ML_LIBC: manylinux} - - - { os: ubuntu-24.04-arm, PLAT: s390x, INTERFACE64: '0', MB_ML_VER: '2014', MB_ML_LIBC: manylinux} - - { os: ubuntu-24.04-arm, PLAT: s390x, INTERFACE64: '1', MB_ML_VER: '2014', MB_ML_LIBC: manylinux} - - - { os: ubuntu-24.04-arm, PLAT: riscv64, INTERFACE64: '0', MB_ML_VER: '_2_39', MB_ML_LIBC: manylinux} - - { os: ubuntu-24.04-arm, PLAT: riscv64, INTERFACE64: '1', MB_ML_VER: '_2_39', MB_ML_LIBC: manylinux} + - { os: ubuntu-24.04-arm, PLAT: aarch64, INTERFACE64: '0', MB_ML_VER: '_2_28', MB_ML_LIBC: manylinux} + - { os: ubuntu-24.04-arm, PLAT: aarch64, INTERFACE64: '1', MB_ML_VER: '_2_28', MB_ML_LIBC: manylinux} env: NIGHTLY: ${{ inputs.publish == false && (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') }} MB_ML_LIBC: ${{ matrix.MB_ML_LIBC }} MB_ML_VER: ${{ matrix.MB_ML_VER }} INTERFACE64: ${{ matrix.INTERFACE64 }} - BUILD_DIR: ${{ github.workspace }} PLAT: ${{ matrix.PLAT }} - OS-NAME: ${{ matrix.os }} steps: - uses: actions/checkout@v6.0.1 diff --git a/.github/workflows/windows-arm.yml b/.github/workflows/windows-arm.yml deleted file mode 100644 index d2f2a51..0000000 --- a/.github/workflows/windows-arm.yml +++ /dev/null @@ -1,102 +0,0 @@ -name: Windows-on-ARM - -on: - push: - branches: [ main ] - pull_request: - branches: - - main - - maintenance/** - workflow_call: - - -env: - OPENBLAS_ROOT: "c:\\opt" - # Preserve working directory for calls into bash - # Without this, invoking bash will cd to the home directory - CHERE_INVOKING: "yes" - BASH_PATH: "C:\\Program Files\\Git\\bin\\bash.exe" - PLAT: arm64 - -jobs: - build: - runs-on: windows-11-arm - timeout-minutes: 90 - - strategy: - matrix: - INTERFACE64: ['1', '0'] - - env: - INTERFACE64: ${{ matrix.INTERFACE64 }} - - steps: - - - uses: actions/checkout@v6.0.1 - - - name: Set up Python - uses: actions/setup-python@v6.2.0 - with: - python-version: 3.12 - architecture: arm64 - - - name: Download and install LLVM installer - run: | - Invoke-WebRequest https://github.com/llvm/llvm-project/releases/download/llvmorg-20.1.8/LLVM-20.1.8-woa64.exe -UseBasicParsing -OutFile LLVM-woa64.exe - Start-Process -FilePath ".\LLVM-woa64.exe" -ArgumentList "/S" -Wait - echo "C:\Program Files\LLVM\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - - - name: Install CMake and Ninja for Win-ARM64 - shell: pwsh - run: | - Invoke-WebRequest https://github.com/Kitware/CMake/releases/download/v3.29.4/cmake-3.29.4-windows-arm64.msi -OutFile cmake-arm64.msi - Start-Process msiexec.exe -ArgumentList "/i cmake-arm64.msi /quiet /norestart" -Wait - echo "C:\Program Files\CMake\bin" >> $env:GITHUB_PATH - - Invoke-WebRequest https://github.com/ninja-build/ninja/releases/download/v1.13.1/ninja-winarm64.zip -OutFile ninja-winarm64.zip - Expand-Archive ninja-winarm64.zip -DestinationPath ninja - Copy-Item ninja\ninja.exe -Destination "C:\Windows\System32" - - - name: Set env variables - run: | - if ( ${{ matrix.INTERFACE64 }} -eq "1" ) { - echo "INTERFACE_BITS=64" >> $env:GITHUB_ENV - } else { - echo "INTERFACE_BITS=32" >> $env:GITHUB_ENV - } - - - name: Build - run: | - git submodule update --init --recursive - .\tools\build_steps_win_arm64.bat 64 ${env:INTERFACE_BITS} - - - name: Test ${{ matrix.INTERFACE_BITS }}-bit interface wheel - run: | - python -m pip install --no-index --find-links dist scipy_openblas${env:INTERFACE_BITS} - python -m scipy_openblas${env:INTERFACE_BITS} - python -c "import scipy_openblas${env:INTERFACE_BITS}; print(scipy_openblas${env:INTERFACE_BITS}.get_pkg_config())" - - - uses: actions/upload-artifact@v6.0.0 - with: - name: wheels-${{ env.PLAT }}-${{ env.INTERFACE64 }} - path: dist/scipy_openblas*.whl - - - name: Install Anaconda client - run: | - # Rust installation needed for rpds-py. - Invoke-WebRequest https://static.rust-lang.org/rustup/dist/aarch64-pc-windows-msvc/rustup-init.exe -UseBasicParsing -Outfile rustup-init.exe - .\rustup-init.exe -y - $env:PATH="$env:PATH;$env:USERPROFILE\.cargo\bin" - # cryptography dropped win-arm64 for 46.0.4, make sure we don't try to compile from source - pip install --only-binary :all: cryptography - pip install anaconda-client - - - name: Upload - # see https://github.com/marketplace/actions/setup-miniconda for why - # `-el {0}` is required. - shell: bash -el {0} - env: - ANACONDA_SCIENTIFIC_PYTHON_UPLOAD: ${{ secrets.ANACONDA_SCIENTIFIC_PYTHON_UPLOAD }} - run: | - source tools/upload_to_anaconda_staging.sh - upload_wheels diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml deleted file mode 100644 index b8034e2..0000000 --- a/.github/workflows/windows.yml +++ /dev/null @@ -1,189 +0,0 @@ -name: Win - -on: - push: - branches: [ main ] - pull_request: - branches: - - main - - maintenance/** - workflow_dispatch: null - workflow_call: - -env: - OPENBLAS_ROOT: "c:\\opt" - # Preserve working directory for calls into bash - # Without this, invoking bash will cd to the home directory - CHERE_INVOKING: "yes" - BASH_PATH: "c:\\rtools40\\usr\\bin\\bash.exe" - -jobs: - build: - strategy: - matrix: - plat: ['x64', 'x86'] - INTERFACE64: ['1', '0'] - os: [windows-latest] - exclude: - - plat: x86 - INTERFACE64: '1' - fail-fast: false - runs-on: ${{ matrix.os }} - - timeout-minutes: 90 - steps: - - uses: actions/checkout@v6.0.1 - - name: install-rtools - run: | - # rtools 42+ does not support 32 bits builds. - choco install -y rtools --no-progress --force --version=4.0.0.20220206 - - - name: Set env variables - run: | - echo "START_DIR=$PWD" >> $env:GITHUB_ENV - # For interpretation of MSYSTEM, see: - # https://sourceforge.net/p/msys2/discussion/general/thread/b7dfdac8/#3939 - if ( "${{ matrix.plat }}" -eq "x86") { - echo "PLAT=i686" >> $env:GITHUB_ENV - echo "WHEEL_PLAT=win32" >> $env:GITHUB_ENV - echo "MSYSTEM=MINGW32" >> $env:GITHUB_ENV - # No ucrt on 32-bits, so use _snprintf_c instead - echo "LDFLAGS=-static -static-libgcc -Wl,--defsym,_quadmath_snprintf=__snprintf_c" >> $env:GITHUB_ENV - echo "BUILD_BITS=32" >> $env:GITHUB_ENV - } else { - echo "PLAT=x86_64" >> $env:GITHUB_ENV - echo "WHEEL_PLAT=win_amd64" >> $env:GITHUB_ENV - echo "MSYSTEM=UCRT64" >> $env:GITHUB_ENV - echo "LDFLAGS=-lucrt -static -static-libgcc -Wl,--defsym,quadmath_snprintf=snprintf" >> $env:GITHUB_ENV - echo "BUILD_BITS=64" >> $env:GITHUB_ENV - } - if ( ${{ matrix.INTERFACE64 }} -eq "1" ) { - echo "INTERFACE64=1" >> $env:GITHUB_ENV - } - $CIBW = "${{ github.workspace }}/.openblas" - $CIBW = $CIBW.replace("\","/") - echo "CIBW_ENVIRONMENT_WINDOWS=PKG_CONFIG_PATH=$CIBW" >> $env:GITHUB_ENV - - - name: Debug - run: | - echo CIBW_ENVIRONMENT_WINDOWS=$env:CIBW_ENVIRONMENT_WINDOWS - - - name: Build - run: | - git submodule update --init --recursive - & $env:BASH_PATH -lc tools/build_steps_windows.sh - - - name: Test - run: | - & $env:BASH_PATH -lc tools/build_gfortran.sh - echo "Static test" - .\for_test\test.exe - echo "Dynamic test" - .\for_test\test_dyn.exe - - - name: Copy - run: | - cp for_test\test*.exe builds - - - name: Set up Python - uses: actions/setup-python@v6.2.0 - with: - python-version: 3.9 - architecture: ${{ matrix.plat }} - - - - name: Build wheel - shell: bash - run: | - set -xeo pipefail - python -m pip install wheel - # This will fail if there is more than one file in libs - unzip -d local/scipy_openblas64 builds/openblas*.zip - if [[ -d local/scipy_openblas64/64 ]]; then - mv local/scipy_openblas64/64/* local/scipy_openblas64 - else - mv local/scipy_openblas64/32/* local/scipy_openblas64 - fi - mv local/scipy_openblas64/bin/*.dll local/scipy_openblas64/lib - rm local/scipy_openblas64/lib/*.a - rm -f local/scipy_openblas64/lib/*.exp # may not exist? - rm local/scipy_openblas64/lib/*.def - rm -rf local/scipy_openblas64/lib/pkgconfig - if [[ -d local/scipy_openblas64/64 ]]; then - rm -rf local/scipy_openblas64/64 - else - rm -rf local/scipy_openblas64/32 - fi - sed -e "s/bin/lib/" -i local/scipy_openblas64/lib/cmake/openblas/OpenBLASConfig.cmake - sed -e "s/dll/lib/" -i local/scipy_openblas64/lib/cmake/openblas/OpenBLASConfig.cmake - mkdir local/scipy_openblas64/lib/pkgconfig - if [[ "${INTERFACE64}" != "1" ]]; then - mv local/scipy_openblas64 local/scipy_openblas32 - # rewrite the name of the project to scipy-openblas32 - # this is a hack, but apparently there is no other way to change the name - # of a pyproject.toml project - sed -e "s/openblas64/openblas32/" -i pyproject.toml - sed -e "s/openblas_get_config64_/openblas_get_config/" -i local/scipy_openblas32/__init__.py - sed -e "s/cflags =.*/cflags = '-DBLAS_SYMBOL_PREFIX=scipy_'/" -i local/scipy_openblas32/__init__.py - sed -e "s/openblas64/openblas32/" -i local/scipy_openblas32/__init__.py - sed -e "s/openblas64/openblas32/" -i local/scipy_openblas32/__main__.py - PYTHONPATH=$PWD/local python -c "import scipy_openblas32 as s; print(s.get_pkg_config(use_prefix=True))" > local/scipy_openblas32/lib/pkgconfig/scipy-openblas.pc - else - PYTHONPATH=$PWD/local python -c "import scipy_openblas64 as s; print(s.get_pkg_config(use_prefix=True))" > local/scipy_openblas64/lib/pkgconfig/scipy-openblas.pc - fi - echo "" >> LICENSE.txt - echo "----" >> LICENSE.txt - echo "" >> LICENSE.txt - cat tools/LICENSE_win32.txt >> LICENSE.txt - python -m pip wheel -w dist -vv . - # move the mis-named scipy_openblas64-none-any.whl to a platform-specific name - if [[ -e dist/*any*.whl ]]; then - for f in dist/*.whl; do mv $f "${f/%any.whl/$WHEEL_PLAT.whl}"; done - fi - - - name: Set up different Python - uses: actions/setup-python@v6.2.0 - with: - python-version: 3.11 - architecture: ${{ matrix.plat }} - - - uses: actions/upload-artifact@v6.0.0 - with: - name: wheels-${{matrix.plat }}-${{ matrix.INTERFACE64 }} - path: dist/scipy_openblas*.whl - - - name: Test 64-bit interface wheel - if: matrix.INTERFACE64 == '1' - run: | - python -m pip install --no-index --find-links dist scipy_openblas64 - python -m scipy_openblas64 - python -c "import scipy_openblas64; print(scipy_openblas64.get_pkg_config())" - python -m pip install pkgconf - python -m pkgconf scipy-openblas --cflags - - - name: Test 32-bit interface wheel - if: matrix.INTERFACE64 != '1' - run: | - python -m pip install --no-index --find-links dist scipy_openblas32 - python -m scipy_openblas32 - python -c "import scipy_openblas32; print(scipy_openblas32.get_pkg_config())" - python -m pip install pkgconf - python -m pkgconf scipy-openblas --cflags - - - uses: conda-incubator/setup-miniconda@v3.1.1 - with: - channels: conda-forge - channel-priority: true - activate-environment: upload - miniforge-version: latest - - - name: Upload - # see https://github.com/marketplace/actions/setup-miniconda for why - # `-el {0}` is required. - shell: bash -el {0} - env: - ANACONDA_SCIENTIFIC_PYTHON_UPLOAD: ${{ secrets.ANACONDA_SCIENTIFIC_PYTHON_UPLOAD }} - run: | - conda install -y anaconda-client - source tools/upload_to_anaconda_staging.sh - upload_wheels diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a2d7b5..c56c771 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ ## OpenBLAS v0.3.31.159 (v0.3.31-159-g7a95460b) +### 0.3.31.159.1 (2026-03-18) +- Also release aarch64 manylinux_2_28 wheels + ### 0.3.31.159.0 (2026-03-17) - Update to v0.3.31.159 @@ -98,4 +101,4 @@ ## OpenBLAS v0.3.29.0 ### 0.3.29.0.0 (2025-04-03) -- Add build script for Windows on ARM64 \ No newline at end of file +- Add build script for Windows on ARM64 diff --git a/OpenBLAS b/OpenBLAS index 7a95460..b7601ea 160000 --- a/OpenBLAS +++ b/OpenBLAS @@ -1 +1 @@ -Subproject commit 7a95460bb1fc7081a7861515705ed06a6223a5a2 +Subproject commit b7601ea92f6e950670610da2f6d5b0c0211bec3b diff --git a/ci-before-build.sh b/ci-before-build.sh index 83abf25..504b711 100755 --- a/ci-before-build.sh +++ b/ci-before-build.sh @@ -24,11 +24,6 @@ fi sed -e "s/^VERSION = .*/VERSION = ${version}/" -i.bak OpenBLAS/Makefile.rule echo "creating wheel from $OPENBLAS_COMMIT (NIGHTLY is $NIGHTLY)" -if [ "$(uname)" != "Darwin" ]; then - ./tools/install-static-clang.sh - export PATH=/opt/clang/bin:$PATH -fi - # Build OpenBLAS source build-openblas.sh diff --git a/openblas_commit.txt b/openblas_commit.txt index 39ea368..72849e6 100644 --- a/openblas_commit.txt +++ b/openblas_commit.txt @@ -1 +1 @@ -v0.3.31-159-g7a95460b +v0.3.31-174-gb7601ea92 diff --git a/pyproject.toml b/pyproject.toml index 7b58511..179acbb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,8 +8,8 @@ build-backend = "setuptools.build_meta" [project] name = "scipy-openblas64" -# v0.3.31.159 -version = "0.3.31.159.0" +# v0.3.31.174 +version = "0.3.31.174.0" requires-python = ">=3.7" description = "Provides OpenBLAS for python packaging" readme = "README.md" @@ -50,13 +50,7 @@ environment-pass = [ "MB_ML_LIBC", "MB_ML_VER", "INTERFACE64", - "BUILD_DIR", "PLAT", - "OS-NAME", - "RUNNER_ARCH", ] -[tool.cibuildwheel.linux] -environment = { CC = "/opt/clang/bin/clang", CXX = "/opt/clang/bin/clang++", LDFLAGS = "-fuse-ld=lld" } - [project.entry-points.pkg_config] scipy-openblas = 'scipy_openblas64.lib.pkgconfig' diff --git a/tools/build_steps.sh b/tools/build_steps.sh index 9fc5b75..7d91d9b 100644 --- a/tools/build_steps.sh +++ b/tools/build_steps.sh @@ -5,7 +5,6 @@ BUILD_PREFIX=${BUILD_PREFIX:-/usr/local} ROOT_DIR=$(dirname $(dirname "${BASH_SOURCE[0]}")) -MB_PYTHON_VERSION=3.9 function before_build { # install gfortran, objconv on macOS @@ -20,8 +19,7 @@ function before_build { sudo chmod 777 /usr/local/include touch /usr/local/include/.dir_exists fi - # get_macpython_environment ${MB_PYTHON_VERSION} venv - python3.9 -m venv venv + python3.11 -m venv venv source venv/bin/activate unalias gfortran 2>/dev/null || true @@ -53,7 +51,8 @@ function clean_code { [ -z "$build_commit" ] && echo "build_commit not defined" && exit 1 pushd OpenBLAS git fetch origin --tags - git checkout $build_commit + git fetch origin pull/5688/head + git checkout b7601ea92f6 git clean -fxd git submodule update --init --recursive popd @@ -132,6 +131,8 @@ function build_lib { Linux-aarch64) local bitness=64 local target="ARMV8" + echo "Using gcc at $(which gcc)" + gcc --version ;; Darwin-arm64) local bitness=64 @@ -190,14 +191,14 @@ function build_lib { fi if [ -n "$dynamic_list" ]; then CFLAGS="$CFLAGS -fvisibility=protected -Wno-uninitialized" \ - make BUFFERSIZE=20 DYNAMIC_ARCH=1 QUIET_MAKE=1 \ + make BUFFERSIZE=20 DYNAMIC_ARCH=1 \ USE_OPENMP=0 NUM_THREADS=64 \ DYNAMIC_LIST="$dynamic_list" \ BINARY="$bitness" $interface_flags \ TARGET="$target" else CFLAGS="$CFLAGS -fvisibility=protected -Wno-uninitialized" \ - make BUFFERSIZE=20 DYNAMIC_ARCH=1 QUIET_MAKE=1 \ + make BUFFERSIZE=20 DYNAMIC_ARCH=1 \ USE_OPENMP=0 NUM_THREADS=64 \ BINARY="$bitness" $interface_flags \ TARGET="$target" diff --git a/tools/install-static-clang.sh b/tools/install-static-clang.sh index b146b20..c84e494 100755 --- a/tools/install-static-clang.sh +++ b/tools/install-static-clang.sh @@ -20,19 +20,19 @@ case "${STATIC_CLANG_ARCH}" in s390x) GO_ARCH=s390x;; *) echo "No static-clang toolchain for ${CLANG_ARCH}">2; exit 1;; esac -STATIC_CLANG_VERSION=21.1.6.0 +STATIC_CLANG_VERSION=21.1.8.1 STATIC_CLANG_FILENAME="static-clang-linux-${GO_ARCH}.tar.xz" STATIC_CLANG_URL="https://github.com/mayeut/static-clang-images/releases/download/v${STATIC_CLANG_VERSION}/${STATIC_CLANG_FILENAME}" pushd /tmp cat<<'EOF' | grep "${STATIC_CLANG_FILENAME}" > "${STATIC_CLANG_FILENAME}.sha256" -3f92a131d27ca606dae8230550236a0c897a7f5990d61a293814e0abea8d0e1f static-clang-linux-386.tar.xz -3fc6a3500cb9514b2c3af6d4a95676842769c301f872b6cea8c15576a64e756c static-clang-linux-amd64.tar.xz -82ea0c148ec75f72a2f6f61cc877561efe9675c6e59a1a2c4d130f088f9dc868 static-clang-linux-arm.tar.xz -9b5ad28877b6d56aff530164f7f88590e5d3441a1fddd7a73370539783056120 static-clang-linux-arm64.tar.xz -2adccbcad99d033222c8a63872739919375a7aef2339ce2e8ab7dcfc938502b1 static-clang-linux-loong64.tar.xz -5f551911ad73ecbbcf278e6d05a04bc68bd0dc4918a6a145352072f7734959c6 static-clang-linux-ppc64le.tar.xz -90f5beda1004bec124607df1f9fc0a70c2b9f382b82ab1db2703ebd131c920ef static-clang-linux-riscv64.tar.xz -e4047765a5e64bace4be36f6aae4d859e96bc1298d3ff5ba6b7d6100ea7d23f7 static-clang-linux-s390x.tar.xz +583980309e73fa753c0791e05deceac7cb06c5444956d61189f1d651941bcd8e static-clang-linux-386.tar.xz +f539f1fd24bcc07ecc220594022907865914236540091fbf189cb496a9a3751c static-clang-linux-amd64.tar.xz +d0c8b7fac4734cc8048fda3b1f33ccdf24d26f81a52df53348e5fa84ab4b203a static-clang-linux-arm.tar.xz +57fb9cf798b3a2c4b0f3c31c0b7fe3803b5319d2af075407e1aef0cd57882f65 static-clang-linux-arm64.tar.xz +5a2b296e9030d0320d9e4eac8859e5db0504cf1d4169981af233cb339292fa4c static-clang-linux-loong64.tar.xz +c8541b2d36f0fd8f13ddabe1292b6fb7550a742e76e0f1f70fb29fcee073be4a static-clang-linux-ppc64le.tar.xz +b311137f955b55139b02e8c1d7ec259628404a0563d136df7a817a33784bd2bf static-clang-linux-riscv64.tar.xz +de74fd8e5de244d36398684b2afa67add2311df6ccfa24f3c08a1d777ca814fa static-clang-linux-s390x.tar.xz EOF curl -fsSLO "${STATIC_CLANG_URL}" sha256sum -c "${STATIC_CLANG_FILENAME}.sha256"