事前にpullしていたAlpine Linuxのイメージを元に、アセンブラの開発環境を作ってみる。
参考:http://dqn.sakusakutto.jp/2011/05/hello-world.html
Alpine Linuxでアセンブラをやる場合、YASMというのがあるらしい。
ちゃんとapkでインストールできるパッケージも用意されている。
とはいえ、yasmを入れても、アセンブリしてできるのはオブジェクトコードまでで、実行できるようにするには、ldコマンドでリンクしてやらんといかんらしい。で、そのldコマンドはgccを入れると使えるようになるらしい。
ということで、今回もDockerfile化してみる。
作業ディレクトリも設定した状態で始めるために、以下のようにしてみる。なお、ソース置き場のディレクトリにDockerfileもdocker-compose.yamlも置いている。
##Dockerfile
FROM alpine
WORKDIR /home/asm
RUN set -x && \
apk update && \
apk add --no-cache yasm nasm gcc
CMD ["/bin/sh"]
##docker-compose.yaml
version: '3'
services:
asm:
build: .
container_name: asm
volumes:
- .:/home/asm # ローカルのソース置き場をコンテナのソース置き場としてマウントする
tty: true
C/C++の環境とたいして違いがないが、こういった環境でもお互いに干渉しないように出来るのがDockerの便利なところ。
あとから気づいたが、YASMの前身に当たるNASMというのもあり、apkのパッケージもちゃんとあった。というか、x86のアセンブラといえば、コッチっぽい。(Docker Hubに公開されてるイメージもある)