Changed ExecuteCommandInChroot to take in extra parameters for additional
mount points.

 Changed the order of parameters to the same function.

Changed build_tc.py to pass --oneshot all the way down to portage.

 Changed tc_enter_chroot.py to take in toolchain_root as an optional parameter.
By default it only mounts the version_dir, which is where it resides.

 Changed uses of ExecuteCommandInChroot to the new order.

 Changed build_benchmarks.py to not take in toolchain_root. It now takes in
--third_party which is the third_party dir where CPU benchmarks reside.

 Changed tc_enter_chroot.py to take in an optional --third_party parameter.
By default it mounts __file__/../../../third_party.

 Changed build_chrome_browser.py to add a flags.txt file in the image dir.

 Fixed a bug in tc_enter_chroot.py (sys.argv[0] was used instead of __file__).

 Fixed handling of command line parameters of build_chrome_browser.py.

 build_benchmarks.py, build_chrome_browser.py, run_tests.py and run_dejagnu.py
now use argv instead of sys.argv.

 build_chromeos.py now adds a file called flags.txt in the build dir of
the image containing the cxxflags, cflags and ldflags used during the build.

 build_chromeos.py now takes an additional optional argument (label) that can be
used to label dirs containing the image.

PRESUBMIT=passed
R=bjanakiraman,raymes
DELTA=191  (104 added, 16 deleted, 71 changed)
OCL=49844-p2
RCL=50076-p2
RDATE=2011/03/16 14:53:04


P4 change: 42618812
diff --git a/v14/automation/clients/jobs_helper.py b/v14/automation/clients/jobs_helper.py
index cd2cbb8..a9a82d2 100755
--- a/v14/automation/clients/jobs_helper.py
+++ b/v14/automation/clients/jobs_helper.py
@@ -98,7 +98,8 @@
 def GetP4BenchmarksDirCommand(p4_snapshot=""):
   p4_port = "perforce2:2666"
   p4_paths = []
-  p4_paths.append(("//depot2/third_party/android_bench/v2_0/...", "gcctools/chromeos/v14/third_party/android_bench/v2_0/..."))
+  p4_paths.append(("//depot2/third_party/android_bench/v2_0/...",
+                   "third_party/android_bench/v2_0/..."))
   p4_revision = 1
   command = GetP4Command(p4_port, p4_paths, p4_revision, p4_checkout_dir, p4_snapshot)
   return command
diff --git a/v14/build_benchmarks.py b/v14/build_benchmarks.py
index 3171160..2d78cec 100755
--- a/v14/build_benchmarks.py
+++ b/v14/build_benchmarks.py
@@ -47,10 +47,10 @@
 
 # Commands to build CPU benchmarks.
 
-CPU_BUILDCMD_CLEAN = "cd /usr/local/toolchain_root/v14/third_party/android_bench/v2_0/CLOSED_SOURCE/%s;\
+CPU_BUILDCMD_CLEAN = "cd /usr/local/toolchain_root/third_party/android_bench/v2_0/CLOSED_SOURCE/%s;\
 python ../../scripts/bench.py --toolchain=/usr/bin --action=clean;"
 
-CPU_BUILDCMD_BUILD = "cd /usr/local/toolchain_root/v14/third_party/android_bench/v2_0/CLOSED_SOURCE/%s;\
+CPU_BUILDCMD_BUILD = "cd /usr/local/toolchain_root/third_party/android_bench/v2_0/CLOSED_SOURCE/%s;\
 python ../../scripts/bench.py --toolchain=/usr/bin --add_cflags=%s --add_ldflags=%s --makeopts=%s --action=build"
 
 
@@ -104,7 +104,9 @@
   parser.add_option("-c", "--chromeos_root", dest="chromeos_root",
                     help="Target directory for ChromeOS installation.")
   parser.add_option("-t", "--toolchain_root", dest="toolchain_root",
-                    help="The gcctools directory of your P4 checkout.")
+                    help="This is obsolete. Do not use.")
+  parser.add_option("-r", "--third_party", dest="third_party",
+                    help="The third_party dir containing android benchmarks.")
   parser.add_option("-C", "--clean", dest="clean", action="store_true",
                     default=False, help="Clean up build."),
   parser.add_option("-B", "--build", dest="build", action="store_true",
@@ -141,12 +143,15 @@
   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")
 
+  if options.toolchain_root:
+    logger.GetLogger().LogWarning("--toolchain_root should not be set")
+
+  options.chromeos_root = os.path.expanduser(options.chromeos_root)
+  options.workdir = os.path.expanduser(options.workdir)
+
   found_err = 0
   retval = 0
   version_dir = utils.GetRoot(argv[0])[0]
@@ -155,14 +160,21 @@
     if re.match('chromeos/cpu', arg):
       comps = re.split('/', arg)
       benchname = comps[2]
+
+      tec_options = []
+      if options.third_party:
+        tec_options.append("--third_party=%s" % options.third_party)
       if options.clean:
-        retval = build_chromeos.ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
-                                              CPU_BUILDCMD_CLEAN % benchname)
+        retval = build_chromeos.ExecuteCommandInChroot(options.chromeos_root,
+                                              CPU_BUILDCMD_CLEAN % benchname,
+                                              tec_options=tec_options
+                                              )
         utils.AssertError(retval == 0, "clean of benchmark %s failed." % arg)
       if options.build:
-        retval = build_chromeos.ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
+        retval = build_chromeos.ExecuteCommandInChroot(options.chromeos_root,
                                               CPU_BUILDCMD_BUILD % (benchname, options.cflags,
-                                              options.ldflags, options.makeopts))
+                                              options.ldflags, options.makeopts),
+                                              tec_options=tec_options)
         utils.AssertError(retval == 0, "Build of benchmark %s failed." % arg)
       if retval == 0 and (options.build or options.only_copy):
         benchdir = ('%s/third_party/android_bench/v2_0/CLOSED_SOURCE/%s' %
diff --git a/v14/build_chrome_browser.py b/v14/build_chrome_browser.py
index 267a182..df6a4a1 100755
--- a/v14/build_chrome_browser.py
+++ b/v14/build_chrome_browser.py
@@ -11,6 +11,7 @@
 __author__ = "raymes@google.com (Raymes Khoury)"
 
 import optparse
+import os
 import sys
 from utils import command_executer
 from utils import logger
@@ -26,7 +27,7 @@
   sys.exit(0)
 
 
-def Main():
+def Main(argv):
   """Build Chrome browser."""
   # Common initializations
   global cmd_executer
@@ -47,8 +48,10 @@
                     help="LDFLAGS for the ChromeOS packages")
   parser.add_option("--board", dest="board",
                     help="ChromeOS target board, e.g. x86-generic")
+  parser.add_option("--label", dest="label",
+                    help="Optional label to apply to the ChromeOS image.")
 
-  options = parser.parse_args()[0]
+  options = parser.parse_args(argv)[0]
 
   if options.chromeos_root is None:
     Usage(parser, "--chromeos_root must be set")
@@ -65,7 +68,7 @@
 
   # Emerge the browser
   ret = (build_chromeos.
-         ExecuteCommandInChroot(options.chromeos_root, None,
+         ExecuteCommandInChroot(options.chromeos_root,
                                 "CHROME_ORIGIN=SERVER_SOURCE %s "
                                 "CFLAGS=\"$(portageq-%s envvar CFLAGS) %s\" "
                                 "LDFLAGS=\"$(portageq-%s envvar LDFLAGS) %s\" "
@@ -79,17 +82,45 @@
 
   # Build image
   ret = (build_chromeos.
-         ExecuteCommandInChroot(options.chromeos_root, None,
+         ExecuteCommandInChroot(options.chromeos_root,
                                 utils.GetBuildImageCommand(options.board)))
 
   utils.AssertTrue(ret == 0, "build_image failed")
 
   # Mod image for test
   ret = (build_chromeos.
-         ExecuteCommandInChroot(options.chromeos_root, None,
+         ExecuteCommandInChroot(options.chromeos_root,
            utils.GetModImageForTestCommand(options.board)))
 
   utils.AssertTrue(ret == 0, "mod_image_for_test failed")
 
+  flags_file_name = "chrome_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)
+    utils.AssertExit(ret == 0,
+                     "Failed to apply symlink label %s" % options.label)
+
+  return ret
+
 if __name__ == "__main__":
-  Main()
+  Main(sys.argv)
diff --git a/v14/build_chromeos.py b/v14/build_chromeos.py
index 4dd57df..1443bdf 100755
--- a/v14/build_chromeos.py
+++ b/v14/build_chromeos.py
@@ -25,34 +25,24 @@
   sys.exit(0)
 
 #TODO(raymes): move this to a common utils file.
-def ExecuteCommandInChroot(chromeos_root, toolchain_root, command,
-                           return_output=False, full_mount=False):
+def ExecuteCommandInChroot(chromeos_root, command, toolchain_root=None,
+                           return_output=False, full_mount=False,
+                           tec_options=[]):
   """Executes a command in the chroot."""
   global cmd_executer
   cmd_executer = command_executer.GetCommandExecuter()
   chromeos_root = os.path.expanduser(chromeos_root)
 
-  if toolchain_root is None:
-    cmd_file = "enter_chroot.cmd"
-    cmd_file_path = chromeos_root + "/src/scripts/" + cmd_file
-    f = open(cmd_file_path, "w")
-    f.write(command)
-    logger.GetLogger().LogCmd(command)
-    f.close()
-    retval = cmd_executer.RunCommand("chmod +x " + cmd_file_path)
-    utils.AssertTrue(retval == 0, "chmod +x failed!")
-    return cmd_executer.RunCommand(chromeos_root +
-                                   "/src/scripts/enter_chroot.sh -- ./%s"
-                                      % cmd_file)
-  else:
+  argv = [os.path.dirname(os.path.abspath(__file__)) + "/tc_enter_chroot.py",
+          "--chromeos_root=" + chromeos_root,
+          command]
+  if toolchain_root:
     toolchain_root = os.path.expanduser(toolchain_root)
-    argv = [os.path.dirname(os.path.abspath(__file__)) + "/tc_enter_chroot.py",
-            "--chromeos_root=" + chromeos_root,
-            "--toolchain_root=" + toolchain_root,
-            "\n" + command]
-    if not full_mount:
-      argv.append("-s")
-    return tc_enter_chroot.Main(argv, return_output)
+    argv.append("--toolchain_root=" + toolchain_root)
+  if not full_mount:
+    argv.append("-s")
+  argv += tec_options
+  return tc_enter_chroot.Main(argv, return_output)
 
 
 def MakeChroot(chromeos_root, clobber_chroot=False):
@@ -97,6 +87,8 @@
                     help="LDFLAGS for the ChromeOS packages")
   parser.add_option("--board", dest="board",
                     help="ChromeOS target board, e.g. x86-generic")
+  parser.add_option("--label", dest="label",
+                    help="Optional label symlink to point to build dir.")
   parser.add_option("--vanilla", dest="vanilla",
                     default=False,
                     action="store_true",
@@ -129,7 +121,7 @@
     command += "; " + build_packages_env + " " + build_packages_command
     command += "&& " + build_image_command
     command += "&& " + mod_image_command
-    ret = ExecuteCommandInChroot(options.chromeos_root, None, command)
+    ret = ExecuteCommandInChroot(options.chromeos_root, command)
     return ret
 
   # Setup board
@@ -138,7 +130,7 @@
     # Run build_tc.py from binary package
     rootdir = utils.GetRoot(argv[0])[0]
     version_number = utils.GetRoot(rootdir)[1]
-    ret = ExecuteCommandInChroot(options.chromeos_root, None,
+    ret = ExecuteCommandInChroot(options.chromeos_root,
                                  utils.GetSetupBoardCommand(options.board,
                                    gcc_version="9999",
                                    binutils_version="9999",
@@ -149,7 +141,7 @@
                                  "because it already exists")
 
   # Build packages
-  ret = ExecuteCommandInChroot(options.chromeos_root, None,
+  ret = ExecuteCommandInChroot(options.chromeos_root,
                                "CFLAGS=\"$(portageq-%s envvar CFLAGS) %s\" "
                                "LDFLAGS=\"$(portageq-%s envvar LDFLAGS) %s\" "
                                "CXXFLAGS=\"$(portageq-%s envvar CXXFLAGS) %s\" "
@@ -165,17 +157,43 @@
   utils.AssertTrue(ret == 0, "build_packages failed")
 
   # Build image
-  ret = ExecuteCommandInChroot(options.chromeos_root, None,
+  ret = ExecuteCommandInChroot(options.chromeos_root,
                                build_image_command)
 
   utils.AssertTrue(ret == 0, "build_image failed")
 
   # Mod image for test
-  ret = ExecuteCommandInChroot(options.chromeos_root, None,
+  ret = ExecuteCommandInChroot(options.chromeos_root,
                                mod_image_command)
 
   utils.AssertTrue(ret == 0, "mod_image_for_test failed")
-  return 0
+
+  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)
+    utils.AssertExit(ret == 0,
+                     "Failed to apply symlink label %s" % options.label)
+
+  return ret
 
 if __name__ == "__main__":
   Main(sys.argv)
diff --git a/v14/build_tc.py b/v14/build_tc.py
index 60a03b7..ef48f36 100755
--- a/v14/build_tc.py
+++ b/v14/build_tc.py
@@ -111,7 +111,7 @@
 
   build_chromeos.MakeChroot(options.chromeos_root)
 
-  portage_flags = ""
+  portage_flags = "--oneshot"
   if options.binary == True:
     # FIXME(asharif): This should be using --usepkg but that was not working.
     portage_flags = "--usepkgonly"
@@ -215,10 +215,10 @@
   command = " -- sudo " + env
 
   if uninstall == True:
-    command += " crossdev " + tflag + target
+    command += "yes | crossdev " + tflag + target
     retval = build_chromeos.ExecuteCommandInChroot(chromeos_root,
-                                                         toolchain_root,
-                                                         command)
+                                                   command,
+                                                   toolchain_root)
     return retval
 
   if incremental_component == "binutils":
diff --git a/v14/image_chromeos.py b/v14/image_chromeos.py
index 0888386..522c897 100755
--- a/v14/image_chromeos.py
+++ b/v14/image_chromeos.py
@@ -29,7 +29,7 @@
   parser.print_help()
   sys.exit(0)
 
-def ImageChromeOS(argv):
+def Main(argv):
   """Build ChromeOS."""
   # Common initializations
   cmd_executer = command_executer.GetCommandExecuter()
diff --git a/v14/run_benchmarks.py b/v14/run_benchmarks.py
index 810e8a2..5928a1a 100755
--- a/v14/run_benchmarks.py
+++ b/v14/run_benchmarks.py
@@ -203,7 +203,7 @@
                     benchname + "/chromiumos_image.bin"
                    ]
       logger.GetLogger().LogOutput("Reimaging machine %s" % options.machine)
-      image_chromeos.ImageChromeOS(image_args)
+      image_chromeos.Main(image_args)
 
       logger.GetLogger().LogOutput("Running %s" % arg)
       retval = RunStartupBenchmark(options.chromeos_root,
@@ -221,7 +221,7 @@
                     benchname + "/chromiumos_image.bin"
                    ]
       logger.GetLogger().LogOutput("Reimaging machine %s" % options.machine)
-      image_chromeos.ImageChromeOS(image_args)
+      image_chromeos.Main(image_args)
 
       logger.GetLogger().LogOutput("Running %s" % arg)
       retval = RunBrowserBenchmark(options.chromeos_root, 
diff --git a/v14/run_dejagnu.py b/v14/run_dejagnu.py
index b124e42..9099733 100755
--- a/v14/run_dejagnu.py
+++ b/v14/run_dejagnu.py
@@ -67,14 +67,16 @@
   # Emerge DejaGNU
   # Remove the dev-tcltk manifest which is currently incorrect
   ret = (build_chromeos.
-         ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
+         ExecuteCommandInChroot(options.chromeos_root,
                                 "rm -f ~/trunk/src/third_party/portage/"
-                                "dev-tcltk/expect/Manifest"))
+                                "dev-tcltk/expect/Manifest"),
+                                options.toolchain_root)
   utils.AssertExit(ret == 0, "Failed to remove incorrect manifest")
 
   ret = (build_chromeos.
-         ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
-                                "sudo emerge -u dejagnu"))
+         ExecuteCommandInChroot(options.chromeos_root,
+                                "sudo emerge -u dejagnu"),
+                                options.toolchain_root)
   utils.AssertExit(ret == 0, "Failed to emerge dejagnu")
 
   # Find the toolchain objects directory
@@ -110,21 +112,23 @@
 
   # Run DejaGNU
   ret = (build_chromeos.
-         ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
+         ExecuteCommandInChroot(options.chromeos_root,
                                 "%s ; %s ; %s && cd %s && %s ; %s" %
                                 (common, cleanup, init, gcc_build_dir,
-                                 dejagnu_run, cleanup), full_mount=True))
+                                 dejagnu_run, cleanup), full_mount=True),
+                                options.toolchain_root)
   utils.AssertWarning(ret == 0, "Failed to run DejaGNU tests successfully")
 
   # Copy results to a not-so-deep location
   results_dir = "%s/gcc/testsuite/" % gcc_build_dir
   new_results_dir = "/usr/local/toolchain_root/output/dejagnu/"
   ret = (build_chromeos.
-         ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
+         ExecuteCommandInChroot(options.chromeos_root,
                                 "mkdir -p %s ; cp %s/g++/g++.log %s ; "
                                 "cp %s/gcc/gcc.log %s" %
                                 (new_results_dir, results_dir, new_results_dir,
-                                 results_dir, new_results_dir)))
+                                 results_dir, new_results_dir),
+                                options.toolchain_root))
 
   utils.AssertWarning(ret == 0, "Failed to copy results to final destination.")
 
diff --git a/v14/run_tests.py b/v14/run_tests.py
index 67ee643..77e8c8f 100755
--- a/v14/run_tests.py
+++ b/v14/run_tests.py
@@ -16,7 +16,7 @@
 from utils import command_executer
 
 
-def Main():
+def Main(argv):
   """The main function."""
   parser = optparse.OptionParser()
   parser.add_option("-c", "--chromeos_root", dest="chromeos_root",
@@ -28,7 +28,7 @@
 
   tests = "bvt"
 
-  (options, args) = parser.parse_args()
+  (options, args) = parser.parse_args(argv)
 
   if options.board is None or options.remote is None:
     parser.print_help()
@@ -58,4 +58,4 @@
   return retval
 
 if __name__ == "__main__":
-  Main()
+  Main(sys.argv)
diff --git a/v14/tc_enter_chroot.py b/v14/tc_enter_chroot.py
index a3aea0f..798af72 100755
--- a/v14/tc_enter_chroot.py
+++ b/v14/tc_enter_chroot.py
@@ -81,6 +81,8 @@
                     help="Toolchain root directory.")
   parser.add_option("-o", "--output", dest="output",
                     help="Toolchain output directory")
+  parser.add_option("-r", "--third_party", dest="third_party",
+                    help="The third_party directory to mount.")
   parser.add_option("-m", "--other_mounts", dest="other_mounts",
                     help="Other mount points in the form: " +
                          "dir:mounted_dir:options")
@@ -101,21 +103,20 @@
 
   chromeos_root = os.path.abspath(chromeos_root)
 
+  tc_dirs = []
   if options.toolchain_root is None:
-    logger.GetLogger().LogError("--toolchain_root not specified")
-    parser.print_help()
-    sys.exit(1)
+    m = "toolchain_root not specified. Will not mount toolchain dirs."
+    logger.GetLogger().LogWarning(m)
+  else:
+    tc_dirs = [options.toolchain_root + "/google_vendor_src_branch/gcc",
+               options.toolchain_root + "/google_vendor_src_branch/binutils"]
 
-  tc_dirs = [options.toolchain_root + "/google_vendor_src_branch/gcc",
-             options.toolchain_root + "/google_vendor_src_branch/binutils"]
-
-  if options.mount_scripts_only == False:
-    for tc_dir in tc_dirs:
-      if not os.path.exists(tc_dir):
-        logger.GetLogger().LogError("toolchain path " +
-                                   tc_dir + " does not exist!")
-        parser.print_help()
-        sys.exit(1)
+  for tc_dir in tc_dirs:
+    if not os.path.exists(tc_dir):
+      logger.GetLogger().LogError("toolchain path " +
+                                 tc_dir + " does not exist!")
+      parser.print_help()
+      sys.exit(1)
 
   if not os.path.exists(chromeos_root):
     logger.GetLogger().LogError("chromeos_root " + options.chromeos_root +
@@ -130,7 +131,7 @@
     parser.print_help()
     sys.exit(1)
 
-  rootdir = utils.GetRoot(sys.argv[0])[0]
+  rootdir = utils.GetRoot(__file__)[0]
   version_dir = rootdir
 
   mounted_tc_root = "/usr/local/toolchain_root"
@@ -138,22 +139,43 @@
   full_mounted_tc_root = os.path.abspath(full_mounted_tc_root)
 
   mount_points = []
-  if options.mount_scripts_only == False:
-    for tc_dir in tc_dirs:
-      last_dir = utils.GetRoot(tc_dir)[1]
-      mount_point = MountPoint(tc_dir, full_mounted_tc_root + "/" + last_dir,
-                               getpass.getuser(), "ro")
-      mount_points.append(mount_point)
+  for tc_dir in tc_dirs:
+    last_dir = utils.GetRoot(tc_dir)[1]
+    mount_point = MountPoint(tc_dir, full_mounted_tc_root + "/" + last_dir,
+                             getpass.getuser(), "ro")
+    mount_points.append(mount_point)
 
+  # Add the third_party mount point if it exists
+  if options.third_party:
+    third_party_dir = options.third_party
+    utils.AssertExit(os.path.isdir(third_party_dir),
+                     "--third_party option is not a valid dir.")
+  else:
+    third_party_dir = os.path.abspath("%s/../../../third_party" %
+                                      os.path.dirname(__file__))
+
+  if os.path.isdir(third_party_dir):
+    mount_point = MountPoint(third_party_dir,
+                             ("%s/%s" %
+                              (full_mounted_tc_root,
+                               os.path.basename(third_party_dir))),
+                               getpass.getuser())
+    mount_points.append(mount_point)
+            
   output = options.output
-  if output is None:
+  if output is None and options.toolchain_root:
     output = options.toolchain_root + "/output"
-  mount_points.append(MountPoint(output, full_mounted_tc_root + "/output",
-                                 getpass.getuser()))
+    # Mount the output directory at /usr/local/toolchain_root/output
+    mount_points.append(MountPoint(output, full_mounted_tc_root + "/output",
+                                   getpass.getuser()))
+
+  # Mount the other mount points
   mount_points += CreateMountPointsFromString(options.other_mounts,
                                               chromeos_root + "/chroot/")
 
   last_dir = utils.GetRoot(version_dir)[1]
+
+  # Mount the version dir (v14) at /usr/local/toolchain_root/v14
   mount_point = MountPoint(version_dir, full_mounted_tc_root + "/" + last_dir,
                            getpass.getuser())
   mount_points.append(mount_point)