aboutsummaryrefslogtreecommitdiffstats
path: root/build
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2016-08-08 18:41:55 +0800
committerPéter Szilágyi <peterke@gmail.com>2016-08-08 18:45:44 +0800
commit8c23f20c68b59c5534ab249d23b452114ba75f74 (patch)
tree516814255b407c90589d56250912666459305d13 /build
parent4f65227971bd63b409f625dde074c5bd0893e775 (diff)
downloaddexon-8c23f20c68b59c5534ab249d23b452114ba75f74.tar.gz
dexon-8c23f20c68b59c5534ab249d23b452114ba75f74.tar.zst
dexon-8c23f20c68b59c5534ab249d23b452114ba75f74.zip
Makefile, build: move cross compilation into ci.go
Diffstat (limited to 'build')
-rw-r--r--build/ci.go32
-rwxr-xr-xbuild/flags.sh22
2 files changed, 32 insertions, 22 deletions
diff --git a/build/ci.go b/build/ci.go
index 33d97c182..3011a6976 100644
--- a/build/ci.go
+++ b/build/ci.go
@@ -28,6 +28,7 @@ Available commands are:
archive [ -type zip|tar ] -- archives build artefacts
importkeys -- imports signing keys from env
debsrc [ -sign key-id ] [ -upload dest ] -- creates a debian source package
+ xgo [ options ] -- cross builds according to options
For all commands, -n prevents execution of external programs (dry run mode).
@@ -121,6 +122,8 @@ func main() {
doDebianSource(os.Args[2:])
case "travis-debsrc":
doTravisDebianSource(os.Args[2:])
+ case "xgo":
+ doXgo(os.Args[2:])
default:
log.Fatal("unknown command ", os.Args[1])
}
@@ -463,3 +466,32 @@ func stageDebianSource(tmpdir string, meta debMetadata) (pkgdir string) {
return pkgdir
}
+
+// Cross compilation
+
+func doXgo(cmdline []string) {
+ // Make sure xgo is available for cross compilation
+ gogetxgo := goTool("get", "github.com/karalabe/xgo")
+ build.MustRun(gogetxgo)
+
+ // Execute the actual cross compilation
+ pkg := cmdline[len(cmdline)-1]
+ args := append(cmdline[:len(cmdline)-1], makeBuildFlags("")...)
+
+ build.MustRun(xgoTool(append(args, pkg)...))
+}
+
+func xgoTool(args ...string) *exec.Cmd {
+ cmd := exec.Command(filepath.Join(GOBIN, "xgo"), args...)
+ cmd.Env = []string{
+ "GOPATH=" + build.GOPATH(),
+ "GOBIN=" + GOBIN,
+ }
+ for _, e := range os.Environ() {
+ if strings.HasPrefix(e, "GOPATH=") || strings.HasPrefix(e, "GOBIN=") {
+ continue
+ }
+ cmd.Env = append(cmd.Env, e)
+ }
+ return cmd
+}
diff --git a/build/flags.sh b/build/flags.sh
deleted file mode 100755
index e021dbad4..000000000
--- a/build/flags.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh
-
-set -e
-
-if [ ! -f "build/env.sh" ]; then
- echo "$0 must be run from the root of the repository."
- exit 2
-fi
-
-# Since Go 1.5, the separator char for link time assignments
-# is '=' and using ' ' prints a warning. However, Go < 1.5 does
-# not support using '='.
-sep=$(go version | awk '{ if ($3 >= "go1.5" || index($3, "devel")) print "="; else print " "; }' -)
-
-# set gitCommit when running from a Git checkout.
-if [ -f ".git/HEAD" ]; then
- echo "-ldflags '-X main.gitCommit$sep$(git rev-parse HEAD)'"
-fi
-
-if [ ! -z "$GO_OPENCL" ]; then
- echo "-tags opencl"
-fi