blob: 1fbe3ade1398e989533f30b61ef36e190eac79a7 [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
raymes5154d7f2013-02-15 04:35:37 +000018def Usage(parser, message):
19 print "ERROR: " + message
20 parser.print_help()
21 sys.exit(0)
22
23
24def ExecuteCommandInChroot(chromeos_root, toolchain_root, command,
raymesbfb57992013-02-15 04:35:45 +000025 return_output=False, chrome_root=""):
26 chrome_mount = ""
27 if chrome_root:
28 chrome_mount = "--chrome_root=" + chromeos_root + "/" + chrome_root
raymes5154d7f2013-02-15 04:35:37 +000029 commands = []
30 tc_enter_chroot = (os.path.dirname(os.path.abspath(__file__)) +
31 "/tc-enter-chroot.sh")
raymese91a6e62013-02-15 04:35:51 +000032 commands.append("%s --chromeos_root=%s --toolchain_root=%s %s -- \"%s\""
raymesbfb57992013-02-15 04:35:45 +000033 % (tc_enter_chroot, chromeos_root, toolchain_root,
34 chrome_mount, command))
raymes5154d7f2013-02-15 04:35:37 +000035 return utils.RunCommands(commands, return_output)
36
37
raymes5154d7f2013-02-15 04:35:37 +000038def Main():
39 """Build ChromeOS."""
40 # Common initializations
41 (rootdir, basename) = utils.GetRoot(sys.argv[0])
42 utils.InitLogger(rootdir, basename)
43
44 parser = optparse.OptionParser()
45 parser.add_option("--chromeos_root", dest="chromeos_root",
46 help="Target directory for ChromeOS installation.")
47 parser.add_option("--toolchain_root", dest="toolchain_root",
48 help="The gcctools directory of your P4 checkout.")
49 parser.add_option("--clobber_chroot", dest="clobber_chroot",
50 action="store_true", help=
51 "Delete the chroot and start fresh", default=False)
52 parser.add_option("--clobber_board", dest="clobber_board",
53 action="store_true",
54 help="Delete the board and start fresh", default=False)
55 parser.add_option("--cflags", dest="cflags",
56 help="CFLAGS for the ChromeOS packages")
57 parser.add_option("--cxxflags", dest="cxxflags",
58 help="CXXFLAGS for the ChromeOS packages")
59 parser.add_option("--ldflags", dest="ldflags",
60 help="LDFLAGS for the ChromeOS packages")
61 parser.add_option("--board", dest="board",
62 help="ChromeOS target board, e.g. x86-generic")
63
64 options = parser.parse_args()[0]
65
66 if options.chromeos_root is None:
67 Usage(parser, "--chromeos_root must be set")
68
69 if options.toolchain_root is None:
70 Usage(parser, "--toolchain_root must be set")
71
72 if options.board is None:
73 Usage(parser, "--board must be set")
74
75 # Make chroot
76 commands = []
77 commands.append("cd " + options.chromeos_root + "/src/scripts")
78 clobber_chroot = ""
79 if options.clobber_chroot:
80 clobber_chroot = "--replace"
81 commands.append("./make_chroot --fast " + clobber_chroot)
raymese91a6e62013-02-15 04:35:51 +000082# ret = utils.RunCommands(commands)
83# utils.AssertTrue(ret == 0, "make_chroot failed")
raymes5154d7f2013-02-15 04:35:37 +000084
85 # Setup board
86 force = ""
87 if options.clobber_board:
88 force = "--force"
raymesbfb57992013-02-15 04:35:45 +000089 ret = ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
90 "FEATURES=\\\"keepwork noclean\\\" "
91 "./setup_board --nousepkg --board=%s "
92 "%s" % (options.board, force))
raymese91a6e62013-02-15 04:35:51 +000093 if ret != 0:
94 utils.main_logger.LogError("setup_board failed")
raymesbfb57992013-02-15 04:35:45 +000095 #utils.AssertTrue(ret == 0, "setup_board failed")
96
97 # Modify make.conf to add CFLAGS/CXXFLAGS/LDFLAGS
98 commands = []
99 ret1 = ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
100 "[ -e /build/%s/etc/make.conf.orig ] || "
101 "sudo mv /build/%s/etc/make.conf "
102 "/build/%s/etc/make.conf.orig"
103 % (options.board, options.board, options.board))
104 makeconf = ("source make.conf.orig\\\n")
105 #"CFLAGS='%s'\\\nCXXFLAGS='%s'\\\nLDFLAGS='%s'\\\n" %
106 #(options.cflags, options.cxxflags, options.ldflags))
raymese91a6e62013-02-15 04:35:51 +0000107 ret2 = ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
108 "sudo echo -e \\\"%s\\\" | sudo tee "
109 "/build/%s/etc/make.conf > /dev/null ;"
110 % (makeconf, options.board))
111 sys.exit(1)
raymesbfb57992013-02-15 04:35:45 +0000112 utils.AssertTrue(ret1 == 0 and ret2 == 0, "Could not modify make.conf")
raymes5154d7f2013-02-15 04:35:37 +0000113
114 # Find Chrome browser version
raymesbfb57992013-02-15 04:35:45 +0000115 chrome_version = utils.RunCommand("%s/src/scripts/chromeos_version.sh | "
116 "grep CHROME_BUILD"
117 % options.chromeos_root, True)
118
119 ret = chrome_version[0]
120 utils.AssertTrue(ret == 0, "Could not determine Chrome browser version")
raymes5154d7f2013-02-15 04:35:37 +0000121
122 chrome_version = chrome_version[1].strip().split("=")
123 if len(chrome_version) == 2:
124 chrome_version = chrome_version[1]
125 else:
126 chrome_version = ""
127
raymes5154d7f2013-02-15 04:35:37 +0000128 # Build packages
raymesbfb57992013-02-15 04:35:45 +0000129 ret = ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
raymese91a6e62013-02-15 04:35:51 +0000130 "CHROME_ORIGIN=SERVER_SOURCE CHROME_VERSION=%s "
raymesbfb57992013-02-15 04:35:45 +0000131 "./build_packages --withdev "
132 "--board=%s --withtest --withautotest"
133 % (chrome_version, options.board),
134 chrome_root="chrome_browser")
135
136 utils.AssertTrue(ret == 0, "build_packages failed")
raymes5154d7f2013-02-15 04:35:37 +0000137
138 # Build image
raymesbfb57992013-02-15 04:35:45 +0000139 ret = ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
140 "./build_image --board=%s" % options.board)
141
142 utils.AssertTrue(ret == 0, "build_image failed")
raymes5154d7f2013-02-15 04:35:37 +0000143
144 # Mod image for test
raymesbfb57992013-02-15 04:35:45 +0000145 ret = ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
146 "./mod_image_for_test.sh --board=%s"
147 % options.board)
raymes5154d7f2013-02-15 04:35:37 +0000148
raymesbfb57992013-02-15 04:35:45 +0000149 utils.AssertTrue(ret == 0, "mod_image_for_test failed")
raymes5154d7f2013-02-15 04:35:37 +0000150
151if __name__ == "__main__":
152 Main()