事前に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に公開されてるイメージもある)