FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Dockerを使ってLLVM+RISC-Vビルド環境を構築したい

LLVMのビルド環境とRISC-Vのビルド環境をDocker上に構築するためにいろいろ試行している。

Dockerfileの作成自体はあまり経験がないのでTrial&Error状態だ。 構築したいのは

  • Ubuntu 18.04LTSを使った古い環境を用いたLLVMビルド環境。LLVM+RISC-V本の環境に限りなく近い
  • Ubuntu 22.04LTSを使って、最新のRISC-Vツールやシミュレーション環境を使うもの

まず、Ubuntu18.04LTSを使った環境だが、これは限りなくLLVM-RISC-V本の環境に近づけたいので、

  • Chipyard は1.3.0のタグを使う
  • 古いriscv-toolsを使ってみるやりビルドする

という方針で行く。一方で、Ubuntu 22.04LTSを使ったっ環境だが、これは最新版の環境でも動作することを確認したいので、

  • Chipyardは1.7.1のタグを使う
  • なるべく最新のriscv-toolsのサブモジュールを使用する

という方針にしようと思う。まず、riscv-toolsを可能な限りビルドできるようにするために、Dockerfileに以下を追加してriscv-toolsのビルドを改良する。

つまり、OpenCOCDなどのツールは可能な限りインストールしない。riscv-testsもビルドが通らないのでインストールしない。

WORKDIR /tmp/riscv-tools
RUN sed -i '/check_version automake/s/^/#/g' build.sh
RUN sed -i '/check_version autoconf/s/^/#/g' build.sh
RUN sed -i '/build_project riscv-openocd/s/^/#/g' build.sh
RUN sed -i '/build_project riscv-tests/s/^/#/g' build.sh
RUN  MAKEFLAGS="-j$(nproc)" ./build.sh

GCCのツールチェインのダウンロードも古いものに合わせる。

WORKDIR /llvm_book/
RUN curl -L https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2021.03.06/riscv64-elf-ubuntu-18.04-nightly-2021.03.06-nightly.tar.gz   | tar xz
RUN curl -L https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2021.03.06/riscv64-glibc-ubuntu-18.04-nightly-2021.03.06-nightly.tar.gz | tar xz
RUN mv /llvm_book/riscv $RISCV

一方で最新版のものは、riscv-toolsを使用せずにここのツールをダウンロードしてビルドする。

WORKDIR /tmp
RUN git clone https://github.com/riscv-software-src/riscv-isa-sim.git --recurse-submodules && \
    cd riscv-isa-sim && \
    ./configure --prefix=$RISCV && \
    make -j$(nproc) && \
    make install

RUN git clone https://github.com/riscv-software-src/riscv-pk.git --recurse-submodules && \
    cd riscv-pk && \
    mkdir -p build && \
    cd build && \
    ../configure --prefix=$RISCV --host riscv64-unknown-elf && \
    make -j$(nproc) && \
    make install

GCCのツールチェインも最新版をダウンロードする。

WORKDIR /llvm_book/
RUN curl -L https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2022.08.08/riscv64-elf-ubuntu-20.04-nightly-2022.08.08-nightly.tar.gz   | tar xz
RUN curl -L https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2022.08.08/riscv64-glibc-ubuntu-20.04-nightly-2022.08.08-nightly.tar.gz | tar xz
RUN curl -L https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2022.08.08/riscv64-musl-ubuntu-20.04-nightly-2022.08.08-nightly.tar.gz  | tar xz
RUN mv /llvm_book/riscv $RISCV