Skip to content

Commit f7561a9

Browse files
Firenezznicholasbishop
authored andcommitted
Add support for riscv64
1 parent 06fcf66 commit f7561a9

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

Diff for: Dockerfile

+23-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,13 @@ RUN apt-get update && apt-get install -y \
99
mono-complete \
1010
python3 \
1111
python3-venv \
12-
uuid-dev
12+
uuid-dev \
13+
wget
14+
15+
# Use the 2023.09.13 nightly GCC 5 toolchain for RISCV64.
16+
RUN wget -q -O gcc-riscv.tar.gz https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2023.09.13/riscv64-elf-ubuntu-22.04-gcc-nightly-2023.09.13-nightly.tar.gz
17+
RUN echo "c3b849d25a43d74e7eb1cf739a8a9fadba5f997c4814732650f36ae250a8ab00 gcc-riscv.tar.gz" | sha256sum --check
18+
RUN tar -C /opt -xzf gcc-riscv.tar.gz
1319

1420
# Use git rather than a release tarball, since the tarball is missing
1521
# submodules.
@@ -30,6 +36,12 @@ ENV build_target=RELEASE
3036
ENV stuart_opts="-c ArmVirtPkg/PlatformCI/QemuBuild.py -a AARCH64 Target=${build_target} TOOL_CHAIN_TAG=${toolchain}"
3137
RUN . venv/bin/activate && stuart_setup ${stuart_opts} && stuart_update ${stuart_opts} && stuart_build ${stuart_opts}
3238

39+
# Build RiscV.
40+
ENV GCC5_RISCV64_PREFIX="/opt/riscv/bin/riscv64-unknown-elf-"
41+
ENV build_target=RELEASE
42+
ENV stuart_opts="-c OvmfPkg/PlatformCI/QemuBuild.py -a RISCV64 Target=${build_target} TOOL_CHAIN_TAG=${toolchain}"
43+
RUN . venv/bin/activate && stuart_setup ${stuart_opts} && stuart_update ${stuart_opts} && stuart_build ${stuart_opts}
44+
3345
# Build IA32.
3446
ENV stuart_opts="-c OvmfPkg/PlatformCI/PlatformBuild.py -a IA32 Target=${build_target} TOOL_CHAIN_TAG=${toolchain} BLD_*_TPM1_ENABLE=1 BLD_*_TPM2_ENABLE=1"
3547
RUN . venv/bin/activate && stuart_setup ${stuart_opts} && stuart_update ${stuart_opts} && stuart_build ${stuart_opts}
@@ -42,6 +54,7 @@ RUN . venv/bin/activate && stuart_setup ${stuart_opts} && stuart_update ${stuart
4254
ARG bin_dir
4355
RUN mkdir "${bin_dir}"
4456
RUN mkdir "${bin_dir}"/aarch64
57+
RUN mkdir "${bin_dir}"/riscv64
4558
RUN mkdir "${bin_dir}"/ia32
4659
RUN mkdir "${bin_dir}"/x64
4760

@@ -54,6 +67,15 @@ RUN cp "${aarch64_build}/AARCH64/Shell.efi" "${bin_dir}"/aarch64/shell.efi
5467
RUN truncate --size=64MiB "${bin_dir}"/aarch64/code.fd
5568
RUN truncate --size=64MiB "${bin_dir}"/aarch64/vars.fd
5669

70+
# Copy Riscv files to bin dir.
71+
ENV riscv_build="Build/RiscVVirtQemu/${build_target}_${toolchain}"
72+
RUN cp "${riscv_build}/FV/RISCV_VIRT_CODE.fd" "${bin_dir}"/riscv64/code.fd
73+
RUN cp "${riscv_build}/FV/RISCV_VIRT_VARS.fd" "${bin_dir}"/riscv64/vars.fd
74+
RUN cp "${riscv_build}/RISCV64/Shell.efi" "${bin_dir}"/riscv64/shell.efi
75+
# QEMU requires the RISCV64 files to be exactly 32MiB, so expand with zeroes.
76+
RUN truncate --size=32MiB "${bin_dir}"/riscv64/code.fd
77+
RUN truncate --size=32MiB "${bin_dir}"/riscv64/vars.fd
78+
5779
# Copy IA32 files to bin dir.
5880
ENV ia32_build="Build/OvmfIa32/${build_target}_${toolchain}"
5981
RUN cp "${ia32_build}/FV/OVMF_CODE.fd" "${bin_dir}"/ia32/code.fd

Diff for: README.md

+3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ ia32/code.fd
1313
aarch64/vars.fd
1414
aarch64/code.fd
1515
aarch64/shell.efi
16+
riscv64/vars.fd
17+
riscv64/code.fd
18+
riscv64/shell.efi
1619
```
1720

1821
[**Latest Release**](https://github.com/rust-osdev/ovmf-prebuilt/releases/latest)

0 commit comments

Comments
 (0)