diff --git a/.github/workflows/conda-package-cf.yml b/.github/workflows/conda-package-cf.yml index 524136f..16e645f 100644 --- a/.github/workflows/conda-package-cf.yml +++ b/.github/workflows/conda-package-cf.yml @@ -88,7 +88,7 @@ jobs: strategy: matrix: - python_ver: ["3.10", "3.11", "3.12", "3.13", "3.14"] + python: ["3.10", "3.11", "3.12", "3.13", "3.14"] numpy: ['numpy">=2"'] experimental: [false] runner: [ubuntu-latest] @@ -100,7 +100,7 @@ jobs: - name: Download artifact uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: - name: ${{ env.PACKAGE_NAME }} ${{ runner.os }} Python ${{ matrix.python_ver }} + name: ${{ env.PACKAGE_NAME }} ${{ runner.os }} Python ${{ matrix.python }} - name: Add conda to system path run: echo "$CONDA"/bin >> "$GITHUB_PATH" @@ -119,7 +119,7 @@ jobs: - name: Collect dependencies run: | CHANNELS=(-c "$GITHUB_WORKSPACE"/channel ${{ env.CHANNELS }}) - conda create -n ${{ env.TEST_ENV_NAME }} "$PACKAGE_NAME" python=${{ matrix.python_ver }} ${{ matrix.numpy }} "${CHANNELS[@]}" --only-deps --dry-run > lockfile + conda create -n ${{ env.TEST_ENV_NAME }} "$PACKAGE_NAME" python=${{ matrix.python }} ${{ matrix.numpy }} "${CHANNELS[@]}" --only-deps --dry-run > lockfile - name: Display lockfile run: cat lockfile @@ -135,15 +135,15 @@ jobs: with: path: ~/.conda/pkgs key: - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_ver }}-${{hashFiles('lockfile') }} + ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python }}-${{hashFiles('lockfile') }} restore-keys: | - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_ver }}- + ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python }}- ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}- - name: Install mkl_fft run: | CHANNELS=(-c "$GITHUB_WORKSPACE"/channel ${{ env.CHANNELS }}) - conda create -n ${{ env.TEST_ENV_NAME }} python=${{ matrix.python_ver }} ${{ matrix.numpy }} "$PACKAGE_NAME" pytest scipy "${CHANNELS[@]}" + conda create -n ${{ env.TEST_ENV_NAME }} python=${{ matrix.python }} ${{ matrix.numpy }} "$PACKAGE_NAME" pytest scipy "${CHANNELS[@]}" # Test installed packages conda list -n ${{ env.TEST_ENV_NAME }} @@ -182,11 +182,13 @@ jobs: - uses: conda-incubator/setup-miniconda@fc2d68f6413eb2d87b895e92f8584b5b94a10167 # v3.3.0 with: + miniforge-variant: Miniforge3 miniforge-version: latest - activate-environment: build - python-version: ${{ matrix.python }} + auto-activate: true + activate-environment: base channels: conda-forge - conda-remove-defaults: 'true' + conda-remove-defaults: true + python-version: ${{ matrix.python }} - name: Install conda-build run: conda install -n base conda-build @@ -203,9 +205,6 @@ jobs: ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python }}- ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}- - - name: Setup MSVC - uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0 - - name: Build conda package with NumPy 2.x run: | conda activate @@ -231,7 +230,7 @@ jobs: strategy: matrix: - python_ver: ["3.10", "3.11", "3.12", "3.13", "3.14"] + python: ["3.10", "3.11", "3.12", "3.13", "3.14"] numpy: ['numpy">=2"'] experimental: [false] runner: [windows-latest] @@ -244,15 +243,15 @@ jobs: - name: Download artifact uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: - name: ${{ env.PACKAGE_NAME }} ${{ runner.os }} Python ${{ matrix.python_ver }} + name: ${{ env.PACKAGE_NAME }} ${{ runner.os }} Python ${{ matrix.python }} - uses: conda-incubator/setup-miniconda@fc2d68f6413eb2d87b895e92f8584b5b94a10167 # v3.3.0 with: miniforge-version: latest - activate-environment: ${{ env.TEST_ENV_NAME }} - python-version: ${{ matrix.python_ver }} channels: conda-forge - conda-remove-defaults: 'true' + conda-remove-defaults: true + activate-environment: ${{ env.TEST_ENV_NAME }} + python-version: ${{ matrix.python }} - name: Create conda channel with the artifact bit shell: cmd /C CALL {0} @@ -291,7 +290,7 @@ jobs: FOR /F "tokens=* USEBACKQ" %%F IN (`python -c "%SCRIPT%"`) DO ( SET PACKAGE_VERSION=%%F ) - conda install -n ${{ env.TEST_ENV_NAME }} ${{ env.PACKAGE_NAME }}=%PACKAGE_VERSION% python=${{ matrix.python_ver }} ${{ matrix.numpy }} -c ${{ env.workdir }}/channel ${{ env.CHANNELS }} --only-deps --dry-run > lockfile + conda install -n ${{ env.TEST_ENV_NAME }} ${{ env.PACKAGE_NAME }}=%PACKAGE_VERSION% python=${{ matrix.python }} ${{ matrix.numpy }} -c ${{ env.workdir }}/channel ${{ env.CHANNELS }} --only-deps --dry-run > lockfile - name: Display lockfile content shell: pwsh @@ -304,9 +303,9 @@ jobs: with: path: /home/runner/conda_pkgs_dir key: - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_ver }}-${{hashFiles('lockfile') }} + ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python }}-${{hashFiles('lockfile') }} restore-keys: | - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_ver }}- + ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python }}- ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}- - name: Install mkl_fft @@ -321,7 +320,7 @@ jobs: SET PACKAGE_VERSION=%%F ) SET "TEST_DEPENDENCIES=pytest scipy" - conda install -n ${{ env.TEST_ENV_NAME }} ${{ env.PACKAGE_NAME }}=%PACKAGE_VERSION% %TEST_DEPENDENCIES% python=${{ matrix.python_ver }} ${{ matrix.numpy }} -c ${{ env.workdir }}/channel ${{ env.CHANNELS }} + conda install -n ${{ env.TEST_ENV_NAME }} ${{ env.PACKAGE_NAME }}=%PACKAGE_VERSION% %TEST_DEPENDENCIES% python=${{ matrix.python }} ${{ matrix.numpy }} -c ${{ env.workdir }}/channel ${{ env.CHANNELS }} - name: Report content of test environment shell: cmd /C CALL {0} diff --git a/.github/workflows/conda-package.yml b/.github/workflows/conda-package.yml index 8f64dda..e1fd932 100644 --- a/.github/workflows/conda-package.yml +++ b/.github/workflows/conda-package.yml @@ -171,11 +171,13 @@ jobs: - uses: conda-incubator/setup-miniconda@fc2d68f6413eb2d87b895e92f8584b5b94a10167 # v3.3.0 with: + miniforge-variant: Miniforge3 miniforge-version: latest - activate-environment: build - python-version: ${{ matrix.python }} + auto-activate: true + activate-environment: base channels: conda-forge - conda-remove-defaults: 'true' + conda-remove-defaults: true + python-version: ${{ matrix.python }} - name: Install conda-build run: | @@ -194,9 +196,6 @@ jobs: ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python }}- ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}- - - name: Setup MSVC - uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0 - - name: Build conda package run: | conda activate @@ -239,10 +238,10 @@ jobs: - uses: conda-incubator/setup-miniconda@fc2d68f6413eb2d87b895e92f8584b5b94a10167 # v3.3.0 with: miniforge-version: latest + channels: conda-forge + conda-remove-defaults: true activate-environment: ${{ env.TEST_ENV_NAME }} python-version: ${{ matrix.python }} - channels: conda-forge - conda-remove-defaults: 'true' - name: Create conda channel with the artifact bit shell: cmd /C CALL {0} diff --git a/conda-recipe-cf/bld.bat b/conda-recipe-cf/bld.bat index becc8af..3a1cbb8 100644 --- a/conda-recipe-cf/bld.bat +++ b/conda-recipe-cf/bld.bat @@ -1,3 +1,13 @@ set MKLROOT=%PREFIX% -%PYTHON% -m pip install --no-build-isolation --no-deps . -if errorlevel 1 exit 1 + +rem Build wheel package +if NOT "%WHEELS_OUTPUT_FOLDER%"=="" ( + %PYTHON% -m pip wheel --no-build-isolation --no-deps . + if errorlevel 1 exit 1 + copy mkl_fft*.whl %WHEELS_OUTPUT_FOLDER% + if errorlevel 1 exit 1 +) ELSE ( + rem Build conda package + %PYTHON% -m pip install --no-build-isolation --no-deps . + if errorlevel 1 exit 1 +) diff --git a/conda-recipe-cf/build.sh b/conda-recipe-cf/build.sh index d2a9c69..f55643d 100644 --- a/conda-recipe-cf/build.sh +++ b/conda-recipe-cf/build.sh @@ -2,4 +2,17 @@ export MKLROOT=$PREFIX export CFLAGS="-I$PREFIX/include $CFLAGS" -$PYTHON -m pip install --no-build-isolation --no-deps . +export LDFLAGS="-Wl,-rpath,\$ORIGIN/../.. -Wl,-rpath,\$ORIGIN/../../.. -L${PREFIX}/lib ${LDFLAGS}" + +read -r GLIBC_MAJOR GLIBC_MINOR <<<"$(conda list '^sysroot_linux-64$' \ + | tail -n 1 | awk '{print $2}' | grep -oP '\d+' | head -n 2 | tr '\n' ' ')" + +# Build wheel package +if [ -n "${WHEELS_OUTPUT_FOLDER}" ]; then + $PYTHON -m pip wheel --no-build-isolation --no-deps . + ${PYTHON} -m wheel tags --remove --platform-tag "manylinux_${GLIBC_MAJOR}_${GLIBC_MINOR}_x86_64" mkl_fft*.whl + cp mkl_fft*.whl "${WHEELS_OUTPUT_FOLDER}" +else + # Build conda package + $PYTHON -m pip install --no-build-isolation --no-deps . +fi diff --git a/conda-recipe-cf/conda_build_config.yaml b/conda-recipe-cf/conda_build_config.yaml new file mode 100644 index 0000000..822fd77 --- /dev/null +++ b/conda-recipe-cf/conda_build_config.yaml @@ -0,0 +1,16 @@ +c_compiler: # [linux] + - gcc # [linux] +cxx_compiler: # [linux] + - gxx # [linux] +cxx_compiler_version: # [linux] + - '14' # [linux] +c_stdlib: # [linux] + - sysroot # [linux] +c_stdlib_version: # [linux] + - '2.28' # [linux] +c_stdlib: # [win] + - vs # [win] +cxx_compiler: # [win] + - vs2022 # [win] +c_compiler: # [win] + - vs2022 # [win] diff --git a/conda-recipe-cf/meta.yaml b/conda-recipe-cf/meta.yaml index 5943880..9e2602c 100644 --- a/conda-recipe-cf/meta.yaml +++ b/conda-recipe-cf/meta.yaml @@ -1,29 +1,33 @@ -{% set version = "2.2.0dev1" %} -{% set buildnumber = 0 %} - package: name: mkl_fft - version: {{ version }} + version: {{ GIT_DESCRIBE_TAG }} source: path: ../ build: - number: {{ buildnumber }} + number: {{ GIT_DESCRIBE_NUMBER }} + script_env: + - WHEELS_OUTPUT_FOLDER ignore_run_exports: - blas requirements: build: - {{ compiler('c') }} + - {{ stdlib('c') }} host: - python + - python-gil # [py>=314] + - pip - setuptools >=77 - mkl-devel - cython - numpy + - wheel >=0.41.3 run: - python + - python-gil # [py>=314] - mkl-service - numpy @@ -36,11 +40,18 @@ test: imports: - mkl_fft - mkl_fft.interfaces - - mkl_fft.interfaces.numpy_fft - - mkl_fft.interfaces.scipy_fft about: home: http://github.com/IntelPython/mkl_fft license: BSD-3-Clause license_file: LICENSE.txt - summary: NumPy-based implementation of Fast Fourier Transform using IntelĀ® oneAPI Math Kernel Library (OneMKL) + summary: NumPy-based implementation of Fast Fourier Transform using IntelĀ® oneAPI Math Kernel Library (oneMKL) + description: | + LEGAL NOTICE: Use of this software package is subject to the + software license agreement (as set forth above, in the license section of + the installed Conda package and/or the README file) and all notices, + disclaimers or license terms for third party or open source software + included in or with the software. +

+ EULA: BSD-3-Clause +

diff --git a/conda-recipe/conda_build_config.yaml b/conda-recipe/conda_build_config.yaml index d6b54bb..822fd77 100644 --- a/conda-recipe/conda_build_config.yaml +++ b/conda-recipe/conda_build_config.yaml @@ -11,6 +11,6 @@ c_stdlib_version: # [linux] c_stdlib: # [win] - vs # [win] cxx_compiler: # [win] - - vs2017 # [win] + - vs2022 # [win] c_compiler: # [win] - - vs2017 # [win] + - vs2022 # [win]