raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 1 | #!/usr/bin/python2.6 |
| 2 | # |
| 3 | # Copyright 2010 Google Inc. All Rights Reserved. |
| 4 | |
| 5 | """Script to checkout the ChromeOS source. |
| 6 | |
| 7 | This script sets up the ChromeOS source in the given directory, matching a |
| 8 | particular release of ChromeOS. |
| 9 | """ |
| 10 | |
| 11 | __author__ = "raymes@google.com (Raymes Khoury)" |
| 12 | |
| 13 | import optparse |
asharif | 8697d4e | 2013-02-15 09:18:09 +0000 | [diff] [blame] | 14 | import os |
asharif | 795af1d | 2013-02-16 02:11:01 +0000 | [diff] [blame] | 15 | import shutil |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 16 | import sys |
kbaclawski | 20082a0 | 2013-02-16 02:12:57 +0000 | [diff] [blame^] | 17 | |
| 18 | import build_chromeos |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 19 | from utils import command_executer |
| 20 | from utils import logger |
kbaclawski | 20082a0 | 2013-02-16 02:12:57 +0000 | [diff] [blame^] | 21 | from utils import misc |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 22 | |
| 23 | cmd_executer = None |
| 24 | |
| 25 | |
| 26 | def Usage(parser, message): |
| 27 | print "ERROR: " + message |
| 28 | parser.print_help() |
| 29 | sys.exit(0) |
| 30 | |
| 31 | |
asharif | 8697d4e | 2013-02-15 09:18:09 +0000 | [diff] [blame] | 32 | def Main(argv): |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 33 | """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.") |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 41 | parser.add_option("--version", dest="version") |
asharif | 795af1d | 2013-02-16 02:11:01 +0000 | [diff] [blame] | 42 | 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") |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 51 | parser.add_option("--cflags", dest="cflags", |
asharif | 32ed84e | 2013-02-15 05:15:55 +0000 | [diff] [blame] | 52 | default="", |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 53 | help="CFLAGS for the ChromeOS packages") |
| 54 | parser.add_option("--cxxflags", dest="cxxflags", |
asharif | 32ed84e | 2013-02-15 05:15:55 +0000 | [diff] [blame] | 55 | default="", |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 56 | help="CXXFLAGS for the ChromeOS packages") |
| 57 | parser.add_option("--ldflags", dest="ldflags", |
asharif | 32ed84e | 2013-02-15 05:15:55 +0000 | [diff] [blame] | 58 | default="", |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 59 | help="LDFLAGS for the ChromeOS packages") |
| 60 | parser.add_option("--board", dest="board", |
| 61 | help="ChromeOS target board, e.g. x86-generic") |
asharif | 8697d4e | 2013-02-15 09:18:09 +0000 | [diff] [blame] | 62 | parser.add_option("--label", dest="label", |
| 63 | help="Optional label to apply to the ChromeOS image.") |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 64 | |
asharif | 8697d4e | 2013-02-15 09:18:09 +0000 | [diff] [blame] | 65 | options = parser.parse_args(argv)[0] |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 66 | |
| 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 | |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 73 | 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 | |
asharif | 795af1d | 2013-02-16 02:11:01 +0000 | [diff] [blame] | 80 | 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 | |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 88 | # Emerge the browser |
asharif | ca3c6c1 | 2013-02-15 23:17:54 +0000 | [diff] [blame] | 89 | 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\" " |
asharif | 795af1d | 2013-02-16 02:11:01 +0000 | [diff] [blame] | 95 | "%s " |
asharif | ca3c6c1 | 2013-02-15 23:17:54 +0000 | [diff] [blame] | 96 | "emerge-%s --buildpkg chromeos-chrome" % |
| 97 | (chrome_version, options.board, options.cflags, |
| 98 | options.board, options.ldflags, options.board, |
asharif | 795af1d | 2013-02-16 02:11:01 +0000 | [diff] [blame] | 99 | options.cxxflags, options.env, options.board))) |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 100 | |
kbaclawski | 6999ada | 2013-02-15 19:57:09 +0000 | [diff] [blame] | 101 | logger.GetLogger().LogFatalIf(ret, "build_packages failed") |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 102 | |
| 103 | # Build image |
asharif | ca3c6c1 | 2013-02-15 23:17:54 +0000 | [diff] [blame] | 104 | ret = (cmd_executer. |
| 105 | ChrootRunCommand(options.chromeos_root, |
kbaclawski | 20082a0 | 2013-02-16 02:12:57 +0000 | [diff] [blame^] | 106 | misc.GetBuildImageCommand(options.board))) |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 107 | |
kbaclawski | 6999ada | 2013-02-15 19:57:09 +0000 | [diff] [blame] | 108 | logger.GetLogger().LogFatalIf(ret, "build_image failed") |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 109 | |
| 110 | # Mod image for test |
asharif | ca3c6c1 | 2013-02-15 23:17:54 +0000 | [diff] [blame] | 111 | ret = (cmd_executer. |
| 112 | ChrootRunCommand(options.chromeos_root, |
kbaclawski | 20082a0 | 2013-02-16 02:12:57 +0000 | [diff] [blame^] | 113 | misc.GetModImageForTestCommand(options.board))) |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 114 | |
kbaclawski | 6999ada | 2013-02-15 19:57:09 +0000 | [diff] [blame] | 115 | logger.GetLogger().LogFatalIf(ret, "mod_image_for_test failed") |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 116 | |
asharif | 8697d4e | 2013-02-15 09:18:09 +0000 | [diff] [blame] | 117 | 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) |
kbaclawski | 6999ada | 2013-02-15 19:57:09 +0000 | [diff] [blame] | 140 | logger.GetLogger().LogFatalIf(ret, "Failed to apply symlink label %s" % |
| 141 | options.label) |
asharif | 8697d4e | 2013-02-15 09:18:09 +0000 | [diff] [blame] | 142 | |
| 143 | return ret |
| 144 | |
raymes | 49fd5a3 | 2013-02-15 04:55:27 +0000 | [diff] [blame] | 145 | if __name__ == "__main__": |
asharif | 2198c51 | 2013-02-15 09:21:35 +0000 | [diff] [blame] | 146 | retval = Main(sys.argv) |
| 147 | sys.exit(retval) |