mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 11:25:00 +00:00
4ebfb48f7e
When upgrading SDK to 33, I cannot build GeckoView on Windows workstation during processing AIDL due to https://issuetracker.google.com/issues/236167971 that is fixed by 33.0.1. Differential Revision: https://phabricator.services.mozilla.com/D165514
158 lines
5.2 KiB
Python
158 lines
5.2 KiB
Python
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
|
|
# vim: set filetype=python:
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
# Ensure Android SDK and build-tools versions depending on mobile target.
|
|
|
|
|
|
@depends(host, toolchains_base_dir, "--help")
|
|
@imports(_from="os.path", _import="isdir")
|
|
def default_android_sdk_root(host, toolchains_base_dir, _):
|
|
sdk_basename = {
|
|
"Darwin": "android-sdk-macosx",
|
|
"Linux": "android-sdk-linux",
|
|
"WINNT": "android-sdk-windows",
|
|
}.get(host.kernel, "android-sdk")
|
|
for sdk_basename in (sdk_basename, "android-sdk"):
|
|
path = os.path.join(toolchains_base_dir, sdk_basename)
|
|
if isdir(path):
|
|
return path
|
|
|
|
|
|
option(
|
|
"--with-android-sdk",
|
|
nargs=1,
|
|
default=default_android_sdk_root,
|
|
help="location where the Android SDK can be found (like ~/.mozbuild/android-sdk-linux){|}",
|
|
)
|
|
|
|
|
|
@depends("--with-android-sdk")
|
|
@imports(_from="os.path", _import="isdir")
|
|
def android_sdk_root(value):
|
|
if value:
|
|
if not isdir(value[0]):
|
|
die(
|
|
"The path you specified with --with-android-sdk (%s) is not "
|
|
"a directory" % value[0]
|
|
)
|
|
return value[0]
|
|
|
|
die(
|
|
"You must specify --with-android-sdk=/path/to/sdk when targeting Android, "
|
|
"or try |mach bootstrap|."
|
|
)
|
|
|
|
|
|
@depends("--enable-geckoview-lite")
|
|
def android_sdk_version(geckoview_lite):
|
|
# We support Android SDK version 21 and up by default (16 in lite mode).
|
|
# See the --enable-android-min-sdk option below.
|
|
#
|
|
# Warning: Before increasing the with-android-min-sdk value, please note several places in
|
|
# and out of tree have to be changed. Otherwise, places like Treeherder or archive.mozilla.org
|
|
# will advertise a bad API level. This may confuse people. As an example, please look at
|
|
# bug 1384482.
|
|
# If you think you can't handle the whole set of changes, please reach out to the Release
|
|
# Engineering team.
|
|
return namespace(
|
|
build_tools_version="33.0.1",
|
|
target_sdk_version="33",
|
|
min_sdk_version="16" if geckoview_lite else "21",
|
|
)
|
|
|
|
|
|
option(
|
|
"--with-android-min-sdk",
|
|
default=android_sdk_version.min_sdk_version,
|
|
help="Impose a minimum Firefox for Android SDK version",
|
|
)
|
|
|
|
|
|
@depends("--with-android-min-sdk", android_sdk_version.target_sdk_version)
|
|
@imports(_from="__builtin__", _import="ValueError")
|
|
def valid_android_min_sdk(min_sdk_version, target_sdk_version):
|
|
if not min_sdk_version:
|
|
die("--without-android-min-sdk is not a valid option")
|
|
try:
|
|
if int(min_sdk_version[0]) > int(target_sdk_version):
|
|
die(
|
|
"--with-android-min-sdk is expected to be less than {}".format(
|
|
target_sdk_version
|
|
)
|
|
)
|
|
except ValueError:
|
|
die("--with-android-min-sdk takes a numerical value")
|
|
return min_sdk_version[0]
|
|
|
|
|
|
set_config("MOZ_ANDROID_MIN_SDK_VERSION", valid_android_min_sdk)
|
|
|
|
|
|
@depends(android_sdk_root, android_sdk_version)
|
|
@checking("for Android build-tools")
|
|
@imports(_from="os.path", _import="exists")
|
|
@imports(_from="os.path", _import="isdir")
|
|
def android_build_tools(sdk_root, sdk_version):
|
|
android_build_tools_base = os.path.join(sdk_root, "build-tools")
|
|
version = sdk_version.build_tools_version
|
|
if isdir(os.path.join(android_build_tools_base, version)):
|
|
tools = os.path.join(android_build_tools_base, version)
|
|
for zipalign in ("zipalign", "zipalign.exe"):
|
|
if exists(os.path.join(tools, zipalign)):
|
|
return [tools]
|
|
|
|
die(
|
|
"You must install the Android build-tools version %s. "
|
|
"Try |mach bootstrap|. (Looked for %s/%s)"
|
|
% (version, android_build_tools_base, version)
|
|
)
|
|
|
|
|
|
@depends(android_sdk_root)
|
|
@checking("for Android platform-tools")
|
|
@imports(_from="os.path", _import="exists")
|
|
@imports(_from="os.path", _import="isdir")
|
|
def android_platform_tools(sdk_root):
|
|
tools = os.path.join(sdk_root, "platform-tools")
|
|
for adb in ("adb", "adb.exe"):
|
|
if exists(os.path.join(tools, adb)):
|
|
return [tools]
|
|
|
|
die(
|
|
"You must install the Android platform-tools. Try |mach bootstrap|. (Looked for %s)"
|
|
% tools
|
|
)
|
|
|
|
|
|
@depends(android_sdk_root)
|
|
def android_emulator_path(sdk_root):
|
|
return [os.path.join(sdk_root, "emulator")]
|
|
|
|
|
|
@template
|
|
def check_android_tools(tool, tool_dir):
|
|
check = check_prog(
|
|
tool.upper(), (tool, tool + ".exe"), paths=tool_dir, allow_missing=True
|
|
)
|
|
|
|
@depends(check)
|
|
def require_tool(result):
|
|
if result is None:
|
|
die("The program %s was not found. Try |mach bootstrap|" % tool)
|
|
return result
|
|
|
|
return require_tool
|
|
|
|
|
|
check_android_tools("zipalign", android_build_tools)
|
|
check_android_tools("adb", android_platform_tools)
|
|
check_android_tools("emulator", android_emulator_path)
|
|
|
|
set_config("ANDROID_SDK_ROOT", android_sdk_root)
|
|
|
|
set_config("ANDROID_BUILD_TOOLS_VERSION", android_sdk_version.build_tools_version)
|
|
set_config("ANDROID_TARGET_SDK", android_sdk_version.target_sdk_version)
|