diff --git a/codecs/cpp.Dockerfile b/codecs/cpp.Dockerfile index 88e489db..ea1507ae 100644 --- a/codecs/cpp.Dockerfile +++ b/codecs/cpp.Dockerfile @@ -5,5 +5,7 @@ ENV CXXFLAGS "${CFLAGS} -std=c++17" ENV LDFLAGS "${CFLAGS}" # Build and cache standard libraries with these flags RUN emcc ${CXXFLAGS} --bind -xc++ /dev/null -o /dev/null +RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash +RUN /bin/bash -ic 'nvm install 14.7.0' WORKDIR /src CMD ["sh", "-c", "emmake make -j`nproc`"] diff --git a/codecs/mozjpeg_enc/.emscripten b/codecs/mozjpeg_enc/.emscripten new file mode 100644 index 00000000..5da1fd50 --- /dev/null +++ b/codecs/mozjpeg_enc/.emscripten @@ -0,0 +1,13 @@ +import os +emsdk_path = "/emsdk/" +#NODE_JS = emsdk_path + '/node/12.18.1_64bit/bin/node' +# We need a newer version of Node that supports the most recent iteration of Wasm SIMD +# and need to enable that experimental support via flag so that autoconf can successfully +# detect SIMD support. +NODE_JS=["/root/.nvm/versions/node/v14.7.0/bin/node", "--experimental-wasm-simd"] +LLVM_ROOT = emsdk_path + '/upstream/bin' +BINARYEN_ROOT = emsdk_path + '/upstream' +EMSCRIPTEN_ROOT = emsdk_path + '/upstream/emscripten' +TEMP_DIR = emsdk_path + '/tmp' +COMPILER_ENGINE = NODE_JS +JS_ENGINES = [NODE_JS] diff --git a/codecs/mozjpeg_enc/Makefile b/codecs/mozjpeg_enc/Makefile index 30b5ca0e..542e0b78 100644 --- a/codecs/mozjpeg_enc/Makefile +++ b/codecs/mozjpeg_enc/Makefile @@ -5,11 +5,21 @@ CODEC_OUT := $(addprefix $(CODEC_DIR)/, $(CODEC_OUT_RELATIVE)) OUT_JS := mozjpeg_enc.js OUT_WASM := $(OUT_JS:.js=.wasm) +CFLAGS += -msimd128 -msse --em-config /src/.emscripten +CXXFLAGS += -msimd128 -msse --em-config /src/.emscripten + +#override CFLAGS += "-msimd128 -msse" +#override CXXFLAGS += "-msimd128 -msse" + .PHONY: all clean all: $(OUT_JS) %.js: %.cpp $(CODEC_OUT) + # We just to disable the overridden NODE_JS binary because + # `--closure 1` can’t handle arrays in `.emscripten` it seems. + # https://github.com/emscripten-core/emsdk/issues/583 + export EM_NODE_JS='/root/.nvm/versions/node/v14.7.0/bin/node' && \ $(CXX) \ -I $(CODEC_DIR) \ ${CXXFLAGS} \ diff --git a/codecs/mozjpeg_enc/example.html b/codecs/mozjpeg_enc/example.html index 2cff900f..76b54ef1 100644 --- a/codecs/mozjpeg_enc/example.html +++ b/codecs/mozjpeg_enc/example.html @@ -1,26 +1,14 @@ diff --git a/codecs/mozjpeg_enc/mozjpeg_enc.cpp b/codecs/mozjpeg_enc/mozjpeg_enc.cpp index 27388587..3673db5c 100644 --- a/codecs/mozjpeg_enc/mozjpeg_enc.cpp +++ b/codecs/mozjpeg_enc/mozjpeg_enc.cpp @@ -1,5 +1,7 @@ #include #include +#include +#include #include #include #include diff --git a/codecs/mozjpeg_enc/mozjpeg_enc.wasm b/codecs/mozjpeg_enc/mozjpeg_enc.wasm index bf5df729..e6e508c2 100644 Binary files a/codecs/mozjpeg_enc/mozjpeg_enc.wasm and b/codecs/mozjpeg_enc/mozjpeg_enc.wasm differ