├── .azure-pipelines ├── azure-pipelines-linux.yml └── azure-pipelines-osx.yml ├── .ci_support ├── README ├── linux_64_cuda_compiler_version11.8mpi_typeconda.yaml ├── linux_64_cuda_compiler_version11.8mpi_typeexternal.yaml ├── linux_aarch64_cuda_compiler_version11.8mpi_typeconda.yaml ├── linux_aarch64_cuda_compiler_version11.8mpi_typeexternal.yaml ├── linux_ppc64le_cuda_compiler_version11.8mpi_typeconda.yaml ├── linux_ppc64le_cuda_compiler_version11.8mpi_typeexternal.yaml ├── osx_64_.yaml └── osx_arm64_.yaml ├── .circleci └── config.yml ├── .gitattributes ├── .github └── CODEOWNERS ├── .gitignore ├── .scripts ├── build_steps.sh ├── logging_utils.sh ├── run_docker_build.sh └── run_osx_build.sh ├── LICENSE.txt ├── README.md ├── azure-pipelines.yml ├── build-locally.py ├── conda-forge.yml └── recipe ├── build-mpi.sh ├── conda_build_config.yaml ├── cross-gfortran.linux-aarch64.sh ├── cross-gfortran.linux-ppc64le.sh ├── cross-gfortran.osx-arm64.sh ├── meta.yaml ├── openmpi_activate.sh ├── post-link-cuda.sh ├── run_test.sh └── tests ├── helloworld.c ├── helloworld.cxx ├── helloworld.f ├── helloworld.f90 └── helloworld.sh /.azure-pipelines/azure-pipelines-linux.yml: -------------------------------------------------------------------------------- 1 | # This file was generated automatically from conda-smithy. To update this configuration, 2 | # update the conda-forge.yml and/or the recipe/meta.yaml. 3 | # -*- mode: yaml -*- 4 | 5 | jobs: 6 | - job: linux 7 | pool: 8 | vmImage: ubuntu-latest 9 | strategy: 10 | matrix: 11 | linux_64_cuda_compiler_version11.8mpi_typeconda: 12 | CONFIG: linux_64_cuda_compiler_version11.8mpi_typeconda 13 | UPLOAD_PACKAGES: 'True' 14 | DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64-cuda11.8:cos7 15 | linux_64_cuda_compiler_version11.8mpi_typeexternal: 16 | CONFIG: linux_64_cuda_compiler_version11.8mpi_typeexternal 17 | UPLOAD_PACKAGES: 'True' 18 | DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64-cuda11.8:cos7 19 | linux_aarch64_cuda_compiler_version11.8mpi_typeconda: 20 | CONFIG: linux_aarch64_cuda_compiler_version11.8mpi_typeconda 21 | UPLOAD_PACKAGES: 'True' 22 | DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64-cuda11.8:ubi8 23 | linux_aarch64_cuda_compiler_version11.8mpi_typeexternal: 24 | CONFIG: linux_aarch64_cuda_compiler_version11.8mpi_typeexternal 25 | UPLOAD_PACKAGES: 'True' 26 | DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64-cuda11.8:ubi8 27 | linux_ppc64le_cuda_compiler_version11.8mpi_typeconda: 28 | CONFIG: linux_ppc64le_cuda_compiler_version11.8mpi_typeconda 29 | UPLOAD_PACKAGES: 'True' 30 | DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64-cuda11.8:ubi8 31 | linux_ppc64le_cuda_compiler_version11.8mpi_typeexternal: 32 | CONFIG: linux_ppc64le_cuda_compiler_version11.8mpi_typeexternal 33 | UPLOAD_PACKAGES: 'True' 34 | DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64-cuda11.8:ubi8 35 | timeoutInMinutes: 360 36 | variables: {} 37 | 38 | steps: 39 | - script: | 40 | sudo mkdir -p /opt/empty_dir || true 41 | for d in \ 42 | /opt/ghc \ 43 | /opt/hostedtoolcache \ 44 | /usr/lib/jvm \ 45 | /usr/local/.ghcup \ 46 | /usr/local/lib/android \ 47 | /usr/local/share/powershell \ 48 | /usr/share/dotnet \ 49 | /usr/share/swift \ 50 | ; do 51 | sudo rsync --stats -a --delete /opt/empty_dir/ $d || true 52 | done 53 | sudo apt-get purge -y -f firefox \ 54 | google-chrome-stable \ 55 | microsoft-edge-stable 56 | sudo apt-get autoremove -y >& /dev/null 57 | sudo apt-get autoclean -y >& /dev/null 58 | df -h 59 | displayName: Manage disk space 60 | - script: | 61 | sudo fallocate -l 10GiB /swapfile || true 62 | sudo chmod 600 /swapfile || true 63 | sudo mkswap /swapfile || true 64 | sudo swapon /swapfile || true 65 | displayName: Create swap file 66 | # configure qemu binfmt-misc running. This allows us to run docker containers 67 | # embedded qemu-static 68 | - script: | 69 | docker run --rm --privileged multiarch/qemu-user-static:register --reset --credential yes 70 | ls /proc/sys/fs/binfmt_misc/ 71 | condition: not(startsWith(variables['CONFIG'], 'linux_64')) 72 | displayName: Configure binfmt_misc 73 | 74 | - script: | 75 | export CI=azure 76 | export flow_run_id=azure_$(Build.BuildNumber).$(System.JobAttempt) 77 | export remote_url=$(Build.Repository.Uri) 78 | export sha=$(Build.SourceVersion) 79 | export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME 80 | export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME}) 81 | if [[ "${BUILD_REASON:-}" == "PullRequest" ]]; then 82 | export IS_PR_BUILD="True" 83 | else 84 | export IS_PR_BUILD="False" 85 | fi 86 | .scripts/run_docker_build.sh 87 | displayName: Run docker build 88 | env: 89 | BINSTAR_TOKEN: $(BINSTAR_TOKEN) 90 | FEEDSTOCK_TOKEN: $(FEEDSTOCK_TOKEN) 91 | STAGING_BINSTAR_TOKEN: $(STAGING_BINSTAR_TOKEN) -------------------------------------------------------------------------------- /.azure-pipelines/azure-pipelines-osx.yml: -------------------------------------------------------------------------------- 1 | # This file was generated automatically from conda-smithy. To update this configuration, 2 | # update the conda-forge.yml and/or the recipe/meta.yaml. 3 | # -*- mode: yaml -*- 4 | 5 | jobs: 6 | - job: osx 7 | pool: 8 | vmImage: macOS-13 9 | strategy: 10 | matrix: 11 | osx_64_: 12 | CONFIG: osx_64_ 13 | UPLOAD_PACKAGES: 'True' 14 | osx_arm64_: 15 | CONFIG: osx_arm64_ 16 | UPLOAD_PACKAGES: 'True' 17 | timeoutInMinutes: 360 18 | variables: {} 19 | 20 | steps: 21 | # TODO: Fast finish on azure pipelines? 22 | - script: | 23 | export CI=azure 24 | export flow_run_id=azure_$(Build.BuildNumber).$(System.JobAttempt) 25 | export remote_url=$(Build.Repository.Uri) 26 | export sha=$(Build.SourceVersion) 27 | export OSX_FORCE_SDK_DOWNLOAD="1" 28 | export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME 29 | export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME}) 30 | if [[ "${BUILD_REASON:-}" == "PullRequest" ]]; then 31 | export IS_PR_BUILD="True" 32 | else 33 | export IS_PR_BUILD="False" 34 | fi 35 | ./.scripts/run_osx_build.sh 36 | displayName: Run OSX build 37 | env: 38 | BINSTAR_TOKEN: $(BINSTAR_TOKEN) 39 | FEEDSTOCK_TOKEN: $(FEEDSTOCK_TOKEN) 40 | STAGING_BINSTAR_TOKEN: $(STAGING_BINSTAR_TOKEN) -------------------------------------------------------------------------------- /.ci_support/README: -------------------------------------------------------------------------------- 1 | This file is automatically generated by conda-smithy. If any 2 | particular build configuration is expected, but it is not found, 3 | please make sure all dependencies are satisfiable. To add/modify any 4 | matrix elements, you should create/change conda-smithy's input 5 | recipe/conda_build_config.yaml and re-render the recipe, rather than 6 | editing these files directly. 7 | -------------------------------------------------------------------------------- /.ci_support/linux_64_cuda_compiler_version11.8mpi_typeconda.yaml: -------------------------------------------------------------------------------- 1 | c_compiler: 2 | - gcc 3 | c_compiler_version: 4 | - '11' 5 | c_stdlib: 6 | - sysroot 7 | c_stdlib_version: 8 | - '2.17' 9 | cdt_name: 10 | - conda 11 | channel_sources: 12 | - conda-forge 13 | channel_targets: 14 | - conda-forge main 15 | cuda_compiler: 16 | - nvcc 17 | cuda_compiler_version: 18 | - '11.8' 19 | cxx_compiler: 20 | - gxx 21 | cxx_compiler_version: 22 | - '11' 23 | docker_image: 24 | - quay.io/condaforge/linux-anvil-x86_64-cuda11.8:cos7 25 | fortran_compiler: 26 | - gfortran 27 | fortran_compiler_version: 28 | - '11' 29 | libevent: 30 | - 2.1.12 31 | libfabric: 32 | - '1.19' 33 | libhwloc: 34 | - 2.11.2 35 | libpmix_devel: 36 | - '5' 37 | mpi_type: 38 | - conda 39 | openmpi: 40 | - '4' 41 | target_platform: 42 | - linux-64 43 | ucc: 44 | - '1' 45 | ucx: 46 | - '1.18' 47 | zip_keys: 48 | - - c_compiler_version 49 | - cxx_compiler_version 50 | - fortran_compiler_version 51 | - cuda_compiler 52 | - cuda_compiler_version 53 | - docker_image 54 | zlib: 55 | - '1' 56 | -------------------------------------------------------------------------------- /.ci_support/linux_64_cuda_compiler_version11.8mpi_typeexternal.yaml: -------------------------------------------------------------------------------- 1 | c_compiler: 2 | - gcc 3 | c_compiler_version: 4 | - '11' 5 | c_stdlib: 6 | - sysroot 7 | c_stdlib_version: 8 | - '2.17' 9 | cdt_name: 10 | - conda 11 | channel_sources: 12 | - conda-forge 13 | channel_targets: 14 | - conda-forge main 15 | cuda_compiler: 16 | - nvcc 17 | cuda_compiler_version: 18 | - '11.8' 19 | cxx_compiler: 20 | - gxx 21 | cxx_compiler_version: 22 | - '11' 23 | docker_image: 24 | - quay.io/condaforge/linux-anvil-x86_64-cuda11.8:cos7 25 | fortran_compiler: 26 | - gfortran 27 | fortran_compiler_version: 28 | - '11' 29 | libevent: 30 | - 2.1.12 31 | libfabric: 32 | - '1.19' 33 | libhwloc: 34 | - 2.11.2 35 | libpmix_devel: 36 | - '5' 37 | mpi_type: 38 | - external 39 | openmpi: 40 | - '4' 41 | target_platform: 42 | - linux-64 43 | ucc: 44 | - '1' 45 | ucx: 46 | - '1.18' 47 | zip_keys: 48 | - - c_compiler_version 49 | - cxx_compiler_version 50 | - fortran_compiler_version 51 | - cuda_compiler 52 | - cuda_compiler_version 53 | - docker_image 54 | zlib: 55 | - '1' 56 | -------------------------------------------------------------------------------- /.ci_support/linux_aarch64_cuda_compiler_version11.8mpi_typeconda.yaml: -------------------------------------------------------------------------------- 1 | c_compiler: 2 | - gcc 3 | c_compiler_version: 4 | - '11' 5 | c_stdlib: 6 | - sysroot 7 | c_stdlib_version: 8 | - '2.17' 9 | cdt_name: 10 | - conda 11 | channel_sources: 12 | - conda-forge 13 | channel_targets: 14 | - conda-forge main 15 | cuda_compiler: 16 | - nvcc 17 | cuda_compiler_version: 18 | - '11.8' 19 | cxx_compiler: 20 | - gxx 21 | cxx_compiler_version: 22 | - '11' 23 | docker_image: 24 | - quay.io/condaforge/linux-anvil-x86_64-cuda11.8:ubi8 25 | fortran_compiler: 26 | - gfortran 27 | fortran_compiler_version: 28 | - '11' 29 | libevent: 30 | - 2.1.12 31 | libfabric: 32 | - '1.19' 33 | libhwloc: 34 | - 2.11.2 35 | libpmix_devel: 36 | - '5' 37 | mpi_type: 38 | - conda 39 | openmpi: 40 | - '4' 41 | target_platform: 42 | - linux-aarch64 43 | ucc: 44 | - '1' 45 | ucx: 46 | - '1.18' 47 | zip_keys: 48 | - - c_compiler_version 49 | - cxx_compiler_version 50 | - fortran_compiler_version 51 | - cuda_compiler 52 | - cuda_compiler_version 53 | - docker_image 54 | zlib: 55 | - '1' 56 | -------------------------------------------------------------------------------- /.ci_support/linux_aarch64_cuda_compiler_version11.8mpi_typeexternal.yaml: -------------------------------------------------------------------------------- 1 | c_compiler: 2 | - gcc 3 | c_compiler_version: 4 | - '11' 5 | c_stdlib: 6 | - sysroot 7 | c_stdlib_version: 8 | - '2.17' 9 | cdt_name: 10 | - conda 11 | channel_sources: 12 | - conda-forge 13 | channel_targets: 14 | - conda-forge main 15 | cuda_compiler: 16 | - nvcc 17 | cuda_compiler_version: 18 | - '11.8' 19 | cxx_compiler: 20 | - gxx 21 | cxx_compiler_version: 22 | - '11' 23 | docker_image: 24 | - quay.io/condaforge/linux-anvil-x86_64-cuda11.8:ubi8 25 | fortran_compiler: 26 | - gfortran 27 | fortran_compiler_version: 28 | - '11' 29 | libevent: 30 | - 2.1.12 31 | libfabric: 32 | - '1.19' 33 | libhwloc: 34 | - 2.11.2 35 | libpmix_devel: 36 | - '5' 37 | mpi_type: 38 | - external 39 | openmpi: 40 | - '4' 41 | target_platform: 42 | - linux-aarch64 43 | ucc: 44 | - '1' 45 | ucx: 46 | - '1.18' 47 | zip_keys: 48 | - - c_compiler_version 49 | - cxx_compiler_version 50 | - fortran_compiler_version 51 | - cuda_compiler 52 | - cuda_compiler_version 53 | - docker_image 54 | zlib: 55 | - '1' 56 | -------------------------------------------------------------------------------- /.ci_support/linux_ppc64le_cuda_compiler_version11.8mpi_typeconda.yaml: -------------------------------------------------------------------------------- 1 | c_compiler: 2 | - gcc 3 | c_compiler_version: 4 | - '11' 5 | c_stdlib: 6 | - sysroot 7 | c_stdlib_version: 8 | - '2.17' 9 | cdt_name: 10 | - conda 11 | channel_sources: 12 | - conda-forge 13 | channel_targets: 14 | - conda-forge main 15 | cuda_compiler: 16 | - nvcc 17 | cuda_compiler_version: 18 | - '11.8' 19 | cxx_compiler: 20 | - gxx 21 | cxx_compiler_version: 22 | - '11' 23 | docker_image: 24 | - quay.io/condaforge/linux-anvil-x86_64-cuda11.8:ubi8 25 | fortran_compiler: 26 | - gfortran 27 | fortran_compiler_version: 28 | - '11' 29 | libevent: 30 | - 2.1.12 31 | libfabric: 32 | - '1.19' 33 | libhwloc: 34 | - 2.11.2 35 | libpmix_devel: 36 | - '5' 37 | mpi_type: 38 | - conda 39 | openmpi: 40 | - '4' 41 | target_platform: 42 | - linux-ppc64le 43 | zip_keys: 44 | - - c_compiler_version 45 | - cxx_compiler_version 46 | - fortran_compiler_version 47 | - cuda_compiler 48 | - cuda_compiler_version 49 | - docker_image 50 | zlib: 51 | - '1' 52 | -------------------------------------------------------------------------------- /.ci_support/linux_ppc64le_cuda_compiler_version11.8mpi_typeexternal.yaml: -------------------------------------------------------------------------------- 1 | c_compiler: 2 | - gcc 3 | c_compiler_version: 4 | - '11' 5 | c_stdlib: 6 | - sysroot 7 | c_stdlib_version: 8 | - '2.17' 9 | cdt_name: 10 | - conda 11 | channel_sources: 12 | - conda-forge 13 | channel_targets: 14 | - conda-forge main 15 | cuda_compiler: 16 | - nvcc 17 | cuda_compiler_version: 18 | - '11.8' 19 | cxx_compiler: 20 | - gxx 21 | cxx_compiler_version: 22 | - '11' 23 | docker_image: 24 | - quay.io/condaforge/linux-anvil-x86_64-cuda11.8:ubi8 25 | fortran_compiler: 26 | - gfortran 27 | fortran_compiler_version: 28 | - '11' 29 | libevent: 30 | - 2.1.12 31 | libfabric: 32 | - '1.19' 33 | libhwloc: 34 | - 2.11.2 35 | libpmix_devel: 36 | - '5' 37 | mpi_type: 38 | - external 39 | openmpi: 40 | - '4' 41 | target_platform: 42 | - linux-ppc64le 43 | zip_keys: 44 | - - c_compiler_version 45 | - cxx_compiler_version 46 | - fortran_compiler_version 47 | - cuda_compiler 48 | - cuda_compiler_version 49 | - docker_image 50 | zlib: 51 | - '1' 52 | -------------------------------------------------------------------------------- /.ci_support/osx_64_.yaml: -------------------------------------------------------------------------------- 1 | MACOSX_DEPLOYMENT_TARGET: 2 | - '10.13' 3 | MACOSX_SDK_VERSION: 4 | - '10.13' 5 | c_compiler: 6 | - clang 7 | c_compiler_version: 8 | - '18' 9 | c_stdlib: 10 | - macosx_deployment_target 11 | c_stdlib_version: 12 | - '10.13' 13 | channel_sources: 14 | - conda-forge 15 | channel_targets: 16 | - conda-forge main 17 | cuda_compiler_version: 18 | - None 19 | cxx_compiler: 20 | - clangxx 21 | cxx_compiler_version: 22 | - '18' 23 | fortran_compiler: 24 | - gfortran 25 | fortran_compiler_version: 26 | - '13' 27 | libevent: 28 | - 2.1.12 29 | libfabric: 30 | - '1.19' 31 | libhwloc: 32 | - 2.11.2 33 | libpmix_devel: 34 | - '5' 35 | macos_machine: 36 | - x86_64-apple-darwin13.4.0 37 | mpi_type: 38 | - conda 39 | openmpi: 40 | - '4' 41 | target_platform: 42 | - osx-64 43 | zip_keys: 44 | - - c_compiler_version 45 | - cxx_compiler_version 46 | - fortran_compiler_version 47 | zlib: 48 | - '1' 49 | -------------------------------------------------------------------------------- /.ci_support/osx_arm64_.yaml: -------------------------------------------------------------------------------- 1 | MACOSX_DEPLOYMENT_TARGET: 2 | - '11.0' 3 | MACOSX_SDK_VERSION: 4 | - '11.0' 5 | c_compiler: 6 | - clang 7 | c_compiler_version: 8 | - '18' 9 | c_stdlib: 10 | - macosx_deployment_target 11 | c_stdlib_version: 12 | - '11.0' 13 | channel_sources: 14 | - conda-forge 15 | channel_targets: 16 | - conda-forge main 17 | cuda_compiler_version: 18 | - None 19 | cxx_compiler: 20 | - clangxx 21 | cxx_compiler_version: 22 | - '18' 23 | fortran_compiler: 24 | - gfortran 25 | fortran_compiler_version: 26 | - '13' 27 | libevent: 28 | - 2.1.12 29 | libfabric: 30 | - '1.19' 31 | libhwloc: 32 | - 2.11.2 33 | libpmix_devel: 34 | - '5' 35 | macos_machine: 36 | - arm64-apple-darwin20.0.0 37 | mpi_type: 38 | - conda 39 | openmpi: 40 | - '4' 41 | target_platform: 42 | - osx-arm64 43 | zip_keys: 44 | - - c_compiler_version 45 | - cxx_compiler_version 46 | - fortran_compiler_version 47 | zlib: 48 | - '1' 49 | -------------------------------------------------------------------------------- /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | # This file was generated automatically from conda-smithy. To update this configuration, 2 | # update the conda-forge.yml and/or the recipe/meta.yaml. 3 | # -*- mode: jinja-yaml -*- 4 | 5 | version: 2 6 | 7 | jobs: 8 | build: 9 | working_directory: ~/test 10 | machine: 11 | image: ubuntu-2004:current 12 | steps: 13 | - run: 14 | # The Circle-CI build should not be active, but if this is not true for some reason, do a fast finish. 15 | command: exit 0 16 | 17 | workflows: 18 | version: 2 19 | build_and_test: 20 | jobs: 21 | - build: 22 | filters: 23 | branches: 24 | ignore: 25 | - /.*/ 26 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | 3 | *.patch binary 4 | *.diff binary 5 | meta.yaml text eol=lf 6 | build.sh text eol=lf 7 | bld.bat text eol=crlf 8 | 9 | # github helper pieces to make some files not show up in diffs automatically 10 | .azure-pipelines/* linguist-generated=true 11 | .circleci/* linguist-generated=true 12 | .ci_support/README linguist-generated=true 13 | .drone/* linguist-generated=true 14 | .drone.yml linguist-generated=true 15 | .github/* linguist-generated=true 16 | .travis/* linguist-generated=true 17 | .appveyor.yml linguist-generated=true 18 | .gitattributes linguist-generated=true 19 | .gitignore linguist-generated=true 20 | .travis.yml linguist-generated=true 21 | .scripts/* linguist-generated=true 22 | .woodpecker.yml linguist-generated=true 23 | /LICENSE.txt linguist-generated=true 24 | /README.md linguist-generated=true 25 | azure-pipelines.yml linguist-generated=true 26 | build-locally.py linguist-generated=true 27 | shippable.yml linguist-generated=true 28 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @astrofrog @beckermr @bekozi @dalcinl @j34ni @leofang @minrk @msarahan @ocefpaf -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # User content belongs under recipe/. 2 | # Feedstock configuration goes in `conda-forge.yml` 3 | # Everything else is managed by the conda-smithy rerender process. 4 | # Please do not modify 5 | 6 | # Ignore all files and folders in root 7 | * 8 | !/conda-forge.yml 9 | 10 | # Don't ignore any files/folders if the parent folder is 'un-ignored' 11 | # This also avoids warnings when adding an already-checked file with an ignored parent. 12 | !/**/ 13 | # Don't ignore any files/folders recursively in the following folders 14 | !/recipe/** 15 | !/.ci_support/** 16 | 17 | # Since we ignore files/folders recursively, any folders inside 18 | # build_artifacts gets ignored which trips some build systems. 19 | # To avoid that we 'un-ignore' all files/folders recursively 20 | # and only ignore the root build_artifacts folder. 21 | !/build_artifacts/** 22 | /build_artifacts 23 | 24 | *.pyc 25 | 26 | # Rattler-build's artifacts are in `output` when not specifying anything. 27 | /output 28 | # Pixi's configuration 29 | .pixi 30 | -------------------------------------------------------------------------------- /.scripts/build_steps.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # PLEASE NOTE: This script has been automatically generated by conda-smithy. Any changes here 4 | # will be lost next time ``conda smithy rerender`` is run. If you would like to make permanent 5 | # changes to this script, consider a proposal to conda-smithy so that other feedstocks can also 6 | # benefit from the improvement. 7 | 8 | # -*- mode: jinja-shell -*- 9 | 10 | set -xeuo pipefail 11 | export FEEDSTOCK_ROOT="${FEEDSTOCK_ROOT:-/home/conda/feedstock_root}" 12 | source ${FEEDSTOCK_ROOT}/.scripts/logging_utils.sh 13 | 14 | 15 | ( endgroup "Start Docker" ) 2> /dev/null 16 | 17 | ( startgroup "Configuring conda" ) 2> /dev/null 18 | 19 | export PYTHONUNBUFFERED=1 20 | export RECIPE_ROOT="${RECIPE_ROOT:-/home/conda/recipe_root}" 21 | export CI_SUPPORT="${FEEDSTOCK_ROOT}/.ci_support" 22 | export CONFIG_FILE="${CI_SUPPORT}/${CONFIG}.yaml" 23 | 24 | cat >~/.condarc < /opt/conda/conda-meta/history 36 | micromamba install --root-prefix ~/.conda --prefix /opt/conda \ 37 | --yes --override-channels --channel conda-forge --strict-channel-priority \ 38 | pip python=3.12 conda-build conda-forge-ci-setup=4 "conda-build>=24.1" 39 | export CONDA_LIBMAMBA_SOLVER_NO_CHANNELS_FROM_INSTALLED=1 40 | 41 | # set up the condarc 42 | setup_conda_rc "${FEEDSTOCK_ROOT}" "${RECIPE_ROOT}" "${CONFIG_FILE}" 43 | 44 | source run_conda_forge_build_setup 45 | 46 | 47 | 48 | # make the build number clobber 49 | make_build_number "${FEEDSTOCK_ROOT}" "${RECIPE_ROOT}" "${CONFIG_FILE}" 50 | 51 | if [[ "${HOST_PLATFORM}" != "${BUILD_PLATFORM}" ]] && [[ "${HOST_PLATFORM}" != linux-* ]] && [[ "${BUILD_WITH_CONDA_DEBUG:-0}" != 1 ]]; then 52 | EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --no-test" 53 | fi 54 | 55 | 56 | ( endgroup "Configuring conda" ) 2> /dev/null 57 | 58 | if [[ -f "${FEEDSTOCK_ROOT}/LICENSE.txt" ]]; then 59 | cp "${FEEDSTOCK_ROOT}/LICENSE.txt" "${RECIPE_ROOT}/recipe-scripts-license.txt" 60 | fi 61 | 62 | if [[ "${BUILD_WITH_CONDA_DEBUG:-0}" == 1 ]]; then 63 | if [[ "x${BUILD_OUTPUT_ID:-}" != "x" ]]; then 64 | EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --output-id ${BUILD_OUTPUT_ID}" 65 | fi 66 | conda debug "${RECIPE_ROOT}" -m "${CI_SUPPORT}/${CONFIG}.yaml" \ 67 | ${EXTRA_CB_OPTIONS:-} \ 68 | --clobber-file "${CI_SUPPORT}/clobber_${CONFIG}.yaml" 69 | 70 | # Drop into an interactive shell 71 | /bin/bash 72 | else 73 | conda-build "${RECIPE_ROOT}" -m "${CI_SUPPORT}/${CONFIG}.yaml" \ 74 | --suppress-variables ${EXTRA_CB_OPTIONS:-} \ 75 | --clobber-file "${CI_SUPPORT}/clobber_${CONFIG}.yaml" \ 76 | --extra-meta flow_run_id="${flow_run_id:-}" remote_url="${remote_url:-}" sha="${sha:-}" 77 | ( startgroup "Inspecting artifacts" ) 2> /dev/null 78 | 79 | # inspect_artifacts was only added in conda-forge-ci-setup 4.9.4 80 | command -v inspect_artifacts >/dev/null 2>&1 && inspect_artifacts --recipe-dir "${RECIPE_ROOT}" -m "${CONFIG_FILE}" || echo "inspect_artifacts needs conda-forge-ci-setup >=4.9.4" 81 | 82 | ( endgroup "Inspecting artifacts" ) 2> /dev/null 83 | ( startgroup "Validating outputs" ) 2> /dev/null 84 | 85 | validate_recipe_outputs "${FEEDSTOCK_NAME}" 86 | 87 | ( endgroup "Validating outputs" ) 2> /dev/null 88 | 89 | ( startgroup "Uploading packages" ) 2> /dev/null 90 | 91 | if [[ "${UPLOAD_PACKAGES}" != "False" ]] && [[ "${IS_PR_BUILD}" == "False" ]]; then 92 | upload_package --validate --feedstock-name="${FEEDSTOCK_NAME}" "${FEEDSTOCK_ROOT}" "${RECIPE_ROOT}" "${CONFIG_FILE}" 93 | fi 94 | 95 | ( endgroup "Uploading packages" ) 2> /dev/null 96 | fi 97 | 98 | ( startgroup "Final checks" ) 2> /dev/null 99 | 100 | touch "${FEEDSTOCK_ROOT}/build_artifacts/conda-forge-build-done-${CONFIG}" -------------------------------------------------------------------------------- /.scripts/logging_utils.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Provide a unified interface for the different logging 4 | # utilities CI providers offer. If unavailable, provide 5 | # a compatible fallback (e.g. bare `echo xxxxxx`). 6 | 7 | function startgroup { 8 | # Start a foldable group of log lines 9 | # Pass a single argument, quoted 10 | case ${CI:-} in 11 | azure ) 12 | echo "##[group]$1";; 13 | travis ) 14 | echo "$1" 15 | echo -en 'travis_fold:start:'"${1// /}"'\r';; 16 | github_actions ) 17 | echo "::group::$1";; 18 | * ) 19 | echo "$1";; 20 | esac 21 | } 2> /dev/null 22 | 23 | function endgroup { 24 | # End a foldable group of log lines 25 | # Pass a single argument, quoted 26 | 27 | case ${CI:-} in 28 | azure ) 29 | echo "##[endgroup]";; 30 | travis ) 31 | echo -en 'travis_fold:end:'"${1// /}"'\r';; 32 | github_actions ) 33 | echo "::endgroup::";; 34 | esac 35 | } 2> /dev/null 36 | -------------------------------------------------------------------------------- /.scripts/run_docker_build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # PLEASE NOTE: This script has been automatically generated by conda-smithy. Any changes here 4 | # will be lost next time ``conda smithy rerender`` is run. If you would like to make permanent 5 | # changes to this script, consider a proposal to conda-smithy so that other feedstocks can also 6 | # benefit from the improvement. 7 | 8 | source .scripts/logging_utils.sh 9 | 10 | ( startgroup "Configure Docker" ) 2> /dev/null 11 | 12 | set -xeo pipefail 13 | 14 | THISDIR="$( cd "$( dirname "$0" )" >/dev/null && pwd )" 15 | PROVIDER_DIR="$(basename "$THISDIR")" 16 | 17 | FEEDSTOCK_ROOT="$( cd "$( dirname "$0" )/.." >/dev/null && pwd )" 18 | RECIPE_ROOT="${FEEDSTOCK_ROOT}/recipe" 19 | 20 | if [ -z ${FEEDSTOCK_NAME} ]; then 21 | export FEEDSTOCK_NAME=$(basename ${FEEDSTOCK_ROOT}) 22 | fi 23 | 24 | if [[ "${sha:-}" == "" ]]; then 25 | pushd "${FEEDSTOCK_ROOT}" 26 | sha=$(git rev-parse HEAD) 27 | popd 28 | fi 29 | 30 | docker info 31 | 32 | # In order for the conda-build process in the container to write to the mounted 33 | # volumes, we need to run with the same id as the host machine, which is 34 | # normally the owner of the mounted volumes, or at least has write permission 35 | export HOST_USER_ID=$(id -u) 36 | # Check if docker-machine is being used (normally on OSX) and get the uid from 37 | # the VM 38 | if hash docker-machine 2> /dev/null && docker-machine active > /dev/null; then 39 | export HOST_USER_ID=$(docker-machine ssh $(docker-machine active) id -u) 40 | fi 41 | 42 | ARTIFACTS="$FEEDSTOCK_ROOT/build_artifacts" 43 | 44 | if [ -z "$CONFIG" ]; then 45 | set +x 46 | FILES=`ls .ci_support/linux_*` 47 | CONFIGS="" 48 | for file in $FILES; do 49 | CONFIGS="${CONFIGS}'${file:12:-5}' or "; 50 | done 51 | echo "Need to set CONFIG env variable. Value can be one of ${CONFIGS:0:-4}" 52 | exit 1 53 | fi 54 | 55 | if [ -z "${DOCKER_IMAGE}" ]; then 56 | SHYAML_INSTALLED="$(shyaml -h || echo NO)" 57 | if [ "${SHYAML_INSTALLED}" == "NO" ]; then 58 | echo "WARNING: DOCKER_IMAGE variable not set and shyaml not installed. Trying to parse with coreutils" 59 | DOCKER_IMAGE=$(cat .ci_support/${CONFIG}.yaml | grep '^docker_image:$' -A 1 | tail -n 1 | cut -b 3-) 60 | if [ "${DOCKER_IMAGE}" = "" ]; then 61 | echo "No docker_image entry found in ${CONFIG}. Falling back to quay.io/condaforge/linux-anvil-comp7" 62 | DOCKER_IMAGE="quay.io/condaforge/linux-anvil-comp7" 63 | fi 64 | else 65 | DOCKER_IMAGE="$(cat "${FEEDSTOCK_ROOT}/.ci_support/${CONFIG}.yaml" | shyaml get-value docker_image.0 quay.io/condaforge/linux-anvil-comp7 )" 66 | fi 67 | fi 68 | 69 | mkdir -p "$ARTIFACTS" 70 | DONE_CANARY="$ARTIFACTS/conda-forge-build-done-${CONFIG}" 71 | rm -f "$DONE_CANARY" 72 | 73 | # Allow people to specify extra default arguments to `docker run` (e.g. `--rm`) 74 | DOCKER_RUN_ARGS="${CONDA_FORGE_DOCKER_RUN_ARGS}" 75 | if [ -z "${CI}" ]; then 76 | DOCKER_RUN_ARGS="-it ${DOCKER_RUN_ARGS}" 77 | fi 78 | 79 | ( endgroup "Configure Docker" ) 2> /dev/null 80 | 81 | ( startgroup "Start Docker" ) 2> /dev/null 82 | 83 | export UPLOAD_PACKAGES="${UPLOAD_PACKAGES:-True}" 84 | export IS_PR_BUILD="${IS_PR_BUILD:-False}" 85 | docker pull "${DOCKER_IMAGE}" 86 | docker run ${DOCKER_RUN_ARGS} \ 87 | -v "${RECIPE_ROOT}":/home/conda/recipe_root:rw,z,delegated \ 88 | -v "${FEEDSTOCK_ROOT}":/home/conda/feedstock_root:rw,z,delegated \ 89 | -e CONFIG \ 90 | -e HOST_USER_ID \ 91 | -e UPLOAD_PACKAGES \ 92 | -e IS_PR_BUILD \ 93 | -e GIT_BRANCH \ 94 | -e UPLOAD_ON_BRANCH \ 95 | -e CI \ 96 | -e FEEDSTOCK_NAME \ 97 | -e CPU_COUNT \ 98 | -e BUILD_WITH_CONDA_DEBUG \ 99 | -e BUILD_OUTPUT_ID \ 100 | -e flow_run_id \ 101 | -e remote_url \ 102 | -e sha \ 103 | -e BINSTAR_TOKEN \ 104 | -e FEEDSTOCK_TOKEN \ 105 | -e STAGING_BINSTAR_TOKEN \ 106 | "${DOCKER_IMAGE}" \ 107 | bash \ 108 | "/home/conda/feedstock_root/${PROVIDER_DIR}/build_steps.sh" 109 | 110 | # verify that the end of the script was reached 111 | test -f "$DONE_CANARY" 112 | 113 | # This closes the last group opened in `build_steps.sh` 114 | ( endgroup "Final checks" ) 2> /dev/null -------------------------------------------------------------------------------- /.scripts/run_osx_build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # -*- mode: jinja-shell -*- 4 | 5 | source .scripts/logging_utils.sh 6 | 7 | set -xe 8 | 9 | MINIFORGE_HOME="${MINIFORGE_HOME:-${HOME}/miniforge3}" 10 | MINIFORGE_HOME="${MINIFORGE_HOME%/}" # remove trailing slash 11 | export CONDA_BLD_PATH="${CONDA_BLD_PATH:-${MINIFORGE_HOME}/conda-bld}" 12 | 13 | ( startgroup "Provisioning base env with micromamba" ) 2> /dev/null 14 | MICROMAMBA_VERSION="1.5.10-0" 15 | if [[ "$(uname -m)" == "arm64" ]]; then 16 | osx_arch="osx-arm64" 17 | else 18 | osx_arch="osx-64" 19 | fi 20 | MICROMAMBA_URL="https://github.com/mamba-org/micromamba-releases/releases/download/${MICROMAMBA_VERSION}/micromamba-${osx_arch}" 21 | MAMBA_ROOT_PREFIX="${MINIFORGE_HOME}-micromamba-$(date +%s)" 22 | echo "Downloading micromamba ${MICROMAMBA_VERSION}" 23 | micromamba_exe="$(mktemp -d)/micromamba" 24 | curl -L -o "${micromamba_exe}" "${MICROMAMBA_URL}" 25 | chmod +x "${micromamba_exe}" 26 | echo "Creating environment" 27 | "${micromamba_exe}" create --yes --root-prefix "${MAMBA_ROOT_PREFIX}" --prefix "${MINIFORGE_HOME}" \ 28 | --channel conda-forge \ 29 | pip python=3.12 conda-build conda-forge-ci-setup=4 "conda-build>=24.1" 30 | echo "Moving pkgs cache from ${MAMBA_ROOT_PREFIX} to ${MINIFORGE_HOME}" 31 | mv "${MAMBA_ROOT_PREFIX}/pkgs" "${MINIFORGE_HOME}" 32 | echo "Cleaning up micromamba" 33 | rm -rf "${MAMBA_ROOT_PREFIX}" "${micromamba_exe}" || true 34 | ( endgroup "Provisioning base env with micromamba" ) 2> /dev/null 35 | 36 | ( startgroup "Configuring conda" ) 2> /dev/null 37 | echo "Activating environment" 38 | source "${MINIFORGE_HOME}/etc/profile.d/conda.sh" 39 | conda activate base 40 | export CONDA_SOLVER="libmamba" 41 | export CONDA_LIBMAMBA_SOLVER_NO_CHANNELS_FROM_INSTALLED=1 42 | 43 | 44 | 45 | 46 | 47 | echo -e "\n\nSetting up the condarc and mangling the compiler." 48 | setup_conda_rc ./ ./recipe ./.ci_support/${CONFIG}.yaml 49 | 50 | if [[ "${CI:-}" != "" ]]; then 51 | mangle_compiler ./ ./recipe .ci_support/${CONFIG}.yaml 52 | fi 53 | 54 | if [[ "${CI:-}" != "" ]]; then 55 | echo -e "\n\nMangling homebrew in the CI to avoid conflicts." 56 | /usr/bin/sudo mangle_homebrew 57 | /usr/bin/sudo -k 58 | else 59 | echo -e "\n\nNot mangling homebrew as we are not running in CI" 60 | fi 61 | 62 | if [[ "${sha:-}" == "" ]]; then 63 | sha=$(git rev-parse HEAD) 64 | fi 65 | 66 | echo -e "\n\nRunning the build setup script." 67 | source run_conda_forge_build_setup 68 | 69 | 70 | 71 | ( endgroup "Configuring conda" ) 2> /dev/null 72 | 73 | echo -e "\n\nMaking the build clobber file" 74 | make_build_number ./ ./recipe ./.ci_support/${CONFIG}.yaml 75 | 76 | if [[ -f LICENSE.txt ]]; then 77 | cp LICENSE.txt "recipe/recipe-scripts-license.txt" 78 | fi 79 | 80 | if [[ "${BUILD_WITH_CONDA_DEBUG:-0}" == 1 ]]; then 81 | if [[ "x${BUILD_OUTPUT_ID:-}" != "x" ]]; then 82 | EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --output-id ${BUILD_OUTPUT_ID}" 83 | fi 84 | conda debug ./recipe -m ./.ci_support/${CONFIG}.yaml \ 85 | ${EXTRA_CB_OPTIONS:-} \ 86 | --clobber-file ./.ci_support/clobber_${CONFIG}.yaml 87 | 88 | # Drop into an interactive shell 89 | /bin/bash 90 | else 91 | 92 | if [[ "${HOST_PLATFORM}" != "${BUILD_PLATFORM}" ]]; then 93 | EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --no-test" 94 | fi 95 | 96 | conda-build ./recipe -m ./.ci_support/${CONFIG}.yaml \ 97 | --suppress-variables ${EXTRA_CB_OPTIONS:-} \ 98 | --clobber-file ./.ci_support/clobber_${CONFIG}.yaml \ 99 | --extra-meta flow_run_id="$flow_run_id" remote_url="$remote_url" sha="$sha" 100 | 101 | ( startgroup "Inspecting artifacts" ) 2> /dev/null 102 | 103 | # inspect_artifacts was only added in conda-forge-ci-setup 4.9.4 104 | command -v inspect_artifacts >/dev/null 2>&1 && inspect_artifacts --recipe-dir ./recipe -m ./.ci_support/${CONFIG}.yaml || echo "inspect_artifacts needs conda-forge-ci-setup >=4.9.4" 105 | 106 | ( endgroup "Inspecting artifacts" ) 2> /dev/null 107 | ( startgroup "Validating outputs" ) 2> /dev/null 108 | 109 | validate_recipe_outputs "${FEEDSTOCK_NAME}" 110 | 111 | ( endgroup "Validating outputs" ) 2> /dev/null 112 | 113 | ( startgroup "Uploading packages" ) 2> /dev/null 114 | 115 | if [[ "${UPLOAD_PACKAGES}" != "False" ]] && [[ "${IS_PR_BUILD}" == "False" ]]; then 116 | upload_package --validate --feedstock-name="${FEEDSTOCK_NAME}" ./ ./recipe ./.ci_support/${CONFIG}.yaml 117 | fi 118 | 119 | ( endgroup "Uploading packages" ) 2> /dev/null 120 | fi -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | BSD-3-Clause license 2 | Copyright (c) 2015-2022, conda-forge contributors 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | 2. Redistributions in binary form must reproduce the above copyright 11 | notice, this list of conditions and the following disclaimer in the 12 | documentation and/or other materials provided with the distribution. 13 | 3. Neither the name of the copyright holder nor the names of its 14 | contributors may be used to endorse or promote products derived from 15 | this software without specific prior written permission. 16 | 17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR 21 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 23 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 24 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 27 | DAMAGE. 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | About openmpi-mpi-feedstock 2 | =========================== 3 | 4 | Feedstock license: [BSD-3-Clause](https://github.com/conda-forge/openmpi-feedstock/blob/main/LICENSE.txt) 5 | 6 | Home: https://www.open-mpi.org/ 7 | 8 | Package license: BSD-3-Clause 9 | 10 | Summary: An open source Message Passing Interface implementation. 11 | 12 | Development: https://github.com/open-mpi/ompi 13 | 14 | Documentation: https://www.open-mpi.org/doc/ 15 | 16 | The Open MPI Project is an open source Message Passing Interface 17 | implementation that is developed and maintained by a consortium of academic, 18 | research, and industry partners. 19 | 20 | 21 | Current build status 22 | ==================== 23 | 24 | 25 | 26 | 27 | 28 | 29 | 99 | 100 |
Azure 30 |
31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 45 | 46 | 47 | 52 | 53 | 54 | 59 | 60 | 61 | 66 | 67 | 68 | 73 | 74 | 75 | 80 | 81 | 82 | 87 | 88 | 89 | 94 | 95 | 96 |
VariantStatus
linux_64_cuda_compiler_version11.8mpi_typeconda 41 | 42 | variant 43 | 44 |
linux_64_cuda_compiler_version11.8mpi_typeexternal 48 | 49 | variant 50 | 51 |
linux_aarch64_cuda_compiler_version11.8mpi_typeconda 55 | 56 | variant 57 | 58 |
linux_aarch64_cuda_compiler_version11.8mpi_typeexternal 62 | 63 | variant 64 | 65 |
linux_ppc64le_cuda_compiler_version11.8mpi_typeconda 69 | 70 | variant 71 | 72 |
linux_ppc64le_cuda_compiler_version11.8mpi_typeexternal 76 | 77 | variant 78 | 79 |
osx_64 83 | 84 | variant 85 | 86 |
osx_arm64 90 | 91 | variant 92 | 93 |
97 |
98 |
101 | 102 | Current release info 103 | ==================== 104 | 105 | | Name | Downloads | Version | Platforms | 106 | | --- | --- | --- | --- | 107 | | [![Conda Recipe](https://img.shields.io/badge/recipe-openmpi-green.svg)](https://anaconda.org/conda-forge/openmpi) | [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/openmpi.svg)](https://anaconda.org/conda-forge/openmpi) | [![Conda Version](https://img.shields.io/conda/vn/conda-forge/openmpi.svg)](https://anaconda.org/conda-forge/openmpi) | [![Conda Platforms](https://img.shields.io/conda/pn/conda-forge/openmpi.svg)](https://anaconda.org/conda-forge/openmpi) | 108 | | [![Conda Recipe](https://img.shields.io/badge/recipe-openmpi--mpicc-green.svg)](https://anaconda.org/conda-forge/openmpi-mpicc) | [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/openmpi-mpicc.svg)](https://anaconda.org/conda-forge/openmpi-mpicc) | [![Conda Version](https://img.shields.io/conda/vn/conda-forge/openmpi-mpicc.svg)](https://anaconda.org/conda-forge/openmpi-mpicc) | [![Conda Platforms](https://img.shields.io/conda/pn/conda-forge/openmpi-mpicc.svg)](https://anaconda.org/conda-forge/openmpi-mpicc) | 109 | | [![Conda Recipe](https://img.shields.io/badge/recipe-openmpi--mpicxx-green.svg)](https://anaconda.org/conda-forge/openmpi-mpicxx) | [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/openmpi-mpicxx.svg)](https://anaconda.org/conda-forge/openmpi-mpicxx) | [![Conda Version](https://img.shields.io/conda/vn/conda-forge/openmpi-mpicxx.svg)](https://anaconda.org/conda-forge/openmpi-mpicxx) | [![Conda Platforms](https://img.shields.io/conda/pn/conda-forge/openmpi-mpicxx.svg)](https://anaconda.org/conda-forge/openmpi-mpicxx) | 110 | | [![Conda Recipe](https://img.shields.io/badge/recipe-openmpi--mpifort-green.svg)](https://anaconda.org/conda-forge/openmpi-mpifort) | [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/openmpi-mpifort.svg)](https://anaconda.org/conda-forge/openmpi-mpifort) | [![Conda Version](https://img.shields.io/conda/vn/conda-forge/openmpi-mpifort.svg)](https://anaconda.org/conda-forge/openmpi-mpifort) | [![Conda Platforms](https://img.shields.io/conda/pn/conda-forge/openmpi-mpifort.svg)](https://anaconda.org/conda-forge/openmpi-mpifort) | 111 | 112 | Installing openmpi-mpi 113 | ====================== 114 | 115 | Installing `openmpi-mpi` from the `conda-forge` channel can be achieved by adding `conda-forge` to your channels with: 116 | 117 | ``` 118 | conda config --add channels conda-forge 119 | conda config --set channel_priority strict 120 | ``` 121 | 122 | Once the `conda-forge` channel has been enabled, `openmpi, openmpi-mpicc, openmpi-mpicxx, openmpi-mpifort` can be installed with `conda`: 123 | 124 | ``` 125 | conda install openmpi openmpi-mpicc openmpi-mpicxx openmpi-mpifort 126 | ``` 127 | 128 | or with `mamba`: 129 | 130 | ``` 131 | mamba install openmpi openmpi-mpicc openmpi-mpicxx openmpi-mpifort 132 | ``` 133 | 134 | It is possible to list all of the versions of `openmpi` available on your platform with `conda`: 135 | 136 | ``` 137 | conda search openmpi --channel conda-forge 138 | ``` 139 | 140 | or with `mamba`: 141 | 142 | ``` 143 | mamba search openmpi --channel conda-forge 144 | ``` 145 | 146 | Alternatively, `mamba repoquery` may provide more information: 147 | 148 | ``` 149 | # Search all versions available on your platform: 150 | mamba repoquery search openmpi --channel conda-forge 151 | 152 | # List packages depending on `openmpi`: 153 | mamba repoquery whoneeds openmpi --channel conda-forge 154 | 155 | # List dependencies of `openmpi`: 156 | mamba repoquery depends openmpi --channel conda-forge 157 | ``` 158 | 159 | 160 | About conda-forge 161 | ================= 162 | 163 | [![Powered by 164 | NumFOCUS](https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A)](https://numfocus.org) 165 | 166 | conda-forge is a community-led conda channel of installable packages. 167 | In order to provide high-quality builds, the process has been automated into the 168 | conda-forge GitHub organization. The conda-forge organization contains one repository 169 | for each of the installable packages. Such a repository is known as a *feedstock*. 170 | 171 | A feedstock is made up of a conda recipe (the instructions on what and how to build 172 | the package) and the necessary configurations for automatic building using freely 173 | available continuous integration services. Thanks to the awesome service provided by 174 | [Azure](https://azure.microsoft.com/en-us/services/devops/), [GitHub](https://github.com/), 175 | [CircleCI](https://circleci.com/), [AppVeyor](https://www.appveyor.com/), 176 | [Drone](https://cloud.drone.io/welcome), and [TravisCI](https://travis-ci.com/) 177 | it is possible to build and upload installable packages to the 178 | [conda-forge](https://anaconda.org/conda-forge) [anaconda.org](https://anaconda.org/) 179 | channel for Linux, Windows and OSX respectively. 180 | 181 | To manage the continuous integration and simplify feedstock maintenance 182 | [conda-smithy](https://github.com/conda-forge/conda-smithy) has been developed. 183 | Using the ``conda-forge.yml`` within this repository, it is possible to re-render all of 184 | this feedstock's supporting files (e.g. the CI configuration files) with ``conda smithy rerender``. 185 | 186 | For more information please check the [conda-forge documentation](https://conda-forge.org/docs/). 187 | 188 | Terminology 189 | =========== 190 | 191 | **feedstock** - the conda recipe (raw material), supporting scripts and CI configuration. 192 | 193 | **conda-smithy** - the tool which helps orchestrate the feedstock. 194 | Its primary use is in the construction of the CI ``.yml`` files 195 | and simplify the management of *many* feedstocks. 196 | 197 | **conda-forge** - the place where the feedstock and smithy live and work to 198 | produce the finished article (built conda distributions) 199 | 200 | 201 | Updating openmpi-mpi-feedstock 202 | ============================== 203 | 204 | If you would like to improve the openmpi-mpi recipe or build a new 205 | package version, please fork this repository and submit a PR. Upon submission, 206 | your changes will be run on the appropriate platforms to give the reviewer an 207 | opportunity to confirm that the changes result in a successful build. Once 208 | merged, the recipe will be re-built and uploaded automatically to the 209 | `conda-forge` channel, whereupon the built conda packages will be available for 210 | everybody to install and use from the `conda-forge` channel. 211 | Note that all branches in the conda-forge/openmpi-mpi-feedstock are 212 | immediately built and any created packages are uploaded, so PRs should be based 213 | on branches in forks and branches in the main repository should only be used to 214 | build distinct package versions. 215 | 216 | In order to produce a uniquely identifiable distribution: 217 | * If the version of a package **is not** being increased, please add or increase 218 | the [``build/number``](https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html#build-number-and-string). 219 | * If the version of a package **is** being increased, please remember to return 220 | the [``build/number``](https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html#build-number-and-string) 221 | back to 0. 222 | 223 | Feedstock Maintainers 224 | ===================== 225 | 226 | * [@astrofrog](https://github.com/astrofrog/) 227 | * [@beckermr](https://github.com/beckermr/) 228 | * [@bekozi](https://github.com/bekozi/) 229 | * [@dalcinl](https://github.com/dalcinl/) 230 | * [@j34ni](https://github.com/j34ni/) 231 | * [@leofang](https://github.com/leofang/) 232 | * [@minrk](https://github.com/minrk/) 233 | * [@msarahan](https://github.com/msarahan/) 234 | * [@ocefpaf](https://github.com/ocefpaf/) 235 | 236 | -------------------------------------------------------------------------------- /azure-pipelines.yml: -------------------------------------------------------------------------------- 1 | # This file was generated automatically from conda-smithy. To update this configuration, 2 | # update the conda-forge.yml and/or the recipe/meta.yaml. 3 | # -*- mode: yaml -*- 4 | 5 | stages: 6 | - stage: Check 7 | jobs: 8 | - job: Skip 9 | pool: 10 | vmImage: 'ubuntu-22.04' 11 | variables: 12 | DECODE_PERCENTS: 'false' 13 | RET: 'true' 14 | steps: 15 | - checkout: self 16 | fetchDepth: '2' 17 | - bash: | 18 | git_log=`git log --max-count=1 --skip=1 --pretty=format:"%B" | tr "\n" " "` 19 | echo "##vso[task.setvariable variable=log]$git_log" 20 | displayName: Obtain commit message 21 | - bash: echo "##vso[task.setvariable variable=RET]false" 22 | condition: and(eq(variables['Build.Reason'], 'PullRequest'), or(contains(variables.log, '[skip azp]'), contains(variables.log, '[azp skip]'), contains(variables.log, '[skip ci]'), contains(variables.log, '[ci skip]'))) 23 | displayName: Skip build? 24 | - bash: echo "##vso[task.setvariable variable=start_main;isOutput=true]$RET" 25 | name: result 26 | displayName: Export result 27 | - stage: Build 28 | condition: and(succeeded(), eq(dependencies.Check.outputs['Skip.result.start_main'], 'true')) 29 | dependsOn: Check 30 | jobs: 31 | - template: ./.azure-pipelines/azure-pipelines-linux.yml 32 | - template: ./.azure-pipelines/azure-pipelines-osx.yml -------------------------------------------------------------------------------- /build-locally.py: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | """exec" "python3" "$0" "$@" #""" # fmt: off # fmt: on 3 | # 4 | # This file has been generated by conda-smithy in order to build the recipe 5 | # locally. 6 | # 7 | # The line above this comment is a bash / sh / zsh guard 8 | # to stop people from running it with the wrong interpreter 9 | import glob 10 | import os 11 | import platform 12 | import subprocess 13 | import sys 14 | from argparse import ArgumentParser 15 | 16 | 17 | def setup_environment(ns): 18 | os.environ["CONFIG"] = ns.config 19 | os.environ["UPLOAD_PACKAGES"] = "False" 20 | os.environ["IS_PR_BUILD"] = "True" 21 | if ns.debug: 22 | os.environ["BUILD_WITH_CONDA_DEBUG"] = "1" 23 | if ns.output_id: 24 | os.environ["BUILD_OUTPUT_ID"] = ns.output_id 25 | if "MINIFORGE_HOME" not in os.environ: 26 | os.environ["MINIFORGE_HOME"] = os.path.join( 27 | os.path.dirname(__file__), "miniforge3" 28 | ) 29 | 30 | # The default cache location might not be writable using docker on macOS. 31 | if ns.config.startswith("linux") and platform.system() == "Darwin": 32 | os.environ["CONDA_FORGE_DOCKER_RUN_ARGS"] = ( 33 | os.environ.get("CONDA_FORGE_DOCKER_RUN_ARGS", "") 34 | + " -e RATTLER_CACHE_DIR=/tmp/rattler_cache" 35 | ) 36 | 37 | 38 | def run_docker_build(ns): 39 | script = ".scripts/run_docker_build.sh" 40 | subprocess.check_call([script]) 41 | 42 | 43 | def run_osx_build(ns): 44 | script = ".scripts/run_osx_build.sh" 45 | subprocess.check_call([script]) 46 | 47 | 48 | def run_win_build(ns): 49 | script = ".scripts/run_win_build.bat" 50 | subprocess.check_call(["cmd", "/D", "/Q", "/C", f"CALL {script}"]) 51 | 52 | 53 | def verify_config(ns): 54 | choices_filter = ns.filter or "*" 55 | valid_configs = { 56 | os.path.basename(f)[:-5] 57 | for f in glob.glob(f".ci_support/{choices_filter}.yaml") 58 | } 59 | if choices_filter != "*": 60 | print(f"filtering for '{choices_filter}.yaml' configs") 61 | print(f"valid configs are {valid_configs}") 62 | if ns.config in valid_configs: 63 | print("Using " + ns.config + " configuration") 64 | return 65 | elif len(valid_configs) == 1: 66 | ns.config = valid_configs.pop() 67 | print("Found " + ns.config + " configuration") 68 | elif ns.config is None: 69 | print("config not selected, please choose from the following:\n") 70 | selections = list(enumerate(sorted(valid_configs), 1)) 71 | for i, c in selections: 72 | print(f"{i}. {c}") 73 | try: 74 | s = input("\n> ") 75 | except KeyboardInterrupt: 76 | print("\nno option selected, bye!", file=sys.stderr) 77 | sys.exit(1) 78 | idx = int(s) - 1 79 | ns.config = selections[idx][1] 80 | print(f"selected {ns.config}") 81 | else: 82 | raise ValueError("config " + ns.config + " is not valid") 83 | if ( 84 | ns.config.startswith("osx") 85 | and platform.system() == "Darwin" 86 | and not os.environ.get("OSX_SDK_DIR") 87 | ): 88 | raise RuntimeError( 89 | "Need OSX_SDK_DIR env variable set. Run 'export OSX_SDK_DIR=$PWD/SDKs' " 90 | "to download the SDK automatically to '$PWD/SDKs/MacOSX.sdk'. " 91 | "Note: OSX_SDK_DIR must be set to an absolute path. " 92 | "Setting this variable implies agreement to the licensing terms of the SDK by Apple." 93 | ) 94 | 95 | 96 | def main(args=None): 97 | p = ArgumentParser("build-locally") 98 | p.add_argument("config", default=None, nargs="?") 99 | p.add_argument( 100 | "--filter", 101 | default=None, 102 | help="Glob string to filter which build choices are presented in interactive mode.", 103 | ) 104 | p.add_argument( 105 | "--debug", 106 | action="store_true", 107 | help="Setup debug environment using `conda debug`", 108 | ) 109 | p.add_argument( 110 | "--output-id", help="If running debug, specify the output to setup." 111 | ) 112 | 113 | ns = p.parse_args(args=args) 114 | verify_config(ns) 115 | setup_environment(ns) 116 | 117 | try: 118 | if ns.config.startswith("linux") or ( 119 | ns.config.startswith("osx") and platform.system() == "Linux" 120 | ): 121 | run_docker_build(ns) 122 | elif ns.config.startswith("osx"): 123 | run_osx_build(ns) 124 | elif ns.config.startswith("win"): 125 | run_win_build(ns) 126 | finally: 127 | recipe_license_file = os.path.join( 128 | "recipe", "recipe-scripts-license.txt" 129 | ) 130 | if os.path.exists(recipe_license_file): 131 | os.remove(recipe_license_file) 132 | 133 | 134 | if __name__ == "__main__": 135 | main() 136 | -------------------------------------------------------------------------------- /conda-forge.yml: -------------------------------------------------------------------------------- 1 | azure: 2 | store_build_artifacts: false 3 | free_disk_space: true 4 | settings_linux: 5 | swapfile_size: 10GiB 6 | build_platform: 7 | linux_aarch64: linux_64 8 | linux_ppc64le: linux_64 9 | osx_arm64: osx_64 10 | conda_build: 11 | pkg_format: '2' 12 | conda_forge_output_validation: true 13 | github: 14 | branch_name: main 15 | tooling_branch_name: main 16 | os_version: 17 | linux_64: cos7 18 | linux_aarch64: cos7 19 | linux_ppc64le: cos7 20 | provider: 21 | linux_aarch64: default 22 | linux_ppc64le: default 23 | osx_arm64: default 24 | test: native_and_emulated 25 | -------------------------------------------------------------------------------- /recipe/build-mpi.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -ex 3 | 4 | # avoid absolute-paths in compilers 5 | export CC=$(basename "$CC") 6 | export CXX=$(basename "$CXX") 7 | export FC=$(basename "$FC") 8 | 9 | # unset unused Fortran compiler variables 10 | unset FFLAGS F77 F90 F95 11 | 12 | # tweak compiler flags 13 | export LIBRARY_PATH="$PREFIX/lib" 14 | if [[ "$target_platform" == osx-* ]]; then 15 | if [[ -n "$CONDA_BUILD_SYSROOT" ]]; then 16 | export CFLAGS="$CFLAGS -isysroot $CONDA_BUILD_SYSROOT" 17 | export CXXFLAGS="$CXXFLAGS -isysroot $CONDA_BUILD_SYSROOT" 18 | fi 19 | fi 20 | 21 | # tweak wrapper ldflags 22 | wrapper_ldflags="" 23 | if [[ "$target_platform" == linux-* ]]; then 24 | # allow-shlib-undefined required for dependencies to link against older sysroot 25 | # avoids undefined 26 | wrapper_ldflags='-Wl,--allow-shlib-undefined' 27 | fi 28 | if [[ "$target_platform" == osx-* ]]; then 29 | # rpath required for '@rpath/libmpi.*.dylib' to be found at runtime 30 | wrapper_ldflags='-Wl,-rpath,${libdir}' 31 | fi 32 | 33 | # UCX and UCC support 34 | build_with_ucx="" 35 | build_with_ucc="" 36 | if [[ "$target_platform" == linux-* && "$target_platform" != linux-ppc64le ]]; then 37 | echo "Build with UCX/UCC support" 38 | build_with_ucx="--with-ucx=$PREFIX" 39 | build_with_ucc="--with-ucc=$PREFIX" 40 | fi 41 | 42 | 43 | # CUDA support 44 | build_with_cuda="" 45 | if [[ -n "$CUDA_HOME" ]]; then 46 | echo "Build with CUDA support" 47 | build_with_cuda="--with-cuda=$CUDA_HOME --with-cuda-libdir=$CUDA_HOME/lib64/stubs --with-io-romio-flags=ac_cv_lib_cudart_cudaStreamSynchronize=no" 48 | fi 49 | 50 | if [[ $CONDA_BUILD_CROSS_COMPILATION == "1" ]]; then 51 | # 52 | # To regenerate the `cross-gfortran.*.sh` files follow these steps: 53 | # 54 | # * Create and activate a conda environment with `gcc=X.Y gfortran` 55 | # packages and any other package required to configure openmpi. 56 | # $ conda create -n ompi-config gcc=X.Y gfortran 57 | # $ conda activate ompi-config 58 | # 59 | # * Run openmpi's `./configure` script 60 | # $ tar -xf openmpi-X.Y.Z.tar.bz2 61 | # $ cd openmpi-X.Y.Z 62 | # $ ./configure 63 | # 64 | # * Use `grep` to get configure variables out of `config.log`: 65 | # $ grep ompi_cv_fortran_ config.log | sed 's/^/export /' >> cross-gfortran.$target_arch.sh 66 | # $ grep ompi_cv_real16_ config.log | sed 's/^/export /' >> cross-gfortran.$target_arch.sh 67 | # 68 | source $RECIPE_DIR/cross-gfortran.$target_platform.sh 69 | fi 70 | 71 | # disable wrapper-runpath for consistency with conda-forge wrt dtags 72 | # openmpi's runpath adds new dtags to compiler wrappers 73 | ./configure --prefix=$PREFIX \ 74 | --disable-dependency-tracking \ 75 | --disable-wrapper-runpath \ 76 | --enable-mpi-fortran \ 77 | --docdir=$PWD/_noinst/doc \ 78 | --mandir=$PWD/_noinst/man \ 79 | --with-mpi-moduledir='${includedir}' \ 80 | --with-wrapper-ldflags="${wrapper_ldflags}" \ 81 | --with-hwloc=$PREFIX \ 82 | --with-libevent=$PREFIX \ 83 | --with-libfabric=$PREFIX \ 84 | --with-pmix=$PREFIX \ 85 | --with-zlib=$PREFIX \ 86 | --enable-ipv6 \ 87 | $build_with_ucx \ 88 | $build_with_ucc \ 89 | $build_with_cuda \ 90 | || (cat config.log; exit 1) 91 | 92 | make -j"${CPU_COUNT:-1}" 93 | make install 94 | 95 | # do not install unused bundled-prrte dev and doc files 96 | rm -rf $PREFIX/include/prte 97 | rm -rf $PREFIX/include/prte*.h 98 | rm -rf $PREFIX/share/prte/rst 99 | 100 | POST_LINK=$PREFIX/bin/.openmpi-post-link.sh 101 | if [ -n "$build_with_cuda" ]; then 102 | echo "setting MCA mca_base_component_show_load_errors to 0..." 103 | echo "mca_base_component_show_load_errors = 0" >> $PREFIX/etc/openmpi-mca-params.conf 104 | echo "setting MCA opal_warn_on_missing_libcuda to 0..." 105 | echo "opal_warn_on_missing_libcuda = 0" >> $PREFIX/etc/openmpi-mca-params.conf 106 | echo "setting MCA opal_cuda_support to 0..." 107 | echo "opal_cuda_support = 0" >> $PREFIX/etc/openmpi-mca-params.conf 108 | cat $RECIPE_DIR/post-link-cuda.sh >> $POST_LINK 109 | fi 110 | if [ -f $POST_LINK ]; then 111 | chmod +x $POST_LINK 112 | fi 113 | 114 | mkdir -p $PREFIX/etc/conda/activate.d 115 | cp -v $RECIPE_DIR/openmpi_activate.sh $PREFIX/etc/conda/activate.d/ 116 | -------------------------------------------------------------------------------- /recipe/conda_build_config.yaml: -------------------------------------------------------------------------------- 1 | mpi_type: 2 | - external # [linux] 3 | - conda 4 | libfabric: 5 | - "1.19" 6 | libpmix_devel: 7 | - "5" 8 | -------------------------------------------------------------------------------- /recipe/cross-gfortran.linux-aarch64.sh: -------------------------------------------------------------------------------- 1 | export ompi_cv_fortran_abstract=yes 2 | export ompi_cv_fortran_alignment_CHARACTER=1 3 | export ompi_cv_fortran_alignment_COMPLEX=4 4 | export ompi_cv_fortran_alignment_COMPLEXp16=8 5 | export ompi_cv_fortran_alignment_COMPLEXp32=16 6 | export ompi_cv_fortran_alignment_COMPLEXp8=4 7 | export ompi_cv_fortran_alignment_DOUBLE_COMPLEX=8 8 | export ompi_cv_fortran_alignment_DOUBLE_PRECISION=8 9 | export ompi_cv_fortran_alignment_INTEGER=4 10 | export ompi_cv_fortran_alignment_INTEGERp1=1 11 | export ompi_cv_fortran_alignment_INTEGERp2=2 12 | export ompi_cv_fortran_alignment_INTEGERp4=4 13 | export ompi_cv_fortran_alignment_INTEGERp8=8 14 | export ompi_cv_fortran_alignment_LOGICAL=4 15 | export ompi_cv_fortran_alignment_LOGICALp1=1 16 | export ompi_cv_fortran_alignment_LOGICALp2=2 17 | export ompi_cv_fortran_alignment_LOGICALp4=4 18 | export ompi_cv_fortran_alignment_LOGICALp8=8 19 | export ompi_cv_fortran_alignment_REAL=4 20 | export ompi_cv_fortran_alignment_REALp16=16 21 | export ompi_cv_fortran_alignment_REALp4=4 22 | export ompi_cv_fortran_alignment_REALp8=8 23 | export ompi_cv_fortran_alignment_type_test_mpi_handle_=8 24 | export ompi_cv_fortran_common_alignment=16 25 | export ompi_cv_fortran_asynchronous=yes 26 | export ompi_cv_fortran_c_funloc=yes 27 | export ompi_cv_fortran_elemental=yes 28 | export ompi_cv_fortran_external_symbol='single underscore' 29 | export ompi_cv_fortran_f08_assumed_rank=yes 30 | export ompi_cv_fortran_handle_max=2147483647 31 | export ompi_cv_fortran_have_CHARACTER=yes 32 | export ompi_cv_fortran_have_COMPLEX=yes 33 | export ompi_cv_fortran_have_COMPLEXp16=yes 34 | export ompi_cv_fortran_have_COMPLEXp32=yes 35 | export ompi_cv_fortran_have_COMPLEXp4=no 36 | export ompi_cv_fortran_have_COMPLEXp8=yes 37 | export ompi_cv_fortran_have_DOUBLE_COMPLEX=yes 38 | export ompi_cv_fortran_have_DOUBLE_PRECISION=yes 39 | export ompi_cv_fortran_have_INTEGER=yes 40 | export ompi_cv_fortran_have_INTEGERp16=yes 41 | export ompi_cv_fortran_have_INTEGERp1=yes 42 | export ompi_cv_fortran_have_INTEGERp2=yes 43 | export ompi_cv_fortran_have_INTEGERp4=yes 44 | export ompi_cv_fortran_have_INTEGERp8=yes 45 | export ompi_cv_fortran_have_LOGICAL=yes 46 | export ompi_cv_fortran_have_LOGICALp1=yes 47 | export ompi_cv_fortran_have_LOGICALp2=yes 48 | export ompi_cv_fortran_have_LOGICALp4=yes 49 | export ompi_cv_fortran_have_LOGICALp8=yes 50 | export ompi_cv_fortran_have_REAL=yes 51 | export ompi_cv_fortran_have_REALp16=yes 52 | export ompi_cv_fortran_have_REALp2=no 53 | export ompi_cv_fortran_have_REALp4=yes 54 | export ompi_cv_fortran_have_REALp8=yes 55 | export ompi_cv_fortran_have_bind_c_sub=yes 56 | export ompi_cv_fortran_have_bind_c_type=yes 57 | export ompi_cv_fortran_have_bind_c_type_name=yes 58 | export ompi_cv_fortran_have_iso_c_binding=yes 59 | export ompi_cv_fortran_have_iso_fortran_env=yes 60 | export ompi_cv_fortran_have_iso_fortran_env_real16=no 61 | export ompi_cv_fortran_have_storage_size=yes 62 | export ompi_cv_fortran_ignore_tkr_data='1:type(*), dimension(*):!GCC$ ATTRIBUTES NO_ARG_CHECK ::' 63 | export ompi_cv_fortran_interface=yes 64 | export ompi_cv_fortran_kind_value_0=0 65 | export ompi_cv_fortran_kind_value_C_DOUBLE=8 66 | export ompi_cv_fortran_kind_value_C_DOUBLE_COMPLEX=8 67 | export ompi_cv_fortran_kind_value_C_FLOAT=4 68 | export ompi_cv_fortran_kind_value_C_FLOAT_COMPLEX=4 69 | export ompi_cv_fortran_kind_value_C_INT16_T=2 70 | export ompi_cv_fortran_kind_value_C_INT32_T=4 71 | export ompi_cv_fortran_kind_value_C_INT64_T=8 72 | export ompi_cv_fortran_kind_value_C_INT=4 73 | export ompi_cv_fortran_kind_value_C_LONG_DOUBLE=16 74 | export ompi_cv_fortran_kind_value_C_LONG_DOUBLE_COMPLEX=16 75 | export ompi_cv_fortran_kind_value_C_LONG_LONG=8 76 | export ompi_cv_fortran_kind_value_C_SHORT=2 77 | export ompi_cv_fortran_kind_value_C_SIGNED_CHAR=1 78 | export ompi_cv_fortran_logical_array_correct=yes 79 | export ompi_cv_fortran_max_array_rank=15 80 | export ompi_cv_fortran_module_include_flag=-I 81 | export ompi_cv_fortran_optional=yes 82 | export ompi_cv_fortran_private=yes 83 | export ompi_cv_fortran_procedure=yes 84 | export ompi_cv_fortran_sizeof_CHARACTER=1 85 | export ompi_cv_fortran_sizeof_COMPLEX=8 86 | export ompi_cv_fortran_sizeof_COMPLEXp16=16 87 | export ompi_cv_fortran_sizeof_COMPLEXp32=32 88 | export ompi_cv_fortran_sizeof_COMPLEXp8=8 89 | export ompi_cv_fortran_sizeof_DOUBLE_COMPLEX=16 90 | export ompi_cv_fortran_sizeof_DOUBLE_PRECISION=8 91 | export ompi_cv_fortran_sizeof_INTEGER=4 92 | export ompi_cv_fortran_sizeof_INTEGERp16=16 93 | export ompi_cv_fortran_sizeof_INTEGERp1=1 94 | export ompi_cv_fortran_sizeof_INTEGERp2=2 95 | export ompi_cv_fortran_sizeof_INTEGERp4=4 96 | export ompi_cv_fortran_sizeof_INTEGERp8=8 97 | export ompi_cv_fortran_sizeof_LOGICAL=4 98 | export ompi_cv_fortran_sizeof_LOGICALp1=1 99 | export ompi_cv_fortran_sizeof_LOGICALp2=2 100 | export ompi_cv_fortran_sizeof_LOGICALp4=4 101 | export ompi_cv_fortran_sizeof_LOGICALp8=8 102 | export ompi_cv_fortran_sizeof_REAL=4 103 | export ompi_cv_fortran_sizeof_REALp16=16 104 | export ompi_cv_fortran_sizeof_REALp4=4 105 | export ompi_cv_fortran_sizeof_REALp8=8 106 | export ompi_cv_fortran_sizeof_type_test_mpi_handle_=4 107 | export ompi_cv_fortran_true_value=1 108 | export ompi_cv_fortran_use_only=yes 109 | export ompi_cv_real16_c_equiv=yes 110 | -------------------------------------------------------------------------------- /recipe/cross-gfortran.linux-ppc64le.sh: -------------------------------------------------------------------------------- 1 | export ompi_cv_fortran_abstract=yes 2 | export ompi_cv_fortran_alignment_CHARACTER=1 3 | export ompi_cv_fortran_alignment_COMPLEX=4 4 | export ompi_cv_fortran_alignment_COMPLEXp16=8 5 | export ompi_cv_fortran_alignment_COMPLEXp32=16 6 | export ompi_cv_fortran_alignment_COMPLEXp8=4 7 | export ompi_cv_fortran_alignment_DOUBLE_COMPLEX=8 8 | export ompi_cv_fortran_alignment_DOUBLE_PRECISION=8 9 | export ompi_cv_fortran_alignment_INTEGER=4 10 | export ompi_cv_fortran_alignment_INTEGERp1=1 11 | export ompi_cv_fortran_alignment_INTEGERp2=2 12 | export ompi_cv_fortran_alignment_INTEGERp4=4 13 | export ompi_cv_fortran_alignment_INTEGERp8=8 14 | export ompi_cv_fortran_alignment_LOGICAL=4 15 | export ompi_cv_fortran_alignment_LOGICALp1=1 16 | export ompi_cv_fortran_alignment_LOGICALp2=2 17 | export ompi_cv_fortran_alignment_LOGICALp4=4 18 | export ompi_cv_fortran_alignment_LOGICALp8=8 19 | export ompi_cv_fortran_alignment_REAL=4 20 | export ompi_cv_fortran_alignment_REALp16=16 21 | export ompi_cv_fortran_alignment_REALp4=4 22 | export ompi_cv_fortran_alignment_REALp8=8 23 | export ompi_cv_fortran_alignment_type_test_mpi_handle_=4 24 | export ompi_cv_fortran_common_alignment=16 25 | export ompi_cv_fortran_asynchronous=yes 26 | export ompi_cv_fortran_c_funloc=yes 27 | export ompi_cv_fortran_elemental=yes 28 | export ompi_cv_fortran_external_symbol='single underscore' 29 | export ompi_cv_fortran_f08_assumed_rank=yes 30 | export ompi_cv_fortran_handle_max=2147483647 31 | export ompi_cv_fortran_have_CHARACTER=yes 32 | export ompi_cv_fortran_have_COMPLEX=yes 33 | export ompi_cv_fortran_have_COMPLEXp16=yes 34 | export ompi_cv_fortran_have_COMPLEXp32=yes 35 | export ompi_cv_fortran_have_COMPLEXp4=no 36 | export ompi_cv_fortran_have_COMPLEXp8=yes 37 | export ompi_cv_fortran_have_DOUBLE_COMPLEX=yes 38 | export ompi_cv_fortran_have_DOUBLE_PRECISION=yes 39 | export ompi_cv_fortran_have_INTEGER=yes 40 | export ompi_cv_fortran_have_INTEGERp16=yes 41 | export ompi_cv_fortran_have_INTEGERp1=yes 42 | export ompi_cv_fortran_have_INTEGERp2=yes 43 | export ompi_cv_fortran_have_INTEGERp4=yes 44 | export ompi_cv_fortran_have_INTEGERp8=yes 45 | export ompi_cv_fortran_have_LOGICAL=yes 46 | export ompi_cv_fortran_have_LOGICALp1=yes 47 | export ompi_cv_fortran_have_LOGICALp2=yes 48 | export ompi_cv_fortran_have_LOGICALp4=yes 49 | export ompi_cv_fortran_have_LOGICALp8=yes 50 | export ompi_cv_fortran_have_REAL=yes 51 | export ompi_cv_fortran_have_REALp16=yes 52 | export ompi_cv_fortran_have_REALp2=no 53 | export ompi_cv_fortran_have_REALp4=yes 54 | export ompi_cv_fortran_have_REALp8=yes 55 | export ompi_cv_fortran_have_bind_c_sub=yes 56 | export ompi_cv_fortran_have_bind_c_type=yes 57 | export ompi_cv_fortran_have_bind_c_type_name=yes 58 | export ompi_cv_fortran_have_iso_c_binding=yes 59 | export ompi_cv_fortran_have_iso_fortran_env=yes 60 | export ompi_cv_fortran_have_iso_fortran_env_real16=no 61 | export ompi_cv_fortran_have_storage_size=yes 62 | export ompi_cv_fortran_ignore_tkr_data='1:type(*), dimension(*):!GCC$ ATTRIBUTES NO_ARG_CHECK ::' 63 | export ompi_cv_fortran_interface=yes 64 | export ompi_cv_fortran_kind_value_0=0 65 | export ompi_cv_fortran_kind_value_C_DOUBLE=8 66 | export ompi_cv_fortran_kind_value_C_DOUBLE_COMPLEX=8 67 | export ompi_cv_fortran_kind_value_C_FLOAT=4 68 | export ompi_cv_fortran_kind_value_C_FLOAT_COMPLEX=4 69 | export ompi_cv_fortran_kind_value_C_INT16_T=2 70 | export ompi_cv_fortran_kind_value_C_INT32_T=4 71 | export ompi_cv_fortran_kind_value_C_INT64_T=8 72 | export ompi_cv_fortran_kind_value_C_INT=4 73 | export ompi_cv_fortran_kind_value_C_LONG_DOUBLE=16 74 | export ompi_cv_fortran_kind_value_C_LONG_DOUBLE_COMPLEX=16 75 | export ompi_cv_fortran_kind_value_C_LONG_LONG=8 76 | export ompi_cv_fortran_kind_value_C_SHORT=2 77 | export ompi_cv_fortran_kind_value_C_SIGNED_CHAR=1 78 | export ompi_cv_fortran_logical_array_correct=yes 79 | export ompi_cv_fortran_max_array_rank=15 80 | export ompi_cv_fortran_module_include_flag=-I 81 | export ompi_cv_fortran_optional=yes 82 | export ompi_cv_fortran_private=yes 83 | export ompi_cv_fortran_procedure=yes 84 | export ompi_cv_fortran_sizeof_CHARACTER=1 85 | export ompi_cv_fortran_sizeof_COMPLEX=8 86 | export ompi_cv_fortran_sizeof_COMPLEXp16=16 87 | export ompi_cv_fortran_sizeof_COMPLEXp32=32 88 | export ompi_cv_fortran_sizeof_COMPLEXp8=8 89 | export ompi_cv_fortran_sizeof_DOUBLE_COMPLEX=16 90 | export ompi_cv_fortran_sizeof_DOUBLE_PRECISION=8 91 | export ompi_cv_fortran_sizeof_INTEGER=4 92 | export ompi_cv_fortran_sizeof_INTEGERp16=16 93 | export ompi_cv_fortran_sizeof_INTEGERp1=1 94 | export ompi_cv_fortran_sizeof_INTEGERp2=2 95 | export ompi_cv_fortran_sizeof_INTEGERp4=4 96 | export ompi_cv_fortran_sizeof_INTEGERp8=8 97 | export ompi_cv_fortran_sizeof_LOGICAL=4 98 | export ompi_cv_fortran_sizeof_LOGICALp1=1 99 | export ompi_cv_fortran_sizeof_LOGICALp2=2 100 | export ompi_cv_fortran_sizeof_LOGICALp4=4 101 | export ompi_cv_fortran_sizeof_LOGICALp8=8 102 | export ompi_cv_fortran_sizeof_REAL=4 103 | export ompi_cv_fortran_sizeof_REALp16=16 104 | export ompi_cv_fortran_sizeof_REALp4=4 105 | export ompi_cv_fortran_sizeof_REALp8=8 106 | export ompi_cv_fortran_sizeof_type_test_mpi_handle_=4 107 | export ompi_cv_fortran_true_value=1 108 | export ompi_cv_fortran_use_only=yes 109 | export ompi_cv_real16_c_equiv=yes 110 | -------------------------------------------------------------------------------- /recipe/cross-gfortran.osx-arm64.sh: -------------------------------------------------------------------------------- 1 | export ompi_cv_fortran_abstract=yes 2 | export ompi_cv_fortran_alignment_CHARACTER=1 3 | export ompi_cv_fortran_alignment_COMPLEX=4 4 | export ompi_cv_fortran_alignment_COMPLEXp16=8 5 | export ompi_cv_fortran_alignment_COMPLEXp8=4 6 | export ompi_cv_fortran_alignment_DOUBLE_COMPLEX=8 7 | export ompi_cv_fortran_alignment_DOUBLE_PRECISION=8 8 | export ompi_cv_fortran_alignment_INTEGER=4 9 | export ompi_cv_fortran_alignment_INTEGERp1=1 10 | export ompi_cv_fortran_alignment_INTEGERp2=2 11 | export ompi_cv_fortran_alignment_INTEGERp4=4 12 | export ompi_cv_fortran_alignment_INTEGERp8=8 13 | export ompi_cv_fortran_alignment_LOGICAL=4 14 | export ompi_cv_fortran_alignment_LOGICALp1=1 15 | export ompi_cv_fortran_alignment_LOGICALp2=2 16 | export ompi_cv_fortran_alignment_LOGICALp4=4 17 | export ompi_cv_fortran_alignment_LOGICALp8=8 18 | export ompi_cv_fortran_alignment_REAL=4 19 | export ompi_cv_fortran_alignment_REALp4=4 20 | export ompi_cv_fortran_alignment_REALp8=8 21 | export ompi_cv_fortran_alignment_type_test_mpi_handle_=4 22 | export ompi_cv_fortran_common_alignment=16 23 | export ompi_cv_fortran_asynchronous=yes 24 | export ompi_cv_fortran_c_funloc=yes 25 | export ompi_cv_fortran_elemental=yes 26 | export ompi_cv_fortran_external_symbol='single underscore' 27 | export ompi_cv_fortran_f08_assumed_rank=yes 28 | export ompi_cv_fortran_handle_max=2147483647 29 | export ompi_cv_fortran_have_CHARACTER=yes 30 | export ompi_cv_fortran_have_COMPLEX=yes 31 | export ompi_cv_fortran_have_COMPLEXp16=yes 32 | export ompi_cv_fortran_have_COMPLEXp32=yes 33 | export ompi_cv_fortran_have_COMPLEXp4=no 34 | export ompi_cv_fortran_have_COMPLEXp8=yes 35 | export ompi_cv_fortran_have_DOUBLE_COMPLEX=yes 36 | export ompi_cv_fortran_have_DOUBLE_PRECISION=yes 37 | export ompi_cv_fortran_have_INTEGER=yes 38 | export ompi_cv_fortran_have_INTEGERp16=yes 39 | export ompi_cv_fortran_have_INTEGERp1=yes 40 | export ompi_cv_fortran_have_INTEGERp2=yes 41 | export ompi_cv_fortran_have_INTEGERp4=yes 42 | export ompi_cv_fortran_have_INTEGERp8=yes 43 | export ompi_cv_fortran_have_LOGICAL=yes 44 | export ompi_cv_fortran_have_LOGICALp1=yes 45 | export ompi_cv_fortran_have_LOGICALp2=yes 46 | export ompi_cv_fortran_have_LOGICALp4=yes 47 | export ompi_cv_fortran_have_LOGICALp8=yes 48 | export ompi_cv_fortran_have_REAL=yes 49 | export ompi_cv_fortran_have_REALp16=yes 50 | export ompi_cv_fortran_have_REALp2=no 51 | export ompi_cv_fortran_have_REALp4=yes 52 | export ompi_cv_fortran_have_REALp8=yes 53 | export ompi_cv_fortran_have_bind_c_sub=yes 54 | export ompi_cv_fortran_have_bind_c_type=yes 55 | export ompi_cv_fortran_have_bind_c_type_name=yes 56 | export ompi_cv_fortran_have_iso_c_binding=yes 57 | export ompi_cv_fortran_have_iso_fortran_env=yes 58 | export ompi_cv_fortran_have_iso_fortran_env_real16=no 59 | export ompi_cv_fortran_have_storage_size=yes 60 | export ompi_cv_fortran_ignore_tkr_data='1:type(*), dimension(*):!GCC$ ATTRIBUTES NO_ARG_CHECK ::' 61 | export ompi_cv_fortran_interface=yes 62 | export ompi_cv_fortran_kind_value_0=0 63 | export ompi_cv_fortran_kind_value_C_DOUBLE=8 64 | export ompi_cv_fortran_kind_value_C_DOUBLE_COMPLEX=8 65 | export ompi_cv_fortran_kind_value_C_FLOAT=4 66 | export ompi_cv_fortran_kind_value_C_FLOAT_COMPLEX=4 67 | export ompi_cv_fortran_kind_value_C_INT16_T=2 68 | export ompi_cv_fortran_kind_value_C_INT32_T=4 69 | export ompi_cv_fortran_kind_value_C_INT64_T=8 70 | export ompi_cv_fortran_kind_value_C_INT=4 71 | export ompi_cv_fortran_kind_value_C_LONG_LONG=8 72 | export ompi_cv_fortran_kind_value_C_SHORT=2 73 | export ompi_cv_fortran_kind_value_C_SIGNED_CHAR=1 74 | export ompi_cv_fortran_logical_array_correct=yes 75 | export ompi_cv_fortran_max_array_rank=15 76 | export ompi_cv_fortran_module_include_flag=-I 77 | export ompi_cv_fortran_optional=yes 78 | export ompi_cv_fortran_private=yes 79 | export ompi_cv_fortran_procedure=yes 80 | export ompi_cv_fortran_sizeof_CHARACTER=1 81 | export ompi_cv_fortran_sizeof_COMPLEX=8 82 | export ompi_cv_fortran_sizeof_COMPLEXp16=16 83 | export ompi_cv_fortran_sizeof_COMPLEXp32=32 84 | export ompi_cv_fortran_sizeof_COMPLEXp8=8 85 | export ompi_cv_fortran_sizeof_DOUBLE_COMPLEX=16 86 | export ompi_cv_fortran_sizeof_DOUBLE_PRECISION=8 87 | export ompi_cv_fortran_sizeof_INTEGER=4 88 | export ompi_cv_fortran_sizeof_INTEGERp16=16 89 | export ompi_cv_fortran_sizeof_INTEGERp1=1 90 | export ompi_cv_fortran_sizeof_INTEGERp2=2 91 | export ompi_cv_fortran_sizeof_INTEGERp4=4 92 | export ompi_cv_fortran_sizeof_INTEGERp8=8 93 | export ompi_cv_fortran_sizeof_LOGICAL=4 94 | export ompi_cv_fortran_sizeof_LOGICALp1=1 95 | export ompi_cv_fortran_sizeof_LOGICALp2=2 96 | export ompi_cv_fortran_sizeof_LOGICALp4=4 97 | export ompi_cv_fortran_sizeof_LOGICALp8=8 98 | export ompi_cv_fortran_sizeof_REAL=4 99 | export ompi_cv_fortran_sizeof_REALp16=16 100 | export ompi_cv_fortran_sizeof_REALp4=4 101 | export ompi_cv_fortran_sizeof_REALp8=8 102 | export ompi_cv_fortran_sizeof_type_test_mpi_handle_=4 103 | export ompi_cv_fortran_true_value=1 104 | export ompi_cv_fortran_use_only=yes 105 | export ompi_cv_real16_c_equiv='skipped (no REAL*16)' 106 | -------------------------------------------------------------------------------- /recipe/meta.yaml: -------------------------------------------------------------------------------- 1 | {% set version = "5.0.8" %} 2 | {% set major = version.rpartition('.')[0] %} 3 | {% set cuda_major = (cuda_compiler_version|default("11.8")).rpartition('.')[0] %} 4 | {% set build = 0 %} 5 | 6 | # give conda package a higher build number 7 | {% if mpi_type == 'conda' %} 8 | {% set build = build + 100 %} 9 | {% endif %} 10 | 11 | package: 12 | # must not match any outputs for requirements to be handled correctly 13 | name: openmpi-mpi 14 | version: {{ version }} 15 | 16 | source: 17 | fn: openmpi-{{ version }}.tar.bz2 18 | url: https://www.open-mpi.org/software/ompi/v{{ major }}/downloads/openmpi-{{ version }}.tar.bz2 19 | sha256: 53131e1a57e7270f645707f8b0b65ba56048f5b5ac3f68faabed3eb0d710e449 20 | 21 | build: 22 | number: {{ build }} 23 | skip: true # [win or (linux and cuda_compiler_version != "11.8")] 24 | 25 | outputs: 26 | - name: openmpi 27 | {% if mpi_type == 'conda' %} 28 | script: build-mpi.sh 29 | {% endif %} 30 | build: 31 | {% if mpi_type == 'conda' %} 32 | run_exports: 33 | - {{ pin_subpackage('openmpi', min_pin='x.x.x', max_pin='x') }} 34 | {% else %} 35 | string: {{ mpi_type }}_h{{ PKG_HASH }}_{{ build }} 36 | track_features: 37 | - openmpi_{{ mpi_type }} 38 | {% endif %} 39 | ignore_run_exports_from: 40 | - {{ compiler('cuda') }} # [cuda_compiler_version != "None"] 41 | requirements: 42 | build: 43 | - {{ compiler('c') }} 44 | - {{ compiler('cxx') }} 45 | - {{ compiler('cuda') }} # [cuda_compiler_version != "None"] 46 | - {{ compiler('fortran') }} 47 | - {{ stdlib('c') }} 48 | - pkg-config 49 | - make 50 | host: 51 | - libevent 52 | - libfabric-devel {{ libfabric }}.* 53 | - libhwloc 54 | - libpmix-devel 55 | - zlib 56 | - ucc # [linux and not ppc64le] 57 | - ucx # [linux and not ppc64le] 58 | - cuda-version {{ cuda_compiler_version }} # [cuda_compiler_version != "None"] 59 | run: 60 | - mpi 1.0 openmpi 61 | run_constrained: 62 | # Open MPI only uses CUDA Driver APIs, set the minimal driver version 63 | - __cuda >= {{ cuda_major ~ ".0" }} # [cuda_compiler_version != "None"] 64 | # Ensure a consistent CUDA environment 65 | - cuda-version >= {{ cuda_major ~ ".0" }} # [cuda_compiler_version != "None"] 66 | # conflict with prrte 67 | # openmpi (starting with 6) 68 | # bundles its own fork of prrte 69 | - libprrte ==0.0.0 70 | test: 71 | {% if mpi_type == 'conda' %} 72 | script: run_test.sh 73 | requires: 74 | - patchelf # [linux] 75 | files: 76 | - tests/helloworld.sh 77 | {% endif %} 78 | commands: 79 | {% if mpi_type == 'conda' %} 80 | - test ! -d $PREFIX/share/doc/openmpi 81 | - test ! -f $PREFIX/share/man/man3/MPI_Init.3 82 | {% else %} 83 | - echo "It works!" 84 | {% endif %} 85 | 86 | {% if mpi_type == 'conda' %} 87 | - name: openmpi-mpicc 88 | build: 89 | script: 90 | - echo 'ok' 91 | requirements: 92 | build: 93 | - {{ stdlib('c') }} 94 | run: 95 | - {{ pin_subpackage('openmpi', exact=True) }} 96 | # host C compilers work fine (better) on mac 97 | - {{ compiler('c') | replace(' ', '>=', 1) }} 98 | test: 99 | script: run_test.sh 100 | files: 101 | - tests/helloworld.c 102 | 103 | - name: openmpi-mpicxx 104 | build: 105 | script: 106 | - echo 'ok' 107 | requirements: 108 | build: 109 | - {{ stdlib('c') }} 110 | run: 111 | - {{ pin_subpackage('openmpi', exact=True) }} 112 | # host C compilers work fine (better) on mac 113 | - {{ compiler('cxx') | replace(' ', '>=', 1) }} 114 | test: 115 | script: run_test.sh 116 | files: 117 | - tests/helloworld.cxx 118 | 119 | - name: openmpi-mpifort 120 | build: 121 | script: 122 | - echo 'ok' 123 | requirements: 124 | build: 125 | - {{ stdlib('c') }} 126 | run: 127 | - {{ pin_subpackage('openmpi', exact=True) }} 128 | - {{ compiler('fortran') | replace(' ', '>=', 1) }} 129 | test: 130 | script: run_test.sh 131 | files: 132 | - tests/helloworld.f 133 | - tests/helloworld.f90 134 | {% endif %} 135 | 136 | about: 137 | home: https://www.open-mpi.org/ 138 | license: BSD-3-Clause 139 | license_family: BSD 140 | license_file: LICENSE 141 | summary: An open source Message Passing Interface implementation. 142 | description: | 143 | The Open MPI Project is an open source Message Passing Interface 144 | implementation that is developed and maintained by a consortium of academic, 145 | research, and industry partners. 146 | doc_url: https://www.open-mpi.org/doc/ 147 | dev_url: https://github.com/open-mpi/ompi 148 | 149 | extra: 150 | recipe-maintainers: 151 | - astrofrog 152 | - bekozi 153 | - dalcinl 154 | - leofang 155 | - minrk 156 | - msarahan 157 | - ocefpaf 158 | - beckermr 159 | - j34ni 160 | -------------------------------------------------------------------------------- /recipe/openmpi_activate.sh: -------------------------------------------------------------------------------- 1 | if [ "${CONDA_BUILD:-}" = "1" ]; then 2 | echo "setting openmpi environment variables for conda-build" 3 | if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" = "1" ]]; then 4 | # set compilation variables during cross compilation 5 | if [[ -z "${OMPI_CC:-}" && ! -z "${CC:-}" ]]; then 6 | echo "OMPI_CC=${CC}" 7 | export "OMPI_CC=${CC}" 8 | fi 9 | 10 | if [[ -z "${OMPI_CXX:-}" && ! -z "${CXX:-}" ]]; then 11 | echo "OMPI_CXX=${CXX}" 12 | export "OMPI_CXX=${CXX}" 13 | fi 14 | 15 | if [[ -z "${OMPI_FC:-}" && ! -z "${FC:-}" ]]; then 16 | echo "OMPI_FC=${FC}" 17 | export "OMPI_FC=${FC}" 18 | fi 19 | 20 | # require pkg-config? 21 | if [[ -z "${OMPI_CFLAGS:-}" ]]; then 22 | # pkg-config --cflags ompi 23 | export OMPI_CFLAGS="-I$PREFIX/include" 24 | fi 25 | if [[ -z "${OMPI_CXXFLAGS:-}" ]]; then 26 | # pkg-config --cflags ompi-cxx 27 | export OMPI_CXXFLAGS="-I$PREFIX/include" 28 | fi 29 | if [[ -z "${OMPI_FCFLAGS:-}" ]]; then 30 | # pkg-config --cflags ompi-fort 31 | export OMPI_FCFLAGS="-I$PREFIX/include" 32 | fi 33 | if [[ -z "${OMPI_LDFLAGS:-}" ]]; then 34 | # pkg-config --libs-only-L --libs-only-other ompi 35 | export OMPI_LDFLAGS="-L$PREFIX/lib -Wl,-rpath,$PREFIX/lib" 36 | if [[ "${target_platform:-}" == linux-* ]]; then 37 | export OMPI_LDFLAGS="${OMPI_LDFLAGS} -Wl,--allow-shlib-undefined" 38 | fi 39 | fi 40 | export OPAL_PREFIX="$PREFIX" 41 | fi 42 | 43 | # runtime variables 44 | export OMPI_MCA_plm_ssh_agent=false 45 | export OMPI_MCA_pml=ob1 46 | export OMPI_MCA_mpi_yield_when_idle=true 47 | export OMPI_MCA_btl_base_warn_component_unused=false 48 | export PRTE_MCA_rmaps_default_mapping_policy=:oversubscribe 49 | fi 50 | -------------------------------------------------------------------------------- /recipe/post-link-cuda.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cat << EOF >> $PREFIX/.messages.txt 4 | 5 | On Linux, Open MPI is built with CUDA awareness but it is disabled by default. 6 | To enable it, please set the environment variable 7 | OMPI_MCA_opal_cuda_support=true 8 | before launching your MPI processes. 9 | Equivalently, you can set the MCA parameter in the command line: 10 | mpiexec --mca opal_cuda_support 1 ... 11 | Note that you might also need to set UCX_MEMTYPE_CACHE=n for CUDA awareness via 12 | UCX. Please consult UCX documentation for further details. 13 | 14 | EOF 15 | -------------------------------------------------------------------------------- /recipe/run_test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -ex 3 | 4 | MPIEXEC="mpiexec" 5 | 6 | pushd "tests" 7 | 8 | if [[ $PKG_NAME == "openmpi" ]]; then 9 | 10 | if [[ "$target_platform" == linux-64 || "$target_platform" == linux-aarch64 ]]; then 11 | if [[ -z "$(ompi_info | grep ucc)" ]]; then 12 | echo "OpenMPI configured without UCC support!" 13 | exit 1 14 | fi 15 | if [[ -z "$(ompi_info | grep ucx)" ]]; then 16 | echo "OpenMPI configured without UCX support!" 17 | exit 1 18 | fi 19 | fi 20 | 21 | if [[ -n "$(conda list | grep cuda-version)" ]]; then 22 | echo "Improper CUDA dependency!" 23 | exit 1 24 | fi 25 | 26 | if [[ "$target_platform" == linux-* ]]; then 27 | if [[ -z "$(ompi_info | grep cuda)" ]]; then 28 | echo "OpenMPI configured without CUDA support!" 29 | exit 1 30 | fi 31 | 32 | # make sure libmpi doesn't link cuda 33 | # this doesn't actually check if cuda will be loaded, 34 | # only a direct link in libmpi. 35 | # But that's most likely if this gets mixed up again. 36 | if [[ $(patchelf --print-needed $CONDA_PREFIX/lib/libmpi.so | grep -cE 'libcuda.*\.so') -gt 0 ]]; then 37 | echo "improper dependency on CUDA shared libraries" 38 | patchelf --print-needed $CONDA_PREFIX/lib/libmpi.so 39 | fi 40 | fi 41 | 42 | command -v ompi_info 43 | ompi_info 44 | 45 | command -v mpiexec 46 | $MPIEXEC --help 47 | $MPIEXEC -n 4 ./helloworld.sh 48 | 49 | test -f $PREFIX/include/mpi.mod 50 | 51 | export MPIEXEC_TIMEOUT=1 52 | 53 | if $MPIEXEC -n 2 sleep 5; then 54 | echo "should have timed out" 55 | exit 1 56 | fi 57 | fi 58 | 59 | if [[ $PKG_NAME == "openmpi-mpicc" ]]; then 60 | command -v mpicc 61 | mpicc -show 62 | 63 | env | grep OMPI 64 | 65 | test -z "${OMPI_CC:-}" 66 | test -z "${OMPI_CFLAGS:-}" 67 | test -z "${OMPI_CPPFLAGS:-}" 68 | test -z "${OMPI_LDFLAGS:-}" 69 | 70 | mpicc helloworld.c -o helloworld_c 71 | $MPIEXEC -n 4 ./helloworld_c 72 | fi 73 | 74 | if [[ $PKG_NAME == "openmpi-mpicxx" ]]; then 75 | command -v mpicxx 76 | mpicxx -show 77 | 78 | test -z "${OMPI_CXX:-}" 79 | test -z "${OMPI_CXXFLAGS:-}" 80 | 81 | mpicxx helloworld.cxx -o helloworld_cxx 82 | $MPIEXEC -n 4 ./helloworld_cxx 83 | fi 84 | 85 | if [[ $PKG_NAME == "openmpi-mpifort" ]]; then 86 | command -v mpifort 87 | mpifort -show 88 | 89 | test -z "${OMPI_FC:-}" 90 | test -z "${OMPI_FCFLAGS:-}" 91 | 92 | mpifort helloworld.f -o helloworld1_f 93 | $MPIEXEC -n 4 ./helloworld1_f 94 | 95 | mpifort helloworld.f90 -o helloworld1_f90 96 | $MPIEXEC -n 4 ./helloworld1_f90 97 | 98 | command -v mpif77 99 | mpif77 -show 100 | 101 | mpif77 helloworld.f -o helloworld2_f 102 | $MPIEXEC -n 4 ./helloworld2_f 103 | 104 | command -v mpif90 105 | mpif90 -show 106 | 107 | mpif90 helloworld.f90 -o helloworld2_f90 108 | $MPIEXEC -n 4 ./helloworld2_f90 109 | 110 | fi 111 | 112 | popd 113 | -------------------------------------------------------------------------------- /recipe/tests/helloworld.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | int provided, size, rank, len; 7 | char name[MPI_MAX_PROCESSOR_NAME]; 8 | 9 | MPI_Init(&argc, &argv); 10 | 11 | MPI_Comm_size(MPI_COMM_WORLD, &size); 12 | MPI_Comm_rank(MPI_COMM_WORLD, &rank); 13 | MPI_Get_processor_name(name, &len); 14 | 15 | printf("Hello, World! I am process %d of %d on %s.\n", rank, size, name); 16 | 17 | MPI_Finalize(); 18 | return 0; 19 | } 20 | -------------------------------------------------------------------------------- /recipe/tests/helloworld.cxx: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | int provided, size, rank, len; 7 | char name[MPI_MAX_PROCESSOR_NAME]; 8 | 9 | MPI_Init(&argc, &argv); 10 | 11 | MPI_Comm_size(MPI_COMM_WORLD, &size); 12 | MPI_Comm_rank(MPI_COMM_WORLD, &rank); 13 | MPI_Get_processor_name(name, &len); 14 | 15 | std::cout << 16 | "Hello, World! " << 17 | "I am process " << rank << 18 | " of " << size << 19 | " on " << name << 20 | "." << std::endl; 21 | 22 | MPI_Finalize(); 23 | return 0; 24 | } 25 | -------------------------------------------------------------------------------- /recipe/tests/helloworld.f: -------------------------------------------------------------------------------- 1 | program main 2 | 3 | include 'mpif.h' 4 | 5 | integer ierr, rank, size, len 6 | character name*(MPI_MAX_PROCESSOR_NAME) 7 | 8 | call MPI_INIT(ierr) 9 | call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr) 10 | call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierr) 11 | call MPI_GET_PROCESSOR_NAME(name, len, ierr) 12 | 13 | print '(2A,I2,A,I2,3A)', 14 | & 'Hello, World! ', 15 | & 'I am process ', rank, 16 | & ' of ', size, 17 | & ' on ', trim(name), '.' 18 | 19 | call MPI_FINALIZE(ierr) 20 | 21 | end 22 | -------------------------------------------------------------------------------- /recipe/tests/helloworld.f90: -------------------------------------------------------------------------------- 1 | program main 2 | 3 | use mpi 4 | implicit none 5 | 6 | integer :: provided, ierr, size, rank, len 7 | character (len=MPI_MAX_PROCESSOR_NAME) :: name 8 | 9 | call MPI_Init(ierr) 10 | 11 | call MPI_Comm_rank(MPI_COMM_WORLD, rank, ierr) 12 | call MPI_Comm_size(MPI_COMM_WORLD, size, ierr) 13 | call MPI_Get_processor_name(name, len, ierr) 14 | 15 | write(*, '(2A,I2,A,I2,3A)') & 16 | 'Hello, World! ', & 17 | 'I am process ', rank, & 18 | ' of ', size, & 19 | ' on ', name(1:len), '.' 20 | 21 | call MPI_Finalize(ierr) 22 | 23 | end program main 24 | -------------------------------------------------------------------------------- /recipe/tests/helloworld.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eu 3 | rank=$OMPI_COMM_WORLD_RANK 4 | size=$OMPI_COMM_WORLD_SIZE 5 | printf "Hello, World! I am process %d of %d.\n" $rank $size 6 | --------------------------------------------------------------------------------