View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001029 | OpenMPT | libopenmpt | public | 2017-09-22 12:50 | 2018-12-23 13:22 |
Reporter | manx | Assigned To | manx | ||
Priority | normal | Severity | minor | Reproducibility | N/A |
Status | resolved | Resolution | fixed | ||
Fixed in Version | OpenMPT 1.28.01.00 / libopenmpt 0.4.0 (upgrade first) | ||||
Summary | 0001029: WebAssembly support | ||||
Description | libopenmpt needs support for compiling to WebAssembly. | ||||
Tags | No tags attached. | ||||
Attached Files | emscripten-wasm-v1.patch (9,350 bytes)
Index: README.md =================================================================== --- README.md (revision 10620) +++ README.md (working copy) @@ -179,8 +179,8 @@ - emscripten (on Unix-like systems): - libopenmpt has been tested and verified to work with emscripten 1.31 or - later (earlier versions might or might not work). + libopenmpt has been tested and verified to work with emscripten 1.38.1 + or later (earlier versions might or might not work). Run: @@ -187,7 +187,7 @@ make CONFIG=emscripten Running the test suite on the command line is also supported by using - node.js. Version 0.10.25 or greater has been tested. Earlier versions + node.js. Version 8.9.1 or greater has been tested. Earlier versions might or might not work. Depending on how your distribution calls the `node.js` binary, you might have to edit `build/make/config-emscripten.mk`. Index: build/make/config-emscripten.mk =================================================================== --- build/make/config-emscripten.mk (revision 10620) +++ build/make/config-emscripten.mk (working copy) @@ -4,7 +4,7 @@ LD = em++ AR = emar -EMSCRIPTEN_TARGET?=asmjs +EMSCRIPTEN_TARGET?=default ifneq ($(STDCXX),) CXXFLAGS_STDCXX = -std=$(STDCXX) @@ -25,47 +25,47 @@ CXXFLAGS += $(CXXFLAGS_STDCXX) CFLAGS += $(CFLAGS_STDC) -ifeq ($(EMSCRIPTEN_TARGET),js) - -CPPFLAGS += -CXXFLAGS += -fPIC -O2 -s ASM_JS=2 -s DISABLE_EXCEPTION_CATCHING=0 -s PRECISE_F32=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -ffast-math -CFLAGS += -fPIC -O2 -s ASM_JS=2 -s DISABLE_EXCEPTION_CATCHING=0 -s PRECISE_F32=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -ffast-math -fno-strict-aliasing -LDFLAGS += -O2 -s ASM_JS=2 -s DISABLE_EXCEPTION_CATCHING=0 -s PRECISE_F32=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s EXPORT_NAME="'libopenmpt'" -LDLIBS += +CPPFLAGS += +CXXFLAGS += -fPIC +CFLAGS += -fPIC +LDFLAGS += +LDLIBS += ARFLAGS := rcs -# allow growing heap (might be slower, especially with V8 (as used by Chrome)) -#LDFLAGS += -s ALLOW_MEMORY_GROWTH=1 -# limit memory to 64MB, faster but loading modules bigger than about 16MB will not work -#LDFLAGS += -s TOTAL_MEMORY=67108864 +ifeq ($(EMSCRIPTEN_TARGET),default) +# emits whatever is emscripten's default, currently (1.38.8) this is native-wasm with a polyfill. +CPPFLAGS += -DMPT_BUILD_WASM +CXXFLAGS += -Os +CFLAGS += -Os +LDFLAGS += -Os -LDFLAGS += -s ALLOW_MEMORY_GROWTH=1 +else ifeq ($(EMSCRIPTEN_TARGET),wasm) +# emits native wasm AND an emulator for running wasm in asmjs/js with full wasm optimizations. +CPPFLAGS += -DMPT_BUILD_WASM +CXXFLAGS += -Os -s WASM=1 -s BINARYEN_METHOD='native-wasm' +CFLAGS += -Os -s WASM=1 -s BINARYEN_METHOD='native-wasm' +LDFLAGS += -Os -s WASM=1 -s BINARYEN_METHOD='native-wasm' else ifeq ($(EMSCRIPTEN_TARGET),asmjs) +# emits only asmjs +CPPFLAGS += -DMPT_BUILD_ASMJS +CXXFLAGS += -O2 -s WASM=0 -s ASM_JS=1 +CFLAGS += -O2 -s WASM=0 -s ASM_JS=1 +LDFLAGS += -O2 -s WASM=0 -s ASM_JS=1 -CPPFLAGS += -CXXFLAGS += -fPIC -O2 -s DISABLE_EXCEPTION_CATCHING=0 -s PRECISE_F32=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -ffast-math -CFLAGS += -fPIC -O2 -s DISABLE_EXCEPTION_CATCHING=0 -s PRECISE_F32=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -ffast-math -fno-strict-aliasing -LDFLAGS += -O2 -s DISABLE_EXCEPTION_CATCHING=0 -s PRECISE_F32=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s EXPORT_NAME="'libopenmpt'" -LDLIBS += -ARFLAGS := rcs +else ifeq ($(EMSCRIPTEN_TARGET),js) +# emits only plain javascript with plain javascript focused optimizations. +CPPFLAGS += -DMPT_BUILD_ASMJS +CXXFLAGS += -O2 -s WASM=0 -s ASM_JS=2 +CFLAGS += -O2 -s WASM=0 -s ASM_JS=2 +LDFLAGS += -O2 -s WASM=0 -s ASM_JS=2 -# allow growing heap (might be slower, especially with V8 (as used by Chrome)) -#LDFLAGS += -s ALLOW_MEMORY_GROWTH=1 -# limit memory to 64MB, faster but loading modules bigger than about 16MB will not work -#LDFLAGS += -s TOTAL_MEMORY=67108864 +endif -LDFLAGS += -s ALLOW_MEMORY_GROWTH=1 +CXXFLAGS += -s DISABLE_EXCEPTION_CATCHING=0 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -ffast-math +CFLAGS += -s DISABLE_EXCEPTION_CATCHING=0 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -ffast-math -fno-strict-aliasing +LDFLAGS += -s DISABLE_EXCEPTION_CATCHING=0 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s EXPORT_NAME="'libopenmpt'" -else ifeq ($(EMSCRIPTEN_TARGET),wasm) - -CPPFLAGS += -DMPT_BUILD_WASM -CXXFLAGS += -fPIC -Os -s WASM=1 -s DISABLE_EXCEPTION_CATCHING=0 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -ffast-math -CFLAGS += -fPIC -Os -s WASM=1 -s DISABLE_EXCEPTION_CATCHING=0 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -ffast-math -fno-strict-aliasing -LDFLAGS += -Os -s WASM=1 -s DISABLE_EXCEPTION_CATCHING=0 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s EXPORT_NAME="'libopenmpt'" -LDLIBS += -ARFLAGS := rcs - # allow growing heap (might be slower, especially with V8 (as used by Chrome)) #LDFLAGS += -s ALLOW_MEMORY_GROWTH=1 # limit memory to 64MB, faster but loading modules bigger than about 16MB will not work @@ -73,8 +73,6 @@ LDFLAGS += -s ALLOW_MEMORY_GROWTH=1 -endif - CFLAGS_SILENT += -Wno-unused-parameter -Wno-unused-function -Wno-cast-qual CXXFLAGS_WARNINGS += -Wmissing-declarations @@ -82,23 +80,11 @@ REQUIRES_RUNPREFIX=1 -ifeq ($(EMSCRIPTEN_TARGET),wasm) - -EXESUFFIX=.html -SOSUFFIX=.wasm -SO_LDFLAGS=-s SIDE_MODULE=1 -BIN_LDFLAGS=-s SIDE_MODULE=0 -TEST_LDFLAGS=-s SIDE_MODULE=0 --emrun - -else - EXESUFFIX=.js SOSUFFIX=.js RUNPREFIX=nodejs TEST_LDFLAGS= --pre-js build/make/test-pre.js -endif - DYNLINK=0 SHARED_LIB=1 STATIC_LIB=0 Index: common/CompilerDetect.h =================================================================== --- common/CompilerDetect.h (revision 10620) +++ common/CompilerDetect.h (working copy) @@ -193,14 +193,12 @@ #define MPT_OS_EMSCRIPTEN 1 #if defined(__EMSCRIPTEN_major__) && defined(__EMSCRIPTEN_minor__) #if (__EMSCRIPTEN_major__ > 1) - #define MPT_OS_EMSCRIPTEN_ANCIENT 0 - #elif (__EMSCRIPTEN_major__ == 1) && (__EMSCRIPTEN_minor__ >= 36) - #define MPT_OS_EMSCRIPTEN_ANCIENT 0 + // ok + #elif (__EMSCRIPTEN_major__ == 1) && (__EMSCRIPTEN_minor__ >= 38) + // ok #else - #define MPT_OS_EMSCRIPTEN_ANCIENT 1 + #error "Emscripten >= 1.38 is required." #endif - #else - #define MPT_OS_EMSCRIPTEN_ANCIENT 1 #endif #elif defined(_WIN32) #define MPT_OS_WINDOWS 1 Index: common/mptBaseUtils.h =================================================================== --- common/mptBaseUtils.h (revision 10620) +++ common/mptBaseUtils.h (working copy) @@ -581,13 +581,7 @@ { // C++11 std::round -#if (MPT_OS_EMSCRIPTEN && MPT_OS_EMSCRIPTEN_ANCIENT) - // Certain emscripten versions and/or combinations with nodejs (at least the following combination: emscripten 1.34.8, clang 3.7.0, nodejs 0.10.38) fail assert(std::round(1.5)==2.0). The work-around always works. - inline double round(double val) {if(val >= 0.0) return std::floor(val + 0.5); else return std::ceil(val - 0.5);} - inline float round(float val) {if(val >= 0.0f) return std::floor(val + 0.5f); else return std::ceil(val - 0.5f);} -#else using std::round; -#endif // Rounds given double value to nearest integer value of type T. // Out-of-range values are saturated to the specified integer type's limits. Index: libopenmpt/dox/changelog.md =================================================================== --- libopenmpt/dox/changelog.md (revision 10620) +++ libopenmpt/dox/changelog.md (working copy) @@ -56,6 +56,8 @@ * [**Regression**] Support for Clang 3.4, 3.5 has been removed. * [**Regression**] Building with Android NDK older than NDK r16b is not supported any more. + * [**Regression**] Support for Emscripten versions older than 1.38.1 has been + removed. * [**Regression**] Support for libmpg123 older than 1.14.0 has been removed. * [**Regression**] Using MediaFoundation to decode MP3 samples is no longer supported. Use libmpg123 or minimp3 instead. Index: libopenmpt/dox/dependencies.md =================================================================== --- libopenmpt/dox/dependencies.md (revision 10620) +++ libopenmpt/dox/dependencies.md (working copy) @@ -15,7 +15,7 @@ * **MinGW-W64 4.8** or higher (it is recommended to preferably use posix threading model as opposed to win32 threading model, or at least have mingw-std-threads available otherwise) - * **emscripten 1.31** or higher + * **emscripten 1.38.1** or higher * any other **C++11 compliant** compiler (full standard compliant mode is known to work with GCC >= 5.1 and Clang) Index: test/test.cpp =================================================================== --- test/test.cpp (revision 10620) +++ test/test.cpp (working copy) @@ -685,12 +685,7 @@ VERIFY_EQUAL(mpt::fmt::flt(6.12345, 3), "6.12"); VERIFY_EQUAL(mpt::fmt::fix(6.12345, 3), "6.123"); VERIFY_EQUAL(mpt::fmt::flt(6.12345, 4), "6.123"); - #if !(MPT_OS_EMSCRIPTEN && MPT_OS_EMSCRIPTEN_ANCIENT) VERIFY_EQUAL(mpt::fmt::fix(6.12345, 4), "6.1235"); - #else - // emscripten(1.21)/nodejs(v0.10.25) print 6.1234 instead of 6.1235 for unknown reasons. - // As this test case is not fatal, ignore it for now in order to make the test cases pass. - #endif #if MPT_WSTRING_FORMAT VERIFY_EQUAL(mpt::wfmt::flt(6.12345, 3), L"6.12"); emscripten-wasm-v4.patch (11,250 bytes)
Index: Makefile =================================================================== --- Makefile (revision 10647) +++ Makefile (working copy) @@ -905,15 +905,23 @@ MISC_OUTPUTS += libopenmpt$(SOSUFFIX) MISC_OUTPUTS += bin/.docs MISC_OUTPUTS += bin/libopenmpt_test$(EXESUFFIX) +MISC_OUTPUTS += bin/libopenmpt_test.wasm MISC_OUTPUTS += bin/libopenmpt_test.js.mem MISC_OUTPUTS += bin/made.docs MISC_OUTPUTS += bin/$(LIBOPENMPT_SONAME) +MISC_OUTPUTS += bin/libopenmpt.wasm MISC_OUTPUTS += bin/libopenmpt.js.mem +MISC_OUTPUTS += bin/libopenmpt_example_c.wasm MISC_OUTPUTS += bin/libopenmpt_example_c.js.mem +MISC_OUTPUTS += bin/libopenmpt_example_c_mem.wasm MISC_OUTPUTS += bin/libopenmpt_example_c_mem.js.mem +MISC_OUTPUTS += bin/libopenmpt_example_c_pipe.wasm MISC_OUTPUTS += bin/libopenmpt_example_c_pipe.js.mem +MISC_OUTPUTS += bin/libopenmpt_example_c_probe.wasm MISC_OUTPUTS += bin/libopenmpt_example_c_probe.js.mem +MISC_OUTPUTS += bin/libopenmpt_example_c_stdout.wasm MISC_OUTPUTS += bin/libopenmpt_example_c_stdout.js.mem +MISC_OUTPUTS += bin/libopenmpt_example_c_unsafe.wasm MISC_OUTPUTS += bin/libopenmpt_example_c_unsafe.js.mem MISC_OUTPUTS += bin/openmpt.a #old @@ -930,7 +938,9 @@ DIST_OUTPUTS += bin/dist-zip.tar DIST_OUTPUTS += bin/dist-doc.tar DIST_OUTPUTS += bin/dist-autotools.tar -DIST_OUTPUTS += bin/dist-js.tar +DIST_OUTPUTS += bin/dist-wasm.tar +DIST_OUTPUTS += bin/dist-asmjs.tar +DIST_OUTPUTS += bin/dist-js.tar DIST_OUTPUTS += bin/made.docs DIST_OUTPUTDIRS += bin/dist @@ -938,6 +948,8 @@ DIST_OUTPUTDIRS += bin/dist-tar DIST_OUTPUTDIRS += bin/dist-zip DIST_OUTPUTDIRS += bin/dist-autotools +DIST_OUTPUTDIRS += bin/dist-wasm +DIST_OUTPUTDIRS += bin/dist-asmjs DIST_OUTPUTDIRS += bin/dist-js DIST_OUTPUTDIRS += bin/docs Index: README.md =================================================================== --- README.md (revision 10647) +++ README.md (working copy) @@ -179,8 +179,8 @@ - emscripten (on Unix-like systems): - libopenmpt has been tested and verified to work with emscripten 1.31 or - later (earlier versions might or might not work). + libopenmpt has been tested and verified to work with emscripten 1.38.1 + or later. Earlier versions are not supported. Run: @@ -187,7 +187,7 @@ make CONFIG=emscripten Running the test suite on the command line is also supported by using - node.js. Version 0.10.25 or greater has been tested. Earlier versions + node.js. Version 8.9.1 or greater has been tested. Earlier versions might or might not work. Depending on how your distribution calls the `node.js` binary, you might have to edit `build/make/config-emscripten.mk`. Index: build/make/config-emscripten.mk =================================================================== --- build/make/config-emscripten.mk (revision 10647) +++ build/make/config-emscripten.mk (working copy) @@ -4,7 +4,7 @@ LD = em++ AR = emar -EMSCRIPTEN_TARGET?=asmjs +EMSCRIPTEN_TARGET?=default ifneq ($(STDCXX),) CXXFLAGS_STDCXX = -std=$(STDCXX) @@ -25,47 +25,52 @@ CXXFLAGS += $(CXXFLAGS_STDCXX) CFLAGS += $(CFLAGS_STDC) -ifeq ($(EMSCRIPTEN_TARGET),js) - -CPPFLAGS += -CXXFLAGS += -fPIC -O2 -s ASM_JS=2 -s DISABLE_EXCEPTION_CATCHING=0 -s PRECISE_F32=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -ffast-math -CFLAGS += -fPIC -O2 -s ASM_JS=2 -s DISABLE_EXCEPTION_CATCHING=0 -s PRECISE_F32=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -ffast-math -fno-strict-aliasing -LDFLAGS += -O2 -s ASM_JS=2 -s DISABLE_EXCEPTION_CATCHING=0 -s PRECISE_F32=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s EXPORT_NAME="'libopenmpt'" -LDLIBS += +CPPFLAGS += +CXXFLAGS += -fPIC +CFLAGS += -fPIC +LDFLAGS += +LDLIBS += ARFLAGS := rcs -# allow growing heap (might be slower, especially with V8 (as used by Chrome)) -#LDFLAGS += -s ALLOW_MEMORY_GROWTH=1 -# limit memory to 64MB, faster but loading modules bigger than about 16MB will not work -#LDFLAGS += -s TOTAL_MEMORY=67108864 +CXXFLAGS += -Os +CFLAGS += -Os +LDFLAGS += -Os -LDFLAGS += -s ALLOW_MEMORY_GROWTH=1 +ifeq ($(EMSCRIPTEN_TARGET),default) +# emits whatever is emscripten's default, currently (1.38.8) this is the same as "wasm" below. +CPPFLAGS += -DMPT_BUILD_WASM +CXXFLAGS += +CFLAGS += +LDFLAGS += +else ifeq ($(EMSCRIPTEN_TARGET),wasm) +# emits native wasm AND an emulator for running wasm in asmjs/js with full wasm optimizations. +# as of emscripten 1.38, this is equivalent to default. +CPPFLAGS += -DMPT_BUILD_WASM +CXXFLAGS += -s WASM=1 -s BINARYEN_METHOD='native-wasm' +CFLAGS += -s WASM=1 -s BINARYEN_METHOD='native-wasm' +LDFLAGS += -s WASM=1 -s BINARYEN_METHOD='native-wasm' + else ifeq ($(EMSCRIPTEN_TARGET),asmjs) +# emits only asmjs +CPPFLAGS += -DMPT_BUILD_ASMJS +CXXFLAGS += -s WASM=0 -s ASM_JS=1 +CFLAGS += -s WASM=0 -s ASM_JS=1 +LDFLAGS += -s WASM=0 -s ASM_JS=1 -CPPFLAGS += -CXXFLAGS += -fPIC -O2 -s DISABLE_EXCEPTION_CATCHING=0 -s PRECISE_F32=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -ffast-math -CFLAGS += -fPIC -O2 -s DISABLE_EXCEPTION_CATCHING=0 -s PRECISE_F32=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -ffast-math -fno-strict-aliasing -LDFLAGS += -O2 -s DISABLE_EXCEPTION_CATCHING=0 -s PRECISE_F32=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s EXPORT_NAME="'libopenmpt'" -LDLIBS += -ARFLAGS := rcs +else ifeq ($(EMSCRIPTEN_TARGET),js) +# emits only plain javascript with plain javascript focused optimizations. +CPPFLAGS += -DMPT_BUILD_ASMJS +CXXFLAGS += -s WASM=0 -s ASM_JS=2 -s LEGACY_VM_SUPPORT=1 +CFLAGS += -s WASM=0 -s ASM_JS=2 -s LEGACY_VM_SUPPORT=1 +LDFLAGS += -s WASM=0 -s ASM_JS=2 -s LEGACY_VM_SUPPORT=1 -# allow growing heap (might be slower, especially with V8 (as used by Chrome)) -#LDFLAGS += -s ALLOW_MEMORY_GROWTH=1 -# limit memory to 64MB, faster but loading modules bigger than about 16MB will not work -#LDFLAGS += -s TOTAL_MEMORY=67108864 +endif -LDFLAGS += -s ALLOW_MEMORY_GROWTH=1 +CXXFLAGS += -s DISABLE_EXCEPTION_CATCHING=0 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -ffast-math +CFLAGS += -s DISABLE_EXCEPTION_CATCHING=0 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -ffast-math -fno-strict-aliasing +LDFLAGS += -s DISABLE_EXCEPTION_CATCHING=0 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s EXPORT_NAME="'libopenmpt'" -else ifeq ($(EMSCRIPTEN_TARGET),wasm) - -CPPFLAGS += -DMPT_BUILD_WASM -CXXFLAGS += -fPIC -Os -s WASM=1 -s DISABLE_EXCEPTION_CATCHING=0 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -ffast-math -CFLAGS += -fPIC -Os -s WASM=1 -s DISABLE_EXCEPTION_CATCHING=0 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -ffast-math -fno-strict-aliasing -LDFLAGS += -Os -s WASM=1 -s DISABLE_EXCEPTION_CATCHING=0 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s EXPORT_NAME="'libopenmpt'" -LDLIBS += -ARFLAGS := rcs - # allow growing heap (might be slower, especially with V8 (as used by Chrome)) #LDFLAGS += -s ALLOW_MEMORY_GROWTH=1 # limit memory to 64MB, faster but loading modules bigger than about 16MB will not work @@ -73,8 +78,6 @@ LDFLAGS += -s ALLOW_MEMORY_GROWTH=1 -endif - CFLAGS_SILENT += -Wno-unused-parameter -Wno-unused-function -Wno-cast-qual CXXFLAGS_WARNINGS += -Wmissing-declarations @@ -82,23 +85,11 @@ REQUIRES_RUNPREFIX=1 -ifeq ($(EMSCRIPTEN_TARGET),wasm) - -EXESUFFIX=.html -SOSUFFIX=.wasm -SO_LDFLAGS=-s SIDE_MODULE=1 -BIN_LDFLAGS=-s SIDE_MODULE=0 -TEST_LDFLAGS=-s SIDE_MODULE=0 --emrun - -else - EXESUFFIX=.js SOSUFFIX=.js RUNPREFIX=nodejs TEST_LDFLAGS= --pre-js build/make/test-pre.js -endif - DYNLINK=0 SHARED_LIB=1 STATIC_LIB=0 Index: common/CompilerDetect.h =================================================================== --- common/CompilerDetect.h (revision 10647) +++ common/CompilerDetect.h (working copy) @@ -193,14 +193,12 @@ #define MPT_OS_EMSCRIPTEN 1 #if defined(__EMSCRIPTEN_major__) && defined(__EMSCRIPTEN_minor__) #if (__EMSCRIPTEN_major__ > 1) - #define MPT_OS_EMSCRIPTEN_ANCIENT 0 - #elif (__EMSCRIPTEN_major__ == 1) && (__EMSCRIPTEN_minor__ >= 36) - #define MPT_OS_EMSCRIPTEN_ANCIENT 0 + // ok + #elif (__EMSCRIPTEN_major__ == 1) && (__EMSCRIPTEN_minor__ >= 38) + // ok #else - #define MPT_OS_EMSCRIPTEN_ANCIENT 1 + #error "Emscripten >= 1.38 is required." #endif - #else - #define MPT_OS_EMSCRIPTEN_ANCIENT 1 #endif #elif defined(_WIN32) #define MPT_OS_WINDOWS 1 Index: common/mptBaseUtils.h =================================================================== --- common/mptBaseUtils.h (revision 10647) +++ common/mptBaseUtils.h (working copy) @@ -581,13 +581,7 @@ { // C++11 std::round -#if (MPT_OS_EMSCRIPTEN && MPT_OS_EMSCRIPTEN_ANCIENT) - // Certain emscripten versions and/or combinations with nodejs (at least the following combination: emscripten 1.34.8, clang 3.7.0, nodejs 0.10.38) fail assert(std::round(1.5)==2.0). The work-around always works. - inline double round(double val) {if(val >= 0.0) return std::floor(val + 0.5); else return std::ceil(val - 0.5);} - inline float round(float val) {if(val >= 0.0f) return std::floor(val + 0.5f); else return std::ceil(val - 0.5f);} -#else using std::round; -#endif // Rounds given double value to nearest integer value of type T. // Out-of-range values are saturated to the specified integer type's limits. Index: libopenmpt/dox/changelog.md =================================================================== --- libopenmpt/dox/changelog.md (revision 10647) +++ libopenmpt/dox/changelog.md (working copy) @@ -56,6 +56,8 @@ * [**Regression**] Support for Clang 3.4, 3.5 has been removed. * [**Regression**] Building with Android NDK older than NDK r16b is not supported any more. + * [**Regression**] Support for Emscripten versions older than 1.38.1 has been + removed. * [**Regression**] Support for libmpg123 older than 1.14.0 has been removed. * [**Regression**] Using MediaFoundation to decode MP3 samples is no longer supported. Use libmpg123 or minimp3 instead. Index: libopenmpt/dox/dependencies.md =================================================================== --- libopenmpt/dox/dependencies.md (revision 10647) +++ libopenmpt/dox/dependencies.md (working copy) @@ -15,7 +15,7 @@ * **MinGW-W64 4.8** or higher (it is recommended to preferably use posix threading model as opposed to win32 threading model, or at least have mingw-std-threads available otherwise) - * **emscripten 1.31** or higher + * **emscripten 1.38.1** or higher * any other **C++11 compliant** compiler (full standard compliant mode is known to work with GCC >= 5.1 and Clang) Index: test/test.cpp =================================================================== --- test/test.cpp (revision 10647) +++ test/test.cpp (working copy) @@ -685,12 +685,7 @@ VERIFY_EQUAL(mpt::fmt::flt(6.12345, 3), "6.12"); VERIFY_EQUAL(mpt::fmt::fix(6.12345, 3), "6.123"); VERIFY_EQUAL(mpt::fmt::flt(6.12345, 4), "6.123"); - #if !(MPT_OS_EMSCRIPTEN && MPT_OS_EMSCRIPTEN_ANCIENT) VERIFY_EQUAL(mpt::fmt::fix(6.12345, 4), "6.1235"); - #else - // emscripten(1.21)/nodejs(v0.10.25) print 6.1234 instead of 6.1235 for unknown reasons. - // As this test case is not fatal, ignore it for now in order to make the test cases pass. - #endif #if MPT_WSTRING_FORMAT VERIFY_EQUAL(mpt::wfmt::flt(6.12345, 3), L"6.12"); | ||||
Has the bug occurred in previous versions? | |||||
Tested code revision (in case you know it) | |||||
r9155 adds basic build system support ´make CONFIG=emscripten EMSCRIPTEN_TARGET=wasm´. |
|
r10058 can now run parts of the test suite via |
|
The patch modifies |
|
Utilizing emscripten's combined output methods is not recommended and has blocking bugs. See https://kripken.github.io/emscripten-site/docs/compiling/WebAssembly.html and https://github.com/kripken/emscripten/issues/6926. |
|
We package 4 different builds in the single dev.js package:
Implemented in r10713. |
|
Date Modified | Username | Field | Change |
---|---|---|---|
2017-09-22 12:50 | manx | New Issue | |
2017-09-22 12:50 | manx | Status | new => assigned |
2017-09-22 12:50 | manx | Assigned To | => manx |
2017-10-28 09:48 | manx | Note Added: 0003317 | |
2018-04-09 12:42 | manx | Note Added: 0003493 | |
2018-07-26 15:09 | manx | File Added: emscripten-wasm-v1.patch | |
2018-07-26 15:13 | manx | Note Added: 0003583 | |
2018-08-01 16:54 | manx | Note Added: 0003584 | |
2018-08-01 16:55 | manx | File Added: emscripten-wasm-v4.patch | |
2018-08-26 07:37 | manx | Note Added: 0003606 | |
2018-08-26 07:38 | manx | Status | assigned => resolved |
2018-08-26 07:38 | manx | Resolution | open => fixed |
2018-08-26 07:38 | manx | Fixed in Version | => libopenmpt 0.4 (goals) |
2018-12-23 13:22 | Saga Musix | Fixed in Version | libopenmpt 0.4 (goals) => OpenMPT 1.28.01.00 / libopenmpt 0.4.0 (upgrade first) |