
This commit is a rework of the component repository. The changes included in this commit are: - Remove the component dependency code based off .ompi_info files. This code is legacy code dating back 10 years that and is no longer used. - Move the plugin scanning code to the component repository. New calls have been added to add new scanning paths, query available components, and dlopen/load components. - Pass the framework down to mca_base_component_find/filter. Eventually the framework structure will be used to further validate components before they are used. - Add support to the MCA framework system to disable scanning for dlopened components on open (support already existed in register). This is really only relevant to installdirs as it has no register function and no DSO components. Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
110 строки
3.8 KiB
C
110 строки
3.8 KiB
C
/*
|
|
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
|
* University Research and Technology
|
|
* Corporation. All rights reserved.
|
|
* Copyright (c) 2004-2005 The University of Tennessee and The University
|
|
* of Tennessee Research Foundation. All rights
|
|
* reserved.
|
|
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
* University of Stuttgart. All rights reserved.
|
|
* Copyright (c) 2004-2005 The Regents of the University of California.
|
|
* All rights reserved.
|
|
* Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
|
|
* $COPYRIGHT$
|
|
*
|
|
* Additional copyrights may follow
|
|
*
|
|
* $HEADER$
|
|
*/
|
|
|
|
/**
|
|
* @file mca_base_component_repository.h
|
|
*
|
|
* This file provide the external interface to our base component
|
|
* module. Most of the components that depend on it, will use the
|
|
* retain_component() function to increase the reference count on a
|
|
* particular component (as opposed to the retain() function, which is
|
|
* internal to the opal/mca/base). But it's convenient to have all
|
|
* the functions exported from one header file rather than to separate
|
|
* retain_component() and retain() into two separate header files
|
|
* (i.e., have a separate header file just for retain()).
|
|
*/
|
|
|
|
#ifndef MCA_BASE_COMPONENT_REPOSITORY_H
|
|
#define MCA_BASE_COMPONENT_REPOSITORY_H
|
|
|
|
#include "opal_config.h"
|
|
|
|
#include "opal/mca/dl/dl.h"
|
|
#include "opal/mca/dl/base/base.h"
|
|
|
|
BEGIN_C_DECLS
|
|
struct mca_base_component_repository_item_t {
|
|
opal_list_item_t super;
|
|
|
|
char ri_type[MCA_BASE_MAX_TYPE_NAME_LEN + 1];
|
|
char ri_name[MCA_BASE_MAX_COMPONENT_NAME_LEN + 1];
|
|
|
|
char *ri_path;
|
|
char *ri_base;
|
|
|
|
opal_dl_handle_t *ri_dlhandle;
|
|
const mca_base_component_t *ri_component_struct;
|
|
};
|
|
typedef struct mca_base_component_repository_item_t mca_base_component_repository_item_t;
|
|
|
|
OBJ_CLASS_DECLARATION(mca_base_component_repository_item_t);
|
|
|
|
/**
|
|
* @brief initialize the component repository
|
|
*
|
|
* This function must be called before any frameworks are registered or
|
|
* opened. It is responsible for setting up the repository of dynamically
|
|
* loaded components. The initial search path is taken from the
|
|
* mca_base_component_path MCA parameter. mca_base_open () is a
|
|
* prerequisite call as it registers the mca_base_component_path parameter.
|
|
*/
|
|
OPAL_DECLSPEC int mca_base_component_repository_init(void);
|
|
|
|
/**
|
|
* @brief add search path for dynamically loaded components
|
|
*
|
|
* @param[in] path delimited list of search paths to add
|
|
*/
|
|
OPAL_DECLSPEC int mca_base_component_repository_add (const char *path);
|
|
|
|
|
|
/**
|
|
* @brief return the list of components that match a given framework
|
|
*
|
|
* @param[in] framework framework to match
|
|
* @param[out] framework_components components that match this framework
|
|
*
|
|
* The list returned in {framework_components} is owned by the component
|
|
* repository and CAN NOT be modified by the caller.
|
|
*/
|
|
OPAL_DECLSPEC int mca_base_component_repository_get_components (mca_base_framework_t *framework,
|
|
opal_list_t **framework_components);
|
|
|
|
/**
|
|
* @brief finalize the mca component repository
|
|
*/
|
|
OPAL_DECLSPEC void mca_base_component_repository_finalize(void);
|
|
|
|
/**
|
|
* @brief open the repository item and add it to the framework's component
|
|
* list
|
|
*
|
|
* @param[in] framework framework that matches the component
|
|
* @param[in] ri dynamic component to open
|
|
*/
|
|
int mca_base_component_repository_open (mca_base_framework_t *framework,
|
|
mca_base_component_repository_item_t *ri);
|
|
|
|
|
|
void mca_base_component_repository_release(const mca_base_component_t *component);
|
|
|
|
END_C_DECLS
|
|
|
|
#endif /* MCA_BASE_COMPONENT_REPOSITORY_H */
|