Updated logging to allow it to be printed to the console as well as
file. Updated build_chromeos.py to use logging properly.

PRESUBMIT=passed
R=asharif,bjanakiraman
DELTA=232  (183 added, 35 deleted, 14 changed)
OCL=44971-p2
RCL=45003-p2
RDATE=2010/11/03 17:32:32


P4 change: 42605541
diff --git a/v14/build_chromeos.py b/v14/build_chromeos.py
new file mode 100755
index 0000000..747376b
--- /dev/null
+++ b/v14/build_chromeos.py
@@ -0,0 +1,136 @@
+#!/usr/bin/python2.6
+#
+# 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__ = "raymes@google.com (Raymes Khoury)"
+
+import optparse
+import os
+import sys
+from utils import utils
+
+
+def Usage(parser, message):
+  print "ERROR: " + message
+  parser.print_help()
+  sys.exit(0)
+
+
+def ExecuteCommandInChroot(chromeos_root, toolchain_root, command,
+                           return_output=False):
+  commands = []
+  tc_enter_chroot = (os.path.dirname(os.path.abspath(__file__)) +
+                     "/tc-enter-chroot.sh")
+  commands.append("%s --chromeos_root=%s --toolchain_root=%s -- %s"
+                  % (tc_enter_chroot, chromeos_root, toolchain_root, command))
+  return utils.RunCommands(commands, return_output)
+
+
+def StoreFile(filename, contents):
+  utils.RunCommand("echo '%s' > %s" % (contents, filename))
+
+
+def Main():
+  """Build ChromeOS."""
+  # Common initializations
+  (rootdir, basename) = utils.GetRoot(sys.argv[0])
+  utils.InitLogger(rootdir, basename)
+
+  parser = optparse.OptionParser()
+  parser.add_option("--chromeos_root", dest="chromeos_root",
+                    help="Target directory for ChromeOS installation.")
+  parser.add_option("--toolchain_root", dest="toolchain_root",
+                    help="The gcctools directory of your P4 checkout.")
+  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("--cflags", dest="cflags",
+                    help="CFLAGS for the ChromeOS packages")
+  parser.add_option("--cxxflags", dest="cxxflags",
+                    help="CXXFLAGS for the ChromeOS packages")
+  parser.add_option("--ldflags", dest="ldflags",
+                    help="LDFLAGS for the ChromeOS packages")
+  parser.add_option("--board", dest="board",
+                    help="ChromeOS target board, e.g. x86-generic")
+
+  options = parser.parse_args()[0]
+
+  if options.chromeos_root is None:
+    Usage(parser, "--chromeos_root must be set")
+
+  if options.toolchain_root is None:
+    Usage(parser, "--toolchain_root must be set")
+
+  if options.board is None:
+    Usage(parser, "--board must be set")
+
+  # Make chroot
+  commands = []
+  commands.append("cd " + options.chromeos_root + "/src/scripts")
+  clobber_chroot = ""
+  if options.clobber_chroot:
+    clobber_chroot = "--replace"
+  commands.append("./make_chroot --fast " + clobber_chroot)
+  utils.RunCommands(commands)
+
+  # Setup board
+  force = ""
+  if options.clobber_board:
+    force = "--force"
+  ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
+                         "FEATURES=\\\"keepwork noclean\\\" "
+                         "./setup_board --nousepkg --board=%s "
+                         "%s"
+                         % (options.board, force))
+
+  # Find Chrome browser version
+  chrome_version = (ExecuteCommandInChroot
+                    (options.chromeos_root, options.toolchain_root,
+                     "./chromeos_version.sh | "
+                     "grep CHROME_BUILD", True))
+
+  chrome_version = chrome_version[1].strip().split("=")
+  if len(chrome_version) == 2:
+    chrome_version = chrome_version[1]
+  else:
+    chrome_version = ""
+
+  # Modify make.conf to add CFLAGS/CXXFLAGS/LDFLAGS
+  ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
+                         "mv /build/%s/etc/make.conf "
+                         "/build/%s/etc/make.conf.orig"
+                         % (options.board, options.board))
+  makeconf = ("source /build/%s/etc/make.conf.orig\n"
+              "/CFLAGS=%s\nCXXFLAGS=%s\nLDFLAGS=%s\n" %
+              (options.board, options.cflags,
+               options.cxxflags, options.ldflags))
+  StoreFile("%s/chroot/build/%s/etc/make.conf" %
+            (options.chromeos_root, options.board), makeconf)
+
+  # Build packages
+  ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
+                         "CHROME_ORIGIN=SERVER_SOURCE CHROME_BUILD=%s "
+                         "./build_packages --withdev "
+                         "--board=%s --withtest --withautotest"
+                         % (chrome_version, options.board))
+
+  # Build image
+  ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
+                         "./build_image --board=%s")
+
+  # Mod image for test
+  ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
+                         "./mod_image_for_test --board=%s")
+
+
+if __name__ == "__main__":
+  Main()