build_tc.py now installs executables and libraries in install/ dir.

PRESUBMIT=passed
R=raymes,bjanakiraman
DELTA=35  (22 added, 3 deleted, 10 changed)
OCL=45054-p2
RCL=45097-p2
RDATE=2010/11/08 17:45:49


P4 change: 42605664
diff --git a/v14/build_tc.py b/v14/build_tc.py
index ae99e9a..cacd9e3 100755
--- a/v14/build_tc.py
+++ b/v14/build_tc.py
@@ -23,16 +23,17 @@
   """The main function."""
   parser = optparse.OptionParser()
   parser.add_option("-c", "--chromeos_root", dest="chromeos_root",
+                    default="../..",
                     help="ChromeOS root checkout directory.")
   parser.add_option("-t", "--toolchain_root", dest="toolchain_root",
                     help="Toolchain root directory.")
-  parser.add_option("-b", "--board", dest="board",
+  parser.add_option("-b", "--board", dest="board", default="x86-generic",
                     help="board is the argument to the setup_board command.")
-  parser.add_option("-C", "--clean", dest="clean",
-                    action="store_true", default=False,
+  parser.add_option("-C", "--clean", dest="clean", default=False,
+                    action="store_true",
                     help="Uninstall the toolchain.")
-  parser.add_option("-f", "--force", dest="force",
-                    action="store_true", default=False,
+  parser.add_option("-f", "--force", dest="force", default=False,
+                    action="store_true",
                     help="Do an uninstall/install cycle.")
   parser.add_option("-i", "--incremental", dest="incremental",
                     help="The toolchain component that should be "
@@ -48,9 +49,6 @@
     parser.print_help()
     sys.exit()
 
-  if options.chromeos_root is None:
-    options.chromeos_root = "../.."
-
   portage_flags = ""
   if options.binary == True:
     # FIXME(asharif): This should be using --usepkg but that was not working.
@@ -69,15 +67,27 @@
   version_number = utils.GetRoot(rootdir)[1]
   version_dir = "/home/${USER}/toolchain_root/" + version_number
   env += CreateEnvVarString(" PORT_LOGDIR", version_dir + "/logs")
-  env += CreateEnvVarString(" PKGDIR", version_dir + "/install")
+  env += CreateEnvVarString(" PKGDIR", version_dir + "/pkgs")
   env += CreateEnvVarString(" PORTAGE_BINHOST", version_dir +
                             "/cross/" + target)
   env += CreateEnvVarString(" PORTAGE_TMPDIR", version_dir + "/objects")
+  retval = 0
   if options.force == True:
-    BuildTC(options.chromeos_root, options.toolchain_root, env, target,
-            True, options.incremental, portage_flags)
-  BuildTC(options.chromeos_root, options.toolchain_root, env, target,
-          options.clean, options.incremental, portage_flags)
+    retval = BuildTC(options.chromeos_root, options.toolchain_root, env,
+                     target, True, options.incremental, portage_flags)
+    utils.AssertTrue(retval == 0, "Build toolchain failed!")
+  retval = BuildTC(options.chromeos_root, options.toolchain_root, env,
+                   target, options.clean, options.incremental, portage_flags)
+  utils.AssertTrue(retval == 0, "Build toolchain failed!")
+
+  if options.incremental is None and not options.clean:
+    install_dir = rootdir + "/install"
+    package_dir = (rootdir + "/pkgs/cross/" + target + "/" +
+                   "cross-" + target + "/")
+    retval = InstallTC(package_dir, install_dir)
+    utils.AssertTrue(retval == 0, "Installation of the toolchain failed!")
+
+  return retval
 
 
 def CreateCrossdevPortageFlags(portage_flags):
@@ -96,6 +106,14 @@
   return "\\\"" + string + "\\\""
 
 
+def InstallTC(package_dir, install_dir):
+  command = ("mkdir -p " + install_dir + ";")
+  command += ("for f in " + package_dir + "*; do tar xvf $f -C " + install_dir +
+              "; done")
+  retval = utils.RunCommand(command)
+  return retval
+
+
 def BuildTC(chromeos_root, toolchain_root, env, target, uninstall,
             incremental_component, portage_flags):
   """Build the toolchain."""
@@ -140,3 +158,4 @@
 
 if __name__ == "__main__":
   Main()
+