blob: 0247491b200f258044548960b6475d2cedab9b24 [file] [log] [blame]
raymes49fd5a32013-02-15 04:55:27 +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
asharif8697d4e2013-02-15 09:18:09 +000014import os
asharif795af1d2013-02-16 02:11:01 +000015import shutil
raymes49fd5a32013-02-15 04:55:27 +000016import sys
kbaclawski20082a02013-02-16 02:12:57 +000017
18import build_chromeos
raymes49fd5a32013-02-15 04:55:27 +000019from utils import command_executer
20from utils import logger
kbaclawski20082a02013-02-16 02:12:57 +000021from utils import misc
raymes49fd5a32013-02-15 04:55:27 +000022
23cmd_executer = None
24
25
26def Usage(parser, message):
27 print "ERROR: " + message
28 parser.print_help()
29 sys.exit(0)
30
31
asharif8697d4e2013-02-15 09:18:09 +000032def Main(argv):
raymes49fd5a32013-02-15 04:55:27 +000033 """Build Chrome browser."""
34 # Common initializations
35 global cmd_executer
36 cmd_executer = command_executer.GetCommandExecuter()
37
38 parser = optparse.OptionParser()
39 parser.add_option("--chromeos_root", dest="chromeos_root",
40 help="Target directory for ChromeOS installation.")
raymes49fd5a32013-02-15 04:55:27 +000041 parser.add_option("--version", dest="version")
asharif795af1d2013-02-16 02:11:01 +000042 parser.add_option("--clean",
43 dest="clean",
44 default=False,
45 action="store_true",
46 help="Clean the /var/cache/chromeos-chrome/chrome-src/src/out_$board dir")
47 parser.add_option("--env",
48 dest="env",
49 default="",
50 help="Use the following env")
raymes49fd5a32013-02-15 04:55:27 +000051 parser.add_option("--cflags", dest="cflags",
asharif32ed84e2013-02-15 05:15:55 +000052 default="",
raymes49fd5a32013-02-15 04:55:27 +000053 help="CFLAGS for the ChromeOS packages")
54 parser.add_option("--cxxflags", dest="cxxflags",
asharif32ed84e2013-02-15 05:15:55 +000055 default="",
raymes49fd5a32013-02-15 04:55:27 +000056 help="CXXFLAGS for the ChromeOS packages")
57 parser.add_option("--ldflags", dest="ldflags",
asharif32ed84e2013-02-15 05:15:55 +000058 default="",
raymes49fd5a32013-02-15 04:55:27 +000059 help="LDFLAGS for the ChromeOS packages")
60 parser.add_option("--board", dest="board",
61 help="ChromeOS target board, e.g. x86-generic")
asharif8697d4e2013-02-15 09:18:09 +000062 parser.add_option("--label", dest="label",
63 help="Optional label to apply to the ChromeOS image.")
raymes49fd5a32013-02-15 04:55:27 +000064
asharif8697d4e2013-02-15 09:18:09 +000065 options = parser.parse_args(argv)[0]
raymes49fd5a32013-02-15 04:55:27 +000066
67 if options.chromeos_root is None:
68 Usage(parser, "--chromeos_root must be set")
69
70 if options.board is None:
71 Usage(parser, "--board must be set")
72
raymes49fd5a32013-02-15 04:55:27 +000073 if options.version is None:
74 logger.GetLogger().LogOutput("No Chrome version given so "
75 "using the default checked in version.")
76 chrome_version = ""
77 else:
78 chrome_version = "CHROME_VERSION=%s" % options.version
79
asharif795af1d2013-02-16 02:11:01 +000080 if options.clean:
81 out_dir = os.path.join(options.chromeos_root,
82 "chroot",
83 "var/cache/chromeos-chrome/chrome-src/src/out_%s"
84 % options.board)
85 if os.path.exists(out_dir):
86 shutil.rmtree(out_dir)
87
raymes49fd5a32013-02-15 04:55:27 +000088 # Emerge the browser
asharifca3c6c12013-02-15 23:17:54 +000089 ret = (cmd_executer.
90 ChrootRunCommand(options.chromeos_root,
91 "CHROME_ORIGIN=SERVER_SOURCE %s "
92 "CFLAGS=\"$(portageq-%s envvar CFLAGS) %s\" "
93 "LDFLAGS=\"$(portageq-%s envvar LDFLAGS) %s\" "
94 "CXXFLAGS=\"$(portageq-%s envvar CXXFLAGS) %s\" "
asharif795af1d2013-02-16 02:11:01 +000095 "%s "
asharifca3c6c12013-02-15 23:17:54 +000096 "emerge-%s --buildpkg chromeos-chrome" %
97 (chrome_version, options.board, options.cflags,
98 options.board, options.ldflags, options.board,
asharif795af1d2013-02-16 02:11:01 +000099 options.cxxflags, options.env, options.board)))
raymes49fd5a32013-02-15 04:55:27 +0000100
kbaclawski6999ada2013-02-15 19:57:09 +0000101 logger.GetLogger().LogFatalIf(ret, "build_packages failed")
raymes49fd5a32013-02-15 04:55:27 +0000102
103 # Build image
asharifca3c6c12013-02-15 23:17:54 +0000104 ret = (cmd_executer.
105 ChrootRunCommand(options.chromeos_root,
kbaclawski20082a02013-02-16 02:12:57 +0000106 misc.GetBuildImageCommand(options.board)))
raymes49fd5a32013-02-15 04:55:27 +0000107
kbaclawski6999ada2013-02-15 19:57:09 +0000108 logger.GetLogger().LogFatalIf(ret, "build_image failed")
raymes49fd5a32013-02-15 04:55:27 +0000109
110 # Mod image for test
asharifca3c6c12013-02-15 23:17:54 +0000111 ret = (cmd_executer.
112 ChrootRunCommand(options.chromeos_root,
kbaclawski20082a02013-02-16 02:12:57 +0000113 misc.GetModImageForTestCommand(options.board)))
raymes49fd5a32013-02-15 04:55:27 +0000114
kbaclawski6999ada2013-02-15 19:57:09 +0000115 logger.GetLogger().LogFatalIf(ret, "mod_image_for_test failed")
raymes49fd5a32013-02-15 04:55:27 +0000116
asharif8697d4e2013-02-15 09:18:09 +0000117 flags_file_name = "chrome_flags.txt"
118 flags_file_path = ("%s/src/build/images/%s/latest/%s" %
119 (options.chromeos_root,
120 options.board,
121 flags_file_name))
122 flags_file = open(flags_file_path, "wb")
123 flags_file.write("CFLAGS=%s\n" % options.cflags)
124 flags_file.write("CXXFLAGS=%s\n" % options.cxxflags)
125 flags_file.write("LDFLAGS=%s\n" % options.ldflags)
126 flags_file.close()
127
128
129 if options.label:
130 image_dir_path = ("%s/src/build/images/%s/latest" %
131 (options.chromeos_root,
132 options.board))
133 real_image_dir_path = os.path.realpath(image_dir_path)
134 command = ("ln -sf -T %s %s/%s" %
135 (os.path.basename(real_image_dir_path),
136 os.path.dirname(real_image_dir_path),
137 options.label))
138
139 ret = cmd_executer.RunCommand(command)
kbaclawski6999ada2013-02-15 19:57:09 +0000140 logger.GetLogger().LogFatalIf(ret, "Failed to apply symlink label %s" %
141 options.label)
asharif8697d4e2013-02-15 09:18:09 +0000142
143 return ret
144
raymes49fd5a32013-02-15 04:55:27 +0000145if __name__ == "__main__":
asharif2198c512013-02-15 09:21:35 +0000146 retval = Main(sys.argv)
147 sys.exit(retval)