lynxeyedの電音鍵盤

MBDとFPGAと車載で使うデバイスの備忘録

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*1GCC_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した後はイメージごと捨ててしまうので。
個人、チームでやりやすい開発スタイルで使えばいいんじゃないかな。

おしまい。

*1:先程作成したDockerfileでqlogic_build.shというスクリプトを作成しています