Skip to content

Commit 0bb8203

Browse files
committed
Add x86_64-uefi ci
The CI for x86_64-unknown-uefi works now. The CI for i686-unknown-uefi does not work due to missing symbols in compiler-builtins. Signed-off-by: Ayush <ayushsingh1325@gmail.com>
1 parent 4f32221 commit 0bb8203

File tree

8 files changed

+123
-20
lines changed

8 files changed

+123
-20
lines changed

src/bootstrap/configure.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,9 @@ def v(*args):
146146
"rootfs in qemu testing, you probably don't want to use this")
147147
v("qemu-riscv64-rootfs", "target.riscv64gc-unknown-linux-gnu.qemu-rootfs",
148148
"rootfs in qemu testing, you probably don't want to use this")
149-
v("qemu-uefi-rootfs", "target.x86_64-unknown-uefi.qemu-rootfs",
149+
v("qemu-x86_64-uefi-rootfs", "target.x86_64-unknown-uefi.qemu-rootfs",
150+
"rootfs in qemu testing, you probably don't want to use this")
151+
v("qemu-i686-uefi-rootfs", "target.i686-unknown-uefi.qemu-rootfs",
150152
"rootfs in qemu testing, you probably don't want to use this")
151153
v("experimental-targets", "llvm.experimental-targets",
152154
"experimental LLVM targets to build")
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
FROM ubuntu:22.04
2+
3+
RUN apt-get update -y && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
4+
bc \
5+
bzip2 \
6+
ca-certificates \
7+
cmake \
8+
cpio \
9+
curl \
10+
file \
11+
g++ \
12+
git \
13+
libc6-dev \
14+
make \
15+
ninja-build \
16+
python3 \
17+
qemu-system \
18+
mtools \
19+
gcc-multilib \
20+
xz-utils
21+
22+
ENV ARCH=i686
23+
24+
# Create rootfs
25+
WORKDIR /tmp
26+
RUN mkdir rootfs
27+
28+
# Copy over startup script
29+
COPY scripts/qemu_uefi.nsh rootfs/startup.nsh
30+
31+
# OVMF Stuff
32+
RUN mkdir OVMF
33+
COPY OVMF/OVMF_CODE.fd OVMF/OVMF_CODE.fd
34+
COPY OVMF/OVMF_VARS.fd OVMF/OVMF_VARS.fd
35+
COPY OVMF/UefiShell.iso OVMF/UefiShell.iso
36+
37+
# TODO: What is this?!
38+
# Source of the file: https://github.com/vfdev-5/qemu-rpi2-vexpress/raw/master/vexpress-v2p-ca15-tc1.dtb
39+
RUN curl -O https://ci-mirrors.rust-lang.org/rustc/vexpress-v2p-ca15-tc1.dtb
40+
41+
COPY scripts/sccache.sh /scripts/
42+
RUN sh /scripts/sccache.sh
43+
44+
ENV RUST_CONFIGURE_ARGS="${RUST_CONFIGURE_ARGS} --qemu-i686-uefi-rootfs=/tmp/rootfs --enable-lld --enable-ninja --set target.i686-unknown-uefi.linker=rust-lld"
45+
ENV RUST_TEST_THREADS=1
46+
ENV SCRIPT python3 ../x.py --stage 2 test --host='' --target i686-unknown-uefi --warnings warn -v
47+
48+
ENV NO_CHANGE_USER=1
Binary file not shown.
Binary file not shown.
Binary file not shown.

src/ci/docker/host-x86_64/x86_64-uefi/Dockerfile

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ RUN apt-get update -y && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-
1515
ninja-build \
1616
python3 \
1717
qemu-system \
18+
mtools \
1819
xz-utils
1920

2021
ENV ARCH=x86_64
@@ -32,17 +33,15 @@ COPY OVMF/OVMF_CODE.fd OVMF/OVMF_CODE.fd
3233
COPY OVMF/OVMF_VARS.fd OVMF/OVMF_VARS.fd
3334
COPY OVMF/UefiShell.iso OVMF/UefiShell.iso
3435

35-
# Config
36-
COPY host-x86_64/x86_64-uefi/config.toml config.toml
37-
3836
# TODO: What is this?!
3937
# Source of the file: https://github.com/vfdev-5/qemu-rpi2-vexpress/raw/master/vexpress-v2p-ca15-tc1.dtb
4038
RUN curl -O https://ci-mirrors.rust-lang.org/rustc/vexpress-v2p-ca15-tc1.dtb
4139

4240
COPY scripts/sccache.sh /scripts/
4341
RUN sh /scripts/sccache.sh
4442

45-
ENV RUST_CONFIGURE_ARGS="${RUST_CONFIGURE_ARGS} --qemu-uefi-rootfs=/tmp/rootfs --enable-lld"
46-
ENV SCRIPT python3 ../x.py --stage 2 test --host='' --target x86_64-unknown-uefi --warnings warn --config /tmp/config.toml -v
43+
ENV RUST_CONFIGURE_ARGS="${RUST_CONFIGURE_ARGS} --qemu-x86_64-uefi-rootfs=/tmp/rootfs --enable-lld --enable-ninja --set target.x86_64-unknown-uefi.linker=rust-lld"
44+
ENV RUST_TEST_THREADS=1
45+
ENV SCRIPT python3 ../x.py --stage 2 test --host='' --target x86_64-unknown-uefi --warnings warn -v
4746

4847
ENV NO_CHANGE_USER=1

src/ci/docker/host-x86_64/x86_64-uefi/config.toml

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/tools/remote-test-client/src/main.rs

Lines changed: 68 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -109,14 +109,47 @@ fn prepare_rootfs(target: &str, rootfs: &Path, server: &Path, rootfs_img: &Path)
109109
t!(fs::copy(server, rootfs.join("testd")));
110110

111111
match target {
112-
"arm-unknown-linux-gnueabihf" | "aarch64-unknown-linux-gnu" | "x86_64-unknown-uefi" => {
112+
"arm-unknown-linux-gnueabihf" | "aarch64-unknown-linux-gnu" => {
113113
prepare_rootfs_cpio(rootfs, rootfs_img)
114114
}
115+
"x86_64-unknown-uefi" | "i686-unknown-uefi" => prepare_rootfs_fat(rootfs, rootfs_img),
115116
"riscv64gc-unknown-linux-gnu" => prepare_rootfs_ext4(rootfs, rootfs_img),
116117
_ => panic!("{} is not supported", target),
117118
}
118119
}
119120

121+
fn prepare_rootfs_fat(rootfs: &Path, rootfs_img: &Path) {
122+
// println!("Rootfs: {}", rootfs.to_string_lossy());
123+
// println!("Rootfs Img: {}", rootfs_img.to_string_lossy());
124+
let mut dd = Command::new("dd");
125+
dd.arg("if=/dev/zero")
126+
.arg(&format!("of={}", rootfs_img.to_string_lossy()))
127+
.arg("bs=1M")
128+
.arg("count=1024");
129+
let mut dd_child = t!(dd.spawn());
130+
assert!(t!(dd_child.wait()).success());
131+
132+
let mut mformat = Command::new("mformat");
133+
mformat.arg("-i").arg(rootfs_img).arg("::");
134+
let mut mformat_child = t!(mformat.spawn());
135+
assert!(t!(mformat_child.wait()).success());
136+
137+
let mut mcopy = Command::new("mcopy");
138+
mcopy.arg("-i").arg(rootfs_img);
139+
add_files(&mut mcopy, rootfs);
140+
mcopy.arg("::");
141+
let mut mcopy_child = t!(mcopy.spawn());
142+
assert!(t!(mcopy_child.wait()).success());
143+
144+
fn add_files(cmd: &mut Command, cur: &Path) {
145+
for entry in t!(cur.read_dir()) {
146+
let entry = t!(entry);
147+
let path = entry.path();
148+
cmd.arg(path);
149+
}
150+
}
151+
}
152+
120153
fn prepare_rootfs_cpio(rootfs: &Path, rootfs_img: &Path) {
121154
// Generate a new rootfs image now that we've updated the test server
122155
// executable. This is the equivalent of:
@@ -239,25 +272,51 @@ fn start_qemu_emulator(target: &str, rootfs: &Path, server: &Path, tmpdir: &Path
239272
let mut cmd = Command::new("qemu-system-x86_64");
240273
cmd.arg("-nographic")
241274
.arg("-machine")
242-
.arg("virt")
275+
.arg("q35")
243276
.arg("-m")
244277
.arg("1024")
245278
.arg("-drive")
246-
.arg("if=pflash,format=raw,unit=0,file=/tmp/OVMF/OVMF_CODE.fd")
279+
.arg("if=pflash,format=raw,file=/tmp/OVMF/OVMF_CODE.fd,index=0")
247280
.arg("-drive")
248-
.arg("if=pflash,format=raw,unit=1,file=/tmp/OVMF/OVMF_VARS.fd")
281+
.arg("if=pflash,format=raw,file=/tmp/OVMF/OVMF_VARS.fd,index=1")
249282
.arg("-drive")
250-
.arg("format=raw,file=/tmp/OVMF/UefiShell.iso")
251-
.arg("-append")
252-
.arg("quiet console=ttyS0")
283+
.arg("format=raw,file=/tmp/OVMF/UefiShell.iso,index=2")
253284
.arg("-netdev")
254285
.arg("user,id=net0,hostfwd=tcp::12345-:12345")
255286
.arg("-device")
256-
.arg("virtio-net-device,netdev=net0,mac=00:00:00:00:00:00")
287+
.arg("virtio-net-pci,netdev=net0,mac=00:00:00:00:00:00")
257288
.arg("-drive")
258-
.arg(&format!("file={},format=raw,media=disk", &rootfs_img.to_string_lossy()));
289+
.arg(&format!(
290+
"file={},format=raw,media=disk,index=3",
291+
&rootfs_img.to_string_lossy()
292+
));
259293
t!(cmd.spawn());
260294
}
295+
"i686-unknown-uefi" => {
296+
let mut cmd = Command::new("qemu-system-i386");
297+
cmd.arg("-nographic")
298+
.arg("-machine")
299+
.arg("q35")
300+
.arg("-m")
301+
.arg("1024")
302+
.arg("-drive")
303+
.arg("if=pflash,format=raw,file=/tmp/OVMF/OVMF_CODE.fd,index=0")
304+
.arg("-drive")
305+
.arg("if=pflash,format=raw,file=/tmp/OVMF/OVMF_VARS.fd,index=1")
306+
.arg("-drive")
307+
.arg("format=raw,file=/tmp/OVMF/UefiShell.iso,index=2")
308+
.arg("-netdev")
309+
.arg("user,id=net0,hostfwd=tcp::12345-:12345")
310+
.arg("-device")
311+
.arg("virtio-net-pci,netdev=net0,mac=00:00:00:00:00:00")
312+
.arg("-drive")
313+
.arg(&format!(
314+
"file={},format=raw,media=disk,index=3",
315+
&rootfs_img.to_string_lossy()
316+
));
317+
t!(cmd.spawn());
318+
}
319+
261320
_ => panic!("cannot start emulator for: {}", target),
262321
}
263322
}

0 commit comments

Comments
 (0)