diff --git a/.github/actions/deploy-macosx/action.yml b/.github/actions/deploy-macosx/action.yml index 690321c6aaa..57252db5294 100644 --- a/.github/actions/deploy-macosx/action.yml +++ b/.github/actions/deploy-macosx/action.yml @@ -24,7 +24,7 @@ runs: sudo rm -Rf /Library/Developer/CommandLineTools/SDKs/MacOSX10* fi - brew uninstall --force --ignore-dependencies gcc gcc@7 gcc@8 gcc@9 gcc@10 gcc@11 gcc@12 gcc@13 little-cms2 maven openblas r + brew uninstall --force --ignore-dependencies gcc gcc@7 gcc@8 gcc@9 gcc@10 gcc@11 gcc@12 gcc@13 gcc@14 little-cms2 maven openblas r brew install boost ccache swig autoconf-archive automake cmake libomp libtool libusb ant nasm xz pkg-config sdl2 gpg1 bison flex perl ragel binutils gradle gmp isl libmpc mpfr geoip pcre ssdeep yajl brew link --force libomp @@ -33,31 +33,27 @@ runs: # brew unlink cmake # brew install cmake.rb + FORMULAE=() if [[ -n ${CI_DEPLOY_NEED_GCC:-} ]]; then echo Installing an older less buggy version of GCC - brew install gcc@10 - brew link --overwrite gcc@10 - + brew install gcc@13 + brew link --overwrite gcc@13 echo Removing "fixed" header files that are actually broken - sudo rm -Rf $(find /usr/local/Cellar/gcc@10/ -iname include-fixed) - - echo Fixing up some binaries to support rpath - sudo install_name_tool -add_rpath /usr/local/lib/gcc/10/ -add_rpath @loader_path/. -id @rpath/libgomp.1.dylib /usr/local/lib/gcc/10/libgomp.1.dylib - sudo install_name_tool -add_rpath /usr/local/lib/gcc/10/ -add_rpath @loader_path/. -id @rpath/libstdc++.6.dylib /usr/local/lib/gcc/10/libstdc++.6.dylib - sudo install_name_tool -add_rpath /usr/local/lib/gcc/10/ -add_rpath @loader_path/. -id @rpath/libgfortran.5.dylib /usr/local/lib/gcc/10/libgfortran.5.dylib - sudo install_name_tool -add_rpath /usr/local/lib/gcc/10/ -add_rpath @loader_path/. -id @rpath/libquadmath.0.dylib /usr/local/lib/gcc/10/libquadmath.0.dylib - sudo install_name_tool -add_rpath /usr/local/lib/gcc/10/ -add_rpath @loader_path/. -id @rpath/libgcc_s.1.dylib /usr/local/lib/gcc/10/libgcc_s.1.dylib - sudo install_name_tool -change $(otool -L /usr/local/lib/gcc/10/libgfortran.5.dylib | grep /usr/local/Cellar/gcc@10/ | cut -f1 -d ' ') @rpath/libquadmath.0.dylib /usr/local/lib/gcc/10/libgfortran.5.dylib - sudo install_name_tool -change /usr/local/lib/gcc/10/libgcc_s.1.dylib @rpath/libgcc_s.1.dylib /usr/local/lib/gcc/10/libgomp.1.dylib - sudo install_name_tool -change /usr/local/lib/gcc/10/libgcc_s.1.dylib @rpath/libgcc_s.1.dylib /usr/local/lib/gcc/10/libstdc++.6.dylib - sudo install_name_tool -change /usr/local/lib/gcc/10/libgcc_s.1.dylib @rpath/libgcc_s.1.dylib /usr/local/lib/gcc/10/libgfortran.5.dylib - sudo install_name_tool -change /usr/local/lib/gcc/10/libgcc_s.1.dylib @rpath/libgcc_s.1.dylib /usr/local/lib/gcc/10/libquadmath.0.dylib - otool -L /usr/local/lib/gcc/10/*.dylib + rm -Rf $(find /opt/homebrew/Cellar/gcc@13/ -iname include-fixed) + FORMULAE+="gcc@13" fi - sudo install_name_tool -add_rpath @loader_path/. -id @rpath/libomp.dylib `brew ls libomp|grep libomp.dylib` - sudo install_name_tool -add_rpath @loader_path/. -id @rpath/libSDL2-2.0.0.dylib `brew ls sdl2|grep libSDL2-2.0.0.dylib` - sudo install_name_tool -add_rpath @loader_path/. -id @rpath/libusb-1.0.0.dylib `brew ls libusb|grep libusb-1.0.0.dylib` + # Change rpath and resign all brew libraries that could be bundled in presets + FORMULAE+=("libomp" "sdl2" "libusb") + for i in $FORMULAE; do + for l in $(brew ls $i|grep -e ".dylib$"); do + if [ ! -L $l ]; then + install_name_tool -add_rpath @loader_path/. -id @rpath/$(basename $l) $l + codesign --force -s - $l + fi + done + done + otool -L $(brew ls gcc@13|grep -e ".dylib$"); curl -LO https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz sudo tar -xzf apache-maven-3.6.3-bin.tar.gz -C /usr/local/opt @@ -103,10 +99,12 @@ runs: - name: Build project shell: bash run: | - export LIBRARY_PATH="/usr/local/lib/gcc/10/" - export LD_LIBRARY_PATH="$LIBRARY_PATH" - export DYLD_LIBRARY_PATH="$LIBRARY_PATH" - export DYLD_FALLBACK_LIBRARY_PATH="$LIBRARY_PATH" + if [[ -n ${CI_DEPLOY_NEED_GCC:-} ]]; then + export LIBRARY_PATH="$(brew --prefix)/lib/gcc/13/" + export LD_LIBRARY_PATH="$LIBRARY_PATH" + export DYLD_LIBRARY_PATH="$LIBRARY_PATH" + export DYLD_FALLBACK_LIBRARY_PATH="$LIBRARY_PATH" + fi # Change default JVM on macos-14 runner if [[ -n ${JAVA_HOME_17_arm64:-} ]]; then diff --git a/.github/workflows/scipy.yml b/.github/workflows/scipy.yml index 7b647faf297..767256d06fa 100644 --- a/.github/workflows/scipy.yml +++ b/.github/workflows/scipy.yml @@ -38,6 +38,10 @@ jobs: runs-on: ubuntu-20.04 steps: - uses: bytedeco/javacpp-presets/.github/actions/deploy-ubuntu@actions + macosx-arm64: + runs-on: macos-14 + steps: + - uses: bytedeco/javacpp-presets/.github/actions/deploy-macosx@actions macosx-x86_64: runs-on: macos-12 steps: @@ -51,7 +55,7 @@ jobs: steps: - uses: bytedeco/javacpp-presets/.github/actions/deploy-windows@actions redeploy: - needs: [linux-x86_64, macosx-x86_64, windows-x86_64] + needs: [linux-x86_64, macosx-arm64, macosx-x86_64, windows-x86_64] # needs: [linux-armhf, linux-arm64, linux-ppc64le, linux-x86, linux-x86_64, macosx-x86_64, windows-x86, windows-x86_64] runs-on: ubuntu-20.04 steps: diff --git a/CHANGELOG.md b/CHANGELOG.md index 63639a30f5b..e9d4eeba6a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ - * Introduce `macosx-arm64` builds for CPython ([pull #1511](https://github.com/bytedeco/javacpp-presets/pull/1511)), NumPy ([pull #1515](https://github.com/bytedeco/javacpp-presets/pull/1515)) + * Introduce `macosx-arm64` builds for CPython ([pull #1511](https://github.com/bytedeco/javacpp-presets/pull/1511)), NumPy ([pull #1515](https://github.com/bytedeco/javacpp-presets/pull/1515)), SciPy ([pull #1516](https://github.com/bytedeco/javacpp-presets/pull/1516)) * Update and fix the sample code of the presets for LLVM ([pull #1501](https://github.com/bytedeco/javacpp-presets/pull/1501)) * Fix Vulkan GPU acceleration for FFmpeg ([pull #1497](https://github.com/bytedeco/javacpp-presets/pull/1497)) * Build FFmpeg with zimg to enable zscale filter ([pull #1481](https://github.com/bytedeco/javacpp-presets/pull/1481)) diff --git a/pom.xml b/pom.xml index b4275c0d37e..1a30b3b26b4 100644 --- a/pom.xml +++ b/pom.xml @@ -1463,6 +1463,7 @@ openblas cpython numpy + scipy llvm libffi libpostal diff --git a/scipy/cppbuild.sh b/scipy/cppbuild.sh index 8757b6ef0ea..fc559df6b5e 100755 --- a/scipy/cppbuild.sh +++ b/scipy/cppbuild.sh @@ -169,7 +169,18 @@ case $PLATFORM in ATLAS=None CC="gcc -m64 -D__STDC_NO_THREADS__" FFLAGS="-m64 -fPIC" "$PYTHON_BIN_PATH" -m pip install . --prefix $INSTALL_PATH --config-settings=builddir=build strip $(find ../ -iname *.so) ;; - macosx-*) + macosx-arm64) + export F77=$(compgen -cX '!gfortran*') + export F90="$F77" + export LDFLAGS="-L/usr/lib/" + ATLAS=None FC="$F77" "$PYTHON_BIN_PATH" -m pip install . --prefix $INSTALL_PATH --config-settings=builddir=build + # need to add RPATH so it can find MKL in cache + for f in $(find ../ -iname *.so); do + install_name_tool -add_rpath @loader_path/../../../ -add_rpath @loader_path/../../../../ $f || true; + codesign --force -s - $f + done + ;; + macosx-x86_64) export F77="$(ls -1 /usr/local/bin/gfortran-* | head -n 1)" export F90="$F77" export LDFLAGS="-L/usr/lib/" diff --git a/scipy/platform/pom.xml b/scipy/platform/pom.xml index 68a5cd2ccee..1ec945be987 100644 --- a/scipy/platform/pom.xml +++ b/scipy/platform/pom.xml @@ -60,6 +60,12 @@ ${project.version} ${javacpp.platform.linux-x86_64} + + ${project.groupId} + ${javacpp.moduleId} + ${project.version} + ${javacpp.platform.macosx-arm64} + ${project.groupId} ${javacpp.moduleId} @@ -90,7 +96,7 @@ - ${javacpp.moduleId}.jar ${javacpp.moduleId}-linux-armhf.jar ${javacpp.moduleId}-linux-arm64.jar ${javacpp.moduleId}-linux-ppc64le.jar ${javacpp.moduleId}-linux-x86.jar ${javacpp.moduleId}-linux-x86_64.jar ${javacpp.moduleId}-macosx-x86_64.jar ${javacpp.moduleId}-windows-x86.jar ${javacpp.moduleId}-windows-x86_64.jar + ${javacpp.moduleId}.jar ${javacpp.moduleId}-linux-armhf.jar ${javacpp.moduleId}-linux-arm64.jar ${javacpp.moduleId}-linux-ppc64le.jar ${javacpp.moduleId}-linux-x86.jar ${javacpp.moduleId}-linux-x86_64.jar ${javacpp.moduleId}-macosx-arm64.jar ${javacpp.moduleId}-macosx-x86_64.jar ${javacpp.moduleId}-windows-x86.jar ${javacpp.moduleId}-windows-x86_64.jar @@ -140,6 +146,7 @@ // requires static org.bytedeco.${javacpp.moduleId}.linux.ppc64le; // requires static org.bytedeco.${javacpp.moduleId}.linux.x86; requires static org.bytedeco.${javacpp.moduleId}.linux.x86_64; + requires static org.bytedeco.${javacpp.moduleId}.macosx.arm64; requires static org.bytedeco.${javacpp.moduleId}.macosx.x86_64; // requires static org.bytedeco.${javacpp.moduleId}.windows.x86; requires static org.bytedeco.${javacpp.moduleId}.windows.x86_64;