Skip to content

Commit e779cd0

Browse files
committed
feat: Load extensions statically (for Emscripten)
1 parent fb4ce16 commit e779cd0

10 files changed

Lines changed: 50 additions & 0 deletions

File tree

projects/Converters/Minecraft/Console/include/Lodestone.Minecraft.Console/LodestoneLce.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,11 @@ namespace lodestone::minecraft::console {
3636
lodestone::common::util::Semver getVersion() const override;
3737
};
3838

39+
#ifndef __EMSCRIPTEN__
3940
extern "C" {
4041
core::LodestoneExtension *lodestoneInit();
4142
}
43+
#endif
4244
}
4345

4446
#endif // LODESTONE_LODESTONELCE_H

projects/Converters/Minecraft/Console/src/LodestoneLce.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ namespace lodestone::minecraft::console {
2828
return VERSION;
2929
}
3030

31+
#ifndef __EMSCRIPTEN__
3132
core::LodestoneExtension *lodestoneInit() {
3233
return LodestoneLCE::getInstance();
3334
}
35+
#endif
3436
}

projects/Converters/Minecraft/Java/include/Lodestone.Minecraft.Java/LodestoneJava.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,11 @@ namespace lodestone::minecraft::java {
3939
lodestone::conversion::block::version::VersionedBlockIO m_blockIo;
4040
};
4141

42+
#ifndef __EMSCRIPTEN__
4243
extern "C" {
4344
core::LodestoneExtension *lodestoneInit();
4445
}
46+
#endif
4547
} // namespace lodestone::minecraft::java
4648

4749
#endif // LODESTONE_MAIN_H

projects/Converters/Minecraft/Java/src/LodestoneJava.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -782,7 +782,9 @@ namespace lodestone::minecraft::java {
782782

783783
lodestone::common::util::Semver LodestoneJava::getVersion() const { return VERSION; }
784784

785+
#ifndef __EMSCRIPTEN__
785786
core::LodestoneExtension *lodestoneInit() {
786787
return LodestoneJava::getInstance();
787788
}
789+
#endif
788790
} // namespace lodestone::minecraft::java

projects/Libraries/Core/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@ set(FILES
1010
include/Lodestone.Core/LodestoneExtension.h
1111
include/Lodestone.Core/loader/ExtensionLoader.h
1212
include/Lodestone.Core/loader/NativeExtensionLoader.h
13+
include/Lodestone.Core/loader/StaticExtensionLoader.h
1314
include/Lodestone.Core/loader/LibraryHandle.h
1415
src/loader/ExtensionLoader.cpp
1516
src/loader/NativeExtensionLoader.cpp
17+
src/loader/StaticExtensionLoader.cpp
1618
src/loader/LibraryHandle.cpp
1719
src/loader/exception/LoadLibraryException.cpp
1820
include/Lodestone.Core/loader/exception/LoadLibraryException.h

projects/Libraries/Core/include/Lodestone.Core/loader/ExtensionLoader.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,19 @@
2020
namespace lodestone::core::loader {
2121
class ExtensionLoader {
2222
public:
23+
#ifndef __EMSCRIPTEN__
2324
using LodestoneInit = lodestone::core::LodestoneExtension *(*)(void);
25+
#endif
2426
static constexpr const char *ENTRYPOINT = "lodestoneInit";
2527

2628
virtual ~ExtensionLoader() = default;
2729

2830
explicit ExtensionLoader(core::Lodestone *core);
2931

3032
virtual void load() = 0;
33+
#ifndef __EMSCRIPTEN__
3134
virtual void loadExtension(LodestoneInit entrypoint);
35+
#endif
3236

3337
public:
3438
common::event::CancellableEvent<const std::filesystem::path &> extensionLoadingEvent;
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
//
2+
// Created by zero on 7/12/26.
3+
//
4+
5+
#ifndef LODESTONE_STATIC_EXTENSION_LOADER_H
6+
#define LODESTONE_STATIC_EXTENSION_LOADER_H
7+
#include "Lodestone.Core/loader/ExtensionLoader.h"
8+
9+
namespace lodestone::core::loader {
10+
class StaticExtensionLoader : public ExtensionLoader {
11+
public:
12+
explicit StaticExtensionLoader(core::Lodestone *core)
13+
: ExtensionLoader(core) {
14+
}
15+
16+
void load() override {}
17+
18+
void loadExtension(core::LodestoneExtension *ext);
19+
};
20+
}
21+
22+
#endif //LODESTONE_STATIC_EXTENSION_LOADER_H

projects/Libraries/Core/src/loader/ExtensionLoader.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@
1313
namespace lodestone::core::loader {
1414
ExtensionLoader::ExtensionLoader(core::Lodestone* core) : m_core(core) {}
1515

16+
#ifndef __EMSCRIPTEN__
1617
void ExtensionLoader::loadExtension(const LodestoneInit entrypoint) {
1718
core::LodestoneExtension *ext = entrypoint();
1819

1920
this->extensionLoadedEvent.notify(ext);
2021
this->m_core->registerExtension(ext);
2122
}
23+
#endif
2224
}

projects/Libraries/Core/src/loader/NativeExtensionLoader.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
namespace lodestone::core::loader {
2121
void NativeExtensionLoader::load() {
22+
#ifndef __EMSCRIPTEN__
2223
if (!std::filesystem::exists(this->m_extensionsDirectory)) {
2324
if (std::error_code ec; !std::filesystem::create_directories(
2425
this->m_extensionsDirectory, ec)) {
@@ -72,5 +73,6 @@ namespace lodestone::core::loader {
7273

7374
this->loadExtension(init);
7475
}
76+
#endif
7577
}
7678
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
//
2+
// Created by zero on 7/12/26.
3+
//
4+
5+
#include "Lodestone.Core/loader/StaticExtensionLoader.h"
6+
7+
void lodestone::core::loader::StaticExtensionLoader::loadExtension(core::LodestoneExtension *ext) {
8+
this->extensionLoadedEvent.notify(ext);
9+
this->m_core->registerExtension(ext);
10+
}

0 commit comments

Comments
 (0)