diff --git a/etc/shell.nix b/etc/shell.nix index 3c55c1ab491..603e5ed493e 100644 --- a/etc/shell.nix +++ b/etc/shell.nix @@ -1,6 +1,9 @@ # This provides a shell with all the necesarry packages required to run mach and build servo # NOTE: This does not work offline or for nix-build +{ + buildAndroid ? false +}: with import (builtins.fetchTarball { url = "https://github.com/NixOS/nixpkgs/archive/46ae0210ce163b3cba6c7da08840c1d63de9c701.tar.gz"; }) { @@ -11,8 +14,8 @@ with import (builtins.fetchTarball { })) ]; config = { - android_sdk.accept_license = true; - allowUnfree = true; + android_sdk.accept_license = buildAndroid; + allowUnfree = buildAndroid; }; }; let @@ -134,22 +137,16 @@ stdenv.mkDerivation rec { RUSTC_BOOTSTRAP = "crown"; })) - - # for android builds - # TODO: make this optional - openjdk17_headless - androidSdk ] ++ (lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.AppKit + ]) ++ (lib.optionals buildAndroid [ + # for android builds + openjdk17_headless + androidSdk ]); LIBCLANG_PATH = llvmPackages.clang-unwrapped.lib + "/lib/"; - # Required by ./mach build --android - ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk"; - ANDROID_NDK_ROOT = "${ANDROID_SDK_ROOT}/ndk-bundle"; - GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${ANDROID_SDK_ROOT}/build-tools/${buildToolsVersion}/aapt2"; - # Allow cargo to download crates SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt"; @@ -217,4 +214,9 @@ stdenv.mkDerivation rec { export RUSTUP_HOME=$repo_root/.rustup fi ''; +} // lib.optionalAttrs buildAndroid { + # Required by ./mach build --android + ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk"; + ANDROID_NDK_ROOT = "${ANDROID_SDK_ROOT}/ndk-bundle"; + GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${ANDROID_SDK_ROOT}/build-tools/${buildToolsVersion}/aapt2"; } diff --git a/mach b/mach index e71ae1489f9..12c5459542e 100755 --- a/mach +++ b/mach @@ -36,10 +36,11 @@ if __name__ == '__main__': import subprocess from shlex import quote mach_dir = os.path.abspath(os.path.dirname(__file__)) + build_android_args = ['--arg', 'buildAndroid', 'true'] if 'SERVO_ANDROID_BUILD' in os.environ else [] print('NOTE: Entering nix-shell etc/shell.nix') try: # sys argv already contains the ./mach part, so we just need to pass it as-is - result = subprocess.run(['nix-shell', mach_dir + '/etc/shell.nix', '--run', ' '.join(map(quote, sys.argv))]) + result = subprocess.run(['nix-shell', mach_dir + '/etc/shell.nix'] + build_android_args + ['--run', ' '.join(map(quote, sys.argv))]) sys.exit(result.returncode) except KeyboardInterrupt: sys.exit(0) diff --git a/python/servo/command_base.py b/python/servo/command_base.py index 9aed6b2af8e..63b61b07bf0 100644 --- a/python/servo/command_base.py +++ b/python/servo/command_base.py @@ -537,6 +537,9 @@ class CommandBase(object): if os.path.isdir(default): env.setdefault(f"ANDROID_{kind.upper()}_ROOT", default) + if "IN_NIX_SHELL" in env and ("ANDROID_NDK_ROOT" not in env or "ANDROID_SDK_ROOT" not in env): + print("Please set SERVO_ANDROID_BUILD=1 when starting the Nix shell to include the Android SDK/NDK.") + sys.exit(1) if "ANDROID_NDK_ROOT" not in env: print("Please set the ANDROID_NDK_ROOT environment variable.") sys.exit(1)