Support uploading Mojo Shell on Android.
This change augments upload_shell_binary.py to allow uploading the shell on
Android as well as on Linux. Future work will make a similar change to
download_shell_binary.py.
R=qsr@chromium.org
Review URL: https://codereview.chromium.org/874243002
diff --git a/mojo/tools/mopy/paths.py b/mojo/tools/mopy/paths.py
index bade8c0..49e1c50 100644
--- a/mojo/tools/mopy/paths.py
+++ b/mojo/tools/mopy/paths.py
@@ -33,9 +33,16 @@
if Config.GetHostOS() == Config.OS_WINDOWS:
self.mojo_launcher_path += ".exe"
self.mojo_shell_path += ".exe"
+ if config and config.target_os == Config.OS_ANDROID:
+ self.target_mojo_shell_path = os.path.join(self.build_dir,
+ "apks",
+ "MojoShell.apk")
+ else:
+ self.target_mojo_shell_path = self.mojo_shell_path
else:
self.mojo_launcher_path = None
self.mojo_shell_path = None
+ self.target_mojo_shell_path = None
def RelPath(self, path):
"""Returns the given path, relative to the current directory."""
diff --git a/mojo/tools/upload_shell_binary.py b/mojo/tools/upload_shell_binary.py
index 83c8847..c7297bb 100755
--- a/mojo/tools/upload_shell_binary.py
+++ b/mojo/tools/upload_shell_binary.py
@@ -11,31 +11,39 @@
import time
import zipfile
+import mopy.gn as gn
from mopy.config import Config
from mopy.paths import Paths
from mopy.version import Version
-paths = Paths(Config(target_os=Config.OS_LINUX, is_debug=False))
+def upload(config, dry_run, verbose):
+ paths = Paths(config)
-sys.path.insert(0, os.path.join(paths.src_root, "tools"))
-# pylint: disable=F0401
-import find_depot_tools
+ sys.path.insert(0, os.path.join(paths.src_root, "tools"))
+ # pylint: disable=F0401
+ import find_depot_tools
-depot_tools_path = find_depot_tools.add_depot_tools_to_path()
-gsutil_exe = os.path.join(depot_tools_path, "third_party", "gsutil", "gsutil")
+ depot_tools_path = find_depot_tools.add_depot_tools_to_path()
+ gsutil_exe = os.path.join(depot_tools_path, "third_party", "gsutil", "gsutil")
-def upload(dry_run, verbose):
- dest = "gs://mojo/shell/" + Version().version + "/linux-x64.zip"
+ zipfile_name = "%s-%s" % (config.target_os, config.target_arch)
+ dest = "gs://mojo/shell/" + Version().version + "/" + zipfile_name + ".zip"
with tempfile.NamedTemporaryFile() as zip_file:
with zipfile.ZipFile(zip_file, 'w') as z:
- with open(paths.mojo_shell_path) as shell_binary:
- zipinfo = zipfile.ZipInfo("mojo_shell")
+ shell_path = paths.target_mojo_shell_path
+ with open(shell_path) as shell_binary:
+ shell_filename = os.path.basename(shell_path)
+ zipinfo = zipfile.ZipInfo(shell_filename)
zipinfo.external_attr = 0777 << 16L
- zipinfo.compress_type = zipfile.ZIP_DEFLATED
- zipinfo.date_time = time.gmtime(os.path.getmtime(paths.mojo_shell_path))
+ compress_type = zipfile.ZIP_DEFLATED
+ if config.target_os == Config.OS_ANDROID:
+ # The APK is already compressed.
+ compress_type = zipfile.ZIP_STORED
+ zipinfo.compress_type = compress_type
+ zipinfo.date_time = time.gmtime(os.path.getmtime(shell_path))
if verbose:
- print "zipping %s" % paths.mojo_shell_path
+ print "zipping %s" % shell_path
z.writestr(zipinfo, shell_binary.read())
if dry_run:
print str([gsutil_exe, "cp", zip_file.name, dest])
@@ -49,8 +57,15 @@
"upload", action="store_true")
parser.add_argument("-v", "--verbose", help="Verbose mode",
action="store_true")
+ parser.add_argument("--build_dir",
+ type=str,
+ metavar="<build_dir>",
+ help="The build dir containing the shell to be uploaded",
+ default="out/Release")
args = parser.parse_args()
- upload(args.dry_run, args.verbose)
+
+ config = gn.ConfigForGNArgs(gn.ParseGNConfig(args.build_dir))
+ upload(config, args.dry_run, args.verbose)
return 0
if __name__ == "__main__":