14
14
15
15
#include " OpenMP/OMPT/Callback.h"
16
16
#include " PluginManager.h"
17
+ #include " Shared/Debug.h"
17
18
#include " device.h"
18
19
#include " private.h"
19
20
#include " rtl.h"
@@ -132,50 +133,21 @@ bool PluginAdaptorManagerTy::attemptLoadRTL(const std::string &RTLName, PluginAd
132
133
133
134
DP (" Successfully loaded library '%s'!\n " , Name);
134
135
135
- // Remove plugin on failure to call optional init_plugin
136
- *((void **)&RTL.init_plugin ) =
137
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_init_plugin" );
138
- if (RTL.init_plugin ) {
139
- int32_t Rc = RTL.init_plugin ();
140
- if (Rc != OFFLOAD_SUCCESS) {
141
- DP (" Unable to initialize library '%s': %u!\n " , Name, Rc);
142
- return false ;
143
- }
136
+ #define PLUGIN_API_HANDLE (NAME, MANDATORY ) \
137
+ *((void **)&RTL.NAME ) = \
138
+ DynLibrary->getAddressOfSymbol (GETNAME (__tgt_rtl_##NAME)); \
139
+ if (MANDATORY && !RTL.NAME ) { \
140
+ DP (" Invalid plugin as necessary interface is not found.\n " ); \
141
+ return false ; \
144
142
}
145
143
146
- bool ValidPlugin = true ;
147
-
148
- if (!(*((void **)&RTL.is_valid_binary ) =
149
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_is_valid_binary" )))
150
- ValidPlugin = false ;
151
- if (!(*((void **)&RTL.number_of_devices ) =
152
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_number_of_devices" )))
153
- ValidPlugin = false ;
154
- if (!(*((void **)&RTL.init_device ) =
155
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_init_device" )))
156
- ValidPlugin = false ;
157
- if (!(*((void **)&RTL.load_binary ) =
158
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_load_binary" )))
159
- ValidPlugin = false ;
160
- if (!(*((void **)&RTL.data_alloc ) =
161
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_data_alloc" )))
162
- ValidPlugin = false ;
163
- if (!(*((void **)&RTL.data_submit ) =
164
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_data_submit" )))
165
- ValidPlugin = false ;
166
- if (!(*((void **)&RTL.data_retrieve ) =
167
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_data_retrieve" )))
168
- ValidPlugin = false ;
169
- if (!(*((void **)&RTL.data_delete ) =
170
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_data_delete" )))
171
- ValidPlugin = false ;
172
- if (!(*((void **)&RTL.launch_kernel ) =
173
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_launch_kernel" )))
174
- ValidPlugin = false ;
175
-
176
- // Invalid plugin
177
- if (!ValidPlugin) {
178
- DP (" Invalid plugin as necessary interface is not found.\n " );
144
+ #include " Shared/PluginAPI.inc"
145
+ #undef PLUGIN_API_HANDLE
146
+
147
+ // Remove plugin on failure to call optional init_plugin
148
+ int32_t Rc = RTL.init_plugin ();
149
+ if (Rc != OFFLOAD_SUCCESS) {
150
+ DP (" Unable to initialize library '%s': %u!\n " , Name, Rc);
179
151
return false ;
180
152
}
181
153
@@ -192,60 +164,6 @@ bool PluginAdaptorManagerTy::attemptLoadRTL(const std::string &RTLName, PluginAd
192
164
193
165
DP (" Registering RTL %s supporting %d devices!\n " , Name, RTL.NumberOfDevices );
194
166
195
- // Optional functions
196
- *((void **)&RTL.is_valid_binary_info ) =
197
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_is_valid_binary_info" );
198
- *((void **)&RTL.init_requires ) =
199
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_init_requires" );
200
- *((void **)&RTL.data_submit_async ) =
201
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_data_submit_async" );
202
- *((void **)&RTL.data_retrieve_async ) =
203
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_data_retrieve_async" );
204
- *((void **)&RTL.synchronize ) =
205
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_synchronize" );
206
- *((void **)&RTL.query_async ) =
207
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_query_async" );
208
- *((void **)&RTL.data_exchange ) =
209
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_data_exchange" );
210
- *((void **)&RTL.data_exchange_async ) =
211
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_data_exchange_async" );
212
- *((void **)&RTL.is_data_exchangable ) =
213
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_is_data_exchangable" );
214
- *((void **)&RTL.supports_empty_images ) =
215
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_supports_empty_images" );
216
- *((void **)&RTL.set_info_flag ) =
217
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_set_info_flag" );
218
- *((void **)&RTL.print_device_info ) =
219
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_print_device_info" );
220
- *((void **)&RTL.create_event ) =
221
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_create_event" );
222
- *((void **)&RTL.record_event ) =
223
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_record_event" );
224
- *((void **)&RTL.wait_event ) =
225
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_wait_event" );
226
- *((void **)&RTL.sync_event ) =
227
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_sync_event" );
228
- *((void **)&RTL.destroy_event ) =
229
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_destroy_event" );
230
- *((void **)&RTL.init_async_info ) =
231
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_init_async_info" );
232
- *((void **)&RTL.init_device_info ) =
233
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_init_device_info" );
234
- *((void **)&RTL.data_lock ) =
235
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_data_lock" );
236
- *((void **)&RTL.data_unlock ) =
237
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_data_unlock" );
238
- *((void **)&RTL.data_notify_mapped ) =
239
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_data_notify_mapped" );
240
- *((void **)&RTL.data_notify_unmapped ) =
241
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_data_notify_unmapped" );
242
- *((void **)&RTL.set_device_offset ) =
243
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_set_device_offset" );
244
-
245
- // Record Replay RTL
246
- *((void **)&RTL.initialize_record_replay ) =
247
- DynLibrary->getAddressOfSymbol (" __tgt_rtl_initialize_record_replay" );
248
-
249
167
RTL.LibraryHandler = std::move (DynLibrary);
250
168
251
169
// Successfully loaded
0 commit comments