@@ -9,7 +9,13 @@ RUN apt-get update && apt-get install -y \
9
9
mono-complete \
10
10
python3 \
11
11
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
13
19
14
20
# Use git rather than a release tarball, since the tarball is missing
15
21
# submodules.
@@ -30,6 +36,12 @@ ENV build_target=RELEASE
30
36
ENV stuart_opts="-c ArmVirtPkg/PlatformCI/QemuBuild.py -a AARCH64 Target=${build_target} TOOL_CHAIN_TAG=${toolchain}"
31
37
RUN . venv/bin/activate && stuart_setup ${stuart_opts} && stuart_update ${stuart_opts} && stuart_build ${stuart_opts}
32
38
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
+
33
45
# Build IA32.
34
46
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"
35
47
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
42
54
ARG bin_dir
43
55
RUN mkdir "${bin_dir}"
44
56
RUN mkdir "${bin_dir}" /aarch64
57
+ RUN mkdir "${bin_dir}" /riscv64
45
58
RUN mkdir "${bin_dir}" /ia32
46
59
RUN mkdir "${bin_dir}" /x64
47
60
@@ -54,6 +67,15 @@ RUN cp "${aarch64_build}/AARCH64/Shell.efi" "${bin_dir}"/aarch64/shell.efi
54
67
RUN truncate --size=64MiB "${bin_dir}" /aarch64/code.fd
55
68
RUN truncate --size=64MiB "${bin_dir}" /aarch64/vars.fd
56
69
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
+
57
79
# Copy IA32 files to bin dir.
58
80
ENV ia32_build="Build/OvmfIa32/${build_target}_${toolchain}"
59
81
RUN cp "${ia32_build}/FV/OVMF_CODE.fd" "${bin_dir}" /ia32/code.fd
0 commit comments