From 30c178736e68999ceae7d9102a2c72657c7ee5d0 Mon Sep 17 00:00:00 2001 From: William F Godoy Date: Wed, 22 Jan 2020 17:12:10 -0500 Subject: [PATCH] conda build scripts added conda build files for anaconda modified ReadMe.md --- ReadMe.md | 114 ++++++++++++----------- scripts/conda/LICENSE | 201 ++++++++++++++++++++++++++++++++++++++++ scripts/conda/build.sh | 19 ++++ scripts/conda/meta.yaml | 34 +++++++ 4 files changed, 313 insertions(+), 55 deletions(-) create mode 100644 scripts/conda/LICENSE create mode 100644 scripts/conda/build.sh create mode 100644 scripts/conda/meta.yaml diff --git a/ReadMe.md b/ReadMe.md index 76187d2..f507fd6 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -1,7 +1,6 @@ -# Adaptable Input / Output System version 2, ADIOS2-Examples -This repository contains code examples of how to use the ADIOS I/O system, which is being developed as part of the -U.S. Department of Energy Exascale Computing Program. +# ADIOS2-Examples +This repository contains code examples of how to use the Adaptable Input Output system, ADIOS2, bindings. ADIOS2 and ADIOS2-Examples are developed as part of the U.S. Department of Energy Exascale Computing Program. The ADIOS2 source code is located at [https://github.com/ornladios/ADIOS2](https://github.com/ornladios/ADIOS2) @@ -12,74 +11,74 @@ The ADIOS2 source code is located at - developer: setup scripts for developers -* source: location for all examples source code +* source: location for all examples source code - - cpp: examples for the low-level and high-level ADIOS2 C++ APIs + - cpp: examples for the low-level, high-level ADIOS2 C++ APIs and combined examples with Python + - c: examples for the C APIs (build on top of the C++ low-level API) - - 001_hello-world: - - - c: examples for the C APIs (build on top of the C++ low-level APIs) - - -## Getting Started -1. Clone the repository, and cd into it: +## Package Distributions (preferred) - ```bash - $ git clone https://github.com/ornladios/ADIOS2-examples.git - ``` +This is the preferred method as it includes dependencies (e.g. adios2, openmpi, matplotlib) required by the source. - ```bash - $ cd ADIOS2-Examples +1. Conda installation on Linux, Mac and Windows Linux Subsystem from new environment: + + ``` + $ conda create --name adios2-examples + $ conda activate adios2-examples + $ conda install adios2-examples-openmpi -c williamfgc -c conda-forge ``` -Meson and CMake build options are provided. In the future, we expect to distribute the adios2-examples as a package in conda, spack, dockerfile, etc. +Meson and CMake installations from source are provided if none of the methods above are available. -## Installing with [Meson](https://mesonbuild.com/) +## Installing from source with [Meson](https://mesonbuild.com/) 1. Requirements: - - meson build >= 0.52.0, from `pip3 install meson` - - ninja - - mono-complete (might be already installed) - - mpi: openmpi or mpich - - adios2 mpi version: - - macOS: `brew install adios2` - - cmake >= v3.8 (optional) if adios2 is installed in non-system location (e.g. /opt) + - meson build >= 0.52.0, from `pip3 install meson` + - ninja + - mono-complete (might be already installed) + - mpi: openmpi or mpich + - adios2 mpi version: + - macOS: `brew install adios2` + - cmake >= v3.8 (optional) if adios2 is installed in non-system location (e.g. `/opt`) + - python: mpi4py, numpy, matplotlib 2. Build, Test, Install: From the ADIOS2-Examples directory: - if adios2 is on a standard installation (e.g. system location /usr, spack, conda, etc.) + if adios2 is on a standard installation (e.g. system location `/usr`, spack, conda, etc.) ``` $ meson build-meson --prefix=/path/to/install/adios2-examples ``` - if adios2 is on a non-standard location (e.g. /opt) + if adios2 is on a non-standard location (e.g. `/opt`) - ```bash - $ meson build-meson --prefix=/path/to/install/adios2-examples -DADIOS2_DIR=/path/to/adios2/lib/cmake/adios2 + ``` + $ meson build-meson --prefix=/path/to/install/adios2-examples + -DADIOS2_DIR=/path/to/adios2/lib/cmake/adios2 ``` - ```bash + ``` $ cd build-meson $ ninja $ ninja test $ ninja install ``` -## Installing with [CMake](https://cmake.org/) +## Installing from source with [CMake](https://cmake.org/) 1. Requirements: - - mpi: openmpi or mpich - - adios2 mpi version: - - macOS: `brew install adios2` - - cmake >= v3.8 + - mpi: openmpi or mpich + - adios2 mpi and python version: + - macOS: `brew install adios2` + - cmake >= v3.8 + - python: mpi4py, numpy, matplotlib 2. Build, Test, Install: @@ -90,13 +89,13 @@ Meson and CMake build options are provided. In the future, we expect to distribu $ cd build-cmake ``` - if using an adios2 standard installation (e.g. system location /usr, spack, conda, etc.) + if using an adios2 standard installation (e.g. system location /usr, spack, conda, etc.): ``` $ cmake -DCMAKE_INSTALL_PREFIX=/path/to/install/adios2-examples .. ``` - if using an adios2 non-standard location (e.g. /opt) + if using an adios2 non-standard location (e.g. /opt): ``` $ cmake -DCMAKE_INSTALL_PREFIX=/path/to/install/adios2-examples \ @@ -112,42 +111,43 @@ Meson and CMake build options are provided. In the future, we expect to distribu ## Running the Examples - The final installation structure of the adios2-examples package follows the source directory - - adios2-install: +The final installation structure of the adios2-examples package include a bin directory for the executables and a share directory for the config files and scripts to a particular example. + +adios2-examples installation structure: - bin/ - - a2e_001_hello-world - - a2e_001_hello-world_hl - - ... + a2e_001_hello-world + a2e_001_hello-world_hl + ... + a2e_003_gray-scott + a2e_003_pdf_calc - - share/ - - ReadMe_001_hello-world.md + - share/adios2-examples/ + 003_gray-scott - Each executables starts with the `a2e_XYZ_*` prefix, where XYZ is the example number, - and a ReadMe.md file with instructions on how to run each example. - - For example, to run 001_hello-world examples (assuming `adios2-examples/bin` is in the `$PATH`): - +Each executable under `bin` starts with the `a2e_XYZ_*` prefix, where a2e is fixed and XYZ is the example number. Whereas, each `share/adios2-examples` directory has a ReadMe.md file with instructions. + +For example, to run `001_hello-world` examples (assuming `adios2-examples/bin` is in the `$PATH`): + ``` - $ mpirun -n 4 a2e_001_hello-world + $ mpirun -n 4 a2e_001_hello-world_cpp Hello World from ADIOS2 Hello World from ADIOS2 Hello World from ADIOS2 Hello World from ADIOS2 ``` - or for the high-level C++ API +or for the high-level C++ API: ``` - $ mpirun -n 4 a2e_001_hello-world_hl + $ mpirun -n 4 a2e_001_hello-world_hl_cpp Hello World from ADIOS2 Hello World from ADIOS2 Hello World from ADIOS2 Hello World from ADIOS2 ``` - these would generate corresponding bp files that can be inspected with the [bpls utility](https://adios2.readthedocs.io/en/latest/ecosystem/utilities.html#bpls-inspecting-data) in ADIOS2. +these runs would generate corresponding bp files that can be inspected with the [bpls utility](https://adios2.readthedocs.io/en/latest/ecosystem/utilities.html#bpls-inspecting-data) in ADIOS2. ``` $ ls -d *.bp @@ -162,9 +162,13 @@ Meson and CMake build options are provided. In the future, we expect to distribu string Greeting scalar = "Hello World from ADIOS2" ``` +For a more elaborated use case see example [003_gray-scott](https://github.com/ornladios/ADIOS2-Examples/tree/master/source/cpp/003_gray-scott). + + ## Credits * William F Godoy godoywf@ornl.gov * Norbert Podhorszki pnb@ornl.gov * Keichi Takahashi keichi@is.naist.jp * Hiroshi Watanabe + diff --git a/scripts/conda/LICENSE b/scripts/conda/LICENSE new file mode 100644 index 0000000..c63da7b --- /dev/null +++ b/scripts/conda/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 UT-BATTELLE, LLC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/scripts/conda/build.sh b/scripts/conda/build.sh new file mode 100644 index 0000000..2b28144 --- /dev/null +++ b/scripts/conda/build.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# builds a special adios2 version for Jupyter Notebooks cling using openmpi + +set -e +set -x + +mkdir build-dir +cd build-dir + +cmake \ + -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ + -DCMAKE_BUILD_TYPE=Release \ + .. + +make -j 8 +make install + diff --git a/scripts/conda/meta.yaml b/scripts/conda/meta.yaml new file mode 100644 index 0000000..6494069 --- /dev/null +++ b/scripts/conda/meta.yaml @@ -0,0 +1,34 @@ +package: + name: adios2-examples-openmpi + version: 2.5.0 + +build: + number: 0 + string: full + +source: + git_url: https://github.com/ornladios/adios2-examples.git + git_rev: master + +requirements: + build: + - python + - openmpi + - mpi4py + - numpy=1.15 + - cmake + - adios2-openmpi + run: + - python + - openmpi + - mpi4py + - numpy=1.15 + - adios2-openmpi + - matplotlib + +about: + home: https://github.com/ornladios/adios2-examples + license: Apache2 + license_file: LICENSE + +# build: conda build -c conda-forge -c williamfgc .