commit
10014eabc6
@ -0,0 +1 @@
|
||||
SOURCES/openmpi-4.1.1.tar.bz2
|
@ -0,0 +1 @@
|
||||
fa4dc97da18c8c26d5aadb85262a0f2d52b1aa90 SOURCES/openmpi-4.1.1.tar.bz2
|
@ -0,0 +1,367 @@
|
||||
From 63c80c7692e55f634cbca6f67cc5c9cdef3a04d2 Mon Sep 17 00:00:00 2001
|
||||
From: Honggang Li <honli@redhat.com>
|
||||
Date: Mon, 28 Jun 2021 21:38:13 +0800
|
||||
Subject: [PATCH] Revert "ucx: check supported transports and devices for
|
||||
setting priority"
|
||||
|
||||
This reverts commit c36d7459b6331c4da825cad5a64326e7c1a272aa.
|
||||
---
|
||||
contrib/platform/mellanox/optimized.conf | 2 -
|
||||
ompi/mca/pml/ucx/pml_ucx_component.c | 15 +-
|
||||
opal/mca/common/ucx/common_ucx.c | 202 +----------------------
|
||||
opal/mca/common/ucx/common_ucx.h | 15 --
|
||||
opal/mca/common/ucx/configure.m4 | 2 -
|
||||
5 files changed, 2 insertions(+), 234 deletions(-)
|
||||
|
||||
diff --git a/contrib/platform/mellanox/optimized.conf b/contrib/platform/mellanox/optimized.conf
|
||||
index 543fd8d1e224..b86b37c9e2fa 100644
|
||||
--- a/contrib/platform/mellanox/optimized.conf
|
||||
+++ b/contrib/platform/mellanox/optimized.conf
|
||||
@@ -61,8 +61,6 @@
|
||||
coll = ^ml
|
||||
hwloc_base_binding_policy = core
|
||||
btl = self
|
||||
-pml_ucx_tls = any
|
||||
-pml_ucx_devices = any
|
||||
# Basic behavior to smooth startup
|
||||
mca_base_component_show_load_errors = 0
|
||||
orte_abort_timeout = 10
|
||||
diff --git a/ompi/mca/pml/ucx/pml_ucx_component.c b/ompi/mca/pml/ucx/pml_ucx_component.c
|
||||
index 6aed6c41d11d..ed9cc6573e8e 100644
|
||||
--- a/ompi/mca/pml/ucx/pml_ucx_component.c
|
||||
+++ b/ompi/mca/pml/ucx/pml_ucx_component.c
|
||||
@@ -107,26 +107,13 @@ static mca_pml_base_module_t*
|
||||
mca_pml_ucx_component_init(int* priority, bool enable_progress_threads,
|
||||
bool enable_mpi_threads)
|
||||
{
|
||||
- opal_common_ucx_support_level_t support_level;
|
||||
int ret;
|
||||
|
||||
- support_level = opal_common_ucx_support_level(ompi_pml_ucx.ucp_context);
|
||||
- if (support_level == OPAL_COMMON_UCX_SUPPORT_NONE) {
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
if ( (ret = mca_pml_ucx_init(enable_mpi_threads)) != 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- /*
|
||||
- * If found supported devices - set to the configured (high) priority.
|
||||
- * Otherwise - Found only supported transports (which could be exposed by
|
||||
- * unsupported devices), so set a priority lower than ob1.
|
||||
- */
|
||||
- *priority = (support_level == OPAL_COMMON_UCX_SUPPORT_DEVICE) ?
|
||||
- ompi_pml_ucx.priority : 19;
|
||||
- PML_UCX_VERBOSE(2, "returning priority %d", *priority);
|
||||
+ *priority = ompi_pml_ucx.priority;
|
||||
return &ompi_pml_ucx.super;
|
||||
}
|
||||
|
||||
diff --git a/opal/mca/common/ucx/common_ucx.c b/opal/mca/common/ucx/common_ucx.c
|
||||
index ac7a17d799a5..ae8e66877ab6 100644
|
||||
--- a/opal/mca/common/ucx/common_ucx.c
|
||||
+++ b/opal/mca/common/ucx/common_ucx.c
|
||||
@@ -14,11 +14,8 @@
|
||||
#include "opal/mca/base/mca_base_framework.h"
|
||||
#include "opal/mca/pmix/pmix.h"
|
||||
#include "opal/memoryhooks/memory.h"
|
||||
-#include "opal/util/argv.h"
|
||||
|
||||
#include <ucm/api/ucm.h>
|
||||
-#include <fnmatch.h>
|
||||
-#include <stdio.h>
|
||||
|
||||
/***********************************************************************/
|
||||
|
||||
@@ -28,8 +25,7 @@ opal_common_ucx_module_t opal_common_ucx = {
|
||||
.verbose = 0,
|
||||
.progress_iterations = 100,
|
||||
.registered = 0,
|
||||
- .opal_mem_hooks = 0,
|
||||
- .tls = NULL
|
||||
+ .opal_mem_hooks = 0
|
||||
};
|
||||
|
||||
static void opal_common_ucx_mem_release_cb(void *buf, size_t length,
|
||||
@@ -40,15 +36,10 @@ static void opal_common_ucx_mem_release_cb(void *buf, size_t length,
|
||||
|
||||
OPAL_DECLSPEC void opal_common_ucx_mca_var_register(const mca_base_component_t *component)
|
||||
{
|
||||
- static const char *default_tls = "rc_verbs,ud_verbs,rc_mlx5,dc_mlx5,cuda_ipc,rocm_ipc";
|
||||
- static const char *default_devices = "mlx*";
|
||||
static int registered = 0;
|
||||
static int hook_index;
|
||||
static int verbose_index;
|
||||
static int progress_index;
|
||||
- static int tls_index;
|
||||
- static int devices_index;
|
||||
-
|
||||
if (!registered) {
|
||||
verbose_index = mca_base_var_register("opal", "opal_common", "ucx", "verbose",
|
||||
"Verbose level of the UCX components",
|
||||
@@ -69,29 +60,6 @@ OPAL_DECLSPEC void opal_common_ucx_mca_var_register(const mca_base_component_t *
|
||||
OPAL_INFO_LVL_3,
|
||||
MCA_BASE_VAR_SCOPE_LOCAL,
|
||||
&opal_common_ucx.opal_mem_hooks);
|
||||
-
|
||||
- opal_common_ucx.tls = malloc(sizeof(*opal_common_ucx.tls));
|
||||
- *opal_common_ucx.tls = strdup(default_tls);
|
||||
- tls_index = mca_base_var_register("opal", "opal_common", "ucx", "tls",
|
||||
- "List of UCX transports which should be supported on the system, to enable "
|
||||
- "selecting the UCX component. Special values: any (any available). "
|
||||
- "A '^' prefix negates the list. "
|
||||
- "For example, in order to exclude on shared memory and TCP transports, "
|
||||
- "please set to '^posix,sysv,self,tcp,cma,knem,xpmem'.",
|
||||
- MCA_BASE_VAR_TYPE_STRING, NULL, 0, 0,
|
||||
- OPAL_INFO_LVL_3,
|
||||
- MCA_BASE_VAR_SCOPE_LOCAL,
|
||||
- opal_common_ucx.tls);
|
||||
-
|
||||
- opal_common_ucx.devices = malloc(sizeof(*opal_common_ucx.devices));
|
||||
- *opal_common_ucx.devices = strdup(default_devices);
|
||||
- devices_index = mca_base_var_register("opal", "opal_common", "ucx", "devices",
|
||||
- "List of device driver pattern names, which, if supported by UCX, will "
|
||||
- "bump its priority above ob1. Special values: any (any available)",
|
||||
- MCA_BASE_VAR_TYPE_STRING, NULL, 0, 0,
|
||||
- OPAL_INFO_LVL_3,
|
||||
- MCA_BASE_VAR_SCOPE_LOCAL,
|
||||
- opal_common_ucx.devices);
|
||||
registered = 1;
|
||||
}
|
||||
if (component) {
|
||||
@@ -107,14 +75,6 @@ OPAL_DECLSPEC void opal_common_ucx_mca_var_register(const mca_base_component_t *
|
||||
component->mca_type_name,
|
||||
component->mca_component_name,
|
||||
"opal_mem_hooks", 0);
|
||||
- mca_base_var_register_synonym(tls_index, component->mca_project_name,
|
||||
- component->mca_type_name,
|
||||
- component->mca_component_name,
|
||||
- "tls", 0);
|
||||
- mca_base_var_register_synonym(devices_index, component->mca_project_name,
|
||||
- component->mca_type_name,
|
||||
- component->mca_component_name,
|
||||
- "devices", 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,166 +123,6 @@ OPAL_DECLSPEC void opal_common_ucx_mca_deregister(void)
|
||||
opal_output_close(opal_common_ucx.output);
|
||||
}
|
||||
|
||||
-#if HAVE_DECL_OPEN_MEMSTREAM
|
||||
-static bool opal_common_ucx_check_device(const char *device_name, char **device_list)
|
||||
-{
|
||||
- char sysfs_driver_link[PATH_MAX];
|
||||
- char driver_path[PATH_MAX];
|
||||
- char *ib_device_name;
|
||||
- char *driver_name;
|
||||
- char **list_item;
|
||||
- ssize_t ret;
|
||||
-
|
||||
- /* mlx5_0:1 */
|
||||
- ret = sscanf(device_name, "%m[^:]%*d", &ib_device_name);
|
||||
- if (ret != 1) {
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
- sysfs_driver_link[sizeof(sysfs_driver_link) - 1] = '\0';
|
||||
- snprintf(sysfs_driver_link, sizeof(sysfs_driver_link) - 1,
|
||||
- "/sys/class/infiniband/%s/device/driver", ib_device_name);
|
||||
- free(ib_device_name);
|
||||
-
|
||||
- driver_path[sizeof(driver_path) - 1] = '\0';
|
||||
- ret = readlink(sysfs_driver_link, driver_path, sizeof(driver_path) - 1);
|
||||
- if (ret < 0) {
|
||||
- MCA_COMMON_UCX_VERBOSE(2, "readlink(%s) failed: %s", sysfs_driver_link,
|
||||
- strerror(errno));
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
- driver_name = basename(driver_path);
|
||||
- for (list_item = device_list; *list_item != NULL; ++list_item) {
|
||||
- if (!fnmatch(*list_item, driver_name, 0)) {
|
||||
- MCA_COMMON_UCX_VERBOSE(2, "driver '%s' matched by '%s'",
|
||||
- driver_path, *list_item);
|
||||
- return true;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- return false;
|
||||
-}
|
||||
-#endif
|
||||
-
|
||||
-OPAL_DECLSPEC opal_common_ucx_support_level_t
|
||||
-opal_common_ucx_support_level(ucp_context_h context)
|
||||
-{
|
||||
- opal_common_ucx_support_level_t support_level = OPAL_COMMON_UCX_SUPPORT_NONE;
|
||||
- static const char *support_level_names[] = {
|
||||
- [OPAL_COMMON_UCX_SUPPORT_NONE] = "none",
|
||||
- [OPAL_COMMON_UCX_SUPPORT_TRANSPORT] = "transports only",
|
||||
- [OPAL_COMMON_UCX_SUPPORT_DEVICE] = "transports and devices"
|
||||
- };
|
||||
-#if HAVE_DECL_OPEN_MEMSTREAM
|
||||
- char *rsc_tl_name, *rsc_device_name;
|
||||
- char **tl_list, **device_list, **list_item;
|
||||
- bool is_any_tl, is_any_device;
|
||||
- bool found_tl, negate;
|
||||
- char line[128];
|
||||
- FILE *stream;
|
||||
- char *buffer;
|
||||
- size_t size;
|
||||
- int ret;
|
||||
-#endif
|
||||
-
|
||||
- is_any_tl = !strcmp(*opal_common_ucx.tls, "any");
|
||||
- is_any_device = !strcmp(*opal_common_ucx.devices, "any");
|
||||
-
|
||||
- /* Check for special value "any" */
|
||||
- if (is_any_tl && is_any_device) {
|
||||
- MCA_COMMON_UCX_VERBOSE(1, "ucx is enabled on any transport or device",
|
||||
- *opal_common_ucx.tls);
|
||||
- support_level = OPAL_COMMON_UCX_SUPPORT_DEVICE;
|
||||
- goto out;
|
||||
- }
|
||||
-
|
||||
-#if HAVE_DECL_OPEN_MEMSTREAM
|
||||
- /* Split transports list */
|
||||
- negate = ('^' == (*opal_common_ucx.tls)[0]);
|
||||
- tl_list = opal_argv_split(*opal_common_ucx.tls + (negate ? 1 : 0), ',');
|
||||
- if (tl_list == NULL) {
|
||||
- MCA_COMMON_UCX_VERBOSE(1, "failed to split tl list '%s', ucx is disabled",
|
||||
- *opal_common_ucx.tls);
|
||||
- goto out;
|
||||
- }
|
||||
-
|
||||
- /* Split devices list */
|
||||
- device_list = opal_argv_split(*opal_common_ucx.devices, ',');
|
||||
- if (device_list == NULL) {
|
||||
- MCA_COMMON_UCX_VERBOSE(1, "failed to split devices list '%s', ucx is disabled",
|
||||
- *opal_common_ucx.devices);
|
||||
- goto out_free_tl_list;
|
||||
- }
|
||||
-
|
||||
- /* Open memory stream to dump UCX information to */
|
||||
- stream = open_memstream(&buffer, &size);
|
||||
- if (stream == NULL) {
|
||||
- MCA_COMMON_UCX_VERBOSE(1, "failed to open memory stream for ucx info (%s), "
|
||||
- "ucx is disabled", strerror(errno));
|
||||
- goto out_free_device_list;
|
||||
- }
|
||||
-
|
||||
- /* Print ucx transports information to the memory stream */
|
||||
- ucp_context_print_info(context, stream);
|
||||
-
|
||||
- /* Rewind and read transports/devices list from the stream */
|
||||
- fseek(stream, 0, SEEK_SET);
|
||||
- while ((support_level != OPAL_COMMON_UCX_SUPPORT_DEVICE) &&
|
||||
- (fgets(line, sizeof(line), stream) != NULL)) {
|
||||
- rsc_tl_name = NULL;
|
||||
- ret = sscanf(line,
|
||||
- /* "# resource 6 : md 5 dev 4 flags -- rc_verbs/mlx5_0:1" */
|
||||
- "# resource %*d : md %*d dev %*d flags -- %m[^/ \n\r]/%m[^/ \n\r]",
|
||||
- &rsc_tl_name, &rsc_device_name);
|
||||
- if (ret != 2) {
|
||||
- free(rsc_tl_name);
|
||||
- continue;
|
||||
- }
|
||||
-
|
||||
- /* Check if 'rsc_tl_name' is found provided list */
|
||||
- found_tl = is_any_tl;
|
||||
- for (list_item = tl_list; !found_tl && (*list_item != NULL); ++list_item) {
|
||||
- found_tl = !strcmp(*list_item, rsc_tl_name);
|
||||
- }
|
||||
-
|
||||
- /* Check if the transport has a match (either positive or negative) */
|
||||
- assert(!(is_any_tl && negate));
|
||||
- if (found_tl != negate) {
|
||||
- if (is_any_device ||
|
||||
- opal_common_ucx_check_device(rsc_device_name, device_list)) {
|
||||
- MCA_COMMON_UCX_VERBOSE(2, "%s/%s: matched both transport and device list",
|
||||
- rsc_tl_name, rsc_device_name);
|
||||
- support_level = OPAL_COMMON_UCX_SUPPORT_DEVICE;
|
||||
- } else {
|
||||
- MCA_COMMON_UCX_VERBOSE(2, "%s/%s: matched transport list but not device list",
|
||||
- rsc_tl_name, rsc_device_name);
|
||||
- support_level = OPAL_COMMON_UCX_SUPPORT_TRANSPORT;
|
||||
- }
|
||||
- } else {
|
||||
- MCA_COMMON_UCX_VERBOSE(2, "%s/%s: did not match transport list",
|
||||
- rsc_tl_name, rsc_device_name);
|
||||
- }
|
||||
-
|
||||
- free(rsc_device_name);
|
||||
- free(rsc_tl_name);
|
||||
- }
|
||||
-
|
||||
- MCA_COMMON_UCX_VERBOSE(2, "support level is %s", support_level_names[support_level]);
|
||||
- fclose(stream);
|
||||
- free(buffer);
|
||||
-
|
||||
-out_free_device_list:
|
||||
- opal_argv_free(device_list);
|
||||
-out_free_tl_list:
|
||||
- opal_argv_free(tl_list);
|
||||
-out:
|
||||
-#else
|
||||
- MCA_COMMON_UCX_VERBOSE(2, "open_memstream() was not found, ucx is disabled");
|
||||
-#endif
|
||||
- return support_level;
|
||||
-}
|
||||
-
|
||||
void opal_common_ucx_empty_complete_cb(void *request, ucs_status_t status)
|
||||
{
|
||||
}
|
||||
diff --git a/opal/mca/common/ucx/common_ucx.h b/opal/mca/common/ucx/common_ucx.h
|
||||
index 92cdd738ef98..202131ac8907 100644
|
||||
--- a/opal/mca/common/ucx/common_ucx.h
|
||||
+++ b/opal/mca/common/ucx/common_ucx.h
|
||||
@@ -88,8 +88,6 @@ typedef struct opal_common_ucx_module {
|
||||
int progress_iterations;
|
||||
int registered;
|
||||
bool opal_mem_hooks;
|
||||
- char **tls;
|
||||
- char **devices;
|
||||
} opal_common_ucx_module_t;
|
||||
|
||||
typedef struct opal_common_ucx_del_proc {
|
||||
@@ -97,23 +95,10 @@ typedef struct opal_common_ucx_del_proc {
|
||||
size_t vpid;
|
||||
} opal_common_ucx_del_proc_t;
|
||||
|
||||
-typedef enum {
|
||||
- /* No supported transports found (according to configured list of supported
|
||||
- transports) */
|
||||
- OPAL_COMMON_UCX_SUPPORT_NONE,
|
||||
-
|
||||
- /* Have supported transports but not supported devices */
|
||||
- OPAL_COMMON_UCX_SUPPORT_TRANSPORT,
|
||||
-
|
||||
- /* Have both supported transports and supported devices */
|
||||
- OPAL_COMMON_UCX_SUPPORT_DEVICE,
|
||||
-} opal_common_ucx_support_level_t;
|
||||
-
|
||||
extern opal_common_ucx_module_t opal_common_ucx;
|
||||
|
||||
OPAL_DECLSPEC void opal_common_ucx_mca_register(void);
|
||||
OPAL_DECLSPEC void opal_common_ucx_mca_deregister(void);
|
||||
-OPAL_DECLSPEC opal_common_ucx_support_level_t opal_common_ucx_support_level(ucp_context_h context);
|
||||
OPAL_DECLSPEC void opal_common_ucx_mca_proc_added(void);
|
||||
OPAL_DECLSPEC void opal_common_ucx_empty_complete_cb(void *request, ucs_status_t status);
|
||||
OPAL_DECLSPEC int opal_common_ucx_mca_pmix_fence(ucp_worker_h worker);
|
||||
diff --git a/opal/mca/common/ucx/configure.m4 b/opal/mca/common/ucx/configure.m4
|
||||
index af8628a889c6..27e07c2005b2 100644
|
||||
--- a/opal/mca/common/ucx/configure.m4
|
||||
+++ b/opal/mca/common/ucx/configure.m4
|
||||
@@ -18,8 +18,6 @@ AC_DEFUN([MCA_opal_common_ucx_CONFIG],[
|
||||
[common_ucx_happy="yes"],
|
||||
[common_ucx_happy="no"])
|
||||
|
||||
- AC_CHECK_DECLS([open_memstream], [], [], [[#include <stdio.h>]])
|
||||
-
|
||||
AS_IF([test "$common_ucx_happy" = "yes"],
|
||||
[$1],
|
||||
[$2])
|
||||
--
|
||||
2.31.1
|
||||
|
@ -0,0 +1,33 @@
|
||||
From 266189935aef4fce825d0db831b4b53accc62c32 Mon Sep 17 00:00:00 2001
|
||||
From: Jeff Squyres <jsquyres@cisco.com>
|
||||
Date: Tue, 22 Jun 2021 22:28:37 -0400
|
||||
Subject: [PATCH] fbtl-posix: link to common_ompio
|
||||
|
||||
The posix fbtl calls mca_common_ompio_progress(), which resides in
|
||||
common/ompio (i.e., libmca_common_ompio.la). So add that into
|
||||
mca_fbtl_posix_la_LIBADD (like we do in a few other OMPIO-based
|
||||
components). Failure to do this *can* lead to the posix fbtl
|
||||
component failing to load (depending on whether other OMPIO-based
|
||||
components that pull in libmca_common_ompio were loaded first).
|
||||
|
||||
Thanks to Honggang Li for raising the issue.
|
||||
|
||||
Signed-off-by: Jeff Squyres <jsquyres@cisco.com>
|
||||
---
|
||||
ompi/mca/fbtl/posix/Makefile.am | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/ompi/mca/fbtl/posix/Makefile.am b/ompi/mca/fbtl/posix/Makefile.am
|
||||
index a7b0624d3ec..1ce19cb09b7 100644
|
||||
--- a/ompi/mca/fbtl/posix/Makefile.am
|
||||
+++ b/ompi/mca/fbtl/posix/Makefile.am
|
||||
@@ -34,7 +34,8 @@ mcacomponentdir = $(ompilibdir)
|
||||
mcacomponent_LTLIBRARIES = $(component_install)
|
||||
mca_fbtl_posix_la_SOURCES = $(sources)
|
||||
mca_fbtl_posix_la_LDFLAGS = -module -avoid-version
|
||||
-mca_fbtl_posix_la_LIBADD = $(top_builddir)/ompi/lib@OMPI_LIBMPI_NAME@.la
|
||||
+mca_fbtl_posix_la_LIBADD = $(top_builddir)/ompi/lib@OMPI_LIBMPI_NAME@.la \
|
||||
+ $(OMPI_TOP_BUILDDIR)/ompi/mca/common/ompio/libmca_common_ompio.la
|
||||
|
||||
noinst_LTLIBRARIES = $(component_noinst)
|
||||
libmca_fbtl_posix_la_SOURCES = $(sources)
|
@ -0,0 +1,7 @@
|
||||
%_openmpi_load \
|
||||
. /etc/profile.d/modules.sh; \
|
||||
module load mpi/openmpi-%{_arch}; \
|
||||
export OMPI_MCA_rmaps_base_oversubscribe=1
|
||||
%_openmpi_unload \
|
||||
. /etc/profile.d/modules.sh; \
|
||||
module unload mpi/openmpi-%{_arch};
|
@ -0,0 +1,21 @@
|
||||
#%Module 1.0
|
||||
#
|
||||
# OpenMPI module for use with 'environment-modules' package:
|
||||
#
|
||||
conflict mpi
|
||||
prepend-path PATH @LIBDIR@/bin
|
||||
prepend-path LD_LIBRARY_PATH @LIBDIR@/lib
|
||||
prepend-path PKG_CONFIG_PATH @LIBDIR@/lib/pkgconfig
|
||||
prepend-path MANPATH :@MANDIR@
|
||||
setenv MPI_BIN @LIBDIR@/bin
|
||||
setenv MPI_SYSCONFIG @ETCDIR@
|
||||
setenv MPI_FORTRAN_MOD_DIR @FMODDIR@
|
||||
setenv MPI_INCLUDE @INCDIR@
|
||||
setenv MPI_LIB @LIBDIR@/lib
|
||||
setenv MPI_MAN @MANDIR@
|
||||
setenv MPI_PYTHON_SITEARCH @PY2SITEARCH@
|
||||
setenv MPI_PYTHON2_SITEARCH @PY2SITEARCH@
|
||||
setenv MPI_PYTHON3_SITEARCH @PY3SITEARCH@
|
||||
setenv MPI_COMPILER @COMPILER@
|
||||
setenv MPI_SUFFIX @SUFFIX@
|
||||
setenv MPI_HOME @LIBDIR@
|
@ -0,0 +1 @@
|
||||
import sys, os; s = os.getenv('MPI_PYTHON2_SITEARCH'); s and (s in sys.path or sys.path.append(s))
|
@ -0,0 +1 @@
|
||||
import sys, os; s = os.getenv('MPI_PYTHON3_SITEARCH'); s and (s in sys.path or sys.path.append(s))
|
@ -0,0 +1,490 @@
|
||||
# Optional name suffix to use...we leave it off when compiling with gcc, but
|
||||
# for other compiled versions to install side by side, it will need a
|
||||
# suffix in order to keep the names from conflicting.
|
||||
#global _cc_name_suffix -gcc
|
||||
|
||||
%global macrosdir %(d=%{_rpmconfigdir}/macros.d; [ -d $d ] || d=%{_sysconfdir}/rpm; echo $d)
|
||||
|
||||
%if 0%{?fedora} >= 32 || 0%{?rhel} >= 8
|
||||
%bcond_with python2
|
||||
%else
|
||||
%bcond_without python2
|
||||
%endif
|
||||
|
||||
%ifarch aarch64 ppc64le x86_64
|
||||
%bcond_without ucx
|
||||
%else
|
||||
%bcond_with ucx
|
||||
%endif
|
||||
|
||||
# ARM 32-bit is not supported by rdma
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1780584
|
||||
%ifarch %{arm}
|
||||
%bcond_with rdma
|
||||
%else
|
||||
%bcond_without rdma
|
||||
%endif
|
||||
|
||||
# Run autogen - needed for some patches
|
||||
%bcond_without autogen
|
||||
|
||||
Name: openmpi%{?_cc_name_suffix}
|
||||
Version: 4.1.1
|
||||
Release: 3%{?dist}
|
||||
Summary: Open Message Passing Interface
|
||||
License: BSD and MIT and Romio
|
||||
URL: http://www.open-mpi.org/
|
||||
|
||||
Epoch: 1
|
||||
|
||||
# We can't use %%{name} here because of _cc_name_suffix
|
||||
Source0: https://www.open-mpi.org/software/ompi/v4.1/downloads/openmpi-%{version}.tar.bz2
|
||||
Source1: openmpi.module.in
|
||||
Source2: openmpi.pth.py2
|
||||
Source3: openmpi.pth.py3
|
||||
Source4: macros.openmpi
|
||||
Patch1: 266189935aef4fce825d0db831b4b53accc62c32.patch
|
||||
Patch2: 0001-Revert-ucx-check-supported-transports-and-devices-fo.patch
|
||||
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: gcc-gfortran
|
||||
BuildRequires: make
|
||||
%if %{with autogen}
|
||||
BuildRequires: libtool
|
||||
BuildRequires: perl(Data::Dumper)
|
||||
BuildRequires: perl(File::Find)
|
||||
%endif
|
||||
BuildRequires: valgrind-devel
|
||||
%if %{with rdma}
|
||||
BuildRequires: opensm-devel > 3.3.0
|
||||
BuildRequires: rdma-core-devel
|
||||
%endif
|
||||
# Doesn't compile:
|
||||
# vt_dyn.cc:958:28: error: 'class BPatch_basicBlockLoop' has no member named 'getLoopHead'
|
||||
# loop->getLoopHead()->getStartAddress(), loop_stmts );
|
||||
#BuildRequires: dyninst-devel
|
||||
BuildRequires: hwloc-devel >= 2.2.0
|
||||
# So configure can find lstopo
|
||||
BuildRequires: hwloc-gui
|
||||
BuildRequires: java-devel
|
||||
# Old libevent causes issues
|
||||
%if !0%{?el7}
|
||||
BuildRequires: libevent-devel
|
||||
%endif
|
||||
BuildRequires: libfabric-devel
|
||||
%ifnarch s390 s390x
|
||||
BuildRequires: papi-devel
|
||||
%endif
|
||||
BuildRequires: perl-generators
|
||||
BuildRequires: perl-interpreter
|
||||
BuildRequires: perl(Getopt::Long)
|
||||
BuildRequires: pmix-devel
|
||||
BuildRequires: python%{python3_pkgversion}-devel
|
||||
%ifarch x86_64
|
||||
BuildRequires: libpsm2-devel
|
||||
%endif
|
||||
%if %{with ucx}
|
||||
BuildRequires: ucx-devel
|
||||
%endif
|
||||
BuildRequires: zlib-devel
|
||||
%if !0%{?el7}
|
||||
BuildRequires: rpm-mpi-hooks
|
||||
%endif
|
||||
|
||||
Provides: mpi
|
||||
%if 0%{?rhel} == 7
|
||||
# Need this for /etc/profile.d/modules.sh
|
||||
Requires: environment-modules
|
||||
%endif
|
||||
Requires: environment(modules)
|
||||
# openmpi currently requires ssh to run
|
||||
# https://svn.open-mpi.org/trac/ompi/ticket/4228
|
||||
Requires: openssh-clients
|
||||
|
||||
# Private openmpi libraries
|
||||
%global __provides_exclude_from %{_libdir}/openmpi/lib/(lib(mca|ompi|open-(pal|rte|trace))|openmpi/).*.so
|
||||
%global __requires_exclude lib(mca|ompi|open-(pal|rte|trace)|vt).*
|
||||
|
||||
%description
|
||||
Open MPI is an open source, freely available implementation of both the
|
||||
MPI-1 and MPI-2 standards, combining technologies and resources from
|
||||
several other projects (FT-MPI, LA-MPI, LAM/MPI, and PACX-MPI) in
|
||||
order to build the best MPI library available. A completely new MPI-2
|
||||
compliant implementation, Open MPI offers advantages for system and
|
||||
software vendors, application developers, and computer science
|
||||
researchers. For more information, see http://www.open-mpi.org/ .
|
||||
|
||||
%package devel
|
||||
Summary: Development files for openmpi
|
||||
Requires: %{name} = %{epoch}:%{version}-%{release}, gcc-gfortran
|
||||
Provides: mpi-devel
|
||||
%if !0%{?el7}
|
||||
Requires: rpm-mpi-hooks
|
||||
# Make sure this package is rebuilt with correct Python version when updating
|
||||
# Otherwise mpi.req from rpm-mpi-hooks doesn't work
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1705296
|
||||
Requires: (python(abi) = %{python3_version} if python3)
|
||||
%endif
|
||||
|
||||
%description devel
|
||||
Contains development headers and libraries for openmpi.
|
||||
|
||||
%package java
|
||||
Summary: Java library
|
||||
Requires: %{name} = %{epoch}:%{version}-%{release}
|
||||
Requires: java-headless
|
||||
|
||||
%description java
|
||||
Java library.
|
||||
|
||||
%package java-devel
|
||||
Summary: Java development files for openmpi
|
||||
Requires: %{name}-java = %{epoch}:%{version}-%{release}
|
||||
Requires: java-devel
|
||||
|
||||
%description java-devel
|
||||
Contains development wrapper for compiling Java with openmpi.
|
||||
|
||||
# We set this to for convenience, since this is the unique dir we use for this
|
||||
# particular package, version, compiler
|
||||
%global namearch openmpi-%{_arch}%{?_cc_name_suffix}
|
||||
|
||||
%if %{with python2}
|
||||
%package -n python2-openmpi
|
||||
Summary: OpenMPI support for Python 2
|
||||
BuildRequires: python2-devel
|
||||
Requires: %{name} = %{epoch}:%{version}-%{release}
|
||||
Requires: python(abi) = %{python2_version}
|
||||
|
||||
%description -n python2-openmpi
|
||||
OpenMPI support for Python 2.
|
||||
%endif
|
||||
|
||||
%package -n python%{python3_pkgversion}-openmpi
|
||||
Summary: OpenMPI support for Python 3
|
||||
Requires: %{name} = %{epoch}:%{version}-%{release}
|
||||
Requires: python(abi) = %{python3_version}
|
||||
|
||||
%description -n python%{python3_pkgversion}-openmpi
|
||||
OpenMPI support for Python 3.
|
||||
|
||||
|
||||
%prep
|
||||
%autosetup -p1 -n %{name}-%{version}
|
||||
%if %{with autogen}
|
||||
./autogen.pl --force
|
||||
%endif
|
||||
|
||||
|
||||
%build
|
||||
%set_build_flags
|
||||
./configure --prefix=%{_libdir}/%{name} \
|
||||
--mandir=%{_mandir}/%{namearch} \
|
||||
--includedir=%{_includedir}/%{namearch} \
|
||||
--sysconfdir=%{_sysconfdir}/%{namearch} \
|
||||
--disable-silent-rules \
|
||||
--enable-builtin-atomics \
|
||||
--enable-mpi-cxx \
|
||||
--enable-mpi-java \
|
||||
--enable-mpi1-compatibility \
|
||||
--with-sge \
|
||||
--with-valgrind \
|
||||
--enable-memchecker \
|
||||
--with-hwloc=/usr \
|
||||
%if !0%{?el7}
|
||||
--with-libevent=external \
|
||||
--with-pmix=external \
|
||||
%endif
|
||||
|
||||
%make_build V=1
|
||||
|
||||
%install
|
||||
%make_install
|
||||
find %{buildroot}%{_libdir}/%{name}/lib -name \*.la | xargs rm
|
||||
find %{buildroot}%{_mandir}/%{namearch} -type f | xargs gzip -9
|
||||
ln -s mpicc.1.gz %{buildroot}%{_mandir}/%{namearch}/man1/mpiCC.1.gz
|
||||
# Remove dangling symlink
|
||||
rm %{buildroot}%{_mandir}/%{namearch}/man1/mpiCC.1
|
||||
mkdir %{buildroot}%{_mandir}/%{namearch}/man{2,4,5,6,8,9,n}
|
||||
|
||||
# Make the environment-modules file
|
||||
mkdir -p %{buildroot}%{_datadir}/modulefiles/mpi
|
||||
# Since we're doing our own substitution here, use our own definitions.
|
||||
sed 's#@LIBDIR@#%{_libdir}/%{name}#;
|
||||
s#@ETCDIR@#%{_sysconfdir}/%{namearch}#;
|
||||
s#@FMODDIR@#%{_fmoddir}/%{name}#;
|
||||
s#@INCDIR@#%{_includedir}/%{namearch}#;
|
||||
s#@MANDIR@#%{_mandir}/%{namearch}#;
|
||||
%if %{with python2}
|
||||
s#@PY2SITEARCH@#%{python2_sitearch}/%{name}#;
|
||||
%else
|
||||
/@PY2SITEARCH@/d;
|
||||
%endif
|
||||
s#@PY3SITEARCH@#%{python3_sitearch}/%{name}#;
|
||||
s#@COMPILER@#openmpi-%{_arch}%{?_cc_name_suffix}#;
|
||||
s#@SUFFIX@#%{?_cc_name_suffix}_openmpi#' \
|
||||
<%{SOURCE1} \
|
||||
>%{buildroot}%{_datadir}/modulefiles/mpi/%{namearch}
|
||||
|
||||
# make the rpm config file
|
||||
install -Dpm 644 %{SOURCE4} %{buildroot}/%{macrosdir}/macros.%{namearch}
|
||||
|
||||
# Link the fortran module to proper location
|
||||
mkdir -p %{buildroot}%{_fmoddir}/%{name}
|
||||
for mod in %{buildroot}%{_libdir}/%{name}/lib/*.mod
|
||||
do
|
||||
modname=$(basename $mod)
|
||||
ln -s ../../../%{name}/lib/${modname} %{buildroot}/%{_fmoddir}/%{name}/
|
||||
done
|
||||
|
||||
# Link the pkgconfig files into the main namespace as well
|
||||
mkdir -p %{buildroot}%{_libdir}/pkgconfig
|
||||
cd %{buildroot}%{_libdir}/pkgconfig
|
||||
ln -s ../%{name}/lib/pkgconfig/*.pc .
|
||||
cd -
|
||||
|
||||
# Remove extraneous wrapper link libraries (bug 814798)
|
||||
sed -i -e s/-ldl// -e s/-lhwloc// \
|
||||
%{buildroot}%{_libdir}/%{name}/share/openmpi/*-wrapper-data.txt
|
||||
|
||||
# install .pth files
|
||||
%if %{with python2}
|
||||
mkdir -p %{buildroot}/%{python2_sitearch}/%{name}
|
||||
install -pDm0644 %{SOURCE2} %{buildroot}/%{python2_sitearch}/openmpi.pth
|
||||
%endif
|
||||
mkdir -p %{buildroot}/%{python3_sitearch}/%{name}
|
||||
install -pDm0644 %{SOURCE3} %{buildroot}/%{python3_sitearch}/openmpi.pth
|
||||
|
||||
%check
|
||||
make check
|
||||
|
||||
%files
|
||||
%license LICENSE
|
||||
%dir %{_libdir}/%{name}
|
||||
%dir %{_sysconfdir}/%{namearch}
|
||||
%dir %{_libdir}/%{name}/bin
|
||||
%dir %{_libdir}/%{name}/lib
|
||||
%dir %{_libdir}/%{name}/lib/openmpi
|
||||
%dir %{_mandir}/%{namearch}
|
||||
%dir %{_mandir}/%{namearch}/man*
|
||||
%config(noreplace) %{_sysconfdir}/%{namearch}/*
|
||||
%{_libdir}/%{name}/bin/mpi[er]*
|
||||
%{_libdir}/%{name}/bin/ompi*
|
||||
%{_libdir}/%{name}/bin/orte[-dr_]*
|
||||
%if %{with ucx}
|
||||
%{_libdir}/%{name}/bin/oshmem_info
|
||||
%{_libdir}/%{name}/bin/oshrun
|
||||
%{_libdir}/%{name}/bin/shmemrun
|
||||
%endif
|
||||
%{_libdir}/%{name}/lib/*.so.40*
|
||||
%{_libdir}/%{name}/lib/libmca_common_ofi.so.10*
|
||||
%{_libdir}/%{name}/lib/libmca*.so.41*
|
||||
%{_libdir}/%{name}/lib/libmca*.so.50*
|
||||
%if 0%{?el7}
|
||||
%{_libdir}/%{name}/lib/pmix/
|
||||
%endif
|
||||
%{_mandir}/%{namearch}/man1/mpi[er]*
|
||||
%{_mandir}/%{namearch}/man1/ompi*
|
||||
%{_mandir}/%{namearch}/man1/orte[-dr_]*
|
||||
%if %{with ucx}
|
||||
%{_mandir}/%{namearch}/man1/oshmem_info*
|
||||
%{_mandir}/%{namearch}/man1/oshrun*
|
||||
%{_mandir}/%{namearch}/man1/shmemrun*
|
||||
%endif
|
||||
%{_mandir}/%{namearch}/man7/ompi_*
|
||||
%{_mandir}/%{namearch}/man7/opal_*
|
||||
%{_mandir}/%{namearch}/man7/orte*
|
||||
%{_libdir}/%{name}/lib/openmpi/*
|
||||
%{_datadir}/modulefiles/mpi/
|
||||
%dir %{_libdir}/%{name}/share
|
||||
%dir %{_libdir}/%{name}/share/openmpi
|
||||
%{_libdir}/%{name}/share/openmpi/amca-param-sets
|
||||
%{_libdir}/%{name}/share/openmpi/help*.txt
|
||||
%if %{with rdma}
|
||||
%{_libdir}/%{name}/share/openmpi/mca-btl-openib-device-params.ini
|
||||
%endif
|
||||
%if 0%{?el7}
|
||||
%{_libdir}/%{name}/share/pmix/
|
||||
%endif
|
||||
|
||||
%files devel
|
||||
%dir %{_includedir}/%{namearch}
|
||||
%{_libdir}/%{name}/bin/aggregate_profile.pl
|
||||
%{_libdir}/%{name}/bin/mpi[cCf]*
|
||||
%{_libdir}/%{name}/bin/opal_*
|
||||
%{_libdir}/%{name}/bin/orte[cCf]*
|
||||
%if %{with ucx}
|
||||
%{_libdir}/%{name}/bin/osh[cCf]*
|
||||
%endif
|
||||
%{_libdir}/%{name}/bin/profile2mat.pl
|
||||
%if %{with ucx}
|
||||
%{_libdir}/%{name}/bin/shmem[cCf]*
|
||||
%endif
|
||||
%{_includedir}/%{namearch}/*
|
||||
%{_fmoddir}/%{name}/
|
||||
%{_libdir}/%{name}/lib/*.so
|
||||
%{_libdir}/%{name}/lib/*.mod
|
||||
%{_libdir}/%{name}/lib/pkgconfig/
|
||||
%{_libdir}/pkgconfig/*.pc
|
||||
%{_mandir}/%{namearch}/man1/mpi[cCf]*
|
||||
%if %{with ucx}
|
||||
%{_mandir}/%{namearch}/man1/osh[cCf]*
|
||||
%{_mandir}/%{namearch}/man1/shmem[cCf]*
|
||||
%endif
|
||||
%{_mandir}/%{namearch}/man1/opal_*
|
||||
%{_mandir}/%{namearch}/man3/*
|
||||
%{_libdir}/%{name}/share/openmpi/openmpi-valgrind.supp
|
||||
%{_libdir}/%{name}/share/openmpi/*-wrapper-data.txt
|
||||
%{macrosdir}/macros.%{namearch}
|
||||
|
||||
%files java
|
||||
%{_libdir}/%{name}/lib/mpi.jar
|
||||
|
||||
%files java-devel
|
||||
%{_libdir}/%{name}/bin/mpijavac
|
||||
%{_libdir}/%{name}/bin/mpijavac.pl
|
||||
# Currently this only contaings openmpi/javadoc
|
||||
%{_libdir}/%{name}/share/doc/
|
||||
%{_mandir}/%{namearch}/man1/mpijavac.1.gz
|
||||
|
||||
%if %{with python2}
|
||||
%files -n python2-openmpi
|
||||
%dir %{python2_sitearch}/%{name}
|
||||
%{python2_sitearch}/openmpi.pth
|
||||
%endif
|
||||
|
||||
%files -n python%{python3_pkgversion}-openmpi
|
||||
%dir %{python3_sitearch}/%{name}
|
||||
%{python3_sitearch}/openmpi.pth
|
||||
|
||||
|
||||
%changelog
|
||||
* Wed Feb 16 2022 Honggang Li <honli@redhat.com> - 4.1.1-3
|
||||
- Revert upstream v4.1.2
|
||||
- Add Epoch tag
|
||||
- Related: rhbz#2055183
|
||||
|
||||
* Wed Jul 21 2021 Honggang Li <honli@redhat.com> - 4.1.1-2
|
||||
- fbtl-posix: link to common_ompio
|
||||
- Require environment(modules)
|
||||
- Revert upstream commit c36d7459b6331c4da82
|
||||
- Resolves: rhbz#1974780, rhbz#1971771
|
||||
|
||||
* Wed Jun 09 2021 Honggang Li <honli@redhat.com> - 4.1.1-1
|
||||
- Update to upstream v4.1.1 release
|
||||
- Sync with Fedora build
|
||||
- Resolves: rhbz#1928631, rhbz#1920801
|
||||
|
||||
* Wed Jan 27 2021 Honggang Li <honli@redhat.com> - 4.0.5-3
|
||||
- disable gcc built-in atomics
|
||||
- Resolves: rhbz#1921262
|
||||
|
||||
* Tue Nov 17 2020 Honggang Li <honli@redhat.com> - 4.0.5-2
|
||||
- Rebuild against ucx-1.9 and libfabric-1.11.1
|
||||
- Resolves: rhbz#1892128
|
||||
|
||||
* Mon Oct 12 2020 Honggang Li <honli@redhat.com> - 4.0.5-1
|
||||
- Update to upstream v4.0.5 release
|
||||
- Build against hwloc-2.2
|
||||
- Resolves: rhbz#1850088,rhbz#1855197
|
||||
|
||||
* Tue Jul 28 2020 Honggang Li <honli@redhat.com> - 4.0.3-3
|
||||
- Fix module load overwrites system MANPATH
|
||||
- Resolves: rhbz#1858519
|
||||
|
||||
* Tue May 12 2020 Honggang Li <honli@redhat.com> - 4.0.3-1
|
||||
- Update to upstream v4.0.3 release
|
||||
- Resolves: rhbz#1817834
|
||||
|
||||
* Sun Jan 19 2020 Honggang Li <honli@redhat.com> - 4.0.2-2
|
||||
- Rebuild against ucx-1.6
|
||||
- Resolves: rhbz#1791483
|
||||
|
||||
* Wed Oct 16 2019 Jarod Wilson <jarod@redhat.com> - 4.0.2-1
|
||||
- Update to upstream v4.0.2 release
|
||||
- Resolves: rhbz#1725631
|
||||
|
||||
* Thu Aug 01 2019 Jarod Wilson <jarod@redhat.com> - 4.0.1-3
|
||||
- Actually enable UCX support
|
||||
- Resolves: rhbz#1642942
|
||||
|
||||
* Wed Jun 19 2019 Jarod Wilson <jarod@redhat.com> - 4.0.1-2
|
||||
- Bump and rebuild for newer opensm
|
||||
- Resolves: rhbz#1717289
|
||||
|
||||
* Mon Apr 29 2019 Jarod Wilson <jarod@redhat.com> - 4.0.1-1
|
||||
- Update to upstream v4.0.1 release
|
||||
- Resolves: rhbz#1660623
|
||||
|
||||
* Tue Sep 25 2018 Jarod Wilson <jarod@redhat.com> - 3.1.2-5
|
||||
- Update BR: opensm-devel min version and rebuild against opensm 3.3.21
|
||||
- Resolves: rhbz#1630653
|
||||
|
||||
* Mon Sep 24 2018 Jarod Wilson <jarod@redhat.com> - 3.1.2-4
|
||||
- Further tweaks to compile/linker flag usage
|
||||
- Related: rhbz#1624157
|
||||
- Move modulefiles under /etc like our other suppored mpi providers
|
||||
- Resolves: rhbz#1632399
|
||||
|
||||
* Tue Sep 18 2018 Jarod Wilson <jarod@redhat.com> - 3.1.2-3
|
||||
- Undo stripping/ignoring of distro-provided optimization flags
|
||||
- Related: rhbz#1624157
|
||||
|
||||
* Wed Sep 12 2018 Jarod Wilson <jarod@redhat.com> - 3.1.2-2
|
||||
- Additional tweaks to module paths, fix openmpi-devel R
|
||||
- Related: rhbz#1623441
|
||||
|
||||
* Wed Sep 12 2018 Jarod Wilson <jarod@redhat.com> - 3.1.2-1
|
||||
- Update to upstream 3.1.2 bug fix release
|
||||
- Fix some paths in module file, strip out python2 bits
|
||||
- Related: rhbz#1623441
|
||||
|
||||
* Thu Aug 30 2018 Jarod Wilson <jarod@redhat.com> - 3.1.1-2
|
||||
- Bump and rebuild for autogen rpmbuild library dependency fixes
|
||||
- Related: rhbz#1623441
|
||||
|
||||
* Mon Jul 02 2018 Jarod Wilson <jarod@redhat.com> - 3.1.1-1
|
||||
- Update to upstream 3.1.1 bug fix release
|
||||
- Drop BR: on deprecated infinipath-psm
|
||||
|
||||
* Thu May 31 2018 Jarod Wilson <jarod@redhat.com> - 3.1.0-1
|
||||
- Update to upstream 3.1.0 release
|
||||
- Use external pmix and libevent
|
||||
|
||||
* Thu May 17 2018 Charalampos Stratakis <cstratak@redhat.com> - 2.1.1-11
|
||||
- Do not build the python2 subpackage on EL > 7
|
||||
|
||||
* Wed May 09 2018 Troy Dawson <tdawson@redhat.com> - 2.1.1-10
|
||||
- Build with rdma-core-devel instead of libibcm-devel
|
||||
|
||||
* Fri Feb 09 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 2.1.1-9
|
||||
- Escape macros in %%changelog
|
||||
|
||||
* Mon Feb 05 2018 Orion Poplawski <orion@cora.nwra.com> - 2.1.1-8
|
||||
- Rebuild for rdma-core 16.2
|
||||
|
||||
* Wed Jan 31 2018 Christoph Junghans <junghans@votca.org> - 2.1.1-7
|
||||
- Rebuild for gfortran-8
|
||||
|
||||
* Fri Jan 12 2018 Iryna Shcherbina <ishcherb@redhat.com> - 2.1.1-6
|
||||
- Update Python 2 dependency declarations to new packaging standards
|
||||
(See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3)
|
||||
|
||||
* Wed Aug 23 2017 Adam Williamson <awilliam@redhat.com> - 2.1.1-5
|
||||
- Disable RDMA support on 32-bit ARM (#1484155)
|
||||
- Disable hanging opal_fifo test on ppc64le (gh #2526 / #2966)
|
||||
|
||||
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.1.1-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
|
||||
|
||||
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.1.1-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
|
||||
|
||||
* Wed Jul 19 2017 Orion Poplawski <orion@cora.nwra.com> - 2.1.1-2
|
||||
- Provide pkgconfig files in the main namespace as well (1471512)
|
||||
|
||||
* Fri May 12 2017 Orion Poplawski <orion@cora.nwra.com> - 2.1.1-1
|
||||
- Update to 2.1.1
|
||||
|
||||
* Thu May 4 2017 Orion Poplawski <orion@cora.nwra.com> - 2.1.0-1
|
||||
- Update to 2.1.0
|
Loading…
Reference in new issue