aboutsummaryrefslogtreecommitdiff
path: root/deprecated/build_chrome_browser.py
diff options
context:
space:
mode:
Diffstat (limited to 'deprecated/build_chrome_browser.py')
-rwxr-xr-xdeprecated/build_chrome_browser.py247
1 files changed, 247 insertions, 0 deletions
diff --git a/deprecated/build_chrome_browser.py b/deprecated/build_chrome_browser.py
new file mode 100755
index 00000000..c3b78870
--- /dev/null
+++ b/deprecated/build_chrome_browser.py
@@ -0,0 +1,247 @@
+#!/usr/bin/env python2
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Script to checkout the ChromeOS source.
+
+This script sets up the ChromeOS source in the given directory, matching a
+particular release of ChromeOS.
+"""
+
+from __future__ import print_function
+
+__author__ = 'raymes@google.com (Raymes Khoury)'
+
+import argparse
+import os
+import sys
+
+from cros_utils import command_executer
+from cros_utils import logger
+from cros_utils import misc
+
+
+def Usage(parser, message):
+ print('ERROR: %s' % message)
+ parser.print_help()
+ sys.exit(0)
+
+
+def Main(argv):
+ """Build Chrome browser."""
+
+ cmd_executer = command_executer.GetCommandExecuter()
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ '--chromeos_root',
+ dest='chromeos_root',
+ help='Target directory for ChromeOS installation.')
+ parser.add_argument('--version', dest='version')
+ parser.add_argument(
+ '--clean',
+ dest='clean',
+ default=False,
+ action='store_true',
+ help=('Clean the /var/cache/chromeos-chrome/'
+ 'chrome-src/src/out_$board dir'))
+ parser.add_argument(
+ '--env', dest='env', default='', help='Use the following env')
+ parser.add_argument(
+ '--ebuild_version',
+ dest='ebuild_version',
+ help='Use this ebuild instead of the default one.')
+ parser.add_argument(
+ '--cflags',
+ dest='cflags',
+ default='',
+ help='CFLAGS for the ChromeOS packages')
+ parser.add_argument(
+ '--cxxflags',
+ dest='cxxflags',
+ default='',
+ help='CXXFLAGS for the ChromeOS packages')
+ parser.add_argument(
+ '--ldflags',
+ dest='ldflags',
+ default='',
+ help='LDFLAGS for the ChromeOS packages')
+ parser.add_argument(
+ '--board', dest='board', help='ChromeOS target board, e.g. x86-generic')
+ parser.add_argument(
+ '--no_build_image',
+ dest='no_build_image',
+ default=False,
+ action='store_true',
+ help=('Skip build image after building browser.'
+ 'Defaults to False.'))
+ parser.add_argument(
+ '--label',
+ dest='label',
+ help='Optional label to apply to the ChromeOS image.')
+ parser.add_argument(
+ '--build_image_args',
+ default='',
+ dest='build_image_args',
+ help='Optional arguments to build_image.')
+ parser.add_argument(
+ '--cros_workon',
+ dest='cros_workon',
+ help='Build using external source tree.')
+ parser.add_argument(
+ '--dev',
+ dest='dev',
+ default=False,
+ action='store_true',
+ help=('Build a dev (eg. writable/large) image. '
+ 'Defaults to False.'))
+ parser.add_argument(
+ '--debug',
+ dest='debug',
+ default=False,
+ action='store_true',
+ help=('Build chrome browser using debug mode. '
+ 'This option implies --dev. Defaults to false.'))
+ parser.add_argument(
+ '--verbose',
+ dest='verbose',
+ default=False,
+ action='store_true',
+ help='Build with verbose information.')
+
+ options = parser.parse_args(argv)
+
+ if options.chromeos_root is None:
+ Usage(parser, '--chromeos_root must be set')
+
+ if options.board is None:
+ Usage(parser, '--board must be set')
+
+ if options.version is None:
+ logger.GetLogger().LogOutput('No Chrome version given so '
+ 'using the default checked in version.')
+ chrome_version = ''
+ else:
+ chrome_version = 'CHROME_VERSION=%s' % options.version
+
+ if options.dev and options.no_build_image:
+ logger.GetLogger().LogOutput(
+ "\"--dev\" is meaningless if \"--no_build_image\" is given.")
+
+ if options.debug:
+ options.dev = True
+
+ options.chromeos_root = misc.CanonicalizePath(options.chromeos_root)
+
+ unmask_env = 'ACCEPT_KEYWORDS=~*'
+ if options.ebuild_version:
+ ebuild_version = '=%s' % options.ebuild_version
+ options.env = '%s %s' % (options.env, unmask_env)
+ else:
+ ebuild_version = 'chromeos-chrome'
+
+ if options.cros_workon and not (
+ os.path.isdir(options.cros_workon) and os.path.exists(
+ os.path.join(options.cros_workon, 'src/chromeos/BUILD.gn'))):
+ Usage(parser, '--cros_workon must be a valid chromium browser checkout.')
+
+ if options.verbose:
+ options.env = misc.MergeEnvStringWithDict(
+ options.env, {'USE': 'chrome_internal verbose'})
+ else:
+ options.env = misc.MergeEnvStringWithDict(options.env,
+ {'USE': 'chrome_internal'})
+ if options.debug:
+ options.env = misc.MergeEnvStringWithDict(options.env,
+ {'BUILDTYPE': 'Debug'})
+
+ if options.clean:
+ misc.RemoveChromeBrowserObjectFiles(options.chromeos_root, options.board)
+
+ chrome_origin = 'SERVER_SOURCE'
+ if options.cros_workon:
+ chrome_origin = 'LOCAL_SOURCE'
+ command = 'cros_workon --board={0} start chromeos-chrome'.format(
+ options.board)
+ ret = cmd_executer.ChrootRunCommandWOutput(options.chromeos_root, command)
+
+ # cros_workon start returns non-zero if chromeos-chrome is already a
+ # cros_workon package.
+ if ret[0] and ret[2].find(
+ 'WARNING : Already working on chromeos-base/chromeos-chrome') == -1:
+ logger.GetLogger().LogFatal('cros_workon chromeos-chrome failed.')
+
+ # Return value is non-zero means we do find the "Already working on..."
+ # message, keep the information, so later on we do not revert the
+ # cros_workon status.
+ cros_workon_keep = (ret[0] != 0)
+
+ # Emerge the browser
+ emerge_browser_command = ('CHROME_ORIGIN={0} {1} '
+ 'CFLAGS="$(portageq-{2} envvar CFLAGS) {3}" '
+ 'LDFLAGS="$(portageq-{2} envvar LDFLAGS) {4}" '
+ 'CXXFLAGS="$(portageq-{2} envvar CXXFLAGS) {5}" '
+ '{6} emerge-{2} --buildpkg {7}').format(
+ chrome_origin, chrome_version, options.board,
+ options.cflags, options.ldflags,
+ options.cxxflags, options.env, ebuild_version)
+
+ cros_sdk_options = ''
+ if options.cros_workon:
+ cros_sdk_options = '--chrome_root={0}'.format(options.cros_workon)
+
+ ret = cmd_executer.ChrootRunCommand(
+ options.chromeos_root,
+ emerge_browser_command,
+ cros_sdk_options=cros_sdk_options)
+
+ logger.GetLogger().LogFatalIf(ret, 'build_packages failed')
+
+ if options.cros_workon and not cros_workon_keep:
+ command = 'cros_workon --board={0} stop chromeos-chrome'.format(
+ options.board)
+ ret = cmd_executer.ChrootRunCommand(options.chromeos_root, command)
+ # cros_workon failed, not a fatal one, just report it.
+ if ret:
+ print('cros_workon stop chromeos-chrome failed.')
+
+ if options.no_build_image:
+ return ret
+
+ # Finally build the image
+ ret = cmd_executer.ChrootRunCommand(options.chromeos_root,
+ '{0} {1} {2} {3}'.format(
+ unmask_env, options.env,
+ misc.GetBuildImageCommand(
+ options.board, dev=options.dev),
+ options.build_image_args))
+
+ logger.GetLogger().LogFatalIf(ret, 'build_image failed')
+
+ flags_file_name = 'chrome_flags.txt'
+ flags_file_path = '{0}/src/build/images/{1}/latest/{2}'.format(
+ options.chromeos_root, options.board, flags_file_name)
+ flags_file = open(flags_file_path, 'wb')
+ flags_file.write('CFLAGS={0}\n'.format(options.cflags))
+ flags_file.write('CXXFLAGS={0}\n'.format(options.cxxflags))
+ flags_file.write('LDFLAGS={0}\n'.format(options.ldflags))
+ flags_file.close()
+
+ if options.label:
+ image_dir_path = '{0}/src/build/images/{1}/latest'.format(
+ options.chromeos_root, options.board)
+ real_image_dir_path = os.path.realpath(image_dir_path)
+ command = 'ln -sf -T {0} {1}/{2}'.format(
+ os.path.basename(real_image_dir_path),\
+ os.path.dirname(real_image_dir_path),\
+ options.label)
+
+ ret = cmd_executer.RunCommand(command)
+ logger.GetLogger().LogFatalIf(
+ ret, 'Failed to apply symlink label %s' % options.label)
+
+ return ret
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv[1:])
+ sys.exit(retval)