diff --git a/.github/workflows/posix.yml b/.github/workflows/posix.yml index b71bc30..5c09f31 100644 --- a/.github/workflows/posix.yml +++ b/.github/workflows/posix.yml @@ -1,4 +1,4 @@ -name: multibuild +name: posix on: push: @@ -71,10 +71,10 @@ jobs: with: submodules: recursive fetch-depth: 0 - - name: Set up Python 3.8 - uses: actions/setup-python@v2 + - name: Set up Python + uses: actions/setup-python@v4 with: - python-version: 3.8 + python-version: 3.7 - name: Set extra env run: | if [ "macos-11" == "${{ matrix.os }}" ]; then @@ -93,7 +93,7 @@ jobs: echo "DOCKER_TEST_IMAGE: ${DOCKER_TEST_IMAGE}" - name: Install VirtualEnv run: | - python -m pip install --upgrade pip + python3 -m pip install --upgrade pip pip install virtualenv - name: Build OpenBLAS run: | @@ -120,23 +120,22 @@ jobs: - name: Build wheel run: | - mkdir -p local/openblas - tar -C local/openblas --strip-components=2 -xf libs/openblas*.tar.gz - cp local/openblas/lib/libopenblas64_.so local/openblas/libopenblas_python.so - # do not package the static libs and symlinks, they are ~55MB - rm -rf local/openblas/lib/* - mv local/openblas/libopenblas_python.so local/openblas/lib/ - cat < run_in_docker.sh - cd /openblas - patchelf --set-soname libopenblas_python.so local/openblas/lib/libopenblas_python.so - python3.7 -m pip wheel -w /tmp/wheelhouse -vv . - auditwheel repair -w dist/ /tmp/wheelhouse/openblas-*.whl - python3.10 -m pip install dist/openblas-*.whl - python3.10 -m openblas - EOF + if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then + source travis-ci/build_wheel.sh + else + docker run --rm -v $(pwd):/openblas quay.io/pypa/manylinux2014_${PLAT} /bin/bash -xe /openblas/travis-ci/build_wheel.sh + fi - docker run --rm -v $(pwd):/openblas quay.io/pypa/manylinux2014_x86_64 /bin/bash -xe /openblas/run_in_docker.sh + - name: Setup different python to test wheel + uses: actions/setup-python@v4 + with: + python-version: "3.11" + + - name: Test wheel + run: | + python -m pip install --no-index --find-links dist openblas + python -m openblas - uses: actions/upload-artifact@v3 with: diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index f308156..413e483 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -27,61 +27,66 @@ jobs: runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 - - name: install-rtools - run: | - # rtools 42+ does not support 32 bits builds. - choco install -y rtools --noprogress --force --version=4.0.0.20220206 + - uses: actions/checkout@v3 + - name: install-rtools + run: | + # rtools 42+ does not support 32 bits builds. + choco install -y rtools --noprogress --force --version=4.0.0.20220206 - - name: Set env variables - run: | - echo "START_DIR=$PWD" >> $env:GITHUB_ENV - $BITS = ${{ matrix.BUILD_BITS }} - echo "BUILD_BITS=$BITS" >> $env:GITHUB_ENV - # For interpretation of MSYSTEM, see: - # https://sourceforge.net/p/msys2/discussion/general/thread/b7dfdac8/#3939 - if ($BITS -eq 32) { - echo "PLAT=i686" >> $env:GITHUB_ENV - echo "MSYSTEM=MINGW32" >> $env:GITHUB_ENV - echo "LDFLAGS=-static -static-libgcc" >> $env:GITHUB_ENV - } else { - echo "PLAT=x86_64" >> $env:GITHUB_ENV - echo "MSYSTEM=UCRT64" >> $env:GITHUB_ENV - echo "LDFLAGS=-lucrt -static -static-libgcc" >> $env:GITHUB_ENV - } - if ( ${{ matrix.INTERFACE64 }} -eq 1 ) { - echo "INTERFACE64=1" >> $env:GITHUB_ENV - } + - name: Set env variables + run: | + echo "START_DIR=$PWD" >> $env:GITHUB_ENV + $BITS = ${{ matrix.BUILD_BITS }} + echo "BUILD_BITS=$BITS" >> $env:GITHUB_ENV + # For interpretation of MSYSTEM, see: + # https://sourceforge.net/p/msys2/discussion/general/thread/b7dfdac8/#3939 + if ($BITS -eq 32) { + echo "PLAT=i686" >> $env:GITHUB_ENV + echo "MSYSTEM=MINGW32" >> $env:GITHUB_ENV + echo "LDFLAGS=-static -static-libgcc" >> $env:GITHUB_ENV + } else { + echo "PLAT=x86_64" >> $env:GITHUB_ENV + echo "MSYSTEM=UCRT64" >> $env:GITHUB_ENV + echo "LDFLAGS=-lucrt -static -static-libgcc" >> $env:GITHUB_ENV + } + if ( ${{ matrix.INTERFACE64 }} -eq 1 ) { + echo "INTERFACE64=1" >> $env:GITHUB_ENV + } - - name: Build - run: | - git submodule update --init --recursive - & $env:BASH_PATH -lc tools/build_openblas.sh + - name: Build + run: | + git submodule update --init --recursive + & $env:BASH_PATH -lc tools/build_openblas.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: 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: Copy + run: | + cp for_test\test*.exe builds - - uses: actions/upload-artifact@v3 - with: - path: builds/openblas*.zip + - name: Set up Python 3.8 + uses: actions/setup-python@v4 + with: + python-version: 3.8 - - uses: conda-incubator/setup-miniconda@v2 - with: - activate-environment: upload + - uses: actions/upload-artifact@v3 + with: + path: builds/openblas*.zip - - name: Upload - env: - ANACONDA_SCIENTIFIC_PYTHON_UPLOAD: ${{ secrets.ANACONDA_SCIENTIFIC_PYTHON_UPLOAD }} - run: | - # Pin urllib3<2 due to github.com/Anaconda-Platform/anaconda-client/issues/654 - conda install "urllib3<2" anaconda-client - & $env:BASH_PATH -lc tools/upload_to_anaconda_staging.sh + - uses: conda-incubator/setup-miniconda@v2 + with: + activate-environment: upload + + - name: Upload + env: + ANACONDA_SCIENTIFIC_PYTHON_UPLOAD: ${{ secrets.ANACONDA_SCIENTIFIC_PYTHON_UPLOAD }} + run: | + # Pin urllib3<2 due to github.com/Anaconda-Platform/anaconda-client/issues/654 + conda install "urllib3<2" anaconda-client + & $env:BASH_PATH -lc tools/upload_to_anaconda_staging.sh diff --git a/local/openblas/__init__.py b/local/openblas/__init__.py index a36f843..de77fd4 100644 --- a/local/openblas/__init__.py +++ b/local/openblas/__init__.py @@ -41,12 +41,12 @@ def get_pkg_config(): return f"""\ libdir={_HERE}/lib includedir={_HERE}/include - openblas_config= USE_64BITINT= DYNAMIC_ARCH=1 DYNAMIC_OLDER= NO_CBLAS= NO_LAPACK= NO_LAPACKE= NO_AFFINITY=1 USE_OPENMP= PRESCOTT MAX_THREADS=24 - version=0.3.23 + openblas_config= {openblas_config} + version={openblas_config.split(" ")[1]} extralib=-lm -lpthread -lgfortran -lm -lpthread -lgfortran Name: openblas Description: OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version - Version: ${version} + Version: ${{version}} URL: https://github.com/xianyi/OpenBLAS Libs: -L${libdir} -lopenblas Libs.private: ${extralib} diff --git a/tools/local_build.sh b/tools/local_build.sh new file mode 100644 index 0000000..efd5be8 --- /dev/null +++ b/tools/local_build.sh @@ -0,0 +1,59 @@ +# Replicate the workflow from posix.yml locally on posix +# This may bitrot, compare it to the original file before using + + +# Set extra env +if [ "uname -m" == "x86_64" ]; then + export TRAVIS_OS_NAME=ubuntu-latest + export PLAT=x86_64 + # export PLAT=i86 + DOCKER_TEST_IMAGE=multibuild/xenial_${PLAT} +else + export TRAVIS_OS_NAME=osx + export LDFLAGS="-L/Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/usr/lib" + export LIBRARY_PATH="-L/Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/usr/lib" + export PLAT=x86_64 + # export PLAT=arm64 + export SUFFIX=gf_c469a42 + +fi +export REPO_DIR=OpenBLAS +export OPENBLAS_COMMIT="c2f4bdb" + +# export MB_ML_LIBC=musllinux +# export MB_ML_VER=_1_1 +# export MB_ML_VER=2014 +export INTERFACE64=1 + +function install_virtualenv { + # Install VirtualEnv + python3 -m pip install --upgrade pip + pip install virtualenv +} + +function build_openblas { + # Build OpenBLAS + set -xeo pipefail + if [ "$PLAT" == "arm64" ]; then + sudo xcode-select -switch /Applications/Xcode_12.5.1.app + export SDKROOT=/Applications/Xcode_12.5.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk + clang --version + fi + source travis-ci/build_steps.sh + echo "------ BEFORE BUILD ---------" + before_build + if [[ "$NIGHTLY" = "true" ]]; then + echo "------ CLEAN CODE --------" + clean_code $REPO_DIR develop + echo "------ BUILD LIB --------" + build_lib "$PLAT" "$INTERFACE64" "1" + else + echo "------ CLEAN CODE --------" + clean_code $REPO_DIR $OPENBLAS_COMMIT + echo "------ BUILD LIB --------" + build_lib "$PLAT" "$INTERFACE64" "0" + fi +} + +# install_virtualenv +# build_openblas diff --git a/travis-ci/build_wheel.sh b/travis-ci/build_wheel.sh new file mode 100644 index 0000000..8c55593 --- /dev/null +++ b/travis-ci/build_wheel.sh @@ -0,0 +1,20 @@ +set -xe +ls libs/openblas* >/dev/null 2>&1 && true +if [ "$?" != "0" ]; then + # inside docker + cd /openblas +fi + +mkdir -p local/openblas +# This will fail if there is more than one file in libs +tar -C local/openblas --strip-components=2 -xf libs/openblas*.tar.gz + +# do not package the static libs and symlinks, only take the shared object +find local/openblas/lib -maxdepth 1 -type l -delete +rm local/openblas/lib/*.a + +mv local/openblas/lib/libopenblas* local/openblas/lib/libopenblas_python.so +patchelf --set-soname libopenblas_python.so local/openblas/lib/libopenblas_python.so +python3.7 -m pip install wheel auditwheel +python3.7 -m pip wheel -w /tmp/wheelhouse -vv . +auditwheel repair -w dist/ /tmp/wheelhouse/openblas-*.whl