diff --git a/cpp/expressionsLib/inc/OscExprExportDefs.h b/cpp/expressionsLib/inc/OscExprExportDefs.h index 1f24fbc3..4b34379e 100644 --- a/cpp/expressionsLib/inc/OscExprExportDefs.h +++ b/cpp/expressionsLib/inc/OscExprExportDefs.h @@ -35,6 +35,8 @@ # endif #elif defined(__APPLE__) # define OSC_EXPR_EXP +#elif defined(__EMSCRIPTEN__) +# define OSC_EXPR_EXP #else # error "OPENSCENARIOLIB: Operating system not supported." #endif // _WIN32 diff --git a/cpp/expressionsLib/src/EvaluatorListener.cpp b/cpp/expressionsLib/src/EvaluatorListener.cpp index e00b2fdc..45476350 100644 --- a/cpp/expressionsLib/src/EvaluatorListener.cpp +++ b/cpp/expressionsLib/src/EvaluatorListener.cpp @@ -26,6 +26,18 @@ #include #include +#if defined(__EMSCRIPTEN__) +// WASM has no floating-point exception environment; FE_OVERFLOW/FE_UNDERFLOW +// are not provided by Emscripten's . Shim to 0 so feclearexcept/ +// fetestexcept compile to no-ops (overflow/underflow detection is disabled). +# ifndef FE_OVERFLOW +# define FE_OVERFLOW 0 +# endif +# ifndef FE_UNDERFLOW +# define FE_UNDERFLOW 0 +# endif +#endif + namespace OscExpression { diff --git a/cpp/externalLibs/Filesystem/filesystem.hpp b/cpp/externalLibs/Filesystem/filesystem.hpp index 1f0fe392..f92b9c3d 100644 --- a/cpp/externalLibs/Filesystem/filesystem.hpp +++ b/cpp/externalLibs/Filesystem/filesystem.hpp @@ -64,6 +64,8 @@ #define GHC_OS_SYS5R4 #elif defined(BSD) #define GHC_OS_BSD +#elif defined(__EMSCRIPTEN__) +#define GHC_OS_LINUX #else #error "Operating system currently not supported!" #endif diff --git a/cpp/openScenarioLib/src/common/ExportDefinitions.h b/cpp/openScenarioLib/src/common/ExportDefinitions.h index 2b0dfb2d..0e46f766 100644 --- a/cpp/openScenarioLib/src/common/ExportDefinitions.h +++ b/cpp/openScenarioLib/src/common/ExportDefinitions.h @@ -19,6 +19,8 @@ # endif #elif defined(__APPLE__) # define OPENSCENARIOLIB_EXP +#elif defined(__EMSCRIPTEN__) +# define OPENSCENARIOLIB_EXP #else # error "OPENSCENARIOLIB: Operating system not supported." #endif // _WIN32 diff --git a/cpp/openScenarioLib/src/loader/FileResourceLocator.cpp b/cpp/openScenarioLib/src/loader/FileResourceLocator.cpp index 7a9e7600..b8d7d6ad 100644 --- a/cpp/openScenarioLib/src/loader/FileResourceLocator.cpp +++ b/cpp/openScenarioLib/src/loader/FileResourceLocator.cpp @@ -41,7 +41,7 @@ namespace NET_ASAM_OPENSCENARIO } auto infile = std::make_shared(result.c_str(), std::ios::binary); -#elif defined (__linux__) || defined (__APPLE__) +#elif defined (__linux__) || defined (__APPLE__) || defined (__EMSCRIPTEN__) auto infile = std::make_shared(symbolicFilename, std::ios::binary); #else # error "Operating system not supported." diff --git a/cpp/openScenarioLib/src/v1_0/loader/XmlScenarioImportLoaderV1_0.cpp b/cpp/openScenarioLib/src/v1_0/loader/XmlScenarioImportLoaderV1_0.cpp index 8942eff2..9ace8ca4 100644 --- a/cpp/openScenarioLib/src/v1_0/loader/XmlScenarioImportLoaderV1_0.cpp +++ b/cpp/openScenarioLib/src/v1_0/loader/XmlScenarioImportLoaderV1_0.cpp @@ -50,7 +50,7 @@ namespace NET_ASAM_OPENSCENARIO std::shared_ptr XmlScenarioImportLoader::Load(std::shared_ptr messageLogger, std::map& injectedParameters) { - auto openScenario = std::static_pointer_cast(_innerScenarioLoader->Load(messageLogger)->GetAdapter(typeid(IOpenScenario).name())); + auto openScenario = std::static_pointer_cast(_innerScenarioLoader->Load(messageLogger, injectedParameters)->GetAdapter(typeid(IOpenScenario).name())); if (messageLogger->GetMessagesFilteredByWorseOrEqualToErrorLevel(ErrorLevel::ERROR).empty()) { diff --git a/cpp/openScenarioLib/src/v1_1/loader/XmlScenarioImportLoaderV1_1.cpp b/cpp/openScenarioLib/src/v1_1/loader/XmlScenarioImportLoaderV1_1.cpp index fcd5963d..82dbc2fc 100644 --- a/cpp/openScenarioLib/src/v1_1/loader/XmlScenarioImportLoaderV1_1.cpp +++ b/cpp/openScenarioLib/src/v1_1/loader/XmlScenarioImportLoaderV1_1.cpp @@ -51,7 +51,7 @@ namespace NET_ASAM_OPENSCENARIO std::shared_ptr XmlScenarioImportLoader::Load(std::shared_ptr messageLogger, std::map& injectedParameters) { - auto openScenario = std::static_pointer_cast(_innerScenarioLoader->Load(messageLogger)->GetAdapter(typeid(IOpenScenario).name())); + auto openScenario = std::static_pointer_cast(_innerScenarioLoader->Load(messageLogger, injectedParameters)->GetAdapter(typeid(IOpenScenario).name())); if (messageLogger->GetMessagesFilteredByWorseOrEqualToErrorLevel(ErrorLevel::ERROR).empty()) { diff --git a/cpp/openScenarioLib/src/v1_2/loader/XmlScenarioImportLoaderV1_2.cpp b/cpp/openScenarioLib/src/v1_2/loader/XmlScenarioImportLoaderV1_2.cpp index 566df15d..4abfe617 100644 --- a/cpp/openScenarioLib/src/v1_2/loader/XmlScenarioImportLoaderV1_2.cpp +++ b/cpp/openScenarioLib/src/v1_2/loader/XmlScenarioImportLoaderV1_2.cpp @@ -52,7 +52,7 @@ namespace NET_ASAM_OPENSCENARIO std::shared_ptr XmlScenarioImportLoader::Load(std::shared_ptr messageLogger, std::map& injectedParameters) { - auto openScenario = std::static_pointer_cast(_innerScenarioLoader->Load(messageLogger)->GetAdapter(typeid(IOpenScenario).name())); + auto openScenario = std::static_pointer_cast(_innerScenarioLoader->Load(messageLogger, injectedParameters)->GetAdapter(typeid(IOpenScenario).name())); if (messageLogger->GetMessagesFilteredByWorseOrEqualToErrorLevel(ErrorLevel::ERROR).empty()) { diff --git a/cpp/openScenarioLib/src/v1_3/loader/XmlScenarioImportLoaderV1_3.cpp b/cpp/openScenarioLib/src/v1_3/loader/XmlScenarioImportLoaderV1_3.cpp index 3062b272..d0c268e9 100644 --- a/cpp/openScenarioLib/src/v1_3/loader/XmlScenarioImportLoaderV1_3.cpp +++ b/cpp/openScenarioLib/src/v1_3/loader/XmlScenarioImportLoaderV1_3.cpp @@ -52,7 +52,7 @@ namespace NET_ASAM_OPENSCENARIO std::shared_ptr XmlScenarioImportLoader::Load(std::shared_ptr messageLogger, std::map& injectedParameters) { - auto openScenario = std::static_pointer_cast(_innerScenarioLoader->Load(messageLogger)->GetAdapter(typeid(IOpenScenario).name())); + auto openScenario = std::static_pointer_cast(_innerScenarioLoader->Load(messageLogger, injectedParameters)->GetAdapter(typeid(IOpenScenario).name())); if (messageLogger->GetMessagesFilteredByWorseOrEqualToErrorLevel(ErrorLevel::ERROR).empty()) {