Closed19

Emscripten が動く Docker イメージを AlmaLinux で作成する

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

インストール

コマンド
./emsdk install latest
コンソール出力
Resolving SDK alias 'latest' to '4.0.15'
Resolving SDK version '4.0.15' to 'sdk-releases-b412b6307e541b93dd93f01b61181e15c17302ec-64bit'
WARNING: arm64-linux binaries are not available for all releases.
See https://github.com/emscripten-core/emsdk/issues/547
Installing SDK 'sdk-releases-b412b6307e541b93dd93f01b61181e15c17302ec-64bit'..
Installing tool 'node-22.16.0-64bit'..
Downloading: /root/emsdk/downloads/node-v22.16.0-linux-arm64.tar.xz from https://storage.googleapis.com/webassembly/emscripten-releases-builds/deps/node-v22.16.0-linux-arm64.tar.xz, 29126496 Bytes
Unpacking '/root/emsdk/downloads/node-v22.16.0-linux-arm64.tar.xz' to '/root/emsdk/node/22.16.0_64bit'
Done installing tool 'node-22.16.0-64bit'.
Installing tool 'releases-b412b6307e541b93dd93f01b61181e15c17302ec-64bit'..
Downloading: /root/emsdk/downloads/b412b6307e541b93dd93f01b61181e15c17302ec-wasm-binaries-arm64.tar.xz from https://storage.googleapis.com/webassembly/emscripten-releases-builds/linux/b412b6307e541b93dd93f01b61181e15c17302ec/wasm-binaries-arm64.tar.xz, 335568016 Bytes
Unpacking '/root/emsdk/downloads/b412b6307e541b93dd93f01b61181e15c17302ec-wasm-binaries-arm64.tar.xz' to '/root/emsdk/upstream'
Done installing tool 'releases-b412b6307e541b93dd93f01b61181e15c17302ec-64bit'.
Done installing SDK 'sdk-releases-b412b6307e541b93dd93f01b61181e15c17302ec-64bit'.

一発で成功した、怖い。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

アクティベーション

コマンド
./emsdk activate latest
コンソール出力
Resolving SDK alias 'latest' to '4.0.15'
Resolving SDK version '4.0.15' to 'sdk-releases-b412b6307e541b93dd93f01b61181e15c17302ec-64bit'
Setting the following tools as active:
   node-22.16.0-64bit
   releases-b412b6307e541b93dd93f01b61181e15c17302ec-64bit

Next steps:
- To conveniently access emsdk tools from the command line,
  consider adding the following directories to your PATH:
    /root/emsdk
    /root/emsdk/node/22.16.0_64bit/bin
    /root/emsdk/upstream/emscripten
- This can be done for the current shell by running:
    source "/root/emsdk/emsdk_env.sh"
- Configure emsdk in your shell startup scripts by running:
    echo 'source "/root/emsdk/emsdk_env.sh"' >> $HOME/.bash_profile
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

環境変数の読み込み

コマンド
source ./emsdk_env.sh
コンソール出力
Setting up EMSDK environment (suppress these messages with EMSDK_QUIET=1)
Adding directories to PATH:
PATH += /root/emsdk
PATH += /root/emsdk/upstream/emscripten
PATH += /root/emsdk/node/22.16.0_64bit/bin

Setting environment variables:
PATH = /root/emsdk:/root/emsdk/upstream/emscripten:/root/emsdk/node/22.16.0_64bit/bin:/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
EMSDK = /root/emsdk
EMSDK_NODE = /root/emsdk/node/22.16.0_64bit/bin/node
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

バージョン確認

コマンド
emcc --version
コンソール出力
shared:INFO: (Emscripten: Running sanity checks)
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 4.0.15 (09f52557f0d48b65b8c724853ed8f4e8bf80e669)
Copyright (C) 2025 the Emscripten authors (see AUTHORS.txt)
This is free and open source software under the MIT license.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

Dockerfile の作成

コマンド
touch Dockerfile
Dockerfile
FROM almalinux:latest

# 必要なパッケージのインストール
RUN dnf update -y && \
	dnf install -y git && \
	dnf clean all

# 作業ディレクトリの設定
WORKDIR /root

# emsdkのクローン
RUN git clone https://github.com/emscripten-core/emsdk.git

# emsdkディレクトリに移動
WORKDIR /root/emsdk

# 最新版のインストールとアクティベート
RUN ./emsdk install latest && \
	./emsdk activate latest

# 環境変数の設定
# Dockerfileでは各RUNコマンドが独立しているため、ENVで永続的に設定
ENV EMSDK=/root/emsdk \
    EMSDK_NODE=/root/emsdk/node/22.16.0_64bit/bin/node \
    PATH=/root/emsdk:/root/emsdk/upstream/emscripten:/root/emsdk/node/22.16.0_64bit/bin:${PATH}

# emsdk_env.shを.bashrcに追加(インタラクティブシェル用)
RUN echo 'source "/root/emsdk/emsdk_env.sh"' >> /root/.bashrc

# 作業ディレクトリを設定
WORKDIR /workspace

# デフォルトコマンド
CMD ["/bin/bash"]
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

動作確認

コマンド
make run-image
コマンド
emcc --version
コンソール出力
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 4.0.15 (09f52557f0d48b65b8c724853ed8f4e8bf80e669)
Copyright (C) 2025 the Emscripten authors (see AUTHORS.txt)
This is free and open source software under the MIT license.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

追記:Dockerfile 編集

emcc で実際にコンパイルするときに libatomic が必要になった。

Dockerfile
FROM almalinux:latest

# 必要なパッケージのインストール
RUN dnf update -y && \
	dnf install -y git libatomic && \
	dnf clean all

# 作業ディレクトリの設定
WORKDIR /root

# emsdkのクローン
RUN git clone https://github.com/emscripten-core/emsdk.git

# emsdkディレクトリに移動
WORKDIR /root/emsdk

# 最新版のインストールとアクティベート
RUN ./emsdk install latest && \
	./emsdk activate latest

# 環境変数の設定
# Dockerfileでは各RUNコマンドが独立しているため、ENVで永続的に設定
ENV EMSDK=/root/emsdk \
    EMSDK_NODE=/root/emsdk/node/22.16.0_64bit/bin/node \
    PATH=/root/emsdk:/root/emsdk/upstream/emscripten:/root/emsdk/node/22.16.0_64bit/bin:${PATH}

# emsdk_env.shを.bashrcに追加(インタラクティブシェル用)
# RUN echo 'source "/root/emsdk/emsdk_env.sh"' >> /root/.bashrc

# 作業ディレクトリを設定
WORKDIR /workspace

# デフォルトコマンド
CMD ["/bin/bash"]
このスクラップは3日前にクローズされました