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)