77 lines
3.5 KiB
Docker
77 lines
3.5 KiB
Docker
# We build our DevContainer on MS' Typescript-Node Devcontainer
|
|
# This gives us lots of standard stuff, and lets us layer a few custom things on top, like the Emscripten compiler
|
|
|
|
# --------------------------------------------------------------------
|
|
# BEGIN Standard MS Devcontainer for Typescript-Node
|
|
|
|
# See here for image contents: https://github.com/devcontainers/images/tree/main/src/typescript-node
|
|
# [Choice] Node.js version comes from the base devcontainer variant
|
|
ARG VARIANT="24-bookworm"
|
|
FROM mcr.microsoft.com/devcontainers/typescript-node:${VARIANT}
|
|
|
|
# [Optional] Uncomment if you want to install an additional version of node using nvm
|
|
# ARG EXTRA_NODE_VERSION=10
|
|
# RUN su node -c "source /usr/local/share/nvm/nvm.sh && nvm install ${EXTRA_NODE_VERSION}"
|
|
|
|
# [Optional] Uncomment if you want to install more global node packages
|
|
# RUN su node -c "npm install -g <your-package-list -here>"
|
|
|
|
# END Standard MS Devcontainer for Typescript-Node
|
|
# --------------------------------------------------------------------
|
|
|
|
# --------------------------------------------------------------------
|
|
# BEGIN EMSDK
|
|
# Install EMSDK to /emsdk just like the EMSDK Dockerfile: https://github.com/emscripten-core/emsdk/blob/master/docker/Dockerfile
|
|
ENV EMSDK /emsdk
|
|
# We pin the EMSDK version rather than 'latest' so that everyone is using the same compiler version
|
|
ENV EMSCRIPTEN_VERSION 5.0.0
|
|
|
|
RUN git clone https://github.com/emscripten-core/emsdk.git $EMSDK
|
|
|
|
RUN echo "## Install Emscripten" \
|
|
&& cd ${EMSDK} \
|
|
&& ./emsdk install ${EMSCRIPTEN_VERSION} \
|
|
&& echo "## Done"
|
|
|
|
# Copied directly from https://github.com/emscripten-core/emsdk/blob/master/docker/Dockerfile
|
|
RUN cd ${EMSDK} \
|
|
&& echo "## Generate standard configuration" \
|
|
&& ./emsdk activate ${EMSCRIPTEN_VERSION} \
|
|
&& chmod 777 ${EMSDK}/upstream/emscripten \
|
|
&& chmod -R 777 ${EMSDK}/upstream/emscripten/cache \
|
|
&& echo "int main() { return 0; }" > hello.c \
|
|
&& ${EMSDK}/upstream/emscripten/emcc -c hello.c \
|
|
&& cat ${EMSDK}/upstream/emscripten/cache/sanity.txt \
|
|
&& echo "## Done"
|
|
|
|
ENV PATH $EMSDK:$EMSDK/upstream/emscripten/:$PATH
|
|
|
|
# Cleanup Emscripten installation and strip some symbols
|
|
# Copied directly from https://github.com/emscripten-core/emsdk/blob/master/docker/Dockerfile
|
|
RUN echo "## Aggressive optimization: Remove debug symbols" \
|
|
&& cd ${EMSDK} && . ./emsdk_env.sh \
|
|
# Remove debugging symbols from embedded node (extra 7MB)
|
|
&& strip -s `which node` \
|
|
# Tests consume ~80MB disc space
|
|
&& rm -fr ${EMSDK}/upstream/emscripten/tests \
|
|
# Fastcomp is not supported
|
|
&& rm -fr ${EMSDK}/upstream/fastcomp \
|
|
# strip out symbols from clang (~extra 50MB disc space)
|
|
&& find ${EMSDK}/upstream/bin -type f -exec strip -s {} + || true \
|
|
&& echo "## Done"
|
|
|
|
RUN echo ". /emsdk/emsdk_env.sh" >> /etc/bash.bashrc
|
|
# We must set the EM_NODE_JS environment variable for a somewhat silly reason
|
|
# We run our build scripts with `npm run`, which sets the NODE environment variable as it runs.
|
|
# The EMSDK picks up on that environment variable and gives a deprecation warning: warning: honoring legacy environment variable `NODE`. Please switch to using `EM_NODE_JS` instead`
|
|
# So, we are going to put this environment variable here explicitly to avoid the deprecation warning.
|
|
RUN echo 'export EM_NODE_JS="$EMSDK_NODE"' >> /etc/bash.bashrc
|
|
|
|
# END EMSDK
|
|
# --------------------------------------------------------------------
|
|
|
|
# Install wget, gnupg, and sha3sum
|
|
RUN apt-get update \
|
|
&& apt-get install -y wget gnupg libdigest-sha3-perl default-jre-headless \
|
|
&& rm -rf /var/lib/apt/lists/*
|