26
26
#include < Windows.h>
27
27
#endif
28
28
29
- #if LANGULUS_OS(LINUX)
29
+ #if LANGULUS_OS(LINUX) or LANGULUS_COMPILER(WASM)
30
30
#include < dlfcn.h>
31
31
#endif
32
32
@@ -64,12 +64,10 @@ namespace Langulus::Entity
64
64
void UnloadSharedLibrary (HMODULE library) {
65
65
FreeLibrary (library);
66
66
}
67
- #elif LANGULUS_OS(LINUX)
67
+ #else
68
68
void UnloadSharedLibrary (void * library) {
69
69
dlclose (library);
70
70
}
71
- #else
72
- #error Unsupported OS
73
71
#endif
74
72
75
73
// / Runtime construction
@@ -356,6 +354,8 @@ namespace Langulus::Entity
356
354
path += " .dll" ;
357
355
#elif LANGULUS_OS(LINUX)
358
356
path += " .so" ;
357
+ #elif LANGULUS_COMPILER(WASM)
358
+ path += " .wasm" ;
359
359
#else
360
360
#error Unsupported OS
361
361
#endif
@@ -366,10 +366,8 @@ namespace Langulus::Entity
366
366
// Load the library
367
367
#if LANGULUS_OS(WINDOWS)
368
368
const auto dll = LoadLibraryA (path.GetRaw ());
369
- #elif LANGULUS_OS(LINUX)
369
+ #else
370
370
const auto dll = dlopen (path.GetRaw (), RTLD_NOW);
371
- #else
372
- #error Unsupported OS
373
371
#endif
374
372
375
373
if (not dll) {
@@ -395,35 +393,33 @@ namespace Langulus::Entity
395
393
GetProcAddress (dll, LANGULUS_MODULE_CREATE_TOKEN ()));
396
394
library.mInfo = reinterpret_cast <A::Module::InfoFunction>(
397
395
GetProcAddress (dll, LANGULUS_MODULE_INFO_TOKEN ()));
398
- #elif LANGULUS_OS(LINUX)
396
+ #else
399
397
library.mEntry = reinterpret_cast <A::Module::EntryFunction>(
400
398
dlsym (dll, LANGULUS_MODULE_ENTRY_TOKEN ()));
401
399
library.mCreator = reinterpret_cast <A::Module::CreateFunction>(
402
400
dlsym (dll, LANGULUS_MODULE_CREATE_TOKEN ()));
403
401
library.mInfo = reinterpret_cast <A::Module::InfoFunction>(
404
402
dlsym (dll, LANGULUS_MODULE_INFO_TOKEN ()));
405
- #else
406
- #error Unsupported OS
407
403
#endif
408
404
409
405
if (not library.mEntry ) {
410
406
Logger::Error (" Module `" , path, " ` has no valid entry point - " ,
411
407
" the function " LANGULUS_MODULE_ENTRY_TOKEN () " is missing" );
412
- (void )UnloadSharedLibrary (library);
408
+ (void ) UnloadSharedLibrary (library);
413
409
return {};
414
410
}
415
411
416
412
if (not library.mCreator ) {
417
413
Logger::Error (" Module `" , path, " ` has no valid instantiation point - " ,
418
414
" the function " LANGULUS_MODULE_CREATE_TOKEN () " is missing" );
419
- (void )UnloadSharedLibrary (library);
415
+ (void ) UnloadSharedLibrary (library);
420
416
return {};
421
417
}
422
418
423
419
if (not library.mInfo ) {
424
420
Logger::Error (" Module `" , path, " ` has no valid information point - " ,
425
421
" the function " LANGULUS_MODULE_INFO_TOKEN () " is missing" );
426
- (void )UnloadSharedLibrary (library);
422
+ (void ) UnloadSharedLibrary (library);
427
423
return {};
428
424
}
429
425
@@ -568,11 +564,9 @@ namespace Langulus::Entity
568
564
#if LANGULUS_OS(WINDOWS)
569
565
Entity::UnloadSharedLibrary (
570
566
reinterpret_cast <HMODULE>(library.mHandle ));
571
- #elif LANGULUS_OS(LINUX)
567
+ #else
572
568
Entity::UnloadSharedLibrary (
573
569
reinterpret_cast <void *>(library.mHandle ));
574
- #else
575
- #error Unsupported OS
576
570
#endif
577
571
return true ;
578
572
}
0 commit comments