Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1583)

Unified Diff: mojo/go/go.py

Issue 1384243002: Adds the ability to run pure Go unit tests in the Mojo test suite. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Adds dummy go tests to run. Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/go/go.py
diff --git a/mojo/go/go.py b/mojo/go/go.py
index a0f93f213e2bda88fdcff9351885d96b56f5c7fd..1ecec4e0b128bd36559c74f478ee72d59d6949dd 100755
--- a/mojo/go/go.py
+++ b/mojo/go/go.py
@@ -37,29 +37,88 @@ def main():
go_tool = os.path.abspath(args.go_tool)
build_dir = args.build_directory
out_file = os.path.abspath(args.output_file)
- # The src directory specified is relative. We need this as an absolute path.
- src_root = os.path.abspath(args.src_root)
- # GOPATH must be absolute, and point to one directory up from |src_Root|
- go_path = os.path.abspath(os.path.join(src_root, '..'))
- # GOPATH also includes any third_party/go libraries that have been imported
- go_path += ':' + os.path.join(src_root, 'third_party', 'go')
- go_path += ':' + os.path.abspath(os.path.join(args.out_root, 'gen', 'go'))
- if 'MOJO_GOPATH' in os.environ:
- go_path += ':' + os.environ['MOJO_GOPATH']
go_options = args.go_option
try:
shutil.rmtree(build_dir, True)
os.mkdir(build_dir)
except Exception:
pass
- old_directory = os.getcwd()
- os.chdir(build_dir)
+
+ call_result = InvokeGo(go_tool, go_options,
+ work_dir=build_dir,
+ src_root=args.src_root,
+ out_root=args.out_root,
+ cgo_cflags=args.cgo_cflags,
+ cgo_ldflags=args.cgo_ldflags,
+ target_android=args.android)
+ if call_result != 0:
+ return call_result
+ out_files = sorted([ f for f in os.listdir(build_dir) if os.path.isfile(f)])
+ if (len(out_files) > 0):
+ shutil.move(out_files[0], out_file)
+ try:
+ shutil.rmtree(build_dir, True)
+ except Exception:
+ pass
+
+def InvokeGo(go_tool, go_options, work_dir=None, src_root=None,
viettrungluu 2015/10/09 21:39:49 Probably this should be put under mojo/tools/mopy:
rudominer 2015/10/09 23:42:06 Done.
+ out_root=None, cgo_cflags=None, cgo_ldflags=None,
+ target_android=False):
+ """ Invokes the go tool after setting up the environment.
+ go_tool The absolute path to the 'go' binary
+
+ go_options A list of string arguments that will be passed to 'go'
+
+ work_dir Optional specification of a directory to temporarily switch into
+ before invoking the go tool. If set it must be a path relative to
+ the current working directory or an absolute path.
+
+ src_root Optional specification of the Mojo src root. If set it must be
+ a path relative to the current working directory or an absolute
+ path. This will be used to add additional elements to
+ the GOPATH environment variable.
+
+ out_root Optional specification of the Mojo out dir. If set it must be
+ a path relative to the current working directory or an absolute
+ path. This will be used to add additional elements to
+ the GOPATH environment variable.
+
+ cgo_cflags Optional value to set for the CGO_CFLAGS environment variable.
+
+ cgo_ldflags Optional value to set for the CGO_LDFLAGS environment variable.
+
+ target_android
+ Set to true to target Android.
+ """
+ assert os.path.isabs(go_tool)
env = os.environ.copy()
- env['GOPATH'] = go_path
env['GOROOT'] = os.path.dirname(os.path.dirname(go_tool))
- env['CGO_CFLAGS'] = args.cgo_cflags
- env['CGO_LDFLAGS'] = args.cgo_ldflags
- if args.android:
+
+ go_path = ''
+ if src_root is not None:
+ # The src directory specified is relative. We need this as an absolute path.
+ src_root = os.path.abspath(src_root)
+ # GOPATH must be absolute, and point to one directory up from |src_Root|
+ go_path = os.path.abspath(os.path.join(src_root, '..'))
+ # GOPATH also includes any third_party/go libraries that have been imported
+ go_path += ':' + os.path.join(src_root, 'third_party', 'go')
+
+ if out_root is not None:
+ go_path += ':' + os.path.abspath(os.path.join(out_root, 'gen', 'go'))
+
+ if 'MOJO_GOPATH' in os.environ:
+ go_path += ':' + os.environ['MOJO_GOPATH']
+
+ if len(go_path) > 0 :
+ env['GOPATH'] = go_path
+
+ if cgo_cflags is not None:
+ env['CGO_CFLAGS'] = cgo_cflags
+
+ if cgo_ldflags is not None:
+ env['CGO_LDFLAGS'] = cgo_ldflags
+
+ if target_android:
env['CGO_ENABLED'] = '1'
env['GOOS'] = 'android'
env['GOARCH'] = 'arm'
@@ -68,6 +127,9 @@ def main():
# which with high probability points to an invalid path, so we override the
# CC env var that will be used by the go tool.
if 'CC' not in env:
+ if src_root is None:
+ raise Exception('src_root must be set if is_android is true and '
+ '"CC" is not in env.')
ndk_path = os.path.join(src_root, 'third_party', 'android_tools', 'ndk')
if sys.platform.startswith('linux'):
arch = 'linux-x86_64'
@@ -82,17 +144,13 @@ def main():
env['CGO_LDFLAGS'] += ' --sysroot %s' % sysroot
env['CC'] = '%s --sysroot %s' % (ndk_cc, sysroot)
- call_result = subprocess.call([go_tool] + go_options, env=env)
- if call_result != 0:
- return call_result
- out_files = sorted([ f for f in os.listdir('.') if os.path.isfile(f)])
- if (len(out_files) > 0):
- shutil.move(out_files[0], out_file)
- os.chdir(old_directory)
- try:
- shutil.rmtree(build_dir, True)
- except Exception:
- pass
+ save_cwd = os.getcwd()
+ if work_dir is not None:
+ os.chdir(work_dir)
+ result = subprocess.call([go_tool] + go_options, env=env)
+ if work_dir is not None:
+ os.chdir(save_cwd)
+ return result
if __name__ == '__main__':
sys.exit(main())
« no previous file with comments | « mojo/go/__init__.py ('k') | mojo/tools/data/gotests » ('j') | mojo/tools/data/gotests » ('J')

Powered by Google App Engine
This is Rietveld 408576698