mirror of https://github.com/status-im/xgo.git
parent
e170dc1898
commit
f2621776c8
|
@ -74,6 +74,8 @@ A handful of flags can be passed to `go build`. The currently supported ones are
|
|||
- `-v`: prints the names of packages as they are compiled
|
||||
- `-x`: prints the build commands as compilation progresses
|
||||
- `-race`: enables data race detection (supported only on amd64, rest built without)
|
||||
- `-tags='tag list'`: list of build tags to consider satisfied during the build
|
||||
- `-ldflags='flag list'`: arguments to pass on each go tool link invocation
|
||||
|
||||
|
||||
### Go releases
|
||||
|
|
|
@ -97,9 +97,11 @@ if [ "$OUT" != "" ]; then
|
|||
NAME=$OUT
|
||||
fi
|
||||
|
||||
if [ "$FLAG_V" == "true" ]; then V=-v; fi
|
||||
if [ "$FLAG_X" == "true" ]; then X=-x; fi
|
||||
if [ "$FLAG_V" == "true" ]; then V=-v; fi
|
||||
if [ "$FLAG_X" == "true" ]; then X=-x; fi
|
||||
if [ "$FLAG_RACE" == "true" ]; then R=-race; fi
|
||||
if [ "$FLAG_TAGS" != "" ]; then T=(--tags "$FLAG_TAGS"); fi
|
||||
if [ "$FLAG_LDFLAGS" != "" ]; then LD="$FLAG_LDFLAGS"; fi
|
||||
|
||||
# If no build targets were specified, inject a catch all wildcard
|
||||
if [ "$TARGETS" == "" ]; then
|
||||
|
@ -139,8 +141,8 @@ for TARGET in $TARGETS; do
|
|||
|
||||
echo "Compiling for android-$PLATFORM/arm..."
|
||||
CC=arm-linux-androideabi-gcc CXX=arm-linux-androideabi-g++ HOST=arm-linux-androideabi PREFIX=/usr/$ANDROID_CHAIN_ARM/arm-linux-androideabi $BUILD_DEPS /deps
|
||||
CC=arm-linux-androideabi-gcc CXX=arm-linux-androideabi-g++ GOOS=android GOARCH=arm GOARM=7 CGO_ENABLED=1 CGO_CFLAGS="$CGO_CCPIE" CGO_CXXFLAGS="$CGO_CCPIE" CGO_LDFLAGS="$CGO_LDPIE" go get $V $X -d ./$PACK
|
||||
CC=arm-linux-androideabi-gcc CXX=arm-linux-androideabi-g++ GOOS=android GOARCH=arm GOARM=7 CGO_ENABLED=1 CGO_CFLAGS="$CGO_CCPIE" CGO_CXXFLAGS="$CGO_CCPIE" CGO_LDFLAGS="$CGO_LDPIE" go build --ldflags="$EXT_LDPIE" $V $X $R -o /build/$NAME-android-$PLATFORM-arm$R ./$PACK
|
||||
CC=arm-linux-androideabi-gcc CXX=arm-linux-androideabi-g++ GOOS=android GOARCH=arm GOARM=7 CGO_ENABLED=1 CGO_CFLAGS="$CGO_CCPIE" CGO_CXXFLAGS="$CGO_CCPIE" CGO_LDFLAGS="$CGO_LDPIE" go get $V $X "${T[@]}" --ldflags="$LD" -d ./$PACK
|
||||
CC=arm-linux-androideabi-gcc CXX=arm-linux-androideabi-g++ GOOS=android GOARCH=arm GOARM=7 CGO_ENABLED=1 CGO_CFLAGS="$CGO_CCPIE" CGO_CXXFLAGS="$CGO_CCPIE" CGO_LDFLAGS="$CGO_LDPIE" go build $V $X "${T[@]}" --ldflags="$EXT_LDPIE $LD" -o /build/$NAME-android-$PLATFORM-arm ./$PACK
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
@ -148,45 +150,45 @@ for TARGET in $TARGETS; do
|
|||
if ([ $XGOOS == "." ] || [ $XGOOS == "linux" ]) && ([ $XGOARCH == "." ] || [ $XGOARCH == "amd64" ]); then
|
||||
echo "Compiling for linux/amd64..."
|
||||
HOST=x86_64-linux PREFIX=/usr/local $BUILD_DEPS /deps
|
||||
GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go get $V $X -d ./$PACK
|
||||
GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build $V $X $R -o /build/$NAME-linux-amd64$R ./$PACK
|
||||
GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go get $V $X "${T[@]}" --ldflags="$LD" -d ./$PACK
|
||||
GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build $V $X "${T[@]}" --ldflags="$LD" $R -o /build/$NAME-linux-amd64$R ./$PACK
|
||||
fi
|
||||
if ([ $XGOOS == "." ] || [ $XGOOS == "linux" ]) && ([ $XGOARCH == "." ] || [ $XGOARCH == "386" ]); then
|
||||
echo "Compiling for linux/386..."
|
||||
HOST=i686-linux PREFIX=/usr/local $BUILD_DEPS /deps
|
||||
GOOS=linux GOARCH=386 CGO_ENABLED=1 go get $V $X -d ./$PACK
|
||||
GOOS=linux GOARCH=386 CGO_ENABLED=1 go build $V $X -o /build/$NAME-linux-386 ./$PACK
|
||||
GOOS=linux GOARCH=386 CGO_ENABLED=1 go get $V $X "${T[@]}" --ldflags="$LD" -d ./$PACK
|
||||
GOOS=linux GOARCH=386 CGO_ENABLED=1 go build $V $X "${T[@]}" --ldflags="$LD" -o /build/$NAME-linux-386 ./$PACK
|
||||
fi
|
||||
if ([ $XGOOS == "." ] || [ $XGOOS == "linux" ]) && ([ $XGOARCH == "." ] || [ $XGOARCH == "arm" ]); then
|
||||
echo "Compiling for linux/arm..."
|
||||
CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++ HOST=arm-linux PREFIX=/usr/local/arm $BUILD_DEPS /deps
|
||||
CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++ GOOS=linux GOARCH=arm CGO_ENABLED=1 GOARM=5 go get $V $X -d ./$PACK
|
||||
CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++ GOOS=linux GOARCH=arm CGO_ENABLED=1 GOARM=5 go build $V $X -o /build/$NAME-linux-arm ./$PACK
|
||||
CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++ GOOS=linux GOARCH=arm CGO_ENABLED=1 GOARM=5 go get $V $X "${T[@]}" --ldflags="$LD" -d ./$PACK
|
||||
CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++ GOOS=linux GOARCH=arm CGO_ENABLED=1 GOARM=5 go build $V $X "${T[@]}" --ldflags="$LD" -o /build/$NAME-linux-arm ./$PACK
|
||||
fi
|
||||
# Check and build for Windows targets
|
||||
if ([ $XGOOS == "." ] || [ $XGOOS == "windows" ]) && ([ $XGOARCH == "." ] || [ $XGOARCH == "amd64" ]); then
|
||||
echo "Compiling for windows/amd64..."
|
||||
CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ HOST=x86_64-w64-mingw32 PREFIX=/usr/x86_64-w64-mingw32 $BUILD_DEPS /deps
|
||||
CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ GOOS=windows GOARCH=amd64 CGO_ENABLED=1 go get $V $X -d ./$PACK
|
||||
CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ GOOS=windows GOARCH=amd64 CGO_ENABLED=1 go build $V $X $R -o /build/$NAME-windows-amd64$R.exe ./$PACK
|
||||
CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ GOOS=windows GOARCH=amd64 CGO_ENABLED=1 go get $V $X "${T[@]}" --ldflags="$LD" -d ./$PACK
|
||||
CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ GOOS=windows GOARCH=amd64 CGO_ENABLED=1 go build $V $X "${T[@]}" --ldflags="$LD" $R -o /build/$NAME-windows-amd64$R.exe ./$PACK
|
||||
fi
|
||||
if ([ $XGOOS == "." ] || [ $XGOOS == "windows" ]) && ([ $XGOARCH == "." ] || [ $XGOARCH == "386" ]); then
|
||||
echo "Compiling for windows/386..."
|
||||
CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ HOST=i686-w64-mingw32 PREFIX=/usr/i686-w64-mingw32 $BUILD_DEPS /deps
|
||||
CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ GOOS=windows GOARCH=386 CGO_ENABLED=1 go get $V $X -d ./$PACK
|
||||
CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ GOOS=windows GOARCH=386 CGO_ENABLED=1 go build $V $X -o /build/$NAME-windows-386.exe ./$PACK
|
||||
CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ GOOS=windows GOARCH=386 CGO_ENABLED=1 go get $V $X "${T[@]}" --ldflags="$LD" -d ./$PACK
|
||||
CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ GOOS=windows GOARCH=386 CGO_ENABLED=1 go build $V $X "${T[@]}" --ldflags="$LD" -o /build/$NAME-windows-386.exe ./$PACK
|
||||
fi
|
||||
# Check and build for OSX targets
|
||||
if ([ $XGOOS == "." ] || [ $XGOOS == "darwin" ]) && ([ $XGOARCH == "." ] || [ $XGOARCH == "amd64" ]); then
|
||||
echo "Compiling for darwin/amd64..."
|
||||
CC=o64-clang CXX=o64-clang++ HOST=x86_64-apple-darwin10 PREFIX=/usr/local $BUILD_DEPS /deps
|
||||
CC=o64-clang CXX=o64-clang++ GOOS=darwin GOARCH=amd64 CGO_ENABLED=1 go get $V $X -d ./$PACK
|
||||
CC=o64-clang CXX=o64-clang++ GOOS=darwin GOARCH=amd64 CGO_ENABLED=1 go build -ldflags=-s $V $X $R -o /build/$NAME-darwin-amd64$R ./$PACK
|
||||
CC=o64-clang CXX=o64-clang++ GOOS=darwin GOARCH=amd64 CGO_ENABLED=1 go get $V $X "${T[@]}" --ldflags="-s $LD" -d ./$PACK
|
||||
CC=o64-clang CXX=o64-clang++ GOOS=darwin GOARCH=amd64 CGO_ENABLED=1 go build $V $X "${T[@]}" --ldflags="-s $LD" $R -o /build/$NAME-darwin-amd64$R ./$PACK
|
||||
fi
|
||||
if ([ $XGOOS == "." ] || [ $XGOOS == "darwin" ]) && ([ $XGOARCH == "." ] || [ $XGOARCH == "386" ]); then
|
||||
echo "Compiling for darwin/386..."
|
||||
CC=o32-clang CXX=o32-clang++ HOST=i386-apple-darwin10 PREFIX=/usr/local $BUILD_DEPS /deps
|
||||
CC=o32-clang CXX=o32-clang++ GOOS=darwin GOARCH=386 CGO_ENABLED=1 go get $V $X -d ./$PACK
|
||||
CC=o32-clang CXX=o32-clang++ GOOS=darwin GOARCH=386 CGO_ENABLED=1 go build -ldflags=-s $V $X -o /build/$NAME-darwin-386 ./$PACK
|
||||
CC=o32-clang CXX=o32-clang++ GOOS=darwin GOARCH=386 CGO_ENABLED=1 go get $V $X "${T[@]}" --ldflags="-s $LD" -d ./$PACK
|
||||
CC=o32-clang CXX=o32-clang++ GOOS=darwin GOARCH=386 CGO_ENABLED=1 go build $V $X "${T[@]}" --ldflags="-s $LD" -o /build/$NAME-darwin-386 ./$PACK
|
||||
fi
|
||||
done
|
||||
|
|
38
xgo.go
38
xgo.go
|
@ -42,9 +42,22 @@ var (
|
|||
)
|
||||
|
||||
// Command line arguments to pass to go build
|
||||
var buildVerbose = flag.Bool("v", false, "Print the names of packages as they are compiled")
|
||||
var buildSteps = flag.Bool("x", false, "Print the command as executing the builds")
|
||||
var buildRace = flag.Bool("race", false, "Enable data race detection (supported only on amd64)")
|
||||
var (
|
||||
buildVerbose = flag.Bool("v", false, "Print the names of packages as they are compiled")
|
||||
buildSteps = flag.Bool("x", false, "Print the command as executing the builds")
|
||||
buildRace = flag.Bool("race", false, "Enable data race detection (supported only on amd64)")
|
||||
buildTags = flag.String("tags", "", "List of build tags to consider satisfied during the build")
|
||||
buildLdFlags = flag.String("ldflags", "", "Arguments to pass on each go tool link invocation")
|
||||
)
|
||||
|
||||
// BuildFlags is a simple collection of flags to fine tune a build.
|
||||
type BuildFlags struct {
|
||||
Verbose bool // Print the names of packages as they are compiled
|
||||
Steps bool // Print the command as executing the builds
|
||||
Race bool // Enable data race detection (supported only on amd64)
|
||||
Tags string // List of build tags to consider satisfied during the build
|
||||
LdFlags string // Arguments to pass on each go tool link invocation
|
||||
}
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
@ -111,7 +124,14 @@ func main() {
|
|||
}
|
||||
}
|
||||
// Cross compile the requested package into the local folder
|
||||
if err := compile(flag.Args()[0], image, *srcRemote, *srcBranch, *inPackage, *crossDeps, *outFolder, *outPrefix, *buildVerbose, *buildSteps, *buildRace, strings.Split(*targets, ",")); err != nil {
|
||||
flags := &BuildFlags{
|
||||
Verbose: *buildVerbose,
|
||||
Steps: *buildSteps,
|
||||
Race: *buildRace,
|
||||
Tags: *buildTags,
|
||||
LdFlags: *buildLdFlags,
|
||||
}
|
||||
if err := compile(flag.Args()[0], image, *srcRemote, *srcBranch, *inPackage, *crossDeps, *outFolder, *outPrefix, flags, strings.Split(*targets, ",")); err != nil {
|
||||
log.Fatalf("Failed to cross compile package: %v.", err)
|
||||
}
|
||||
}
|
||||
|
@ -143,7 +163,7 @@ func pullDockerImage(image string) error {
|
|||
}
|
||||
|
||||
// Cross compiles a requested package into the current working directory.
|
||||
func compile(repo string, image string, remote string, branch string, pack string, deps string, dest string, prefix string, verbose bool, steps bool, race bool, targets []string) error {
|
||||
func compile(repo string, image string, remote string, branch string, pack string, deps string, dest string, prefix string, flags *BuildFlags, targets []string) error {
|
||||
// Retrieve the current folder to store the binaries in
|
||||
folder, err := os.Getwd()
|
||||
if err != nil {
|
||||
|
@ -226,9 +246,11 @@ func compile(repo string, image string, remote string, branch string, pack strin
|
|||
"-e", "PACK=" + pack,
|
||||
"-e", "DEPS=" + deps,
|
||||
"-e", "OUT=" + prefix,
|
||||
"-e", fmt.Sprintf("FLAG_V=%v", verbose),
|
||||
"-e", fmt.Sprintf("FLAG_X=%v", steps),
|
||||
"-e", fmt.Sprintf("FLAG_RACE=%v", race),
|
||||
"-e", fmt.Sprintf("FLAG_V=%v", flags.Verbose),
|
||||
"-e", fmt.Sprintf("FLAG_X=%v", flags.Steps),
|
||||
"-e", fmt.Sprintf("FLAG_RACE=%v", flags.Race),
|
||||
"-e", fmt.Sprintf("FLAG_TAGS=%s", flags.Tags),
|
||||
"-e", fmt.Sprintf("FLAG_LDFLAGS=%s", flags.LdFlags),
|
||||
"-e", "TARGETS=" + strings.Replace(strings.Join(targets, " "), "*", ".", -1),
|
||||
}
|
||||
for i := 0; i < len(locals); i++ {
|
||||
|
|
Loading…
Reference in New Issue