From ffdd8b3afac9343bdd119368310190375682ff7a Mon Sep 17 00:00:00 2001 From: Julian Xhokaxhiu Date: Fri, 9 Mar 2018 19:05:33 +0100 Subject: docker: enable Automated builds for aarch64 ( ARM64 ) platforms (#5058) * Enable Automated builds for aarch64 * Native aarch64 build * Move to the new organization * Try to build it with latest go binary * Rebuild using Go 1.10 --- docker/aarch64/build.sh | 3 ++ docker/aarch64/qemu-aarch64-static | Bin 0 -> 3451880 bytes docker/aarch64/resin-xbuild | Bin 0 -> 1422176 bytes docker/aarch64/resin-xbuild.go | 66 +++++++++++++++++++++++++++++++++++++ 4 files changed, 69 insertions(+) create mode 100644 docker/aarch64/build.sh create mode 100755 docker/aarch64/qemu-aarch64-static create mode 100755 docker/aarch64/resin-xbuild create mode 100644 docker/aarch64/resin-xbuild.go (limited to 'docker/aarch64') diff --git a/docker/aarch64/build.sh b/docker/aarch64/build.sh new file mode 100644 index 00000000..d864f4b3 --- /dev/null +++ b/docker/aarch64/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +go build -ldflags "-w -s" resin-xbuild.go diff --git a/docker/aarch64/qemu-aarch64-static b/docker/aarch64/qemu-aarch64-static new file mode 100755 index 00000000..f44233bc Binary files /dev/null and b/docker/aarch64/qemu-aarch64-static differ diff --git a/docker/aarch64/resin-xbuild b/docker/aarch64/resin-xbuild new file mode 100755 index 00000000..3996ea53 Binary files /dev/null and b/docker/aarch64/resin-xbuild differ diff --git a/docker/aarch64/resin-xbuild.go b/docker/aarch64/resin-xbuild.go new file mode 100644 index 00000000..84cf7b66 --- /dev/null +++ b/docker/aarch64/resin-xbuild.go @@ -0,0 +1,66 @@ +package main + +import ( + "log" + "os" + "os/exec" + "syscall" +) + +func crossBuildStart() { + err := os.Remove("/bin/sh") + if err != nil { + log.Fatal(err) + } + err = os.Link("/usr/bin/resin-xbuild", "/bin/sh") + if err != nil { + log.Fatal(err) + } +} + +func crossBuildEnd() { + err := os.Remove("/bin/sh") + if err != nil { + log.Fatal(err) + } + err = os.Link("/bin/sh.real", "/bin/sh") + if err != nil { + log.Fatal(err) + } +} + +func runShell() error { + cmd := exec.Command("/usr/bin/qemu-aarch64-static", append([]string{"-0", "/bin/sh", "/bin/sh"}, os.Args[1:]...)...) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + return cmd.Run() +} + +func main() { + switch os.Args[0] { + case "cross-build-start": + crossBuildStart() + case "cross-build-end": + crossBuildEnd() + case "/bin/sh": + code := 0 + crossBuildEnd() + + if err := runShell(); err != nil { + code = 1 + if exiterr, ok := err.(*exec.ExitError); ok { + if status, ok := exiterr.Sys().(syscall.WaitStatus); ok { + code = status.ExitStatus() + } + } + } + + crossBuildStart() + + // Hack to bypass apk issues with triggering + code = 0 + + os.Exit(code) + } +} -- cgit v1.2.3