aboutsummaryrefslogtreecommitdiff
path: root/build_chromeos.py
diff options
context:
space:
mode:
authorLuis Lozano <llozano@chromium.org>2013-03-15 14:44:13 -0700
committerChromeBot <chrome-bot@google.com>2013-03-15 15:51:37 -0700
commitf81680c018729fd4499e1e200d04b48c4b90127c (patch)
tree940608da8374604b82edfdb2d7df55d065f05d4c /build_chromeos.py
parent2296ee0b914aba5bba07becab4ff68884ce9b8a5 (diff)
downloadtoolchain-utils-f81680c018729fd4499e1e200d04b48c4b90127c.tar.gz
Cleaned up directory after copy of tools from perforce directory
Got rid of stale copies of some tools like "crosperf" and moved all files under v14 directory (that came from perforce) into the top directory. BUG=None TEST=None Change-Id: I408d17a36ceb00e74db71403d2351fd466a14f8e Reviewed-on: https://gerrit-int.chromium.org/33887 Tested-by: Luis Lozano <llozano@chromium.org> Reviewed-by: Yunlian Jiang <yunlian@google.com> Commit-Queue: Luis Lozano <llozano@chromium.org>
Diffstat (limited to 'build_chromeos.py')
-rwxr-xr-xbuild_chromeos.py262
1 files changed, 262 insertions, 0 deletions
diff --git a/build_chromeos.py b/build_chromeos.py
new file mode 100755
index 00000000..483e44a8
--- /dev/null
+++ b/build_chromeos.py
@@ -0,0 +1,262 @@
+#!/usr/bin/python
+#
+# 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.
+"""
+
+__author__ = ("asharif@google.com (Ahmad Sharif) "
+ "llozano@google.com (Luis Lozano) "
+ "raymes@google.com (Raymes Khoury) "
+ "shenhan@google.com (Han Shen)")
+
+import optparse
+import os
+import sys
+
+import tc_enter_chroot
+from utils import command_executer
+from utils import logger
+from utils import misc
+
+
+def Usage(parser, message):
+ print "ERROR: " + message
+ parser.print_help()
+ sys.exit(0)
+
+
+def Main(argv):
+ """Build ChromeOS."""
+ # Common initializations
+ cmd_executer = command_executer.GetCommandExecuter()
+
+ parser = optparse.OptionParser()
+ parser.add_option("--chromeos_root", dest="chromeos_root",
+ help="Target directory for ChromeOS installation.")
+ parser.add_option("--clobber_chroot", dest="clobber_chroot",
+ action="store_true", help=
+ "Delete the chroot and start fresh", default=False)
+ parser.add_option("--clobber_board", dest="clobber_board",
+ action="store_true",
+ help="Delete the board and start fresh", default=False)
+ parser.add_option("--rebuild", dest="rebuild",
+ action="store_true",
+ help="Rebuild all board packages except the toolchain.",
+ default=False)
+ parser.add_option("--cflags", dest="cflags", default="",
+ help="CFLAGS for the ChromeOS packages")
+ parser.add_option("--cxxflags", dest="cxxflags", default="",
+ help="CXXFLAGS for the ChromeOS packages")
+ parser.add_option("--ldflags", dest="ldflags", default="",
+ help="LDFLAGS for the ChromeOS packages")
+ parser.add_option("--board", dest="board",
+ help="ChromeOS target board, e.g. x86-generic")
+ parser.add_option("--package", dest="package",
+ help="The package needs to be built")
+ parser.add_option("--label", dest="label",
+ help="Optional label symlink to point to build dir.")
+ parser.add_option("--dev", dest="dev", default=False, action="store_true",
+ help=("Make the final image in dev mode (eg writable, "
+ "more space on image). Defaults to False."))
+ parser.add_option("--debug", dest="debug", default=False, action="store_true",
+ help=("Optional. Build chrome browser with \"-g -O0\". "
+ "Notice, this also turns on \'--dev\'. "
+ "Defaults to False."))
+ parser.add_option("--env",
+ dest="env",
+ default="",
+ help="Env to pass to build_packages.")
+ parser.add_option("--vanilla", dest="vanilla",
+ default=False,
+ action="store_true",
+ help="Use default ChromeOS toolchain.")
+
+ options = parser.parse_args(argv[1:])[0]
+
+ 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.debug:
+ options.dev = True
+
+ build_packages_env = options.env
+ if build_packages_env.find('EXTRA_BOARD_FLAGS=') != -1:
+ logger.GetLogger().LogFatal(
+ ('Passing "EXTRA_BOARD_FLAGS" in "--env" is not supported. '
+ 'This flags is used internally by this script. '
+ 'Contact the author for more detail.'))
+
+ if options.rebuild == True:
+ build_packages_env += " EXTRA_BOARD_FLAGS=-e"
+ # EXTRA_BOARD_FLAGS=-e should clean up the object files for the chrome
+ # browser but it doesn't. So do it here.
+ misc.RemoveChromeBrowserObjectFiles(options.chromeos_root, options.board)
+
+ build_packages_env = misc.MergeEnvStringWithDict(build_packages_env,
+ {"USE": "chrome_internal"})
+
+ options.chromeos_root = os.path.expanduser(options.chromeos_root)
+
+ build_packages_command = misc.GetBuildPackagesCommand(
+ board=options.board, usepkg=False, debug=options.debug)
+
+ if options.package:
+ build_packages_command += " {0}".format(options.package)
+
+ build_image_command = misc.GetBuildImageCommand(options.board, options.dev)
+
+ if options.vanilla == True:
+ command = misc.GetSetupBoardCommand(options.board,
+ usepkg=False,
+ force=options.clobber_board)
+ command += "; " + build_packages_env + " " + build_packages_command
+ command += "&& " + build_packages_env + " " + build_image_command
+ ret = cmd_executer.ChrootRunCommand(options.chromeos_root, command)
+ return ret
+
+ # Setup board
+ if not os.path.isdir(options.chromeos_root + "/chroot/build/"
+ + options.board) or options.clobber_board:
+ # Run build_tc.py from binary package
+ rootdir = misc.GetRoot(argv[0])[0]
+ version_number = misc.GetRoot(rootdir)[1]
+ ret = cmd_executer.ChrootRunCommand(
+ options.chromeos_root,
+ misc.GetSetupBoardCommand(options.board,
+ force=options.clobber_board))
+ logger.GetLogger().LogFatalIf(ret, "setup_board failed")
+ else:
+ logger.GetLogger().LogOutput("Did not setup_board "
+ "because it already exists")
+
+ if options.debug:
+ # Perform 2-step build_packages to build a debug chrome browser.
+
+ # Firstly, build everything that chromeos-chrome depends on normally.
+ if options.rebuild == True:
+ # Give warning about "--rebuild" and "--debug". Under this combination,
+ # only dependencies of "chromeos-chrome" get rebuilt.
+ logger.GetLogger().LogWarning(
+ "\"--rebuild\" does not correctly re-build every package when "
+ "\"--debug\" is enabled. ")
+
+ # Replace EXTRA_BOARD_FLAGS=-e with "-e --onlydeps"
+ build_packages_env = build_packages_env.replace(
+ 'EXTRA_BOARD_FLAGS=-e', 'EXTRA_BOARD_FLAGS=\"-e --onlydeps\"')
+ else:
+ build_packages_env += ' EXTRA_BOARD_FLAGS=--onlydeps'
+
+ ret = cmd_executer.ChrootRunCommand(
+ options.chromeos_root,
+ "CFLAGS=\"$(portageq-%s envvar CFLAGS) %s\" "
+ "CXXFLAGS=\"$(portageq-%s envvar CXXFLAGS) %s\" "
+ "LDFLAGS=\"$(portageq-%s envvar LDFLAGS) %s\" "
+ "CHROME_ORIGIN=SERVER_SOURCE "
+ "%s "
+ "%s "
+ "chromeos-chrome"
+ % (options.board, options.cflags,
+ options.board, options.cxxflags,
+ options.board, options.ldflags,
+ build_packages_env,
+ build_packages_command))
+
+ logger.GetLogger().LogFatalIf(\
+ ret, "build_packages failed while trying to build chromeos-chrome deps.")
+
+ # Secondly, build chromeos-chrome using debug mode.
+ # Replace '--onlydeps' with '--nodeps'.
+ if options.rebuild == True:
+ build_packages_env = build_packages_env.replace(
+ 'EXTRA_BOARD_FLAGS=\"-e --onlydeps\"', 'EXTRA_BOARD_FLAGS=--nodeps')
+ else:
+ build_packages_env = build_packages_env.replace(
+ 'EXTRA_BOARD_FLAGS=--onlydeps', 'EXTRA_BOARD_FLAGS=--nodeps')
+ ret = cmd_executer.ChrootRunCommand(
+ options.chromeos_root,
+ "CFLAGS=\"$(portageq-%s envvar CFLAGS) %s\" "
+ "CXXFLAGS=\"$(portageq-%s envvar CXXFLAGS) %s\" "
+ "LDFLAGS=\"$(portageq-%s envvar LDFLAGS) %s\" "
+ "CHROME_ORIGIN=SERVER_SOURCE BUILDTYPE=Debug "
+ "%s "
+ "%s "
+ "chromeos-chrome"
+ % (options.board, options.cflags,
+ options.board, options.cxxflags,
+ options.board, options.ldflags,
+ build_packages_env,
+ build_packages_command))
+ logger.GetLogger().LogFatalIf(
+ ret, "build_packages failed while trying to build debug chromeos-chrome.")
+
+ # Now, we have built chromeos-chrome and all dependencies.
+ # Finally, remove '-e' from EXTRA_BOARD_FLAGS,
+ # otherwise, chromeos-chrome gets rebuilt.
+ build_packages_env = build_packages_env.replace(\
+ 'EXTRA_BOARD_FLAGS=--nodeps', '')
+
+ # Up to now, we have a debug built chromos-chrome browser.
+ # Fall through to build the rest of the world.
+
+ # Build packages
+ ret = cmd_executer.ChrootRunCommand(
+ options.chromeos_root,
+ "CFLAGS=\"$(portageq-%s envvar CFLAGS) %s\" "
+ "CXXFLAGS=\"$(portageq-%s envvar CXXFLAGS) %s\" "
+ "LDFLAGS=\"$(portageq-%s envvar LDFLAGS) %s\" "
+ "CHROME_ORIGIN=SERVER_SOURCE "
+ "%s "
+ "%s"
+ % (options.board, options.cflags,
+ options.board, options.cxxflags,
+ options.board, options.ldflags,
+ build_packages_env,
+ build_packages_command))
+
+ logger.GetLogger().LogFatalIf(ret, "build_packages failed")
+ if options.package:
+ return 0
+ # Build image
+ ret = cmd_executer.ChrootRunCommand(options.chromeos_root,
+ build_packages_env + " " +
+ build_image_command)
+
+ logger.GetLogger().LogFatalIf(ret, "build_image failed")
+
+ flags_file_name = "flags.txt"
+ flags_file_path = ("%s/src/build/images/%s/latest/%s" %
+ (options.chromeos_root,
+ options.board,
+ flags_file_name))
+ flags_file = open(flags_file_path, "wb")
+ flags_file.write("CFLAGS=%s\n" % options.cflags)
+ flags_file.write("CXXFLAGS=%s\n" % options.cxxflags)
+ flags_file.write("LDFLAGS=%s\n" % options.ldflags)
+ flags_file.close()
+
+ if options.label:
+ image_dir_path = ("%s/src/build/images/%s/latest" %
+ (options.chromeos_root,
+ options.board))
+ real_image_dir_path = os.path.realpath(image_dir_path)
+ command = ("ln -sf -T %s %s/%s" %
+ (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)
+ sys.exit(retval)