Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(864)

Side by Side Diff: shell/subcmds/build_cmd.py

Issue 6250058: Split out the big chromite shell 'main.py' into lots of subfiles. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/chromite.git@master
Patch Set: Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 #!/usr/bin/python
sosa 2011/02/02 01:16:19 Only directly shell-callable python should have th
diandersAtChromium 2011/02/02 01:49:10 Done.
2 #
3 # Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file.
6
7 """Implementation of the 'build' chromite command."""
8
9 # Python imports
10 import optparse
11 import os
12
13
14 # Local imports
15 from chromite.lib import cros_build_lib as cros_lib
16 from chromite.shell import utils
17 from chromite.shell import subcmd
18
19
20 def _DoMakeChroot(chroot_config, clean_first):
21 """Build the chroot, if needed.
22
23 Args:
24 chroot_config: A SafeConfigParser representing the config for the chroot.
25 clean_first: Delete any old chroot first.
26 """
27 # Skip this whole command if things already exist.
28 # TODO(dianders): Theoretically, calling make_chroot a second time is OK
29 # and "fixes up" the chroot. ...but build_packages will do the fixups
30 # anyway (I think), so this isn't that important.
31 chroot_dir = utils.GetChrootAbsDir(chroot_config)
32 if (not clean_first) and utils.DoesChrootExist(chroot_config):
33 cros_lib.Info('%s already exists, skipping make_chroot.' % chroot_dir)
34 return
35
36 cros_lib.Info('MAKING THE CHROOT')
37
38 # Put together command.
39 cmd_list = [
40 './make_chroot',
41 '--chroot="%s"' % chroot_dir,
42 chroot_config.get('CHROOT', 'make_chroot_flags'),
43 ]
44 if clean_first:
45 cmd_list.insert(1, '--replace')
46
47 # We're going convert to a string and force the shell to do all of the
48 # splitting of arguments, since we're throwing all of the flags from the
49 # config file in there.
50 cmd = ' '.join(cmd_list)
51
52 # We'll put CWD as src/scripts when running the command. Since everyone
53 # running by hand has their cwd there, it is probably the safest.
54 cwd = os.path.join(utils.SRCROOT_PATH, 'src', 'scripts')
55
56 # Run it. Exceptions will cause the program to exit.
57 cros_lib.RunCommand(cmd, shell=True, cwd=cwd, ignore_sigint=True)
58
59
60 def _DoSetupBoard(build_config, clean_first):
61 """Setup the board, if needed.
62
63 This just runs the setup_board command with the proper args, if needed.
64
65 Args:
66 build_config: A SafeConfigParser representing the build config.
67 clean_first: Delete any old board config first.
68 """
69 # Skip this whole command if things already exist.
70 board_dir = utils.GetBoardDir(build_config)
71 if (not clean_first) and os.path.isdir(board_dir):
72 cros_lib.Info('%s already exists, skipping setup_board.' % board_dir)
73 return
74
75 cros_lib.Info('SETTING UP THE BOARD')
76
77 # Put together command.
78 cmd_list = [
79 './setup_board',
80 '--board="%s"' % build_config.get('BUILD', 'target'),
81 build_config.get('BUILD', 'setup_board_flags'),
82 ]
83 if clean_first:
84 cmd_list.insert(1, '--force')
85
86 # We're going convert to a string and force the shell to do all of the
87 # splitting of arguments, since we're throwing all of the flags from the
88 # config file in there.
89 cmd = ' '.join(cmd_list)
90
91 # We'll put CWD as src/scripts when running the command. Since everyone
92 # running by hand has their cwd there, it is probably the safest.
93 cwd = os.path.join(utils.SRCROOT_PATH, 'src', 'scripts')
94
95 # Run it. Exceptions will cause the program to exit.
96 cros_lib.RunCommand(cmd, shell=True, cwd=cwd, ignore_sigint=True)
97
98
99 def _DoBuildPackages(build_config):
100 """Build packages.
101
102 This just runs the build_packages command with the proper args.
103
104 Args:
105 build_config: A SafeConfigParser representing the build config.
106 """
107 cros_lib.Info('BUILDING PACKAGES')
108
109 # Put together command. We're going to force the shell to do all of the
110 # splitting of arguments, since we're throwing all of the flags from the
111 # config file in there.
112 cmd = './build_packages --board="%s" %s' % (
113 build_config.get('BUILD', 'target'),
114 build_config.get('BUILD', 'build_packages_flags')
115 )
116
117 # We'll put CWD as src/scripts when running the command. Since everyone
118 # running by hand has their cwd there, it is probably the safest.
119 cwd = os.path.join(utils.SRCROOT_PATH, 'src', 'scripts')
120
121 # Run it. Exceptions will cause the program to exit.
122 cros_lib.RunCommand(cmd, shell=True, cwd=cwd, ignore_sigint=True)
123
124
125 def _DoBuildImage(build_config):
126 """Build an image.
127
128 This just runs the build_image command with the proper args.
129
130 Args:
131 build_config: A SafeConfigParser representing the build config.
132 """
133 cros_lib.Info('BUILDING THE IMAGE')
134
135 # Put together command. We're going to force the shell to do all of the
136 # splitting of arguments, since we're throwing all of the flags from the
137 # config file in there.
138 cmd = './build_image --board="%s" %s' % (
139 build_config.get('BUILD', 'target'),
140 build_config.get('IMAGE', 'build_image_flags')
141 )
142
143 # We'll put CWD as src/scripts when running the command. Since everyone
144 # running by hand has their cwd there, it is probably the safest.
145 cwd = os.path.join(utils.SRCROOT_PATH, 'src', 'scripts')
146
147 # Run it. Exceptions will cause the program to exit.
148 cros_lib.RunCommand(cmd, shell=True, cwd=cwd, ignore_sigint=True)
149
150
151 class BuildCmd(subcmd.ChromiteCmd):
152 """Build the chroot (if needed), the packages for a target, and the image."""
153
154 def Run(self, raw_argv, chroot_config=None,
155 loaded_config=False, build_config=None):
156 """Run the command.
157
158 Args:
159 raw_argv: Command line arguments, including this command's name, but not
160 the chromite command name or chromite options.
161 chroot_config: A SafeConfigParser for the chroot config; or None chromite
162 was called from within the chroot.
163 loaded_config: If True, we've already loaded the config.
164 build_config: None when called normally, but contains the SafeConfigParser
165 for the build config if we call ourselves with _DoEnterChroot(). Note
166 that even when called through _DoEnterChroot(), could still be None
167 if user chose 'HOST' as the target.
168 """
169 # Parse options for command...
170 usage_str = ('usage: %%prog [chromite_options] %s [options] [target]' %
171 raw_argv[0])
172 parser = optparse.OptionParser(usage=usage_str)
173 parser.add_option('--clean', default=False, action='store_true',
174 help='Clean before building.')
175 (options, argv) = parser.parse_args(raw_argv[1:])
176
177 # Load the build config if needed...
178 if not loaded_config:
179 argv, build_config = utils.GetBuildConfigFromArgs(argv)
180 if argv:
181 cros_lib.Die('Unknown arguments: %s' % ' '.join(argv))
182
183 if not cros_lib.IsInsideChroot():
184 # Note: we only want to clean the chroot if they do --clean and have the
185 # host target. If they do --clean and have a board target, it means
186 # that they just want to clean the board...
187 want_clean_chroot = options.clean and build_config is None
188
189 _DoMakeChroot(chroot_config, want_clean_chroot)
190
191 if build_config is not None:
192 utils.EnterChroot(chroot_config, (self, 'Run'), raw_argv,
193 build_config=build_config, loaded_config=True)
194
195 cros_lib.Info('Done building.')
196 else:
197 if build_config is None:
198 cros_lib.Die("You can't build the host chroot from within the chroot.")
199
200 _DoSetupBoard(build_config, options.clean)
201 _DoBuildPackages(build_config)
202 _DoBuildImage(build_config)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698