From 7e9ee7c58dd4066d5a53dea6ab2d8e05c22d099f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= <lukas.krupcik@vsb.cz>
Date: Wed, 23 Oct 2019 12:03:27 +0200
Subject: [PATCH] 	new file:   h/hwloc/hwloc-1.11.12-GCCcore-8.2.0.eb 
 new file:   h/hwloc/hwloc-1.11.12-PGI-19.7-GCC-8.2.0-2.31.1.eb 	new
 file:   n/numactl/numactl-2.0.12-GCCcore-8.2.0.eb 	new file:  
 o/OpenMPI/OpenMPI-3.1.4-PGI-19.7-GCC-8.2.0-2.31.1.eb 	modified:  
 p/PGI/PGI-19.7-GCC-8.2.0-2.31.1.eb

---
 h/hwloc/hwloc-1.11.12-GCCcore-8.2.0.eb        | 50 +++++++++++++
 ...hwloc-1.11.12-PGI-19.7-GCC-8.2.0-2.31.1.eb | 36 ++++++++++
 n/numactl/numactl-2.0.12-GCCcore-8.2.0.eb     | 34 +++++++++
 ...OpenMPI-3.1.4-PGI-19.7-GCC-8.2.0-2.31.1.eb | 72 +++++++++++++++++++
 p/PGI/PGI-19.7-GCC-8.2.0-2.31.1.eb            | 11 +++
 5 files changed, 203 insertions(+)
 create mode 100644 h/hwloc/hwloc-1.11.12-GCCcore-8.2.0.eb
 create mode 100644 h/hwloc/hwloc-1.11.12-PGI-19.7-GCC-8.2.0-2.31.1.eb
 create mode 100644 n/numactl/numactl-2.0.12-GCCcore-8.2.0.eb
 create mode 100644 o/OpenMPI/OpenMPI-3.1.4-PGI-19.7-GCC-8.2.0-2.31.1.eb

diff --git a/h/hwloc/hwloc-1.11.12-GCCcore-8.2.0.eb b/h/hwloc/hwloc-1.11.12-GCCcore-8.2.0.eb
new file mode 100644
index 00000000..b7b4fa36
--- /dev/null
+++ b/h/hwloc/hwloc-1.11.12-GCCcore-8.2.0.eb
@@ -0,0 +1,50 @@
+# IT4Innovations 2019
+
+easyblock = 'ConfigureMake'
+
+name = 'hwloc'
+version = '1.11.12'
+
+homepage = 'https://www.open-mpi.org/projects/hwloc/'
+
+description = """
+ The Portable Hardware Locality (hwloc) software package provides a portable
+ abstraction (across OS, versions, architectures, ...) of the hierarchical
+ topology of modern architectures, including NUMA memory nodes, sockets, shared
+ caches, cores and simultaneous multithreading. It also gathers various system
+ attributes such as cache and memory information as well as the locality of I/O
+ devices such as network interfaces, InfiniBand HCAs or GPUs. It primarily
+ aims at helping applications with gathering information about modern computing
+ hardware so as to exploit it accordingly and efficiently.
+"""
+
+toolchain = {'name': 'GCCcore', 'version': '8.2.0'}
+# need to build with -fno-tree-vectorize to avoid segfaulting lstopo on Intel Skylake
+# cfr. https://github.com/open-mpi/hwloc/issues/315
+toolchainopts = {'vectorize': False}
+
+source_urls = ['https://www.open-mpi.org/software/hwloc/v%(version_major_minor)s/downloads/']
+sources = [SOURCE_TAR_GZ]
+checksums = ['f1d49433e605dd653a77e1478a78cee095787d554a94afe40d1376bca6708ca5']
+
+builddependencies = [
+    ('binutils', '2.31.1'),
+]
+
+dependencies = [
+    ('numactl', '2.0.12'),
+    ('libxml2', '2.9.9', '', True),
+    ('libpciaccess', '0.14'),
+]
+
+configopts = "--enable-libnuma=$EBROOTNUMACTL "
+configopts += "--disable-cairo --disable-opencl --disable-cuda --disable-nvml --disable-gl --disable-libudev "
+
+sanity_check_paths = {
+    'files': ['bin/lstopo', 'include/hwloc/linux.h',
+              'lib/libhwloc.%s' % SHLIB_EXT],
+    'dirs': ['share/man/man3'],
+}
+sanity_check_commands = ['lstopo']
+
+moduleclass = 'system'
diff --git a/h/hwloc/hwloc-1.11.12-PGI-19.7-GCC-8.2.0-2.31.1.eb b/h/hwloc/hwloc-1.11.12-PGI-19.7-GCC-8.2.0-2.31.1.eb
new file mode 100644
index 00000000..95bf203a
--- /dev/null
+++ b/h/hwloc/hwloc-1.11.12-PGI-19.7-GCC-8.2.0-2.31.1.eb
@@ -0,0 +1,36 @@
+# IT4Innovations 2019
+
+easyblock = 'ConfigureMake'
+
+name = 'hwloc'
+version = '1.11.12'
+
+homepage = 'http://www.open-mpi.org/projects/hwloc/'
+description = """The Portable Hardware Locality (hwloc) software package provides a portable abstraction
+(across OS, versions, architectures, ...) of the hierarchical topology of modern architectures, including
+NUMA memory nodes, sockets, shared caches, cores and simultaneous multithreading. It also gathers various
+system attributes such as cache and memory information as well as the locality of I/O devices such as
+network interfaces, InfiniBand HCAs or GPUs. It primarily aims at helping applications with gathering
+information about modern computing hardware so as to exploit it accordingly and efficiently."""
+
+toolchain = {'name': 'PGI', 'version': '19.7-GCC-8.2.0-2.31.1'}
+toolchainopts = {'pic': True}
+
+source_urls = ['https://download.open-mpi.org/release/hwloc/v1.11/']
+sources = ['hwloc-1.11.12.tar.gz']
+
+dependencies = [
+    ('numactl', '2.0.12', '', ('GCCcore', '8.2.0'))
+]
+
+configopts = "--enable-libnuma=$EBROOTNUMACTL"
+
+sanity_check_paths = {
+    'files': ['bin/lstopo', 'include/hwloc/linux.h',
+              'lib/libhwloc.%s' % SHLIB_EXT],
+    'dirs': ['share/man/man3'],
+}
+
+sanity_check_commands = ['lstopo']
+
+moduleclass = 'system'
diff --git a/n/numactl/numactl-2.0.12-GCCcore-8.2.0.eb b/n/numactl/numactl-2.0.12-GCCcore-8.2.0.eb
new file mode 100644
index 00000000..c4efbd02
--- /dev/null
+++ b/n/numactl/numactl-2.0.12-GCCcore-8.2.0.eb
@@ -0,0 +1,34 @@
+easyblock = 'ConfigureMake'
+
+name = 'numactl'
+version = '2.0.12'
+
+homepage = 'http://oss.sgi.com/projects/libnuma/'
+
+description = """
+ The numactl program allows you to run your application program on specific
+ cpu's and memory nodes. It does this by supplying a NUMA memory policy to
+ the operating system before running your program. The libnuma library provides
+ convenient ways for you to add NUMA memory policies into your own program.
+"""
+
+toolchain = {'name': 'GCCcore', 'version': '8.2.0'}
+toolchainopts = {'pic': True}
+
+source_urls = ['https://github.com/numactl/numactl/archive/']
+sources = ['v%(version)s.tar.gz']
+checksums = ['7c3e819c2bdeb883de68bafe88776a01356f7ef565e75ba866c4b49a087c6bdf']
+
+builddependencies = [
+    ('binutils', '2.31.1'),
+    ('Autotools', '20180311'),
+]
+
+preconfigopts = "./autogen.sh && "
+
+sanity_check_paths = {
+    'files': ['bin/numactl', 'bin/numastat', 'lib/libnuma.%s' % SHLIB_EXT, 'lib/libnuma.a'],
+    'dirs': ['share/man', 'include']
+}
+
+moduleclass = 'tools'
diff --git a/o/OpenMPI/OpenMPI-3.1.4-PGI-19.7-GCC-8.2.0-2.31.1.eb b/o/OpenMPI/OpenMPI-3.1.4-PGI-19.7-GCC-8.2.0-2.31.1.eb
new file mode 100644
index 00000000..b8136abc
--- /dev/null
+++ b/o/OpenMPI/OpenMPI-3.1.4-PGI-19.7-GCC-8.2.0-2.31.1.eb
@@ -0,0 +1,72 @@
+# IT4Innovations 2019
+
+easyblock = 'ConfigureMake'
+
+name = 'OpenMPI'
+version = '3.1.4'
+
+homepage = 'http://www.open-mpi.org/'
+description = """The Open MPI Project is an open source MPI-2 implementation."""
+
+toolchain = {'name': 'PGI', 'version': '19.7-GCC-8.2.0-2.31.1'}
+toolchainopts = {'pic': True}
+
+source_urls = ['https://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads']
+sources = [SOURCELOWER_TAR_GZ]
+patches = ['%(name)s-3.1.3-add_ompi_datatype_attribute_to_release_ucp_datatype.patch',
+#    'OpenMPI-3.1_fix-ib-query.patch',
+]
+checksums = [
+    'a7c34ad052ea8201ed9e7389994069fe6996403beabdd2d711caf0532808156c',  # openmpi-3.1.4.tar.gz
+    # OpenMPI-3.1.3-add_ompi_datatype_attribute_to_release_ucp_datatype.patch
+    '46fa94eb417954bdb297291bad4f4d32018af4911bebf3e59af6276eba6a50a9',
+]
+
+dependencies = [
+    ('zlib', '1.2.11'),
+    ('hwloc', '1.11.12', '', ('GCCcore', '8.2.0'))
+]
+
+#preconfigopts = 'export CFLAGS="-O1"'
+
+configopts = ' CFLAGS="-O1" --with-threads=posix --enable-shared --enable-static --enable-mpi-thread-multiple --with-verbs '
+# suppress failure modes in relation to mpirun path
+configopts += '--enable-mpirun-prefix-by-default '
+configopts += '--with-hwloc=$EBROOTHWLOC '  # hwloc support
+# statically link component, don't do dynamic loading
+configopts += '--disable-dlopen '
+configopts += '--with-tm=/opt/pbs/default '  # Enable PBS
+
+preconfigopts = 'export LIBS="-ldl" && export CC="pgcc -noswitcherror" && export CXX="pgc++ -noswitcherror" && export FC="pgfortran -noswitcherror" && '
+
+# needed for --with-verbs
+osdependencies = [('libibverbs-dev', 'libibverbs-devel', 'rdma-core-devel')]
+
+libs = [
+    "mpi_cxx",
+    "mpi_mpifh",
+    "mpi",
+    "ompitrace",
+    "open-pal",
+    "open-rte",
+    "vt",
+    "vt-hyb",
+    "vt-mpi",
+    "vt-mpi-unify"]
+
+sanity_check_paths = {
+    'files': [],
+    'dirs': ['bin', 'lib', 'include'],
+}
+
+sanity_check_commands = [
+    ('mpicc --version | grep pgcc', ''),
+    ('mpicxx --version | grep pgc++', ''),
+    ('mpifort --version | grep pgfortran', ''),
+]
+
+modextravars = {'OMPI_MCA_btl_openib_if_include': 'mlx4_0',
+                'OMPI_MCA_oob_tcp_if_include': '10.0.0.0/8',
+                }
+
+moduleclass = 'mpi'
diff --git a/p/PGI/PGI-19.7-GCC-8.2.0-2.31.1.eb b/p/PGI/PGI-19.7-GCC-8.2.0-2.31.1.eb
index 6ff52019..17bfcd3d 100644
--- a/p/PGI/PGI-19.7-GCC-8.2.0-2.31.1.eb
+++ b/p/PGI/PGI-19.7-GCC-8.2.0-2.31.1.eb
@@ -20,7 +20,18 @@ dependencies = [
     ('numactl', '2.0.12', '', ('GCCcore', gccver)),
 ]
 
+configopts = 'export PGI_INSTALL_MPI=true &&'
+
 # license file
 license_file = '/apps/licenses/pgi/license.dat'
 
+modextrapaths = {
+    'PATH': 'linux86-64-llvm/2019/mpi/openmpi-3.1.3/bin',
+    'LD_LIBRARY_PATH': 'linux86-64-llvm/2019/mpi/openmpi-3.1.3/lib',
+    'LIBRARY_PATH': 'linux86-64-llvm/2019/mpi/openmpi-3.1.3/lib',
+    'CPATH': 'linux86-64-llvm/2019/mpi/openmpi-3.1.3/include',
+    'MANPATH': 'linux86-64-llvm/2019/mpi/openmpi-3.1.3/share/man',
+    'PKG_CONFIG_PATH': 'linux86-64-llvm/2019/mpi/openmpi-3.1.3/lib/pkgconfig',
+}
+
 moduleclass = 'compiler'