blob: bf47bd491a1575ee67fcfe7870f139c99505962e [file] [log] [blame]
bjanakiraman6496e5f2013-02-15 04:50:58 +00001#!/usr/bin/python2.6
2#
3# Copyright 2010 Google Inc. All Rights Reserved.
4
5"""Script to build ChromeOS benchmarks
6
7Inputs:
8 chromeos_root
9 toolchain_root
10 board
11 [chromeos/cpu/<benchname>|chromeos/browser/[pagecycler|sunspider]|chromeos/startup]
12
13 This script assumes toolchain has already been built in toolchain_root.
14
15 chromeos/cpu/<benchname>
16 - Execute bench.py script within chroot to build benchmark
17 - Copy build results to perflab-bin
18
19 chromeos/startup
20 - Call build_chromeos to build image.
21 - Copy image to perflab-bin
22
23 chromeos/browser/*
24 - Call build_chromebrowser to build image with new browser
25 - Copy image to perflab-bin
26
27"""
28
29__author__ = "bjanakiraman@google.com (Bhaskar Janakiraman)"
30
31import optparse
32import os
33import sys
34import re
35import tc_enter_chroot
36import build_chromeos
37from utils import command_executer
38from utils import logger
39from utils import utils
40
41
42KNOWN_BENCHMARKS = [
43 'chromeos/startup',
44 'chromeos/browser/pagecycler',
45 'chromeos/browser/sunspider',
46 'chromeos/cpu/bikjmp' ]
47
48# Commands to build CPU benchmarks.
49CPU_BUILDCMD = "cd /usr/local/toolchain_root/v14/third_party/android_bench/v2_0/CLOSED_SOURCE/%s;\
50python ../../scripts/bench.py --toolchain=/usr/bin --action=clean;\
51python ../../scripts/bench.py --toolchain=/usr/bin --add_cflags=%s --add_ldflags=%s --makeopts=%s --action=build"
52
53
54
55def Usage(parser, message):
56 print "ERROR: " + message
57 parser.print_help()
58 sys.exit(0)
59
60
61def Main(argv):
62 """Build ChromeOS."""
63 # Common initializations
64
65 parser = optparse.OptionParser()
66 parser.add_option("-c", "--chromeos_root", dest="chromeos_root",
67 help="Target directory for ChromeOS installation.")
68 parser.add_option("-t", "--toolchain_root", dest="toolchain_root",
69 help="The gcctools directory of your P4 checkout.")
70 parser.add_option("--clobber_chroot", dest="clobber_chroot",
71 action="store_true", help=
72 "Delete the chroot and start fresh", default=False)
73 parser.add_option("--clobber_board", dest="clobber_board",
74 action="store_true",
75 help="Delete the board and start fresh", default=False)
76 parser.add_option("--cflags", dest="cflags", default="",
77 help="CFLAGS for the ChromeOS packages")
78 parser.add_option("--cxxflags", dest="cxxflags",default="",
79 help="CXXFLAGS for the ChromeOS packages")
80 parser.add_option("--ldflags", dest="ldflags", default="",
81 help="LDFLAGS for the ChromeOS packages")
82 parser.add_option("--makeopts", dest="makeopts", default="",
83 help="Make options for the ChromeOS packages")
84 parser.add_option("--board", dest="board",
85 help="ChromeOS target board, e.g. x86-generic")
86
87 (options,args) = parser.parse_args(argv[1:])
88
89 # validate args
90 for arg in args:
91 if arg not in KNOWN_BENCHMARKS:
92 utils.AssertTrue(False, "Bad benchmark %s specified" % arg)
93
94
95
96 if options.chromeos_root is None:
97 Usage(parser, "--chromeos_root must be set")
98
99 if options.toolchain_root is None:
100 Usage(parser, "--toolchain_root must be set")
101
102 if options.board is None:
103 Usage(parser, "--board must be set")
104
105 found_err = 0
106 for arg in args:
107 # CPU benchmarks
108 if re.match('chromeos/cpu', arg):
109 comps = re.split('/', arg)
110 build_chromeos.ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
111 CPU_BUILDCMD % (comps[2], options.cflags,
112 options.ldflags, options.makeopts))
113 elif re.match('chromeos/startup', arg):
114 build_args = [os.path.dirname(os.path.abspath(__file__)) + "/build_chromeos.py",
115 "--chromeos_root=" + options.chromeos_root,
116 "--toolchain_root=" + options.toolchain_root,
117 "--board=" + options.board,
118 "--cflags=" + options.cflags,
119 "--cxxflags=" + options.cxxflags,
120 "--ldflags=" + options.ldflags,
121 "--clobber_board"
122 ]
123 retval = build_chromeos.Main(build_args)
124 if retval != 0:
125 print "ERROR: Building chromeOS"
126 found_err = 1
127 elif re.match('chromeos/browser', arg):
128 # For now, re-build os. TBD: Change to call build_browser
129 build_args = [os.path.dirname(os.path.abspath(__file__)) + "/build_chromeos.py",
130 "--chromeos_root=" + options.chromeos_root,
131 "--toolchain_root=" + options.toolchain_root,
132 "--board=" + options.board,
133 "--cflags=" + options.cflags,
134 "--cxxflags=" + options.cxxflags,
135 "--ldflags=" + options.ldflags,
136 "--clobber_board"
137 ]
138 retval = build_chromeos.Main(build_args)
139 if retval != 0:
140 print "ERROR: Building Chrome Browser"
141 found_err = 1
142
143 return found_err
144
145if __name__ == "__main__":
146 Main(sys.argv)