From 6fa3870e5b98c55e822671feed44bd2ff8b2b6c1 Mon Sep 17 00:00:00 2001
From: Marco A L Barbosa <malbarbo@gmail.com>
Date: Tue, 31 Oct 2017 10:09:29 -0200
Subject: [PATCH] Run sparc64-unknown-linux-gnu tests on qemu system

---
 ci/docker/sparc64-unknown-linux-gnu/Dockerfile | 17 +++++++++++------
 ci/linux-sparc64.sh                            | 17 +++++++++++++++++
 2 files changed, 28 insertions(+), 6 deletions(-)
 create mode 100644 ci/linux-sparc64.sh

diff --git a/ci/docker/sparc64-unknown-linux-gnu/Dockerfile b/ci/docker/sparc64-unknown-linux-gnu/Dockerfile
index 2d53371a..2c551f91 100644
--- a/ci/docker/sparc64-unknown-linux-gnu/Dockerfile
+++ b/ci/docker/sparc64-unknown-linux-gnu/Dockerfile
@@ -2,13 +2,18 @@
 FROM ubuntu:17.04
 
 RUN apt-get update && apt-get install -y --no-install-recommends \
-        gcc libc6-dev qemu-user ca-certificates \
-        gcc-sparc64-linux-gnu libc6-dev-sparc64-cross
+        curl ca-certificates \
+        gcc libc6-dev \
+        gcc-sparc64-linux-gnu libc6-dev-sparc64-cross \
+        qemu-system-sparc64 openbios-sparc seabios ipxe-qemu \
+        p7zip-full cpio
+
+COPY linux-sparc64.sh /
+RUN bash /linux-sparc64.sh
+
+COPY test-runner-linux /
 
 ENV CARGO_TARGET_SPARC64_UNKNOWN_LINUX_GNU_LINKER=sparc64-linux-gnu-gcc \
-    # TODO: in theory we should execute this, but qemu segfaults immediately
-    #       see https://github.com/rust-lang/libc/issues/822
-    # CARGO_TARGET_SPARC64_UNKNOWN_LINUX_GNU_RUNNER="qemu-sparc64 -L /usr/sparc64-linux-gnu" \
-    CARGO_TARGET_SPARC64_UNKNOWN_LINUX_GNU_RUNNER=true \
+    CARGO_TARGET_SPARC64_UNKNOWN_LINUX_GNU_RUNNER="/test-runner-linux sparc64" \
     CC_sparc64_unknown_linux_gnu=sparc64-linux-gnu-gcc \
     PATH=$PATH:/rust/bin
diff --git a/ci/linux-sparc64.sh b/ci/linux-sparc64.sh
new file mode 100644
index 00000000..33a3c46c
--- /dev/null
+++ b/ci/linux-sparc64.sh
@@ -0,0 +1,17 @@
+set -ex
+
+mkdir -m 777 /qemu
+cd /qemu
+
+curl -LO https://cdimage.debian.org/cdimage/ports/debian-9.0-sparc64-NETINST-1.iso
+7z e debian-9.0-sparc64-NETINST-1.iso boot/initrd.gz
+7z e debian-9.0-sparc64-NETINST-1.iso boot/sparc64
+mv sparc64 kernel
+rm debian-9.0-sparc64-NETINST-1.iso
+
+mkdir init
+cd init
+gunzip -c ../initrd.gz | cpio -id
+rm ../initrd.gz
+cp /usr/sparc64-linux-gnu/lib/libgcc_s.so.1 usr/lib/
+chmod a+w .
-- 
GitLab