xSDK policies compatibility

Created by: aprokop

Template taking from here.

xSDK Community Policy Compatibility for ArborX

Website: https://github.com/arborx/ArborX

Mandatory Policies

Policy Support Notes
M1. Support xSDK community GNU Autoconf or CMake options. None Short-expanation-here; optional link for more extensive details if needed, see below. M1 details
M2. Provide a comprehensive test suite for correctness of installation verification. Full
M3. Employ user-provided MPI communicator (no MPI_COMM_WORLD). Don't assume a full MPI 3 implementation without checking. Provide an option to prevent any changes to MPI error-handling if it is changed by default. Full
M4. Give best effort at portability to key architectures (standard Linux distributions, GNU, Clang, vendor compilers, and target machines at ALCF, NERSC, OLCF). Full
M5. Provide a documented, reliable way to contact the development team. Full Have CONTRIBUTING.md
M6. Respect system resources and settings made by other previously called packages (e.g. signal handling). Full
M7. Come with an open source (BSD style) license. Full
M8. Provide a runtime API to return the current version number of the software. Full
M9. Use a limited and well-defined symbol, macro, library, and include file name space. Full
M10. Provide an xSDK team accessible repository (not necessarily publicly available). Full
M11. Have no hardwired print or IO statements that cannot be turned off. Full
M12. For external dependencies, allow installing, building, and linking against an outside copy of external software. Full
M13. Install headers and libraries under <prefix>/include and <prefix>/lib. Full
M14. Be buildable using 64 bit pointers. 32 bit is optional. Full
M15. All xSDK compatibility changes should be sustainable. Full
M16. The package must support production-quality installation compatible with the xSDK install tool and xSDK metapackage. Partial Spack package was merged, but is not part of xSDK metapackage yet.

M1 details : optional: provide more details about approach to addressing topic M1.

M2 details : optional: provide more details about approach to addressing topic M2.

Recommended Policies

Policy Support Notes
R1. Have a public repository. Full
R2. Possible to run test suite under valgrind in order to test for memory corruption issues.
R3. Adopt and document consistent system for error conditions/exceptions.
R4. Free all system resources acquired as soon as they are no longer needed. Need Kokkos initialize/finalize
R5. Provide a mechanism to export ordered list of library dependencies.
R6. Document versions of packages that it works with or depends upon, preferably in machine-readable form.
R7. Have README, SUPPORT, LICENSE, and CHANGELOG files in top directory. Partial need SUPPORT.

M1 CMake policies

Item # Option Description Notes
1 USE_XSDK_DEFAULTS=[YES,NO] Implement the default behavior described below. Each package can decide whether XSDK mode is the default mode.
2 CMAKE_INSTALL_PREFIX=directory Identify location to install package. Multiple “versions” of packages, such as debug and release, can be installed by using different prefix directories.
3 CMAKE_CXX_COMPILER, ... Select compilers and compiler flags Variable CPP not supported by raw CMake
4 CMAKE_BUILD_TYPE=[Debug,Release] Create libraries with debugging information and possible additional error checking Default in XSDK mode: Debug
5 BUILD_SHARED_LIBS=[YES,NO] Select option used for indicating whether to build shared libraries Default in XSDK mode: shared
6 XSDK_ENABLE_=[YES,NO] Build interface for a particular additional language.
7 XSDK_PRECISION=[SINGLE,DOUBLE,QUAD] Determine precision for packages that build only for one precision Default in XSDK mode: double. Packages that handle all precisions automatically are free to ignore this option.
8 XSDK_INDEX_SIZE=[32,64] Determine index size for packages that build only for one index size Default in XSDK mode: 32. Packages that handle all precisions automatically are free to ignore this option.
9 TPL_BLAS_LIBRARIES=”linkable list of libraries”; TPL_LAPACK_LIBRARIES=”linkable list of libraries” (should not use -L or -l flags in the lists) Set location of BLAS and LAPACK libraries Default is to locate one on the system automatically)
10 TPL_ENABLE_=[YES,NO], TPL_LIBRARIES=”linkable list of libraries” (should not use -L or -l flags), TPL_INCLUDE_DIRS=”/path/to/includes1;/path/to/includes1;...” (Cannot include -I flags) Determine other package libraries and include directories.
11 In the XSDK mode, XSDK projects should not rely on users providing any library path information in environmental variables such as LD_LIBRARY_PATH.
12 After packages are configured, they can be compiled, installed and “smoke” tested with thefollowing commands: make ; [sudo] make install ; make test_install.
13 After an install the package should provide a machine-readable output to show provenance, that is, what compilers were used and what libraries were linked with, as well as other build configuration information if this information was also stored in the install directory somewhere, so that users with problems can send the information directly to developers.