1
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
3
* (C) 2001 by Argonne National Laboratory.
4
* See COPYRIGHT in top-level directory.
7
#ifdef HAVE_MACH_O_DYLD_H
8
#include <mach-o/dyld.h>
13
#define PMILoadLibrary(a,b) a = LoadLibrary( b )
14
#define PMIGetProcAddress GetProcAddress
15
#define PMIModule HMODULE
17
#elif defined(HAVE_DLOPEN)
19
#define PMILoadLibrary(a, b) a = dlopen( b , RTLD_LAZY /* or RTLD_NOW */)
20
#define PMIGetProcAddress dlsym
21
#define PMIModule void *
23
#elif defined(HAVE_NSLINKMODULE)
25
#define PMILoadLibrary(a, b) \
27
NSObjectFileImage fileImage; \
28
NSObjectFileImageReturnCode returnCode = \
29
NSCreateObjectFileImageFromFile(b, &fileImage); \
30
if (returnCode == NSObjectFileImageSuccess) \
32
a = NSLinkModule(fileImage, b, \
33
NSLINKMODULE_OPTION_RETURN_ON_ERROR \
34
| NSLINKMODULE_OPTION_PRIVATE); \
35
NSDestroyObjectFileImage(fileImage); \
40
#define PMIGetProcAddress(a, b) NSAddressOfSymbol( NSLookupSymbolInModule( a, b ) )
41
#define PMIModule NSModule
44
#error PMILoadLibrary functions needed
47
/* global variables */
48
static ipmi_functions_t fn =
50
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
53
int PMI_Init(int *spawned)
58
if (fn.PMI_Init != NULL)
60
/* Init cannot be called more than once? */
64
dll_name = getenv("PMI_DLL_NAME");
67
PMILoadLibrary(hModule, dll_name);
70
fn.PMI_Init = (int (*)(int *))PMIGetProcAddress(hModule, "PMI_Init");
71
if (fn.PMI_Init == NULL)
75
fn.PMI_Initialized = (int (*)(int *))PMIGetProcAddress(hModule, "PMI_Initialized");
76
fn.PMI_Finalize = (int (*)(void))PMIGetProcAddress(hModule, "PMI_Finalize");
77
fn.PMI_Get_size = (int (*)(int *))PMIGetProcAddress(hModule, "PMI_Get_size");
78
fn.PMI_Get_rank = (int (*)(int *))PMIGetProcAddress(hModule, "PMI_Get_rank");
79
fn.PMI_Get_universe_size = (int (*)(int *))PMIGetProcAddress(hModule, "PMI_Get_universe_size");
80
fn.PMI_Get_appnum = (int (*)(int *))PMIGetProcAddress(hModule, "PMI_Get_appnum");
81
fn.PMI_Get_id = (int (*)(char [], int))PMIGetProcAddress(hModule, "PMI_Get_id");
82
fn.PMI_Get_kvs_domain_id = (int (*)(char [], int))PMIGetProcAddress(hModule, "PMI_Get_kvs_domain_id");
83
fn.PMI_Get_id_length_max = (int (*)(int *))PMIGetProcAddress(hModule, "PMI_Get_id_length_max");
84
fn.PMI_Barrier = (int (*)(void))PMIGetProcAddress(hModule, "PMI_Barrier");
85
fn.PMI_Get_clique_size = (int (*)(int *))PMIGetProcAddress(hModule, "PMI_Get_clique_size");
86
fn.PMI_Get_clique_ranks = (int (*)(int [], int))PMIGetProcAddress(hModule, "PMI_Get_clique_ranks");
87
fn.PMI_Abort = (int (*)(int, const char[]))PMIGetProcAddress(hModule, "PMI_Abort");
88
fn.PMI_KVS_Get_my_name = (int (*)(char [], int))PMIGetProcAddress(hModule, "PMI_KVS_Get_my_name");
89
fn.PMI_KVS_Get_name_length_max = (int (*)(int *))PMIGetProcAddress(hModule, "PMI_KVS_Get_name_length_max");
90
fn.PMI_KVS_Get_key_length_max = (int (*)(int *))PMIGetProcAddress(hModule, "PMI_KVS_Get_key_length_max");
91
fn.PMI_KVS_Get_value_length_max = (int (*)(int *))PMIGetProcAddress(hModule, "PMI_KVS_Get_value_length_max");
92
fn.PMI_KVS_Create = (int (*)(char [], int))PMIGetProcAddress(hModule, "PMI_KVS_Create");
93
fn.PMI_KVS_Destroy = (int (*)(const char []))PMIGetProcAddress(hModule, "PMI_KVS_Destroy");
94
fn.PMI_KVS_Put = (int (*)(const char [], const char [], const char []))PMIGetProcAddress(hModule, "PMI_KVS_Put");
95
fn.PMI_KVS_Commit = (int (*)(const char []))PMIGetProcAddress(hModule, "PMI_KVS_Commit");
96
fn.PMI_KVS_Get = (int (*)(const char [], const char [], char [], int))PMIGetProcAddress(hModule, "PMI_KVS_Get");
97
fn.PMI_KVS_Iter_first = (int (*)(const char [], char [], int, char [], int))PMIGetProcAddress(hModule, "PMI_KVS_Iter_first");
98
fn.PMI_KVS_Iter_next = (int (*)(const char [], char [], int, char [], int))PMIGetProcAddress(hModule, "PMI_KVS_Iter_next");
99
fn.PMI_Spawn_multiple = (int (*)(int, const char *[], const char **[], const int [], const int [], const PMI_keyval_t *[], int, const PMI_keyval_t [], int []))PMIGetProcAddress(hModule, "PMI_Spawn_multiple");
100
fn.PMI_Parse_option = (int (*)(int, char *[], int *, PMI_keyval_t **, int *))PMIGetProcAddress(hModule, "PMI_Parse_option");
101
fn.PMI_Args_to_keyval = (int (*)(int *, char *((*)[]), PMI_keyval_t **, int *))PMIGetProcAddress(hModule, "PMI_Args_to_keyval");
102
fn.PMI_Free_keyvals = (int (*)(PMI_keyval_t [], int))PMIGetProcAddress(hModule, "PMI_Free_keyvals");
103
fn.PMI_Publish_name = (int (*)(const char [], const char [] ))PMIGetProcAddress(hModule, "PMI_Publish_name");
104
fn.PMI_Unpublish_name = (int (*)( const char [] ))PMIGetProcAddress(hModule, "PMI_Unpublish_name");
105
fn.PMI_Lookup_name = (int (*)( const char [], char [] ))PMIGetProcAddress(hModule, "PMI_Lookup_name");
106
return fn.PMI_Init(spawned);
110
fn.PMI_Init = iPMI_Init;
111
fn.PMI_Initialized = iPMI_Initialized;
112
fn.PMI_Finalize = iPMI_Finalize;
113
fn.PMI_Get_size = iPMI_Get_size;
114
fn.PMI_Get_rank = iPMI_Get_rank;
115
fn.PMI_Get_universe_size = iPMI_Get_universe_size;
116
fn.PMI_Get_appnum = iPMI_Get_appnum;
117
fn.PMI_Get_id = iPMI_Get_id;
118
fn.PMI_Get_kvs_domain_id = iPMI_Get_kvs_domain_id;
119
fn.PMI_Get_id_length_max = iPMI_Get_id_length_max;
120
fn.PMI_Barrier = iPMI_Barrier;
121
fn.PMI_Get_clique_size = iPMI_Get_clique_size;
122
fn.PMI_Get_clique_ranks = iPMI_Get_clique_ranks;
123
fn.PMI_Abort = iPMI_Abort;
124
fn.PMI_KVS_Get_my_name = iPMI_KVS_Get_my_name;
125
fn.PMI_KVS_Get_name_length_max = iPMI_KVS_Get_name_length_max;
126
fn.PMI_KVS_Get_key_length_max = iPMI_KVS_Get_key_length_max;
127
fn.PMI_KVS_Get_value_length_max = iPMI_KVS_Get_value_length_max;
128
fn.PMI_KVS_Create = iPMI_KVS_Create;
129
fn.PMI_KVS_Destroy = iPMI_KVS_Destroy;
130
fn.PMI_KVS_Put = iPMI_KVS_Put;
131
fn.PMI_KVS_Commit = iPMI_KVS_Commit;
132
fn.PMI_KVS_Get = iPMI_KVS_Get;
133
fn.PMI_KVS_Iter_first = iPMI_KVS_Iter_first;
134
fn.PMI_KVS_Iter_next = iPMI_KVS_Iter_next;
135
fn.PMI_Spawn_multiple = iPMI_Spawn_multiple;
136
fn.PMI_Parse_option = iPMI_Parse_option;
137
fn.PMI_Args_to_keyval = iPMI_Args_to_keyval;
138
fn.PMI_Free_keyvals = iPMI_Free_keyvals;
139
fn.PMI_Publish_name = iPMI_Publish_name;
140
fn.PMI_Unpublish_name = iPMI_Unpublish_name;
141
fn.PMI_Lookup_name = iPMI_Lookup_name;
143
return fn.PMI_Init(spawned);
148
if (fn.PMI_Finalize == NULL)
150
return fn.PMI_Finalize();
153
int PMI_Get_size(int *size)
155
if (fn.PMI_Get_size == NULL)
157
return fn.PMI_Get_size(size);
160
int PMI_Get_rank(int *rank)
162
if (fn.PMI_Get_rank == NULL)
164
return fn.PMI_Get_rank(rank);
167
int PMI_Get_universe_size(int *size)
169
if (fn.PMI_Get_universe_size == NULL)
171
return fn.PMI_Get_universe_size(size);
174
int PMI_Get_appnum(int *appnum)
176
if (fn.PMI_Get_appnum == NULL)
178
return fn.PMI_Get_appnum(appnum);
183
if (fn.PMI_Barrier == NULL)
185
return fn.PMI_Barrier();
188
int PMI_Abort(int exit_code, const char error_msg[])
190
if (fn.PMI_Abort == NULL)
192
return fn.PMI_Abort(exit_code, error_msg);
195
int PMI_KVS_Get_my_name(char kvsname[], int length)
197
if (fn.PMI_KVS_Get_my_name == NULL)
199
return fn.PMI_KVS_Get_my_name(kvsname, length);
202
int PMI_KVS_Get_name_length_max(int *maxlen)
204
if (fn.PMI_KVS_Get_name_length_max == NULL)
206
return fn.PMI_KVS_Get_name_length_max(maxlen);
209
int PMI_KVS_Get_key_length_max(int *maxlen)
211
if (fn.PMI_KVS_Get_key_length_max == NULL)
213
return fn.PMI_KVS_Get_key_length_max(maxlen);
216
int PMI_KVS_Get_value_length_max(int *maxlen)
218
if (fn.PMI_KVS_Get_value_length_max == NULL)
220
return fn.PMI_KVS_Get_value_length_max(maxlen);
223
int PMI_KVS_Put(const char kvsname[], const char key[], const char value[])
225
if (fn.PMI_KVS_Put == NULL)
227
return fn.PMI_KVS_Put(kvsname, key, value);
230
int PMI_KVS_Commit(const char kvsname[])
232
if (fn.PMI_KVS_Commit == NULL)
234
return fn.PMI_KVS_Commit(kvsname);
237
int PMI_KVS_Get(const char kvsname[], const char key[], char value[], int length)
239
if (fn.PMI_KVS_Get == NULL)
241
return fn.PMI_KVS_Get(kvsname, key, value, length);
244
int PMI_Spawn_multiple(int count,
246
const char ** argvs[],
247
const int maxprocs[],
248
const int info_keyval_sizes[],
249
const PMI_keyval_t * info_keyval_vectors[],
250
int preput_keyval_size,
251
const PMI_keyval_t preput_keyval_vector[],
254
if (fn.PMI_Spawn_multiple == NULL)
256
return fn.PMI_Spawn_multiple(count, cmds, argvs, maxprocs,
257
info_keyval_sizes, info_keyval_vectors,
258
preput_keyval_size, preput_keyval_vector,
262
int PMI_Publish_name( const char service_name[], const char port[] )
264
if (fn.PMI_Publish_name == NULL)
266
return fn.PMI_Publish_name(service_name, port);
269
int PMI_Unpublish_name( const char service_name[] )
271
if (fn.PMI_Unpublish_name == NULL)
273
return fn.PMI_Unpublish_name(service_name);
276
int PMI_Lookup_name( const char service_name[], char port[] )
278
if (fn.PMI_Lookup_name == NULL)
280
return fn.PMI_Lookup_name(service_name, port);