aboutsummaryrefslogtreecommitdiff
path: root/deprecated/build_benchmarks.py
diff options
context:
space:
mode:
Diffstat (limited to 'deprecated/build_benchmarks.py')
-rwxr-xr-xdeprecated/build_benchmarks.py306
1 files changed, 306 insertions, 0 deletions
diff --git a/deprecated/build_benchmarks.py b/deprecated/build_benchmarks.py
new file mode 100755
index 00000000..c10c74d1
--- /dev/null
+++ b/deprecated/build_benchmarks.py
@@ -0,0 +1,306 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Script to build ChromeOS benchmarks
+
+Inputs:
+ chromeos_root
+ toolchain_root
+ board
+ [chromeos/cpu/<benchname> |
+ chromeos/browser/[pagecycler|sunspider] |
+ chromeos/startup]
+
+ This script assumes toolchain has already been built in toolchain_root.
+
+ chromeos/cpu/<benchname>
+ - Execute bench.py script within chroot to build benchmark
+ - Copy build results to perflab-bin
+
+ chromeos/startup
+ - Call build_chromeos to build image.
+ - Copy image to perflab-bin
+
+ chromeos/browser/*
+ - Call build_chromebrowser to build image with new browser
+ - Copy image to perflab-bin
+
+"""
+
+from __future__ import print_function
+
+__author__ = 'bjanakiraman@google.com (Bhaskar Janakiraman)'
+
+import argparse
+import os
+import sys
+import re
+
+import build_chromeos
+from cros_utils import command_executer
+from cros_utils import logger
+
+KNOWN_BENCHMARKS = [
+ 'chromeos/startup', 'chromeos/browser/pagecycler',
+ 'chromeos/browser/sunspider', 'chromeos/browser/v8bench',
+ 'chromeos/cpu/bikjmp'
+]
+
+# Commands to build CPU benchmarks.
+
+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/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')
+
+# Common initializations
+cmd_executer = command_executer.GetCommandExecuter()
+
+
+def Usage(parser, message):
+ print('ERROR: %s' % message)
+ parser.print_help()
+ sys.exit(0)
+
+
+def CreateRunsh(destdir, benchmark):
+ """Create run.sh script to run benchmark.
+
+ Perflab needs a run.sh that runs the benchmark.
+ """
+ run_cmd = os.path.dirname(os.path.abspath(__file__)) + '/run_benchmarks.py'
+ contents = '#!/bin/sh\n%s $@ %s\n' % (run_cmd, benchmark)
+ runshfile = destdir + '/run.sh'
+ f = open(runshfile, 'w')
+ f.write(contents)
+ f.close()
+ retval = cmd_executer.RunCommand('chmod +x %s' % runshfile)
+ return retval
+
+
+def CreateBinaryCopy(sourcedir, destdir, copy=None):
+ """Create links in perflab-bin/destdir/* to sourcedir/*, instead of copies
+
+ Args:
+ sourcedir: directory from which to copy.
+ destdir: directory to which to copy.
+ copy: when none, make soft links to everything under sourcedir, otherwise
+ copy all to destdir.
+ TODO: remove this parameter if it's determined that CopyFiles can use
+ rsync -L.
+ """
+ retval = 0
+ # check if sourcedir exists
+ if not os.path.exists(sourcedir):
+ logger.GetLogger().LogError('benchmark results %s does not exist.' %
+ sourcedir)
+ return 1
+
+ # Deal with old copies - save off old ones for now.
+ # Note - if its a link, it doesn't save anything.
+ if os.path.exists(destdir):
+ command = 'rm -rf %s.old' % destdir
+ retval = cmd_executer.RunCommand(command)
+ if retval != 0:
+ return retval
+ command = 'mv %s %s.old' % (destdir, destdir)
+ retval = cmd_executer.RunCommand(command)
+ if retval != 0:
+ return retval
+ os.makedirs(destdir)
+ sourcedir = os.path.abspath(sourcedir)
+ if copy is None:
+ command = 'ln -s %s/* %s' % (sourcedir, destdir)
+ else:
+ command = 'cp -fr %s/* %s' % (sourcedir, destdir)
+ retval = cmd_executer.RunCommand(command)
+ return retval
+
+
+def Main(argv):
+ """Build ChromeOS."""
+ # Common initializations
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-c',
+ '--chromeos_root',
+ dest='chromeos_root',
+ help='Target directory for ChromeOS installation.')
+ parser.add_argument('-t',
+ '--toolchain_root',
+ dest='toolchain_root',
+ help='This is obsolete. Do not use.')
+ parser.add_argument('-r',
+ '--third_party',
+ dest='third_party',
+ help='The third_party dir containing android '
+ 'benchmarks.')
+ parser.add_argument('-C',
+ '--clean',
+ dest='clean',
+ action='store_true',
+ default=False,
+ help='Clean up build.')
+ parser.add_argument('-B',
+ '--build',
+ dest='build',
+ action='store_true',
+ default=False,
+ help='Build benchmark.')
+ parser.add_argument('-O',
+ '--only_copy',
+ dest='only_copy',
+ action='store_true',
+ default=False,
+ help='Only copy to perflab-bin - no builds.')
+ parser.add_argument('--workdir',
+ dest='workdir',
+ default='.',
+ help='Work directory for perflab outputs.')
+ parser.add_argument('--clobber_chroot',
+ dest='clobber_chroot',
+ action='store_true',
+ help='Delete the chroot and start fresh',
+ default=False)
+ parser.add_argument('--clobber_board',
+ dest='clobber_board',
+ action='store_true',
+ help='Delete the board and start fresh',
+ default=False)
+ parser.add_argument('--cflags',
+ dest='cflags',
+ default='',
+ help='CFLAGS for the ChromeOS packages')
+ parser.add_argument('--cxxflags',
+ dest='cxxflags',
+ default='',
+ help='CXXFLAGS for the ChromeOS packages')
+ parser.add_argument('--ldflags',
+ dest='ldflags',
+ default='',
+ help='LDFLAGS for the ChromeOS packages')
+ parser.add_argument('--makeopts',
+ dest='makeopts',
+ default='',
+ help='Make options for the ChromeOS packages')
+ parser.add_argument('--board',
+ dest='board',
+ help='ChromeOS target board, e.g. x86-generic')
+ # Leftover positional arguments
+ parser.add_argument('args', nargs='+', help='benchmarks')
+
+ options = parser.parse_args(argv[1:])
+
+ # validate args
+ for arg in options.args:
+ if arg not in KNOWN_BENCHMARKS:
+ logger.GetLogger().LogFatal('Bad benchmark %s specified' % arg)
+
+ 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.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)
+
+ retval = 0
+ if options.third_party:
+ third_party = options.third_party
+ else:
+ third_party = '%s/../../../third_party' % os.path.dirname(__file__)
+ third_party = os.path.realpath(third_party)
+ for arg in options.args:
+ # CPU benchmarks
+ if re.match('chromeos/cpu', arg):
+ comps = re.split('/', arg)
+ benchname = comps[2]
+
+ tec_options = []
+ if third_party:
+ tec_options.append('--third_party=%s' % third_party)
+ if options.clean:
+ retval = cmd_executer.ChrootRunCommand(options.chromeos_root,
+ CPU_BUILDCMD_CLEAN % benchname,
+ tec_options=tec_options)
+ logger.GetLogger().LogErrorIf(retval,
+ 'clean of benchmark %s failed.' % arg)
+ if options.build:
+ retval = cmd_executer.ChrootRunCommand(
+ options.chromeos_root,
+ CPU_BUILDCMD_BUILD % (benchname, options.cflags, options.ldflags,
+ options.makeopts),
+ tec_options=tec_options)
+ logger.GetLogger().LogErrorIf(retval,
+ 'Build of benchmark %s failed.' % arg)
+ if retval == 0 and (options.build or options.only_copy):
+ benchdir = ('%s/android_bench/v2_0/CLOSED_SOURCE/%s' %
+ (third_party, benchname))
+ linkdir = '%s/perflab-bin/%s' % (options.workdir, arg)
+
+ # For cpu/*, we need to copy (not symlinks) of all the contents,
+ # because they are part of the test fixutre.
+ retval = CreateBinaryCopy(benchdir, linkdir, True)
+ if retval != 0:
+ return retval
+ retval = CreateRunsh(linkdir, arg)
+ if retval != 0:
+ return retval
+ elif re.match('chromeos/startup', arg):
+ if options.build:
+ # Clean for chromeos/browser and chromeos/startup is a Nop
+ # since builds are always from scratch.
+ build_args = [
+ os.path.dirname(os.path.abspath(__file__)) + '/build_chromeos.py',
+ '--chromeos_root=' + options.chromeos_root,
+ '--board=' + options.board, '--cflags=' + options.cflags,
+ '--cxxflags=' + options.cxxflags, '--ldflags=' + options.ldflags,
+ '--clobber_board'
+ ]
+ retval = build_chromeos.Main(build_args)
+ logger.GetLogger().LogErrorIf(retval, 'Build of ChromeOS failed.')
+ if retval == 0 and (options.build or options.only_copy):
+ benchdir = '%s/src/build/images/%s/latest' % (options.chromeos_root,
+ options.board)
+ linkdir = '%s/perflab-bin/%s' % (options.workdir, arg)
+ retval = CreateBinaryCopy(benchdir, linkdir)
+ if retval != 0:
+ return retval
+ CreateRunsh(linkdir, arg)
+ if retval != 0:
+ return retval
+ elif re.match('chromeos/browser', arg):
+ if options.build:
+ # For now, re-build os. TBD: Change to call build_browser
+ build_args = [os.path.dirname(os.path.abspath(__file__)) +
+ '/build_chrome_browser.py',
+ '--chromeos_root=' + options.chromeos_root,
+ '--board=' + options.board, '--cflags=' + options.cflags,
+ '--cxxflags=' + options.cxxflags,
+ '--ldflags=' + options.ldflags]
+ retval = build_chromeos.Main(build_args)
+ logger.GetLogger().LogErrorIf(retval, 'Build of ChromeOS failed.')
+ if retval == 0 and (options.build or options.only_copy):
+ benchdir = '%s/src/build/images/%s/latest' % (options.chromeos_root,
+ options.board)
+ linkdir = '%s/perflab-bin/%s' % (options.workdir, arg)
+ retval = CreateBinaryCopy(benchdir, linkdir)
+ if retval != 0:
+ return retval
+ retval = CreateRunsh(linkdir, arg)
+ if retval != 0:
+ return retval
+
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(Main(sys.argv))