blob: c51e2aec66ef712e4aa4d33e8fe20c06e4ba4509 [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2017 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Build script for a Go app.
import argparse
import os
import subprocess
import sys
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--fuchsia-root', help='Path to root of Fuchsia project',
required=True)
parser.add_argument('--root-out-dir', help='Path to root of build output',
required=True)
parser.add_argument('--depfile', help='The path to the depfile',
required=True)
parser.add_argument('--current-cpu', help='Target arch, x64 or arm64.',
required=True)
parser.add_argument('--binname', help='Output file')
parser.add_argument('package', help='The package name')
args = parser.parse_args()
if args.current_cpu == "x64":
goarch = "amd64"
elif args.current_cpu == "arm64":
goarch = "arm64"
else:
print("unknown current_cpu: ", args.current_cpu)
return 1
sympaths = {
'apps': 'apps',
'third_party/netstack': 'github.com/google/netstack',
'apps/thinfs': 'fuchsia.googlesource.com/thinfs',
}
go_binary = os.path.join(args.fuchsia_root, "third_party/go/bin/go")
gopath = args.root_out_dir
for src in sympaths:
dst = os.path.join(gopath, "src", sympaths[src])
try:
os.makedirs(os.path.dirname(dst))
except OSError, e:
if e.errno == os.errno.EEXIST:
pass # ignore, already have directory
else:
print("could not mkdir for path: ", dst, ": ", e)
return 1
try:
os.symlink(os.path.join(args.fuchsia_root, src), dst)
except OSError, e:
if e.errno == os.errno.EEXIST:
pass # ignore, already have symlink
else:
print("could not link: ", src, ": ", e)
return 1
os.environ['CGO_ENABLED'] = '1'
os.environ['GOPATH'] = gopath
# TODO(crawshaw): remove when clangwrap.sh/gccwrap.sh is clever.
os.environ['MAGENTA'] = os.path.join(args.fuchsia_root, 'magenta')
os.environ['GOOS'] = 'fuchsia'
os.environ['GOARCH'] = goarch
if 'GOBIN' in os.environ:
del os.environ['GOBIN']
if 'GOROOT' in os.environ:
del os.environ['GOROOT']
godepfile = os.path.join(args.fuchsia_root, 'buildtools/godepfile')
pkgdir = os.path.join(args.root_out_dir, 'pkg')
retcode = subprocess.call([go_binary, 'install', '-pkgdir', pkgdir, args.package],
env=os.environ)
if retcode == 0:
binname = os.path.basename(args.package)
src = os.path.join(gopath, "bin/fuchsia_"+goarch+"/"+binname)
if args.binname:
dst = os.path.join(gopath, args.binname)
else:
dst = os.path.join(gopath, binname)
os.rename(src, dst)
if args.depfile is not None:
with open(args.depfile, "wb") as out:
os.environ['GOROOT'] = os.path.join(args.fuchsia_root, "third_party/go")
subprocess.Popen([godepfile, '-o', binname, args.package], stdout=out, env=os.environ)
return retcode
if __name__ == '__main__':
sys.exit(main())