Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Namespaces | Classes | Functions | Variables
build Namespace Reference

Namespaces

namespace  android
 
namespace  api
 
namespace  canvaskit
 
namespace  chromebook
 
namespace  cmake
 
namespace  default
 
namespace  docker
 
namespace  pathkit
 
namespace  util
 

Classes

class  Artifact
 
class  ArtifactEventHandler
 
class  Page
 
class  Style
 

Functions

 find_images_directories ()
 
 find_artifacts ()
 
 build_for_deploy ()
 
 serve_for_development ()
 
 main ()
 
 BuildOptions ()
 
 NotifyBuildDone (build_config, success, start)
 
 UseRBE (out_dir)
 
 StartRBE (out_dir, env)
 
 StopRBE (env)
 
 BuildOneConfig (options, targets, target_os, mode, arch, sanitizer, env)
 
 RunOneBuildCommand (build_config, args, env)
 
 CheckCleanBuild (build_config, args, env)
 
 SanitizerEnvironmentVariables ()
 
 Build (configs, env, options)
 
 Main ()
 
 GetAllBuilders ()
 

Variables

 level
 
 fmt
 
 datefmt
 
 TOOL_DIR = os.path.dirname(os.path.realpath(__file__))
 
 SDK_DIR = os.path.relpath(os.path.join(TOOL_DIR, '..', '..', '..', '..'))
 
 WIKI_SOURCE_DIR = os.path.join(SDK_DIR, 'runtime', 'docs')
 
 STYLES_DIR = os.path.relpath(os.path.join(TOOL_DIR, '..', 'styles'))
 
 STYLES_INCLUDES_DIR = os.path.join(STYLES_DIR, 'includes')
 
 TEMPLATES_DIR = os.path.relpath(os.path.join(TOOL_DIR, '..', 'templates'))
 
 TEMPLATES_INCLUDES_DIR = os.path.join(TEMPLATES_DIR, 'includes')
 
str PAGE_TEMPLATE = 'page.html'
 
str OUTPUT_DIR = '/tmp/dart-vm-wiki'
 
 OUTPUT_CSS_DIR = os.path.join(OUTPUT_DIR, 'css')
 
 ignore_errors
 
 exist_ok
 
 parser = argparse.ArgumentParser()
 
 dest
 
 action
 
 default
 
 deploy
 
 args = parser.parse_args()
 
 is_dev_mode = not args.deploy
 
 deployment_root = args.deployment_root
 
 jinja2_env
 
 xref_extension = XrefExtension()
 
 HOST_OS = utils.GuessOS()
 
 HOST_CPUS = utils.GuessCpus()
 
 SCRIPT_DIR = os.path.dirname(sys.argv[0])
 
 DART_ROOT = os.path.realpath(os.path.join(SCRIPT_DIR, '..'))
 
 AVAILABLE_ARCHS = utils.ARCH_FAMILY.keys()
 
str usage
 
bool rbe_started = False
 
 bootstrap_path = None
 
str PYTHON_VERSION_COMPATIBILITY = "PY3"
 
list DEPS
 
dict PROPERTIES
 

Detailed Description

Tool used for rendering Dart Native Runtime wiki as HTML.

Usage: runtime/tools/wiki/build/build.py [--deploy]

If invoked without --deploy the tool would serve development version of the
wiki which supports fast edit-(auto)refresh cycle.

If invoked with --deploy it would build deployment version in the
/tmp/dart-vm-wiki directory.

Function Documentation

◆ Build()

build.Build (   configs,
  env,
  options 
)

Definition at line 232 of file build.py.

232def Build(configs, env, options):
233 # Build regular configs.
234 rbe_builds = []
235 for (build_config, args, rbe) in configs:
236 if args is None:
237 return 1
238 if rbe:
239 rbe_builds.append([env, args])
240 elif RunOneBuildCommand(build_config, args, env=env) != 0:
241 return 1
242
243 # Run RBE builds in parallel.
244 active_rbe_builds = []
245 for (env, args) in rbe_builds:
246 print(' '.join(args))
247 process = subprocess.Popen(args, env=env)
248 active_rbe_builds.append([args, process])
249 while active_rbe_builds:
250 time.sleep(0.1)
251 for rbe_build in active_rbe_builds:
252 (args, process) = rbe_build
253 if process.poll() is not None:
254 print(' '.join(args) + " done.")
255 active_rbe_builds.remove(rbe_build)
256 if process.returncode != 0:
257 for (_, to_kill) in active_rbe_builds:
258 to_kill.terminate()
259 return 1
260
261 if options.check_clean:
262 for (build_config, args, rbe) in configs:
263 if CheckCleanBuild(build_config, args, env=env) != 0:
264 return 1
265
266 return 0
267
268
void print(void *str)
Definition bridge.cpp:126

◆ build_for_deploy()

build.build_for_deploy ( )
Create a directory which can be deployed to static hosting.

Definition at line 244 of file build.py.

244def build_for_deploy():
245 """Create a directory which can be deployed to static hosting."""
246 logging.info('Building wiki for deployment into %s', OUTPUT_DIR)
247 Artifact.build_all()
248 for images_dir in find_images_directories():
249 src = os.path.join(WIKI_SOURCE_DIR, images_dir)
250 dst = os.path.join(OUTPUT_DIR, images_dir)
251 logging.info('Copying %s <- %s', dst, src)
252 shutil.rmtree(dst, ignore_errors=True)
253 shutil.copytree(src, dst)
254
255 # Some images directories contain OmniGraffle source files which need
256 # to be removed before
257 logging.info('Removing image source files (*.graffle)')
258 for graffle in Path(OUTPUT_DIR).rglob('*.graffle'):
259 logging.info('... removing %s', graffle.as_posix())
260
261

◆ BuildOneConfig()

build.BuildOneConfig (   options,
  targets,
  target_os,
  mode,
  arch,
  sanitizer,
  env 
)

Definition at line 164 of file build.py.

164def BuildOneConfig(options, targets, target_os, mode, arch, sanitizer, env):
165 build_config = utils.GetBuildConf(mode, arch, target_os, sanitizer)
166 out_dir = utils.GetBuildRoot(HOST_OS, mode, arch, target_os, sanitizer)
167 using_rbe = False
168 command = ['buildtools/ninja/ninja', '-C', out_dir]
169 if options.verbose:
170 command += ['-v']
171 if UseRBE(out_dir):
172 if options.no_start_rbe or StartRBE(out_dir, env):
173 using_rbe = True
174 command += [('-j%s' % str(options.j))]
175 command += [('-l%s' % str(options.l))]
176 else:
177 exit(1)
178 command += targets
179 return (build_config, command, using_rbe)
180
181
GetBuildConf(mode, arch)
Definition utils.py:139
GetBuildRoot(host_os, mode=None, arch=None, sanitizer=None)
Definition utils.py:143

◆ BuildOptions()

build.BuildOptions ( )

Definition at line 30 of file build.py.

30def BuildOptions():
31 parser = argparse.ArgumentParser(
32 description='Runs GN (if necessary) followed by ninja',
33 formatter_class=argparse.ArgumentDefaultsHelpFormatter)
34
35 config_group = parser.add_argument_group('Configuration Related Arguments')
36 gn_py.AddCommonConfigurationArgs(config_group)
37
38 gn_group = parser.add_argument_group('GN Related Arguments')
39 gn_py.AddCommonGnOptionArgs(gn_group)
40
41 other_group = parser.add_argument_group('Other Arguments')
42 gn_py.AddOtherArgs(other_group)
43
44 other_group.add_argument("-j",
45 type=int,
46 help='Ninja -j option for RBE builds.',
47 default=200 if sys.platform == 'win32' else 1000)
48 other_group.add_argument("-l",
49 type=int,
50 help='Ninja -l option for RBE builds.',
51 default=64)
52 other_group.add_argument("--no-start-rbe",
53 help="Don't try to start rbe",
54 default=False,
55 action='store_true')
56 other_group.add_argument(
57 "--check-clean",
58 help="Check that a second invocation of Ninja has nothing to do",
59 default=False,
60 action='store_true')
61
62 parser.add_argument('build_targets', nargs='*')
63
64 return parser
65
66

◆ CheckCleanBuild()

build.CheckCleanBuild (   build_config,
  args,
  env 
)

Definition at line 196 of file build.py.

196def CheckCleanBuild(build_config, args, env):
197 args = args + ['-n', '-d', 'explain']
198 print(' '.join(args))
199 process = subprocess.Popen(args,
200 env=env,
201 stdout=subprocess.PIPE,
202 stderr=subprocess.PIPE,
203 stdin=None)
204 out, err = process.communicate()
205 process.wait()
206 if process.returncode != 0:
207 return 1
208 if 'ninja: no work to do' not in out.decode('utf-8'):
209 print(err.decode('utf-8'))
210 return 1
211
212 return 0
213
214

◆ find_artifacts()

build.find_artifacts ( )
Find all wiki pages and styles and create corresponding Artifacts.

Definition at line 232 of file build.py.

232def find_artifacts():
233 """Find all wiki pages and styles and create corresponding Artifacts."""
234 Artifact.all = {}
235 for file in Path(WIKI_SOURCE_DIR).rglob('*.md'):
236 name = file.relative_to(Path(WIKI_SOURCE_DIR)).as_posix().rsplit(
237 '.', 1)[0]
238 Page(name)
239
240 for file in Path(STYLES_DIR).glob('*.scss'):
241 Style(file.stem)
242
243

◆ find_images_directories()

build.find_images_directories ( )
Find all subdirectories called images within wiki.

Definition at line 224 of file build.py.

224def find_images_directories():
225 """Find all subdirectories called images within wiki."""
226 return [
227 f.relative_to(Path(WIKI_SOURCE_DIR)).as_posix()
228 for f in Path(WIKI_SOURCE_DIR).rglob('images')
229 ]
230
231

◆ GetAllBuilders()

build.GetAllBuilders ( )

Definition at line 21 of file build.py.

21def GetAllBuilders():
22 curl_command = [
23 'curl',
24 'https://ci.chromium.org/p/flutter/g/engine/builders',
25 ]
26 curl_result = subprocess.run(
27 curl_command,
28 universal_newlines=True,
29 capture_output=True,
30 )
31 if curl_result.returncode != 0:
32 print('Failed to fetch builder list: stderr:\n%s' % curl_result.stderr)
33 return []
34 sed_command = [
35 'sed',
36 '-En',
37 's:.*aria-label="builder buildbucket/luci\\.flutter\\.prod/([^/]+)".*:\\1:p',
38 ]
39 sed_result = subprocess.run(
40 sed_command,
41 input=curl_result.stdout,
42 capture_output=True,
43 universal_newlines=True,
44 )
45 if sed_result.returncode != 0:
46 print('Failed to fetch builder list: stderr:\n%s' % sed_result.stderr)
47 return list(set(sed_result.stdout.splitlines()))
48
49

◆ main()

build.main ( )
Main entry point.

Definition at line 348 of file build.py.

348def main():
349 """Main entry point."""
350 find_artifacts()
351 if is_dev_mode:
352 serve_for_development()
353 else:
354 build_for_deploy()
355
356
Definition main.py:1

◆ Main()

build.Main ( )

Definition at line 269 of file build.py.

269def Main():
270 starttime = time.time()
271 # Parse the options.
272 parser = BuildOptions()
273 options = parser.parse_args()
274
275 targets = options.build_targets
276
277 if not gn_py.ProcessOptions(options):
278 parser.print_help()
279 return 1
280
281 # If binaries are built with sanitizers we should use those flags.
282 # If the binaries are not built with sanitizers the flag should have no
283 # effect.
284 env = dict(os.environ)
285 env.update(SanitizerEnvironmentVariables())
286
287 # macOS's python sets CPATH, LIBRARY_PATH, SDKROOT implicitly.
288 #
289 # See:
290 #
291 # * https://openradar.appspot.com/radar?id=5608755232243712
292 # * https://github.com/dart-lang/sdk/issues/52411
293 #
294 # Remove these environment variables to avoid affecting clang's behaviors.
295 if sys.platform == 'darwin':
296 env.pop('CPATH', None)
297 env.pop('LIBRARY_PATH', None)
298 env.pop('SDKROOT', None)
299
300 # Always run GN before building.
301 gn_py.RunGnOnConfiguredConfigurations(options, env)
302
303 # Build all targets for each requested configuration.
304 configs = []
305 for target_os in options.os:
306 for mode in options.mode:
307 for arch in options.arch:
308 for sanitizer in options.sanitizer:
309 configs.append(
310 BuildOneConfig(options, targets, target_os, mode, arch,
311 sanitizer, env))
312
313 exit_code = Build(configs, env, options)
314
315 endtime = time.time()
316
317 StopRBE(env)
318
319 if exit_code == 0:
320 print("The build took %.3f seconds" % (endtime - starttime))
321 return exit_code
322
323

◆ NotifyBuildDone()

build.NotifyBuildDone (   build_config,
  success,
  start 
)

Definition at line 67 of file build.py.

67def NotifyBuildDone(build_config, success, start):
68 if not success:
69 print("BUILD FAILED")
70
71 sys.stdout.flush()
72
73 # Display a notification if build time exceeded DART_BUILD_NOTIFICATION_DELAY.
74 notification_delay = float(
75 os.getenv('DART_BUILD_NOTIFICATION_DELAY', sys.float_info.max))
76 if (time.time() - start) < notification_delay:
77 return
78
79 if success:
80 message = 'Build succeeded.'
81 else:
82 message = 'Build failed.'
83 title = build_config
84
85 command = None
86 if HOST_OS == 'macos':
87 # Use AppleScript to display a UI non-modal notification.
88 script = 'display notification "%s" with title "%s" sound name "Glass"' % (
89 message, title)
90 command = "osascript -e '%s' &" % script
91 elif HOST_OS == 'linux':
92 if success:
93 icon = 'dialog-information'
94 else:
95 icon = 'dialog-error'
96 command = "notify-send -i '%s' '%s' '%s' &" % (icon, message, title)
97 elif HOST_OS == 'win32':
98 if success:
99 icon = 'info'
100 else:
101 icon = 'error'
102 command = (
103 "powershell -command \""
104 "[reflection.assembly]::loadwithpartialname('System.Windows.Forms')"
105 "| Out-Null;"
106 "[reflection.assembly]::loadwithpartialname('System.Drawing')"
107 "| Out-Null;"
108 "$n = new-object system.windows.forms.notifyicon;"
109 "$n.icon = [system.drawing.systemicons]::information;"
110 "$n.visible = $true;"
111 "$n.showballoontip(%d, '%s', '%s', "
112 "[system.windows.forms.tooltipicon]::%s);\"") % (
113 5000, # Notification stays on for this many milliseconds
114 message,
115 title,
116 icon)
117
118 if command:
119 # Ignore return code, if this command fails, it doesn't matter.
120 os.system(command)
121
122

◆ RunOneBuildCommand()

build.RunOneBuildCommand (   build_config,
  args,
  env 
)

Definition at line 182 of file build.py.

182def RunOneBuildCommand(build_config, args, env):
183 start_time = time.time()
184 print(' '.join(args))
185 process = subprocess.Popen(args, env=env, stdin=None)
186 process.wait()
187 if process.returncode != 0:
188 NotifyBuildDone(build_config, success=False, start=start_time)
189 return 1
190 else:
191 NotifyBuildDone(build_config, success=True, start=start_time)
192
193 return 0
194
195

◆ SanitizerEnvironmentVariables()

build.SanitizerEnvironmentVariables ( )

Definition at line 215 of file build.py.

215def SanitizerEnvironmentVariables():
216 with io.open('tools/bots/test_matrix.json', encoding='utf-8') as fd:
217 config = json.loads(fd.read())
218 env = dict()
219 for k, v in config['sanitizer_options'].items():
220 env[str(k)] = str(v)
221 symbolizer_path = config['sanitizer_symbolizer'].get(HOST_OS, None)
222 if symbolizer_path:
223 symbolizer_path = str(os.path.join(DART_ROOT, symbolizer_path))
224 env['ASAN_SYMBOLIZER_PATH'] = symbolizer_path
225 env['LSAN_SYMBOLIZER_PATH'] = symbolizer_path
226 env['MSAN_SYMBOLIZER_PATH'] = symbolizer_path
227 env['TSAN_SYMBOLIZER_PATH'] = symbolizer_path
228 env['UBSAN_SYMBOLIZER_PATH'] = symbolizer_path
229 return env
230
231

◆ serve_for_development()

build.serve_for_development ( )
Serve wiki for development (with hot refresh).

Definition at line 270 of file build.py.

270def serve_for_development():
271 """Serve wiki for development (with hot refresh)."""
272 logging.info('Serving wiki for development')
273 Artifact.build_all()
274
275 # Watch for file modifications and rebuild dependant artifacts when their
276 # dependencies change.
277 event_handler = ArtifactEventHandler()
278 observer = Observer()
279 observer.schedule(event_handler, TEMPLATES_DIR, recursive=False)
280 observer.schedule(event_handler, WIKI_SOURCE_DIR, recursive=True)
281 observer.schedule(event_handler, STYLES_DIR, recursive=True)
282 observer.start()
283
284 async def on_shutdown(app):
285 for ws in app['websockets']:
286 await ws.close(code=WSCloseCode.GOING_AWAY,
287 message='Server shutdown')
288 observer.stop()
289 observer.join()
290
291 async def handle_artifact(name):
292 source_path = os.path.join(OUTPUT_DIR, name)
293 logging.info('Handling source path %s for %s', source_path, name)
294 if source_path in Artifact.all:
295 return web.FileResponse(source_path)
296 else:
297 return web.HTTPNotFound()
298
299 async def handle_page(request):
300 name = request.match_info.get('name', 'index.html')
301 if name == '' or name.endswith('/'):
302 name = name + 'index.html'
303 return await handle_artifact(name)
304
305 async def handle_css(request):
306 name = request.match_info.get('name')
307 return await handle_artifact('css/' + name)
308
309 async def websocket_handler(request):
310 logging.info('websocket connection open')
311 ws = web.WebSocketResponse()
312 await ws.prepare(request)
313
314 loop = asyncio.get_event_loop()
315
316 def notify():
317 logging.info('requesting reload')
318 asyncio.run_coroutine_threadsafe(ws.send_str('reload'), loop)
319
320 Artifact.listeners.append(notify)
321 request.app['websockets'].append(ws)
322 try:
323 async for msg in ws:
324 if msg.type == WSMsgType.ERROR:
325 logging.error(
326 'websocket connection closed with exception %s',
327 ws.exception())
328 finally:
329 logging.info('websocket connection closing')
330 Artifact.listeners.remove(notify)
331 request.app['websockets'].remove(ws)
332
333 logging.info('websocket connection closed')
334 return ws
335
336 app = web.Application()
337 app['websockets'] = []
338 for images_dir in find_images_directories():
339 app.router.add_static('/' + images_dir,
340 os.path.join(WIKI_SOURCE_DIR, images_dir))
341 app.router.add_get('/ws', websocket_handler)
342 app.router.add_get('/css/{name}', handle_css)
343 app.router.add_get('/{name:[^{}]*}', handle_page)
344 app.on_shutdown.append(on_shutdown)
345 web.run_app(app, access_log_format='"%r" %s')
346
347
static void append(char **dst, size_t *count, const char *src, size_t n)
Definition editor.cpp:211

◆ StartRBE()

build.StartRBE (   out_dir,
  env 
)

Definition at line 134 of file build.py.

134def StartRBE(out_dir, env):
135 global rbe_started, bootstrap_path
136 if not rbe_started:
137 rbe_dir = 'buildtools/reclient'
138 with open(os.path.join(out_dir, 'args.gn'), 'r') as fp:
139 for line in fp:
140 if 'rbe_dir' in line:
141 words = line.split()
142 rbe_dir = words[2][1:-1] # rbe_dir = "/path/to/rbe"
143 bootstrap_path = os.path.join(rbe_dir, 'bootstrap')
144 bootstrap_command = [bootstrap_path]
145 process = subprocess.Popen(bootstrap_command, env=env)
146 process.wait()
147 if process.returncode != 0:
148 print('Failed to start RBE')
149 return False
150 rbe_started = True
151 return True
152
153

◆ StopRBE()

build.StopRBE (   env)

Definition at line 154 of file build.py.

154def StopRBE(env):
155 global rbe_started, bootstrap_path
156 if rbe_started:
157 bootstrap_command = [bootstrap_path, '--shutdown']
158 process = subprocess.Popen(bootstrap_command, env=env)
159 process.wait()
160 rbe_started = False
161
162
163# Returns a tuple (build_config, command to run, whether rbe is used)

◆ UseRBE()

build.UseRBE (   out_dir)

Definition at line 123 of file build.py.

123def UseRBE(out_dir):
124 args_gn = os.path.join(out_dir, 'args.gn')
125 return 'use_rbe = true' in open(args_gn, 'r').read()
126
127
128# Try to start RBE, but don't bail out if we can't. Instead print an error
129# message, and let the build fail with its own error messages as well.
static bool read(SkStream *stream, void *buffer, size_t amount)

Variable Documentation

◆ action

build.action

Definition at line 72 of file build.py.

◆ args

build.args = parser.parse_args()

Definition at line 75 of file build.py.

◆ AVAILABLE_ARCHS

build.AVAILABLE_ARCHS = utils.ARCH_FAMILY.keys()

Definition at line 22 of file build.py.

◆ bootstrap_path

build.bootstrap_path = None

Definition at line 131 of file build.py.

◆ DART_ROOT

build.DART_ROOT = os.path.realpath(os.path.join(SCRIPT_DIR, '..'))

Definition at line 21 of file build.py.

◆ datefmt

build.datefmt

Definition at line 45 of file build.py.

◆ default

build.default

Definition at line 73 of file build.py.

◆ deploy

build.deploy

Definition at line 74 of file build.py.

◆ deployment_root

build.deployment_root = args.deployment_root

Definition at line 78 of file build.py.

◆ DEPS

list build.DEPS
Initial value:
1= [
2 'depot_tools/gclient',
3 'docker',
4 'env',
5 'infra',
6 'recipe_engine/context',
7 'recipe_engine/file',
8 'recipe_engine/path',
9 'recipe_engine/step',
10 'run',
11 'vars',
12]

Definition at line 7 of file __init__.py.

◆ dest

build.dest

Definition at line 72 of file build.py.

◆ exist_ok

build.exist_ok

Definition at line 67 of file build.py.

◆ fmt

build.fmt

Definition at line 44 of file build.py.

◆ HOST_CPUS

build.HOST_CPUS = utils.GuessCpus()

Definition at line 19 of file build.py.

◆ HOST_OS

build.HOST_OS = utils.GuessOS()

Definition at line 18 of file build.py.

◆ ignore_errors

build.ignore_errors

Definition at line 66 of file build.py.

◆ is_dev_mode

build.is_dev_mode = not args.deploy

Definition at line 77 of file build.py.

◆ jinja2_env

build.jinja2_env
Initial value:
1= jinja2.Environment(loader=jinja2.FileSystemLoader(TEMPLATES_DIR),
2 lstrip_blocks=True,
3 trim_blocks=True)

Definition at line 81 of file build.py.

◆ level

build.level

Definition at line 43 of file build.py.

◆ OUTPUT_CSS_DIR

build.OUTPUT_CSS_DIR = os.path.join(OUTPUT_DIR, 'css')

Definition at line 63 of file build.py.

◆ OUTPUT_DIR

build.OUTPUT_DIR = '/tmp/dart-vm-wiki'

Definition at line 62 of file build.py.

◆ PAGE_TEMPLATE

str build.PAGE_TEMPLATE = 'page.html'

Definition at line 60 of file build.py.

◆ parser

build.parser = argparse.ArgumentParser()

Definition at line 71 of file build.py.

◆ PROPERTIES

dict build.PROPERTIES
Initial value:
1= {
2 'buildername': Property(default=None),
3}

Definition at line 22 of file __init__.py.

◆ PYTHON_VERSION_COMPATIBILITY

str build.PYTHON_VERSION_COMPATIBILITY = "PY3"

Definition at line 5 of file __init__.py.

◆ rbe_started

bool build.rbe_started = False

Definition at line 130 of file build.py.

◆ SCRIPT_DIR

build.SCRIPT_DIR = os.path.dirname(sys.argv[0])

Definition at line 20 of file build.py.

◆ SDK_DIR

build.SDK_DIR = os.path.relpath(os.path.join(TOOL_DIR, '..', '..', '..', '..'))

Definition at line 50 of file build.py.

◆ STYLES_DIR

build.STYLES_DIR = os.path.relpath(os.path.join(TOOL_DIR, '..', 'styles'))

Definition at line 54 of file build.py.

◆ STYLES_INCLUDES_DIR

build.STYLES_INCLUDES_DIR = os.path.join(STYLES_DIR, 'includes')

Definition at line 55 of file build.py.

◆ TEMPLATES_DIR

build.TEMPLATES_DIR = os.path.relpath(os.path.join(TOOL_DIR, '..', 'templates'))

Definition at line 57 of file build.py.

◆ TEMPLATES_INCLUDES_DIR

build.TEMPLATES_INCLUDES_DIR = os.path.join(TEMPLATES_DIR, 'includes')

Definition at line 58 of file build.py.

◆ TOOL_DIR

build.TOOL_DIR = os.path.dirname(os.path.realpath(__file__))

Definition at line 49 of file build.py.

◆ usage

str build.usage
Initial value:
1= """\
2usage: %%prog [options] [targets]
3
4This script invokes ninja to build Dart.
5"""

Definition at line 24 of file build.py.

◆ WIKI_SOURCE_DIR

build.WIKI_SOURCE_DIR = os.path.join(SDK_DIR, 'runtime', 'docs')

Definition at line 52 of file build.py.

◆ xref_extension

build.xref_extension = XrefExtension()

Definition at line 127 of file build.py.