QuickLogic EOS S3をDockerで使う
前回の記事のキャッチアップです。Dockerが使えると環境整備の負担が少なくて良いので、作ってみました。
脱・開発環境汚染
現在、複数の大学と企業と連携したプロジェクトで開発をしているのですが、環境構築やってらんない、CI/CD考慮した環境にすべきとの指摘があり、移行可能なプロジェクトから順次Dockerを採用しています。そこで使用中のQORC-SDKもDockerに移行しました。その時のメモとなります。
QuickLogic公式にもql_symbiFlowのみのDockerfileがあるのですが、どうせなら開発環境全部用意して欲しいのだが、というところがこの記事の始まりです。
この記事はDockerの初歩的な知識があり、セットアップも終えている前提で始まります。
Dockerfile
Macbook Late 2020(intel)、WSL2上での動作を確認しています。M1 Macでも一応動作しそうですがかなり遅いです。CI/CD考慮しているのにM1に拘ることもないでしょう。x86_64使いましょ。
任意のディレクトリを作成しDockerfileを作成します。
$ mkdir docker-qorc $ cd docker-qorc $ touch Dockerfile
Dockerfileは以下の内容です。Docker imageはあまり軽くない(2.0GBほど)ですが、
成果物と開発環境の両方が欲しいので今のところはこの方針でいきます。
FROM debian:buster-slim RUN apt update && apt -y install --no-install-recommends sudo make libtbb2 wget coreutils udev curl time tar\ && apt -y install git gcc-arm-none-eabi\ && apt clean && rm -rf /var/lib/apt/lists/* RUN git clone -b v1.10.0 https://github.com/QuickLogic-Corp/qorc-sdk.git SHELL ["/bin/bash", "-c"] # 以下3行はtarからarm-none-eabiを導入する場合は不要。(armからのダウンロードがすごく遅いのでaptで導入してシンボリックリンクを貼っている) WORKDIR /qorc-sdk RUN mkdir -p arm_toolchain_install/gcc-arm-none-eabi-9-2020-q2-update/ RUN ln -s /usr/bin/ arm_toolchain_install/gcc-arm-none-eabi-9-2020-q2-update/ #RUN sed -i -e 's/v1.3.1/v1.3.2/g' envsetup.sh #RUN source envsetup.sh WORKDIR /root RUN echo -e '#!/bin/bash\n\ncd /qorc-sdk\nsource envsetup.sh\ncd -\nmake -C GCC_Project\nscp GCC_Project/output/bin/*.bin pi@raspberrypi.local:/home/pi\n' > qlogic_build.sh RUN sed -i 's/\r//' *.sh RUN chmod +x qlogic_build.sh WORKDIR /qorc-sdk/qf_apps # 以下はキャッシュされると最新版がgit cloneできないための対策 ARG CACHEBUST=1 RUN git clone https://github.com/panda5mt/qf_wbfpga_pio.git
Dockerイメージのビルド
保存したら、Dockerイメージをビルドします。イメージ名は適当にtest
にしました。Docker hubを使うのであればイメージ名は考慮した方がいいでしょう。この記事の趣旨ではないですがDockerイメージをVSCodeを使っているならばこの項目での作業は全く必要ありません。
$ docker build -t test --build-arg CACHEBUST=$(date +%s) .
所要時間はそんなにいらないはずです。5分ほどで仕上がるでしょう。
イメージを起動します。
$ docker run -it test
ログインできたら下記のようになると思います。
[root@123456789abc:/qorc-sdk/qf_apps#
QORCプロジェクトのビルド
例題としてqf_advancedfpga
をビルドします。Dockerイメージを作った直後の初回だけanacondaが走って環境を構築するので10分くらいかかるかも。次回以降は純粋にプロジェクトのビルドのみです。
$ cd qf_advancedfpga/
$ ~/qlogic_build.sh
エラーなく終わればOK*1。GCC_Project/output/qf_advancedfpga.bin
がビルドバイナリです。qf_apps
内の他のプロジェクトも同様の方法でビルドできます。
Dockerイメージ状態の保存
Dockerイメージ起動中に別ターミナルでコンテナIDの確認をします。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 123456789abc test "bash" 11 minutes ago Up 11 minutes foobar
コンテナID=123456789abcをコミットします。
$ docker commit 123456789abc test
docker commit
はあまり使ったことはないですが...
成果物をgit pushした後はイメージごと捨ててしまうので。
個人、チームでやりやすい開発スタイルで使えばいいんじゃないかな。
おしまい。