Support autoninja -o/--offline to disable goma

It is sometimes helpful to do a full build of Chrome using goma while
online and then do incremental builds without goma while offline or with
poor network bandwidth. Turning off goma in gn args triggers a full
rebuild but the GOMA_DISABLED environment variable can be used to
disable goma without triggering a rebuild.

In order to make this feature easier to discover and use this change
adds support for -o/--offline to autoninja. autoninja -h will mention
this flag and autoninja.bat/autoninja.py handle it appropriately. This
means setting the environment variable in autoninja.bat, and using it
to adjust the -j value and stripping it out in autoninja.py.

The bash script that wraps autoninja.py on Linux and OSX did not need
updating because the Python script can emit 'GOMA_DISABLED=1 ninja ...'
and this is executed by bash.

This was produced during pair programming with jessemckenna@

Bug: b/172039612
Change-Id: Ifcfbc598ac20f23e5fe013e02979b5b8c2851b01
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/2510818
Auto-Submit: Bruce Dawson <brucedawson@chromium.org>
Commit-Queue: Dirk Pranke <dpranke@google.com>
Reviewed-by: Dirk Pranke <dpranke@google.com>
changes/18/2510818/5
Bruce Dawson 5 years ago committed by LUCI CQ
parent 9396c2b064
commit 655afebfcd

@ -14,19 +14,30 @@ REM to see how quickly process creation is happening - often a critical clue on
REM Windows. The trailing space is intentional. REM Windows. The trailing space is intentional.
if "%NINJA_SUMMARIZE_BUILD%" == "1" set NINJA_STATUS=[%%r processes, %%f/%%t @ %%o/s : %%es ] if "%NINJA_SUMMARIZE_BUILD%" == "1" set NINJA_STATUS=[%%r processes, %%f/%%t @ %%o/s : %%es ]
set scriptdir=%~dp0
:loop
IF NOT "%1"=="" (
@rem Tell goma to not do network compiles.
IF "%1"=="--offline" SET GOMA_DISABLED=1
IF "%1"=="-o" SET GOMA_DISABLED=1
SHIFT
GOTO :loop
)
REM Execute whatever is printed by autoninja.py. REM Execute whatever is printed by autoninja.py.
REM Also print it to reassure that the right settings are being used. REM Also print it to reassure that the right settings are being used.
FOR /f "usebackq tokens=*" %%a in (`vpython %~dp0autoninja.py "%*"`) do echo %%a & %%a FOR /f "usebackq tokens=*" %%a in (`vpython %scriptdir%autoninja.py "%*"`) do echo %%a & %%a
@if errorlevel 1 goto buildfailure @if errorlevel 1 goto buildfailure
REM Use call to invoke vpython script here, because we use vpython via vpython.bat. REM Use call to invoke vpython script here, because we use vpython via vpython.bat.
@if "%NINJA_SUMMARIZE_BUILD%" == "1" call vpython.bat %~dp0post_build_ninja_summary.py %* @if "%NINJA_SUMMARIZE_BUILD%" == "1" call vpython.bat %scriptdir%post_build_ninja_summary.py %*
@call vpython.bat %~dp0ninjalog_uploader_wrapper.py --cmdline %* @call vpython.bat %scriptdir%ninjalog_uploader_wrapper.py --cmdline %*
exit /b exit /b
:buildfailure :buildfailure
@call vpython.bat %~dp0ninjalog_uploader_wrapper.py --cmdline %* @call vpython.bat %scriptdir%ninjalog_uploader_wrapper.py --cmdline %*
REM Return an error code of 1 so that if a developer types: REM Return an error code of 1 so that if a developer types:
REM "autoninja chrome && chrome" then chrome won't run if the build fails. REM "autoninja chrome && chrome" then chrome won't run if the build fails.

@ -30,6 +30,7 @@ SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
# The -t tools are incompatible with -j # The -t tools are incompatible with -j
t_specified = False t_specified = False
j_specified = False j_specified = False
offline = False
output_dir = '.' output_dir = '.'
input_args = sys.argv input_args = sys.argv
# On Windows the autoninja.bat script passes along the arguments enclosed in # On Windows the autoninja.bat script passes along the arguments enclosed in
@ -56,6 +57,15 @@ for index, arg in enumerate(input_args[1:]):
elif arg.startswith('-C'): elif arg.startswith('-C'):
# Support -Cout/Default # Support -Cout/Default
output_dir = arg[2:] output_dir = arg[2:]
elif arg == '-o' or arg == '--offline':
offline = True
elif arg == '-h':
print('autoninja: Use -o/--offline to temporary disable goma.',
file=sys.stderr)
print(file=sys.stderr)
# Strip -o/--offline so ninja doesn't see them.
input_args = [ arg for arg in input_args if arg != '-o' and arg != '--offline']
use_remote_build = False use_remote_build = False
@ -92,7 +102,7 @@ elif os.path.exists(os.path.join(output_dir, 'rules.ninja')):
# for each compile step. Checking this environment variable ensures that # for each compile step. Checking this environment variable ensures that
# autoninja uses an appropriate -j value in this situation. # autoninja uses an appropriate -j value in this situation.
goma_disabled_env = os.environ.get('GOMA_DISABLED', '0').lower() goma_disabled_env = os.environ.get('GOMA_DISABLED', '0').lower()
if goma_disabled_env in ['true', 't', 'yes', 'y', '1']: if offline or goma_disabled_env in ['true', 't', 'yes', 'y', '1']:
use_remote_build = False use_remote_build = False
# Specify ninja.exe on Windows so that ninja.bat can call autoninja and not # Specify ninja.exe on Windows so that ninja.bat can call autoninja and not
@ -150,4 +160,10 @@ for i in range(len(args)):
if os.environ.get('NINJA_SUMMARIZE_BUILD', '0') == '1': if os.environ.get('NINJA_SUMMARIZE_BUILD', '0') == '1':
args += ['-d', 'stats'] args += ['-d', 'stats']
print(' '.join(args)) if offline and not sys.platform.startswith('win'):
# Tell goma to do local compiles. On Windows this environment variable is set
# by the wrapper batch file.
print('GOMA_DISABLED=1 ' + ' '.join(args))
else:
print(' '.join(args))

Loading…
Cancel
Save