mirror of https://github.com/gogits/gogs.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.1 KiB
66 lines
1.1 KiB
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) |
|
} |
|
}
|
|
|