96 lines
2.8 KiB
Markdown
96 lines
2.8 KiB
Markdown
|
# Gox - Simple Go Cross Compilation
|
||
|
|
||
|
Gox is a simple, no-frills tool for Go cross compilation that behaves a
|
||
|
lot like standard `go build`. Gox will parallelize builds for multiple
|
||
|
platforms. Gox will also build the cross-compilation toolchain for you.
|
||
|
|
||
|
## Installation
|
||
|
|
||
|
To install Gox, please use `go get`. We tag versions so feel free to
|
||
|
checkout that tag and compile.
|
||
|
|
||
|
```
|
||
|
$ go get github.com/mitchellh/gox
|
||
|
...
|
||
|
$ gox -h
|
||
|
...
|
||
|
```
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
If you know how to use `go build`, then you know how to use Gox. For
|
||
|
example, to build the current package, specify no parameters and just
|
||
|
call `gox`. Gox will parallelize based on the number of CPUs you have
|
||
|
by default and build for every platform by default:
|
||
|
|
||
|
```
|
||
|
$ gox
|
||
|
Number of parallel builds: 4
|
||
|
|
||
|
--> darwin/386: github.com/mitchellh/gox
|
||
|
--> darwin/amd64: github.com/mitchellh/gox
|
||
|
--> linux/386: github.com/mitchellh/gox
|
||
|
--> linux/amd64: github.com/mitchellh/gox
|
||
|
--> linux/arm: github.com/mitchellh/gox
|
||
|
--> freebsd/386: github.com/mitchellh/gox
|
||
|
--> freebsd/amd64: github.com/mitchellh/gox
|
||
|
--> openbsd/386: github.com/mitchellh/gox
|
||
|
--> openbsd/amd64: github.com/mitchellh/gox
|
||
|
--> windows/386: github.com/mitchellh/gox
|
||
|
--> windows/amd64: github.com/mitchellh/gox
|
||
|
--> freebsd/arm: github.com/mitchellh/gox
|
||
|
--> netbsd/386: github.com/mitchellh/gox
|
||
|
--> netbsd/amd64: github.com/mitchellh/gox
|
||
|
--> netbsd/arm: github.com/mitchellh/gox
|
||
|
--> plan9/386: github.com/mitchellh/gox
|
||
|
```
|
||
|
|
||
|
Or, if you want to build a package and sub-packages:
|
||
|
|
||
|
```
|
||
|
$ gox ./...
|
||
|
...
|
||
|
```
|
||
|
|
||
|
Or, if you want to build multiple distinct packages:
|
||
|
|
||
|
```
|
||
|
$ gox github.com/mitchellh/gox github.com/hashicorp/serf
|
||
|
...
|
||
|
```
|
||
|
|
||
|
Or if you want to just build for linux:
|
||
|
|
||
|
```
|
||
|
$ gox -os="linux"
|
||
|
...
|
||
|
```
|
||
|
|
||
|
Or maybe you just want to build for 64-bit linux:
|
||
|
|
||
|
```
|
||
|
$ gox -osarch="linux/amd64"
|
||
|
...
|
||
|
```
|
||
|
|
||
|
And more! Just run `gox -h` for help and additional information.
|
||
|
|
||
|
## Versus Other Cross-Compile Tools
|
||
|
|
||
|
A big thanks to these other options for existing. They each paved the
|
||
|
way in many aspects to make Go cross-compilation approachable.
|
||
|
|
||
|
* [Dave Cheney's golang-crosscompile](https://github.com/davecheney/golang-crosscompile) -
|
||
|
Gox compiles for multiple platforms and can therefore easily run on
|
||
|
any platform Go supports, whereas Dave's scripts require a shell. Gox
|
||
|
will also parallelize builds. Dave's scripts build sequentially. Gox has
|
||
|
much easier to use OS/Arch filtering built in.
|
||
|
|
||
|
* [goxc](https://github.com/laher/goxc) -
|
||
|
A very richly featured tool that can even do things such as build system
|
||
|
packages, upload binaries, generate download webpages, etc. Gox is a
|
||
|
super slim alternative that only cross-compiles binaries. Gox builds packages in parallel, whereas
|
||
|
goxc doesn't. Gox doesn't enforce a specific output structure for built
|
||
|
binaries.
|
||
|
|