# syntax=docker/dockerfile:1 # # chmdec (a cleaned-up CHMLib) compiled to WebAssembly for johnmcm.com's # /chm-viewer. The Emscripten image is pinned by version and digest, chmdec by # commit. chmdec's own LICENSE.md says MIT, but it is ported from CHMLib, # which is LGPL-2.1; this site treats it as LGPL-2.1 and publishes the source # it builds from, with these files, at /source/chm/. # # ./build.ps1 (or) docker build --target export --output type=local,dest=dist . ARG EMSDK_IMAGE=emscripten/emsdk:6.0.10@sha256:e077d54e2b8970575ebc4f185ac1de0b95c05f2b266134d4ba27449af7aebf65 FROM ${EMSDK_IMAGE} AS build ARG CHMDEC_COMMIT=19d91e5c1b362fa8be6f6e30a02b49b1167e7823 RUN git clone -q https://github.com/kjk/chmdec /chmdec \ && git -C /chmdec checkout -q ${CHMDEC_COMMIT} \ && test "$(git -C /chmdec rev-parse HEAD)" = "${CHMDEC_COMMIT}" WORKDIR /build COPY src/wrapper.c . RUN mkdir -p /out/source \ && cp /chmdec/dist/chm.c /chmdec/dist/chm.h /chmdec/LICENSE.md /out/source/ \ && emcc -O2 -I/chmdec/dist /chmdec/dist/chm.c wrapper.c -o /out/chm.mjs \ -sMODULARIZE=1 -sEXPORT_ES6=1 -sEXPORT_NAME=createChm \ -sENVIRONMENT=web,worker,node \ -sALLOW_MEMORY_GROWTH=1 \ -sMAXIMUM_MEMORY=2147483648 \ -sFILESYSTEM=0 \ -sDYNAMIC_EXECUTION=0 \ -sINCOMING_MODULE_JS_API=print,printErr,locateFile \ -sEXPORTED_FUNCTIONS=_chmw_input,_chmw_open,_chmw_path,_chmw_length,_chmw_flags,_chmw_read,_chmw_close \ -sEXPORTED_RUNTIME_METHODS=HEAPU8,UTF8ToString FROM scratch AS export COPY --from=build /out/ /