Files
tubestation/build/moz.configure/android-sdk.configure
Narcis Beleuzu a84dc052f1 Backed out 9 changesets (bug 1880805, bug 1880792) for gradle-dependencies TL bustages. CLOSED TREE
Backed out changeset f94e6acf0cd3 (bug 1880805)
Backed out changeset 22e14524bf1f (bug 1880805)
Backed out changeset 774b263652b5 (bug 1880805)
Backed out changeset 77fe8fb48620 (bug 1880805)
Backed out changeset 3ae77f91197e (bug 1880805)
Backed out changeset 1ffaa88f56da (bug 1880805)
Backed out changeset 1dee3246c6a2 (bug 1880805)
Backed out changeset 9abb09c562ef (bug 1880792)
Backed out changeset 24a1c7a574c4 (bug 1880792)
2024-08-06 22:41:06 +03:00

158 lines
5.1 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|."
)
@dependable
def android_sdk_version():
# We support Android SDK version 21 and up by default.
# 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="34.0.0",
target_sdk_version="34",
min_sdk_version="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)