blob: 747376ba77092294826f3a7b397769bd6efb4a1e [file] [log] [blame]
raymes5154d7f2013-02-15 04:35:37 +00001#!/usr/bin/python2.6
2#
3# Copyright 2010 Google Inc. All Rights Reserved.
4
5"""Script to checkout the ChromeOS source.
6
7This script sets up the ChromeOS source in the given directory, matching a
8particular release of ChromeOS.
9"""
10
11__author__ = "raymes@google.com (Raymes Khoury)"
12
13import optparse
14import os
15import sys
16from utils import utils
17
18
19def Usage(parser, message):
20 print "ERROR: " + message
21 parser.print_help()
22 sys.exit(0)
23
24
25def ExecuteCommandInChroot(chromeos_root, toolchain_root, command,
26 return_output=False):
27 commands = []
28 tc_enter_chroot = (os.path.dirname(os.path.abspath(__file__)) +
29 "/tc-enter-chroot.sh")
30 commands.append("%s --chromeos_root=%s --toolchain_root=%s -- %s"
31 % (tc_enter_chroot, chromeos_root, toolchain_root, command))
32 return utils.RunCommands(commands, return_output)
33
34
35def StoreFile(filename, contents):
36 utils.RunCommand("echo '%s' > %s" % (contents, filename))
37
38
39def Main():
40 """Build ChromeOS."""
41 # Common initializations
42 (rootdir, basename) = utils.GetRoot(sys.argv[0])
43 utils.InitLogger(rootdir, basename)
44
45 parser = optparse.OptionParser()
46 parser.add_option("--chromeos_root", dest="chromeos_root",
47 help="Target directory for ChromeOS installation.")
48 parser.add_option("--toolchain_root", dest="toolchain_root",
49 help="The gcctools directory of your P4 checkout.")
50 parser.add_option("--clobber_chroot", dest="clobber_chroot",
51 action="store_true", help=
52 "Delete the chroot and start fresh", default=False)
53 parser.add_option("--clobber_board", dest="clobber_board",
54 action="store_true",
55 help="Delete the board and start fresh", default=False)
56 parser.add_option("--cflags", dest="cflags",
57 help="CFLAGS for the ChromeOS packages")
58 parser.add_option("--cxxflags", dest="cxxflags",
59 help="CXXFLAGS for the ChromeOS packages")
60 parser.add_option("--ldflags", dest="ldflags",
61 help="LDFLAGS for the ChromeOS packages")
62 parser.add_option("--board", dest="board",
63 help="ChromeOS target board, e.g. x86-generic")
64
65 options = parser.parse_args()[0]
66
67 if options.chromeos_root is None:
68 Usage(parser, "--chromeos_root must be set")
69
70 if options.toolchain_root is None:
71 Usage(parser, "--toolchain_root must be set")
72
73 if options.board is None:
74 Usage(parser, "--board must be set")
75
76 # Make chroot
77 commands = []
78 commands.append("cd " + options.chromeos_root + "/src/scripts")
79 clobber_chroot = ""
80 if options.clobber_chroot:
81 clobber_chroot = "--replace"
82 commands.append("./make_chroot --fast " + clobber_chroot)
83 utils.RunCommands(commands)
84
85 # Setup board
86 force = ""
87 if options.clobber_board:
88 force = "--force"
89 ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
90 "FEATURES=\\\"keepwork noclean\\\" "
91 "./setup_board --nousepkg --board=%s "
92 "%s"
93 % (options.board, force))
94
95 # Find Chrome browser version
96 chrome_version = (ExecuteCommandInChroot
97 (options.chromeos_root, options.toolchain_root,
98 "./chromeos_version.sh | "
99 "grep CHROME_BUILD", True))
100
101 chrome_version = chrome_version[1].strip().split("=")
102 if len(chrome_version) == 2:
103 chrome_version = chrome_version[1]
104 else:
105 chrome_version = ""
106
107 # Modify make.conf to add CFLAGS/CXXFLAGS/LDFLAGS
108 ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
109 "mv /build/%s/etc/make.conf "
110 "/build/%s/etc/make.conf.orig"
111 % (options.board, options.board))
112 makeconf = ("source /build/%s/etc/make.conf.orig\n"
113 "/CFLAGS=%s\nCXXFLAGS=%s\nLDFLAGS=%s\n" %
114 (options.board, options.cflags,
115 options.cxxflags, options.ldflags))
116 StoreFile("%s/chroot/build/%s/etc/make.conf" %
117 (options.chromeos_root, options.board), makeconf)
118
119 # Build packages
120 ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
121 "CHROME_ORIGIN=SERVER_SOURCE CHROME_BUILD=%s "
122 "./build_packages --withdev "
123 "--board=%s --withtest --withautotest"
124 % (chrome_version, options.board))
125
126 # Build image
127 ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
128 "./build_image --board=%s")
129
130 # Mod image for test
131 ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
132 "./mod_image_for_test --board=%s")
133
134
135if __name__ == "__main__":
136 Main()