diff --git a/.azure-pipelines/azure-pipelines-linux.yml b/.azure-pipelines/azure-pipelines-linux.yml index a2b6fd0..19c5dda 100755 --- a/.azure-pipelines/azure-pipelines-linux.yml +++ b/.azure-pipelines/azure-pipelines-linux.yml @@ -19,27 +19,23 @@ jobs: linux_aarch64_mpimpich: CONFIG: linux_aarch64_mpimpich UPLOAD_PACKAGES: 'True' - DOCKER_IMAGE: quay.io/condaforge/linux-anvil-aarch64 + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-cos7-x86_64 linux_aarch64_mpiopenmpi: CONFIG: linux_aarch64_mpiopenmpi UPLOAD_PACKAGES: 'True' - DOCKER_IMAGE: quay.io/condaforge/linux-anvil-aarch64 + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-cos7-x86_64 linux_ppc64le_mpimpich: CONFIG: linux_ppc64le_mpimpich UPLOAD_PACKAGES: 'True' - DOCKER_IMAGE: quay.io/condaforge/linux-anvil-ppc64le + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-cos7-x86_64 linux_ppc64le_mpiopenmpi: CONFIG: linux_ppc64le_mpiopenmpi UPLOAD_PACKAGES: 'True' - DOCKER_IMAGE: quay.io/condaforge/linux-anvil-ppc64le + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-cos7-x86_64 timeoutInMinutes: 360 + variables: {} steps: - - script: | - rm -rf /opt/ghc - df -h - displayName: Manage disk space - # configure qemu binfmt-misc running. This allows us to run docker containers # embedded qemu-static - script: | @@ -50,6 +46,9 @@ jobs: - script: | export CI=azure + export flow_run_id=azure_$(Build.BuildNumber).$(System.JobAttempt) + export remote_url=$(Build.Repository.Uri) + export sha=$(Build.SourceVersion) export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME}) if [[ "${BUILD_REASON:-}" == "PullRequest" ]]; then diff --git a/.azure-pipelines/azure-pipelines-osx.yml b/.azure-pipelines/azure-pipelines-osx.yml index 38b6015..d6afc0b 100755 --- a/.azure-pipelines/azure-pipelines-osx.yml +++ b/.azure-pipelines/azure-pipelines-osx.yml @@ -5,7 +5,7 @@ jobs: - job: osx pool: - vmImage: macOS-10.15 + vmImage: macOS-12 strategy: matrix: osx_64_mpimpich: @@ -21,11 +21,15 @@ jobs: CONFIG: osx_arm64_mpiopenmpi UPLOAD_PACKAGES: 'True' timeoutInMinutes: 360 + variables: {} steps: # TODO: Fast finish on azure pipelines? - script: | export CI=azure + export flow_run_id=azure_$(Build.BuildNumber).$(System.JobAttempt) + export remote_url=$(Build.Repository.Uri) + export sha=$(Build.SourceVersion) export OSX_FORCE_SDK_DOWNLOAD="1" export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME}) diff --git a/.ci_support/linux_64_mpimpich.yaml b/.ci_support/linux_64_mpimpich.yaml index 176d57b..835694e 100644 --- a/.ci_support/linux_64_mpimpich.yaml +++ b/.ci_support/linux_64_mpimpich.yaml @@ -1,7 +1,11 @@ c_compiler: - gcc c_compiler_version: -- '10' +- '12' +c_stdlib: +- sysroot +c_stdlib_version: +- '2.12' cdt_name: - cos6 channel_sources: @@ -13,15 +17,21 @@ docker_image: fortran_compiler: - gfortran fortran_compiler_version: -- '10' +- '12' libblas: -- 3.8 *netlib +- 3.9 *netlib liblapack: -- 3.8 *netlib +- 3.9 *netlib mpi: - mpich +mpich: +- '4' +openmpi: +- '5' target_platform: - linux-64 zip_keys: - - c_compiler_version - fortran_compiler_version +- - c_stdlib_version + - cdt_name diff --git a/.ci_support/linux_64_mpiopenmpi.yaml b/.ci_support/linux_64_mpiopenmpi.yaml index f052b58..7925b28 100644 --- a/.ci_support/linux_64_mpiopenmpi.yaml +++ b/.ci_support/linux_64_mpiopenmpi.yaml @@ -1,7 +1,11 @@ c_compiler: - gcc c_compiler_version: -- '10' +- '12' +c_stdlib: +- sysroot +c_stdlib_version: +- '2.12' cdt_name: - cos6 channel_sources: @@ -13,15 +17,21 @@ docker_image: fortran_compiler: - gfortran fortran_compiler_version: -- '10' +- '12' libblas: -- 3.8 *netlib +- 3.9 *netlib liblapack: -- 3.8 *netlib +- 3.9 *netlib mpi: - openmpi +mpich: +- '4' +openmpi: +- '5' target_platform: - linux-64 zip_keys: - - c_compiler_version - fortran_compiler_version +- - c_stdlib_version + - cdt_name diff --git a/.ci_support/linux_aarch64_mpimpich.yaml b/.ci_support/linux_aarch64_mpimpich.yaml index 5f97bfe..43dbac9 100644 --- a/.ci_support/linux_aarch64_mpimpich.yaml +++ b/.ci_support/linux_aarch64_mpimpich.yaml @@ -3,7 +3,11 @@ BUILD: c_compiler: - gcc c_compiler_version: -- '10' +- '12' +c_stdlib: +- sysroot +c_stdlib_version: +- '2.17' cdt_arch: - aarch64 cdt_name: @@ -13,19 +17,25 @@ channel_sources: channel_targets: - conda-forge main docker_image: -- quay.io/condaforge/linux-anvil-aarch64 +- quay.io/condaforge/linux-anvil-cos7-x86_64 fortran_compiler: - gfortran fortran_compiler_version: -- '10' +- '12' libblas: -- 3.8 *netlib +- 3.9 *netlib liblapack: -- 3.8 *netlib +- 3.9 *netlib mpi: - mpich +mpich: +- '4' +openmpi: +- '5' target_platform: - linux-aarch64 zip_keys: - - c_compiler_version - fortran_compiler_version +- - c_stdlib_version + - cdt_name diff --git a/.ci_support/linux_aarch64_mpiopenmpi.yaml b/.ci_support/linux_aarch64_mpiopenmpi.yaml index 923e77b..f920518 100644 --- a/.ci_support/linux_aarch64_mpiopenmpi.yaml +++ b/.ci_support/linux_aarch64_mpiopenmpi.yaml @@ -3,7 +3,11 @@ BUILD: c_compiler: - gcc c_compiler_version: -- '10' +- '12' +c_stdlib: +- sysroot +c_stdlib_version: +- '2.17' cdt_arch: - aarch64 cdt_name: @@ -13,19 +17,25 @@ channel_sources: channel_targets: - conda-forge main docker_image: -- quay.io/condaforge/linux-anvil-aarch64 +- quay.io/condaforge/linux-anvil-cos7-x86_64 fortran_compiler: - gfortran fortran_compiler_version: -- '10' +- '12' libblas: -- 3.8 *netlib +- 3.9 *netlib liblapack: -- 3.8 *netlib +- 3.9 *netlib mpi: - openmpi +mpich: +- '4' +openmpi: +- '5' target_platform: - linux-aarch64 zip_keys: - - c_compiler_version - fortran_compiler_version +- - c_stdlib_version + - cdt_name diff --git a/.ci_support/linux_ppc64le_mpimpich.yaml b/.ci_support/linux_ppc64le_mpimpich.yaml index 532f8b3..437e8f1 100644 --- a/.ci_support/linux_ppc64le_mpimpich.yaml +++ b/.ci_support/linux_ppc64le_mpimpich.yaml @@ -1,7 +1,11 @@ c_compiler: - gcc c_compiler_version: -- '10' +- '12' +c_stdlib: +- sysroot +c_stdlib_version: +- '2.17' cdt_name: - cos7 channel_sources: @@ -9,19 +13,25 @@ channel_sources: channel_targets: - conda-forge main docker_image: -- quay.io/condaforge/linux-anvil-ppc64le +- quay.io/condaforge/linux-anvil-cos7-x86_64 fortran_compiler: - gfortran fortran_compiler_version: -- '10' +- '12' libblas: -- 3.8 *netlib +- 3.9 *netlib liblapack: -- 3.8 *netlib +- 3.9 *netlib mpi: - mpich +mpich: +- '4' +openmpi: +- '5' target_platform: - linux-ppc64le zip_keys: - - c_compiler_version - fortran_compiler_version +- - c_stdlib_version + - cdt_name diff --git a/.ci_support/linux_ppc64le_mpiopenmpi.yaml b/.ci_support/linux_ppc64le_mpiopenmpi.yaml index 51d1508..d0dd9f3 100644 --- a/.ci_support/linux_ppc64le_mpiopenmpi.yaml +++ b/.ci_support/linux_ppc64le_mpiopenmpi.yaml @@ -1,7 +1,11 @@ c_compiler: - gcc c_compiler_version: -- '10' +- '12' +c_stdlib: +- sysroot +c_stdlib_version: +- '2.17' cdt_name: - cos7 channel_sources: @@ -9,19 +13,25 @@ channel_sources: channel_targets: - conda-forge main docker_image: -- quay.io/condaforge/linux-anvil-ppc64le +- quay.io/condaforge/linux-anvil-cos7-x86_64 fortran_compiler: - gfortran fortran_compiler_version: -- '10' +- '12' libblas: -- 3.8 *netlib +- 3.9 *netlib liblapack: -- 3.8 *netlib +- 3.9 *netlib mpi: - openmpi +mpich: +- '4' +openmpi: +- '5' target_platform: - linux-ppc64le zip_keys: - - c_compiler_version - fortran_compiler_version +- - c_stdlib_version + - cdt_name diff --git a/.ci_support/migrations/openmpi5.yaml b/.ci_support/migrations/openmpi5.yaml new file mode 100644 index 0000000..74cdfc6 --- /dev/null +++ b/.ci_support/migrations/openmpi5.yaml @@ -0,0 +1,8 @@ +__migrator: + build_number: 1 + commit_message: Rebuild for openmpi 5 + kind: version + migration_number: 1 +migrator_ts: 1703196161.1453235 +openmpi: +- '5' diff --git a/.ci_support/osx_64_mpimpich.yaml b/.ci_support/osx_64_mpimpich.yaml index a0a36fc..98ea2d2 100644 --- a/.ci_support/osx_64_mpimpich.yaml +++ b/.ci_support/osx_64_mpimpich.yaml @@ -1,9 +1,15 @@ MACOSX_DEPLOYMENT_TARGET: -- '10.9' +- '10.13' +MACOSX_SDK_VERSION: +- '10.13' c_compiler: - clang c_compiler_version: -- '12' +- '16' +c_stdlib: +- macosx_deployment_target +c_stdlib_version: +- '10.13' channel_sources: - conda-forge channel_targets: @@ -11,15 +17,19 @@ channel_targets: fortran_compiler: - gfortran fortran_compiler_version: -- '9' +- '12' libblas: -- 3.8 *netlib +- 3.9 *netlib liblapack: -- 3.8 *netlib +- 3.9 *netlib macos_machine: - x86_64-apple-darwin13.4.0 mpi: - mpich +mpich: +- '4' +openmpi: +- '5' target_platform: - osx-64 zip_keys: diff --git a/.ci_support/osx_64_mpiopenmpi.yaml b/.ci_support/osx_64_mpiopenmpi.yaml index 3e70df9..f806ef3 100644 --- a/.ci_support/osx_64_mpiopenmpi.yaml +++ b/.ci_support/osx_64_mpiopenmpi.yaml @@ -1,9 +1,15 @@ MACOSX_DEPLOYMENT_TARGET: -- '10.9' +- '10.13' +MACOSX_SDK_VERSION: +- '10.13' c_compiler: - clang c_compiler_version: -- '12' +- '16' +c_stdlib: +- macosx_deployment_target +c_stdlib_version: +- '10.13' channel_sources: - conda-forge channel_targets: @@ -11,15 +17,19 @@ channel_targets: fortran_compiler: - gfortran fortran_compiler_version: -- '9' +- '12' libblas: -- 3.8 *netlib +- 3.9 *netlib liblapack: -- 3.8 *netlib +- 3.9 *netlib macos_machine: - x86_64-apple-darwin13.4.0 mpi: - openmpi +mpich: +- '4' +openmpi: +- '5' target_platform: - osx-64 zip_keys: diff --git a/.ci_support/osx_arm64_mpimpich.yaml b/.ci_support/osx_arm64_mpimpich.yaml index 2810cff..341a0e3 100644 --- a/.ci_support/osx_arm64_mpimpich.yaml +++ b/.ci_support/osx_arm64_mpimpich.yaml @@ -1,9 +1,15 @@ MACOSX_DEPLOYMENT_TARGET: - '11.0' +MACOSX_SDK_VERSION: +- '11.0' c_compiler: - clang c_compiler_version: -- '12' +- '16' +c_stdlib: +- macosx_deployment_target +c_stdlib_version: +- '11.0' channel_sources: - conda-forge channel_targets: @@ -11,7 +17,7 @@ channel_targets: fortran_compiler: - gfortran fortran_compiler_version: -- '11' +- '12' libblas: - 3.9 *netlib liblapack: @@ -20,6 +26,10 @@ macos_machine: - arm64-apple-darwin20.0.0 mpi: - mpich +mpich: +- '4' +openmpi: +- '5' target_platform: - osx-arm64 zip_keys: diff --git a/.ci_support/osx_arm64_mpiopenmpi.yaml b/.ci_support/osx_arm64_mpiopenmpi.yaml index 29b9401..eb0fc23 100644 --- a/.ci_support/osx_arm64_mpiopenmpi.yaml +++ b/.ci_support/osx_arm64_mpiopenmpi.yaml @@ -1,9 +1,15 @@ MACOSX_DEPLOYMENT_TARGET: - '11.0' +MACOSX_SDK_VERSION: +- '11.0' c_compiler: - clang c_compiler_version: -- '12' +- '16' +c_stdlib: +- macosx_deployment_target +c_stdlib_version: +- '11.0' channel_sources: - conda-forge channel_targets: @@ -11,7 +17,7 @@ channel_targets: fortran_compiler: - gfortran fortran_compiler_version: -- '11' +- '12' libblas: - 3.9 *netlib liblapack: @@ -20,6 +26,10 @@ macos_machine: - arm64-apple-darwin20.0.0 mpi: - openmpi +mpich: +- '4' +openmpi: +- '5' target_platform: - osx-arm64 zip_keys: diff --git a/.circleci/config.yml b/.circleci/config.yml index 6ad461b..8b4ef2f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,13 +1,14 @@ # This file was generated automatically from conda-smithy. To update this configuration, # update the conda-forge.yml and/or the recipe/meta.yaml. -# -*- mode: yaml -*- +# -*- mode: jinja-yaml -*- version: 2 jobs: build: working_directory: ~/test - machine: true + machine: + image: ubuntu-2004:current steps: - run: # The Circle-CI build should not be active, but if this is not true for some reason, do a fast finish. diff --git a/.gitattributes b/.gitattributes index 7f32763..18f114a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -20,8 +20,8 @@ bld.bat text eol=crlf .travis.yml linguist-generated=true .scripts/* linguist-generated=true .woodpecker.yml linguist-generated=true -LICENSE.txt linguist-generated=true -README.md linguist-generated=true +/LICENSE.txt linguist-generated=true +/README.md linguist-generated=true azure-pipelines.yml linguist-generated=true build-locally.py linguist-generated=true shippable.yml linguist-generated=true diff --git a/.gitignore b/.gitignore index c89ecb7..179afe5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,24 @@ -*.pyc +# User content belongs under recipe/. +# Feedstock configuration goes in `conda-forge.yml` +# Everything else is managed by the conda-smithy rerender process. +# Please do not modify + +# Ignore all files and folders in root +* +!/conda-forge.yml + +# Don't ignore any files/folders if the parent folder is 'un-ignored' +# This also avoids warnings when adding an already-checked file with an ignored parent. +!/**/ +# Don't ignore any files/folders recursively in the following folders +!/recipe/** +!/.ci_support/** -build_artifacts +# Since we ignore files/folders recursively, any folders inside +# build_artifacts gets ignored which trips some build systems. +# To avoid that we 'un-ignore' all files/folders recursively +# and only ignore the root build_artifacts folder. +!/build_artifacts/** +/build_artifacts + +*.pyc diff --git a/.scripts/build_steps.sh b/.scripts/build_steps.sh index c6b23e8..899ba03 100755 --- a/.scripts/build_steps.sh +++ b/.scripts/build_steps.sh @@ -24,15 +24,19 @@ export CONFIG_FILE="${CI_SUPPORT}/${CONFIG}.yaml" cat >~/.condarc <=24.1" +mamba update --update-specs --yes --quiet --channel conda-forge --strict-channel-priority \ + pip mamba conda-build conda-forge-ci-setup=4 "conda-build>=24.1" # set up the condarc setup_conda_rc "${FEEDSTOCK_ROOT}" "${RECIPE_ROOT}" "${CONFIG_FILE}" @@ -49,6 +53,10 @@ fi ( endgroup "Configuring conda" ) 2> /dev/null +if [[ -f "${FEEDSTOCK_ROOT}/LICENSE.txt" ]]; then + cp "${FEEDSTOCK_ROOT}/LICENSE.txt" "${RECIPE_ROOT}/recipe-scripts-license.txt" +fi + if [[ "${BUILD_WITH_CONDA_DEBUG:-0}" == 1 ]]; then if [[ "x${BUILD_OUTPUT_ID:-}" != "x" ]]; then EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --output-id ${BUILD_OUTPUT_ID}" @@ -60,9 +68,10 @@ if [[ "${BUILD_WITH_CONDA_DEBUG:-0}" == 1 ]]; then # Drop into an interactive shell /bin/bash else - conda mambabuild "${RECIPE_ROOT}" -m "${CI_SUPPORT}/${CONFIG}.yaml" \ + conda-build "${RECIPE_ROOT}" -m "${CI_SUPPORT}/${CONFIG}.yaml" \ --suppress-variables ${EXTRA_CB_OPTIONS:-} \ - --clobber-file "${CI_SUPPORT}/clobber_${CONFIG}.yaml" + --clobber-file "${CI_SUPPORT}/clobber_${CONFIG}.yaml" \ + --extra-meta flow_run_id="${flow_run_id:-}" remote_url="${remote_url:-}" sha="${sha:-}" ( startgroup "Validating outputs" ) 2> /dev/null validate_recipe_outputs "${FEEDSTOCK_NAME}" diff --git a/.scripts/logging_utils.sh b/.scripts/logging_utils.sh index 57bc95c..aff009f 100644 --- a/.scripts/logging_utils.sh +++ b/.scripts/logging_utils.sh @@ -12,7 +12,7 @@ function startgroup { echo "##[group]$1";; travis ) echo "$1" - echo -en 'travis_fold:start:'"${1// /}"'\\r';; + echo -en 'travis_fold:start:'"${1// /}"'\r';; github_actions ) echo "::group::$1";; * ) @@ -28,7 +28,7 @@ function endgroup { azure ) echo "##[endgroup]";; travis ) - echo -en 'travis_fold:end:'"${1// /}"'\\r';; + echo -en 'travis_fold:end:'"${1// /}"'\r';; github_actions ) echo "::endgroup::";; esac diff --git a/.scripts/run_docker_build.sh b/.scripts/run_docker_build.sh index 9236239..00f377a 100755 --- a/.scripts/run_docker_build.sh +++ b/.scripts/run_docker_build.sh @@ -21,6 +21,12 @@ if [ -z ${FEEDSTOCK_NAME} ]; then export FEEDSTOCK_NAME=$(basename ${FEEDSTOCK_ROOT}) fi +if [[ "${sha:-}" == "" ]]; then + pushd "${FEEDSTOCK_ROOT}" + sha=$(git rev-parse HEAD) + popd +fi + docker info # In order for the conda-build process in the container to write to the mounted @@ -91,6 +97,9 @@ docker run ${DOCKER_RUN_ARGS} \ -e CPU_COUNT \ -e BUILD_WITH_CONDA_DEBUG \ -e BUILD_OUTPUT_ID \ + -e flow_run_id \ + -e remote_url \ + -e sha \ -e BINSTAR_TOKEN \ -e FEEDSTOCK_TOKEN \ -e STAGING_BINSTAR_TOKEN \ diff --git a/.scripts/run_osx_build.sh b/.scripts/run_osx_build.sh index 3d85505..07dff21 100755 --- a/.scripts/run_osx_build.sh +++ b/.scripts/run_osx_build.sh @@ -22,12 +22,13 @@ bash $MINIFORGE_FILE -b -p ${MINIFORGE_HOME} source ${MINIFORGE_HOME}/etc/profile.d/conda.sh conda activate base +export CONDA_SOLVER="libmamba" +export CONDA_LIBMAMBA_SOLVER_NO_CHANNELS_FROM_INSTALLED=1 -echo -e "\n\nInstalling ['conda-forge-ci-setup=3'] and conda-build." -mamba install --update-specs --quiet --yes --channel conda-forge \ - conda-build pip boa conda-forge-ci-setup=3 -mamba update --update-specs --yes --quiet --channel conda-forge \ - conda-build pip boa conda-forge-ci-setup=3 +mamba install --update-specs --quiet --yes --channel conda-forge --strict-channel-priority \ + pip mamba conda-build conda-forge-ci-setup=4 "conda-build>=24.1" +mamba update --update-specs --yes --quiet --channel conda-forge --strict-channel-priority \ + pip mamba conda-build conda-forge-ci-setup=4 "conda-build>=24.1" @@ -46,6 +47,10 @@ else echo -e "\n\nNot mangling homebrew as we are not running in CI" fi +if [[ "${sha:-}" == "" ]]; then + sha=$(git rev-parse HEAD) +fi + echo -e "\n\nRunning the build setup script." source run_conda_forge_build_setup @@ -56,11 +61,10 @@ source run_conda_forge_build_setup echo -e "\n\nMaking the build clobber file" make_build_number ./ ./recipe ./.ci_support/${CONFIG}.yaml -if [[ "${HOST_PLATFORM}" != "${BUILD_PLATFORM}" ]]; then - EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --no-test" +if [[ -f LICENSE.txt ]]; then + cp LICENSE.txt "recipe/recipe-scripts-license.txt" fi - if [[ "${BUILD_WITH_CONDA_DEBUG:-0}" == 1 ]]; then if [[ "x${BUILD_OUTPUT_ID:-}" != "x" ]]; then EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --output-id ${BUILD_OUTPUT_ID}" @@ -72,9 +76,15 @@ if [[ "${BUILD_WITH_CONDA_DEBUG:-0}" == 1 ]]; then # Drop into an interactive shell /bin/bash else - conda mambabuild ./recipe -m ./.ci_support/${CONFIG}.yaml \ + + if [[ "${HOST_PLATFORM}" != "${BUILD_PLATFORM}" ]]; then + EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --no-test" + fi + + conda-build ./recipe -m ./.ci_support/${CONFIG}.yaml \ --suppress-variables ${EXTRA_CB_OPTIONS:-} \ - --clobber-file ./.ci_support/clobber_${CONFIG}.yaml + --clobber-file ./.ci_support/clobber_${CONFIG}.yaml \ + --extra-meta flow_run_id="$flow_run_id" remote_url="$remote_url" sha="$sha" ( startgroup "Validating outputs" ) 2> /dev/null validate_recipe_outputs "${FEEDSTOCK_NAME}" diff --git a/LICENSE.txt b/LICENSE.txt index 6ec1401..2ec51d7 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,13 +1,27 @@ -BSD 3-clause license +BSD-3-Clause license Copyright (c) 2015-2022, conda-forge contributors All rights reserved. -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. diff --git a/README.md b/README.md index d024824..92ce741 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ -About scalapack -=============== +About scalapack-feedstock +========================= + +Feedstock license: [BSD-3-Clause](https://github.com/conda-forge/scalapack-feedstock/blob/main/LICENSE.txt) Home: http://www.netlib.org/scalapack/ Package license: BSD-2-Clause -Feedstock license: [BSD-3-Clause](https://github.com/conda-forge/scalapack-feedstock/blob/master/LICENSE.txt) - Summary: ScaLAPACK is a library of high-performance linear algebra routines for parallel distributed memory machines ScaLAPACK is a library of high-performance linear algebra routines for parallel distributed @@ -25,8 +25,8 @@ Current build status
- - + + @@ -34,71 +34,71 @@ Current build status @@ -126,18 +126,43 @@ conda config --add channels conda-forge conda config --set channel_priority strict ``` -Once the `conda-forge` channel has been enabled, `scalapack` can be installed with: +Once the `conda-forge` channel has been enabled, `scalapack` can be installed with `conda`: ``` conda install scalapack ``` -It is possible to list all of the versions of `scalapack` available on your platform with: +or with `mamba`: + +``` +mamba install scalapack +``` + +It is possible to list all of the versions of `scalapack` available on your platform with `conda`: ``` conda search scalapack --channel conda-forge ``` +or with `mamba`: + +``` +mamba search scalapack --channel conda-forge +``` + +Alternatively, `mamba repoquery` may provide more information: + +``` +# Search all versions available on your platform: +mamba repoquery search scalapack --channel conda-forge + +# List packages depending on `scalapack`: +mamba repoquery whoneeds scalapack --channel conda-forge + +# List dependencies of `scalapack`: +mamba repoquery depends scalapack --channel conda-forge +``` + About conda-forge ================= @@ -153,10 +178,12 @@ for each of the installable packages. Such a repository is known as a *feedstock A feedstock is made up of a conda recipe (the instructions on what and how to build the package) and the necessary configurations for automatic building using freely available continuous integration services. Thanks to the awesome service provided by -[CircleCI](https://circleci.com/), [AppVeyor](https://www.appveyor.com/) -and [TravisCI](https://travis-ci.com/) it is possible to build and upload installable -packages to the [conda-forge](https://anaconda.org/conda-forge) -[Anaconda-Cloud](https://anaconda.org/) channel for Linux, Windows and OSX respectively. +[Azure](https://azure.microsoft.com/en-us/services/devops/), [GitHub](https://github.com/), +[CircleCI](https://circleci.com/), [AppVeyor](https://www.appveyor.com/), +[Drone](https://cloud.drone.io/welcome), and [TravisCI](https://travis-ci.com/) +it is possible to build and upload installable packages to the +[conda-forge](https://anaconda.org/conda-forge) [anaconda.org](https://anaconda.org/) +channel for Linux, Windows and OSX respectively. To manage the continuous integration and simplify feedstock maintenance [conda-smithy](https://github.com/conda-forge/conda-smithy) has been developed. diff --git a/build-locally.py b/build-locally.py index eec38a0..e0d408d 100755 --- a/build-locally.py +++ b/build-locally.py @@ -64,8 +64,9 @@ def verify_config(ns): elif ns.config.startswith("osx"): if "OSX_SDK_DIR" not in os.environ: raise RuntimeError( - "Need OSX_SDK_DIR env variable set. Run 'export OSX_SDK_DIR=SDKs' " - "to download the SDK automatically to 'SDKs/MacOSX.sdk'. " + "Need OSX_SDK_DIR env variable set. Run 'export OSX_SDK_DIR=$PWD/SDKs' " + "to download the SDK automatically to '$PWD/SDKs/MacOSX.sdk'. " + "Note: OSX_SDK_DIR must be set to an absolute path. " "Setting this variable implies agreement to the licensing terms of the SDK by Apple." ) @@ -86,12 +87,19 @@ def main(args=None): verify_config(ns) setup_environment(ns) - if ns.config.startswith("linux") or ( - ns.config.startswith("osx") and platform.system() == "Linux" - ): - run_docker_build(ns) - elif ns.config.startswith("osx"): - run_osx_build(ns) + try: + if ns.config.startswith("linux") or ( + ns.config.startswith("osx") and platform.system() == "Linux" + ): + run_docker_build(ns) + elif ns.config.startswith("osx"): + run_osx_build(ns) + finally: + recipe_license_file = os.path.join( + "recipe", "recipe-scripts-license.txt" + ) + if os.path.exists(recipe_license_file): + os.remove(recipe_license_file) if __name__ == "__main__": diff --git a/conda-forge.yml b/conda-forge.yml index 44b85e1..2c603b9 100644 --- a/conda-forge.yml +++ b/conda-forge.yml @@ -1,12 +1,14 @@ build_platform: + linux_aarch64: linux_64 + linux_ppc64le: linux_64 osx_arm64: osx_64 +conda_build: + pkg_format: '2' conda_forge_output_validation: true -provider: - linux_aarch64: default - linux_ppc64le: default github: branch_name: main tooling_branch_name: main -conda_build: - pkg_format: '2' +provider: + linux_aarch64: default + linux_ppc64le: default test: native_and_emulated diff --git a/recipe/build.sh b/recipe/build.sh index 90154ed..8561671 100644 --- a/recipe/build.sh +++ b/recipe/build.sh @@ -1,5 +1,8 @@ #!/bin/sh +# see https://github.com/Reference-ScaLAPACK/scalapack/issues/31 +export CFLAGS="${CFLAGS} -Wno-error=implicit-function-declaration" + if [[ "$target_platform" == "osx-64" ]]; then TOOLS_DIR=$(dirname $($FC --print-libgcc-file-name)) if [[ ! -f "$TOOLS_DIR/ld" ]]; then @@ -8,14 +11,11 @@ if [[ "$target_platform" == "osx-64" ]]; then fi fi -if [[ "$target_platform" == linux-* || "$target_platform" == "osx-arm64" ]] -then - # Workaround for https://github.com/conda-forge/scalapack-feedstock/pull/30#issuecomment-1061196317 - # As of March 2022, on macOS arm64 gfortran 9 is still used - export FFLAGS="${FFLAGS} -fallow-argument-mismatch" - export OMPI_FCFLAGS=${FFLAGS} -fi - +# Workaround for https://github.com/conda-forge/scalapack-feedstock/pull/30#issuecomment-1061196317 +export FFLAGS="${FFLAGS} -fallow-argument-mismatch" +# OMPI seems to need -I $PREFIX/lib to find mpi_f08, at least on mac-arm +export OMPI_FCFLAGS="${FFLAGS} -I$PREFIX/lib" +export OMPI_LDFLAGS=${LDFLAGS} if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then @@ -25,7 +25,8 @@ if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then export OMPI_CXX=$CXX export OMPI_FC=$FC export OPAL_PREFIX=$PREFIX - export EXTRA_CMAKE="-DCDEFS=Add_ " + export EXTRA_CMAKE="-DCDEFS=Add_" + export EXTRA_CMAKE="${EXTRA_CMAKE} --debug-output --debug-trycompile" fi # As mpi libraries are not correctly linked in CMake scripts, use mpi wrappers for the compilers @@ -42,6 +43,9 @@ cmake ${CMAKE_ARGS} \ -DCMAKE_INSTALL_PREFIX="$PREFIX" \ -DCMAKE_PREFIX_PATH="$PREFIX" \ -DCMAKE_BUILD_TYPE=Release \ - .. || (cat CMakeFiles/CMakeOutput.log && cat CMakeFiles/CMakeError.log && exit 1) + .. || ( + cat CMakeFiles/CMakeConfigureLog.yaml; + exit 1 + ) make install -j${CPU_COUNT} diff --git a/recipe/conda_build_config.yaml b/recipe/conda_build_config.yaml index 6159d72..289631f 100644 --- a/recipe/conda_build_config.yaml +++ b/recipe/conda_build_config.yaml @@ -1,4 +1,3 @@ mpi: - mpich - openmpi - diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 256a312..4aa482d 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -16,7 +16,7 @@ source: - fortran_mangling_cross.patch build: - number: 1 + number: 2 skip: true # [win] requirements: @@ -24,6 +24,7 @@ requirements: - cmake - {{ compiler('fortran') }} - {{ compiler('c') }} + - {{ stdlib("c") }} - make - {{ mpi }} # [mpi == 'openmpi' and build_platform != target_platform] host:
linux_64_mpimpich - - variant + + variant
linux_64_mpiopenmpi - - variant + + variant
linux_aarch64_mpimpich - - variant + + variant
linux_aarch64_mpiopenmpi - - variant + + variant
linux_ppc64le_mpimpich - - variant + + variant
linux_ppc64le_mpiopenmpi - - variant + + variant
osx_64_mpimpich - - variant + + variant
osx_64_mpiopenmpi - - variant + + variant
osx_arm64_mpimpich - - variant + + variant
osx_arm64_mpiopenmpi - - variant + + variant