# syntax=docker/dockerfile:1 # # The DDS Converter's block codec compiled to WebAssembly for johnmcm.com's # /dds-converter: bcdec (decoding, MIT or Unlicense) and rgbcx + bc7enc from # bc7enc_rdo (encoding, MIT or public domain). The Emscripten image is pinned # by version and digest, both libraries by commit. The exact source files # built are copied to source/ and published at /source/dds/. # # ./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 BCDEC_COMMIT=80859ed3b7afb1c527a2a99d70c61457bea72d0c ARG BC7ENC_COMMIT=b9438627eef73a1157e84201b6fa6eb2ffd6d9f0 RUN git clone -q https://github.com/iOrange/bcdec /bcdec \ && git -C /bcdec checkout -q ${BCDEC_COMMIT} \ && test "$(git -C /bcdec rev-parse HEAD)" = "${BCDEC_COMMIT}" \ && git clone -q https://github.com/richgel999/bc7enc_rdo /bc7enc \ && git -C /bc7enc checkout -q ${BC7ENC_COMMIT} \ && test "$(git -C /bc7enc rev-parse HEAD)" = "${BC7ENC_COMMIT}" WORKDIR /build COPY src/wrapper.cpp . RUN mkdir -p /out/source/bcdec /out/source/bc7enc_rdo \ && cp /bcdec/bcdec.h /bcdec/LICENSE /out/source/bcdec/ \ && cp /bc7enc/bc7enc.cpp /bc7enc/bc7enc.h /bc7enc/rgbcx.cpp /bc7enc/rgbcx.h /bc7enc/rgbcx_table4.h /bc7enc/rgbcx_table4_small.h /bc7enc/LICENSE /out/source/bc7enc_rdo/ \ && em++ -O3 -fno-exceptions -I/bcdec -I/bc7enc \ wrapper.cpp /bc7enc/rgbcx.cpp /bc7enc/bc7enc.cpp -o /out/dds.mjs \ -sMODULARIZE=1 -sEXPORT_ES6=1 -sEXPORT_NAME=createDds \ -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=_ddsw_alloc,_ddsw_free,_ddsw_init,_ddsw_decode,_ddsw_encode \ -sEXPORTED_RUNTIME_METHODS=HEAPU8,HEAPF32 FROM scratch AS export COPY --from=build /out/ /