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

Side by Side Diff: native_client_sdk/src/build_tools/build_sdk.py

Issue 10260032: Missing .exe in windows build. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 7 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Entry point for both build and try bots 6 """Entry point for both build and try bots
7 7
8 This script is invoked from XXX, usually without arguments 8 This script is invoked from XXX, usually without arguments
9 to package an SDK. It automatically determines whether 9 to package an SDK. It automatically determines whether
10 this SDK is for mac, win, linux. 10 this SDK is for mac, win, linux.
11 11
12 The script inspects the following environment variables: 12 The script inspects the following environment variables:
13 13
14 BUILDBOT_BUILDERNAME to determine whether the script is run locally 14 BUILDBOT_BUILDERNAME to determine whether the script is run locally
15 and whether it should upload an SDK to file storage (GSTORE) 15 and whether it should upload an SDK to file storage (GSTORE)
16 """ 16 """
17 17
18 18
19 # std python includes 19 # std python includes
20 import multiprocessing
21 import optparse 20 import optparse
22 import os 21 import os
23 import platform 22 import platform
24 import subprocess
25 import sys 23 import sys
26 24
27 # local includes 25 # local includes
28 import buildbot_common 26 import buildbot_common
29 import build_utils 27 import build_utils
30 import lastchange 28 import lastchange
31 import manifest_util
32 29
33 # Create the various paths of interest 30 # Create the various paths of interest
34 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) 31 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
35 SDK_SRC_DIR = os.path.dirname(SCRIPT_DIR) 32 SDK_SRC_DIR = os.path.dirname(SCRIPT_DIR)
36 SDK_EXAMPLE_DIR = os.path.join(SDK_SRC_DIR, 'examples') 33 SDK_EXAMPLE_DIR = os.path.join(SDK_SRC_DIR, 'examples')
37 SDK_DIR = os.path.dirname(SDK_SRC_DIR) 34 SDK_DIR = os.path.dirname(SDK_SRC_DIR)
38 SRC_DIR = os.path.dirname(SDK_DIR) 35 SRC_DIR = os.path.dirname(SDK_DIR)
39 NACL_DIR = os.path.join(SRC_DIR, 'native_client') 36 NACL_DIR = os.path.join(SRC_DIR, 'native_client')
40 OUT_DIR = os.path.join(SRC_DIR, 'out') 37 OUT_DIR = os.path.join(SRC_DIR, 'out')
41 PPAPI_DIR = os.path.join(SRC_DIR, 'ppapi') 38 PPAPI_DIR = os.path.join(SRC_DIR, 'ppapi')
42 SERVER_DIR = os.path.join(OUT_DIR, 'local_server')
43 39
44 40
45 # Add SDK make tools scripts to the python path. 41 # Add SDK make tools scripts to the python path.
46 sys.path.append(os.path.join(SDK_SRC_DIR, 'tools')) 42 sys.path.append(os.path.join(SDK_SRC_DIR, 'tools'))
47 sys.path.append(os.path.join(NACL_DIR, 'build')) 43 sys.path.append(os.path.join(NACL_DIR, 'build'))
48 44
49 import getos 45 import getos
50 import http_download 46 import http_download
51 import oshelpers 47 import oshelpers
52 48
53 GSTORE = 'http://commondatastorage.googleapis.com/nativeclient-mirror/nacl/' 49 GSTORE = 'http://commondatastorage.googleapis.com/nativeclient-mirror/nacl/'
54 MAKE = 'nacl_sdk/make_3_81/make.exe' 50 MAKE = 'nacl_sdk/make_3_81/make.exe'
55 CYGTAR = os.path.join(NACL_DIR, 'build', 'cygtar.py') 51 CYGTAR = os.path.join(NACL_DIR, 'build', 'cygtar.py')
56 52
57 53
58 def HTTPServerProcess(conn, serve_dir):
59 """Run a local httpserver with a randomly-chosen port.
60
61 This function assumes it is run as a child process using multiprocessing.
62
63 Args:
64 conn: A connection to the parent process. The child process sends
65 the local port, and waits for a message from the parent to
66 stop serving.
67 serve_dir: The directory to serve. All files are accessible through
68 http://localhost:<port>/path/to/filename.
69 """
70 import BaseHTTPServer
71 import SimpleHTTPServer
72
73 os.chdir(serve_dir)
74 httpd = BaseHTTPServer.HTTPServer(('', 0),
75 SimpleHTTPServer.SimpleHTTPRequestHandler)
76 conn.send(httpd.server_address[1]) # the chosen port number
77 httpd.timeout = 0.5 # seconds
78 running = True
79 while running:
80 httpd.handle_request()
81 if conn.poll():
82 running = conn.recv()
83 conn.close()
84
85
86 class LocalHTTPServer(object):
87 """Class to start a local HTTP server as a child process."""
88
89 def __init__(self, serve_dir):
90 parent_conn, child_conn = multiprocessing.Pipe()
91 self.process = multiprocessing.Process(target=HTTPServerProcess,
92 args=(child_conn, serve_dir))
93 self.process.start()
94 if parent_conn.poll(10): # wait 10 seconds
95 self.port = parent_conn.recv()
96 else:
97 raise Exception('Unable to launch HTTP server.')
98
99 self.conn = parent_conn
100
101 def Shutdown(self):
102 """Send a message to the child HTTP server process and wait for it to
103 finish."""
104 self.conn.send(False)
105 self.process.join()
106
107 def GetURL(self, rel_url):
108 """Get the full url for a file on the local HTTP server.
109
110 Args:
111 rel_url: A URL fragment to convert to a full URL. For example,
112 GetURL('foobar.baz') -> 'http://localhost:1234/foobar.baz'
113 """
114 return 'http://localhost:%d/%s' % (self.port, rel_url)
115
116
117 def AddMakeBat(pepperdir, makepath): 54 def AddMakeBat(pepperdir, makepath):
118 """Create a simple batch file to execute Make. 55 """Create a simple batch file to execute Make.
119 56
120 Creates a simple batch file named make.bat for the Windows platform at the 57 Creates a simple batch file named make.bat for the Windows platform at the
121 given path, pointing to the Make executable in the SDK.""" 58 given path, pointing to the Make executable in the SDK."""
122 59
123 makepath = os.path.abspath(makepath) 60 makepath = os.path.abspath(makepath)
124 if not makepath.startswith(pepperdir): 61 if not makepath.startswith(pepperdir):
125 buildbot_common.ErrorExit('Make.bat not relative to Pepper directory: ' + 62 buildbot_common.ErrorExit('Make.bat not relative to Pepper directory: ' +
126 makepath) 63 makepath)
127 64
128 makeexe = os.path.abspath(os.path.join(pepperdir, 'tools')) 65 makeexe = os.path.abspath(os.path.join(pepperdir, 'tools'))
129 relpath = os.path.relpath(makeexe, makepath) 66 relpath = os.path.relpath(makeexe, makepath)
130 67
131 fp = open(os.path.join(makepath, 'make.bat'), 'wb') 68 fp = open(os.path.join(makepath, 'make.bat'), 'wb')
132 outpath = os.path.join(relpath, 'make.exe') 69 outpath = os.path.join(relpath, 'make.exe')
133 70
134 # Since make.bat is only used by Windows, for Windows path style 71 # Since make.bat is only used by Windows, for Windows path style
135 outpath = outpath.replace(os.path.sep, '\\') 72 outpath = outpath.replace(os.path.sep, '\\')
136 fp.write('@%s %%*\n' % outpath) 73 fp.write('@%s %%*\n' % outpath)
137 fp.close() 74 fp.close()
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 ppapi = os.path.join(tc_dst_inc, 'ppapi') 195 ppapi = os.path.join(tc_dst_inc, 'ppapi')
259 buildbot_common.RemoveDir(ppapi) 196 buildbot_common.RemoveDir(ppapi)
260 197
261 # Copy in c and c/dev headers 198 # Copy in c and c/dev headers
262 buildbot_common.MakeDir(os.path.join(ppapi, 'c', 'dev')) 199 buildbot_common.MakeDir(os.path.join(ppapi, 'c', 'dev'))
263 buildbot_common.CopyDir(os.path.join(PPAPI_DIR, 'c', '*.h'), 200 buildbot_common.CopyDir(os.path.join(PPAPI_DIR, 'c', '*.h'),
264 os.path.join(ppapi, 'c')) 201 os.path.join(ppapi, 'c'))
265 buildbot_common.CopyDir(os.path.join(PPAPI_DIR, 'c', 'dev', '*.h'), 202 buildbot_common.CopyDir(os.path.join(PPAPI_DIR, 'c', 'dev', '*.h'),
266 os.path.join(ppapi, 'c', 'dev')) 203 os.path.join(ppapi, 'c', 'dev'))
267 204
268 # Run the generator to overwrite IDL files 205 # Run the generator to overwrite IDL files
269 buildbot_common.Run([sys.executable, 'generator.py', '--wnone', '--cgen', 206 buildbot_common.Run([sys.executable, 'generator.py', '--wnone', '--cgen',
270 '--release=M' + pepper_ver, '--verbose', '--dstroot=%s/c' % ppapi], 207 '--release=M' + pepper_ver, '--verbose', '--dstroot=%s/c' % ppapi],
271 cwd=os.path.join(PPAPI_DIR, 'generators')) 208 cwd=os.path.join(PPAPI_DIR, 'generators'))
272 209
273 # Remove private and trusted interfaces 210 # Remove private and trusted interfaces
274 buildbot_common.RemoveDir(os.path.join(ppapi, 'c', 'private')) 211 buildbot_common.RemoveDir(os.path.join(ppapi, 'c', 'private'))
275 buildbot_common.RemoveDir(os.path.join(ppapi, 'c', 'trusted')) 212 buildbot_common.RemoveDir(os.path.join(ppapi, 'c', 'trusted'))
276 213
277 # Copy in the C++ headers 214 # Copy in the C++ headers
278 buildbot_common.MakeDir(os.path.join(ppapi, 'cpp', 'dev')) 215 buildbot_common.MakeDir(os.path.join(ppapi, 'cpp', 'dev'))
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 tcname = platform + '_' + arch 252 tcname = platform + '_' + arch
316 tmpdir = os.path.join(SRC_DIR, 'out', 'tc_temp') 253 tmpdir = os.path.join(SRC_DIR, 'out', 'tc_temp')
317 buildbot_common.RemoveDir(tmpdir) 254 buildbot_common.RemoveDir(tmpdir)
318 buildbot_common.MakeDir(tmpdir) 255 buildbot_common.MakeDir(tmpdir)
319 256
320 if 'newlib' in toolchains: 257 if 'newlib' in toolchains:
321 # Untar the newlib toolchains 258 # Untar the newlib toolchains
322 tarfile = GetNewlibToolchain(platform, arch) 259 tarfile = GetNewlibToolchain(platform, arch)
323 buildbot_common.Run([sys.executable, CYGTAR, '-C', tmpdir, '-xf', tarfile], 260 buildbot_common.Run([sys.executable, CYGTAR, '-C', tmpdir, '-xf', tarfile],
324 cwd=NACL_DIR) 261 cwd=NACL_DIR)
325 262
326 # Then rename/move it to the pepper toolchain directory 263 # Then rename/move it to the pepper toolchain directory
327 srcdir = os.path.join(tmpdir, 'sdk', 'nacl-sdk') 264 srcdir = os.path.join(tmpdir, 'sdk', 'nacl-sdk')
328 newlibdir = os.path.join(pepperdir, 'toolchain', tcname + '_newlib') 265 newlibdir = os.path.join(pepperdir, 'toolchain', tcname + '_newlib')
329 buildbot_common.Move(srcdir, newlibdir) 266 buildbot_common.Move(srcdir, newlibdir)
330 267
331 if 'glibc' in toolchains: 268 if 'glibc' in toolchains:
332 # Untar the glibc toolchains 269 # Untar the glibc toolchains
333 tarfile = GetGlibcToolchain(platform, arch) 270 tarfile = GetGlibcToolchain(platform, arch)
334 buildbot_common.Run([sys.executable, CYGTAR, '-C', tmpdir, '-xf', tarfile], 271 buildbot_common.Run([sys.executable, CYGTAR, '-C', tmpdir, '-xf', tarfile],
335 cwd=NACL_DIR) 272 cwd=NACL_DIR)
336 273
337 # Then rename/move it to the pepper toolchain directory 274 # Then rename/move it to the pepper toolchain directory
338 srcdir = os.path.join(tmpdir, 'toolchain', tcname) 275 srcdir = os.path.join(tmpdir, 'toolchain', tcname)
339 glibcdir = os.path.join(pepperdir, 'toolchain', tcname + '_glibc') 276 glibcdir = os.path.join(pepperdir, 'toolchain', tcname + '_glibc')
340 buildbot_common.Move(srcdir, glibcdir) 277 buildbot_common.Move(srcdir, glibcdir)
341 278
342 # Untar the pnacl toolchains 279 # Untar the pnacl toolchains
343 if 'pnacl' in toolchains: 280 if 'pnacl' in toolchains:
344 tmpdir = os.path.join(tmpdir, 'pnacl') 281 tmpdir = os.path.join(tmpdir, 'pnacl')
345 buildbot_common.RemoveDir(tmpdir) 282 buildbot_common.RemoveDir(tmpdir)
346 buildbot_common.MakeDir(tmpdir) 283 buildbot_common.MakeDir(tmpdir)
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 buildbot_common.ErrorExit('Missing arch %s' % arch) 342 buildbot_common.ErrorExit('Missing arch %s' % arch)
406 343
407 344
408 EXAMPLE_MAP = { 345 EXAMPLE_MAP = {
409 'newlib': [ 346 'newlib': [
410 'debugging', 347 'debugging',
411 'file_histogram', 348 'file_histogram',
412 'fullscreen_tumbler', 349 'fullscreen_tumbler',
413 'gamepad', 350 'gamepad',
414 'geturl', 351 'geturl',
415 'hello_world_interactive', 352 'hello_world_interactive',
416 'hello_world_newlib', 353 'hello_world_newlib',
417 'input_events', 354 'input_events',
418 'load_progress', 355 'load_progress',
419 'mouselock', 356 'mouselock',
420 'multithreaded_input_events', 357 'multithreaded_input_events',
421 'pi_generator', 358 'pi_generator',
422 'pong', 359 'pong',
423 'sine_synth', 360 'sine_synth',
424 'tumbler', 361 'tumbler',
425 'websocket' 362 'websocket'
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 buildbot_common.Run([sys.executable, CYGTAR, '-C', 451 buildbot_common.Run([sys.executable, CYGTAR, '-C',
515 os.path.join(OUT_DIR, sdktoolsdir), '-czf', tarname] + files_to_tar, 452 os.path.join(OUT_DIR, sdktoolsdir), '-czf', tarname] + files_to_tar,
516 cwd=NACL_DIR) 453 cwd=NACL_DIR)
517 sys.stdout.write('\n') 454 sys.stdout.write('\n')
518 455
519 456
520 def main(args): 457 def main(args):
521 parser = optparse.OptionParser() 458 parser = optparse.OptionParser()
522 parser.add_option('--pnacl', help='Enable pnacl build.', 459 parser.add_option('--pnacl', help='Enable pnacl build.',
523 action='store_true', dest='pnacl', default=False) 460 action='store_true', dest='pnacl', default=False)
524 parser.add_option('--examples', help='Only build the examples.', 461 parser.add_option('--examples', help='Rebuild the examples.',
525 action='store_true', dest='only_examples', default=False) 462 action='store_true', dest='examples', default=False)
526 parser.add_option('--update', help='Only build the updater.', 463 parser.add_option('--update', help='Rebuild the updater.',
527 action='store_true', dest='only_updater', default=False) 464 action='store_true', dest='update', default=False)
528 parser.add_option('--skip-tar', help='Skip generating a tarball.', 465 parser.add_option('--skip-tar', help='Skip generating a tarball.',
529 action='store_true', dest='skip_tar', default=False) 466 action='store_true', dest='skip_tar', default=False)
530 parser.add_option('--archive', help='Force the archive step.', 467 parser.add_option('--archive', help='Force the archive step.',
531 action='store_true', dest='archive', default=False) 468 action='store_true', dest='archive', default=False)
532 parser.add_option('--release', help='PPAPI release version.', 469 parser.add_option('--release', help='PPAPI release version.',
533 dest='release', default=None) 470 dest='release', default=None)
534 471
535 options, args = parser.parse_args(args[1:]) 472 options, args = parser.parse_args(args[1:])
536 platform = getos.GetPlatform() 473 platform = getos.GetPlatform()
537 arch = 'x86' 474 arch = 'x86'
538 475
539 builder_name = os.getenv('BUILDBOT_BUILDERNAME','') 476 builder_name = os.getenv('BUILDBOT_BUILDERNAME','')
540 if builder_name.find('pnacl') >= 0 and builder_name.find('sdk') >= 0: 477 if builder_name.find('pnacl') >= 0 and builder_name.find('sdk') >= 0:
541 options.pnacl = True 478 options.pnacl = True
542 479
543 if options.pnacl: 480 if options.pnacl:
544 toolchains = ['pnacl'] 481 toolchains = ['pnacl']
545 else: 482 else:
546 toolchains = ['newlib', 'glibc'] 483 toolchains = ['newlib', 'glibc']
547 print 'Building: ' + ' '.join(toolchains) 484 print 'Building: ' + ' '.join(toolchains)
548 skip = options.only_examples or options.only_updater 485 skip = options.examples or options.update
549 486
550 skip_examples = skip and not options.only_examples 487 skip_examples = skip
551 skip_update = skip and not options.only_updater 488 skip_update = skip
552 skip_untar = skip 489 skip_untar = skip
553 skip_build = skip 490 skip_build = skip
554 skip_test_updater = skip
555 skip_tar = skip or options.skip_tar 491 skip_tar = skip or options.skip_tar
556 492
557 if options.archive and (options.only_examples or options.skip_tar): 493
494 if options.examples: skip_examples = False
495 skip_update = not options.update
496
497 if options.archive and (options.examples or options.skip_tar):
558 parser.error('Incompatible arguments with archive.') 498 parser.error('Incompatible arguments with archive.')
559 499
560 pepper_ver = str(int(build_utils.ChromeMajorVersion())) 500 pepper_ver = str(int(build_utils.ChromeMajorVersion()))
501 pepper_old = str(int(build_utils.ChromeMajorVersion()) - 1)
561 clnumber = lastchange.FetchVersionInfo(None).revision 502 clnumber = lastchange.FetchVersionInfo(None).revision
562 if options.release: 503 if options.release:
563 pepper_ver = options.release 504 pepper_ver = options.release
564 print 'Building PEPPER %s at %s' % (pepper_ver, clnumber) 505 print 'Building PEPPER %s at %s' % (pepper_ver, clnumber)
565 506
566 if not skip_build: 507 if not skip_build:
567 buildbot_common.BuildStep('Rerun hooks to get toolchains') 508 buildbot_common.BuildStep('Rerun hooks to get toolchains')
568 buildbot_common.Run(['gclient', 'runhooks'], 509 buildbot_common.Run(['gclient', 'runhooks'],
569 cwd=SRC_DIR, shell=(platform=='win')) 510 cwd=SRC_DIR, shell=(platform=='win'))
570 511
571 pepperdir = os.path.join(SRC_DIR, 'out', 'pepper_' + pepper_ver) 512 buildbot_common.BuildStep('Clean Pepper Dirs')
513 pepperdir = os.path.join(SRC_DIR, 'out', 'pepper_' + pepper_ver)
514 pepperold = os.path.join(SRC_DIR, 'out', 'pepper_' + pepper_old)
515 buildbot_common.RemoveDir(pepperold)
572 if not skip_untar: 516 if not skip_untar:
573 buildbot_common.BuildStep('Clean Pepper Dir')
574 buildbot_common.RemoveDir(pepperdir) 517 buildbot_common.RemoveDir(pepperdir)
575 buildbot_common.MakeDir(os.path.join(pepperdir, 'toolchain')) 518 buildbot_common.MakeDir(os.path.join(pepperdir, 'toolchain'))
576 buildbot_common.MakeDir(os.path.join(pepperdir, 'tools')) 519 buildbot_common.MakeDir(os.path.join(pepperdir, 'tools'))
577 else:
578 buildbot_common.MakeDir(pepperdir)
579 520
580 if not skip_build: 521 buildbot_common.BuildStep('Add Text Files')
581 buildbot_common.BuildStep('Add Text Files') 522 files = ['AUTHORS', 'COPYING', 'LICENSE', 'NOTICE', 'README']
582 files = ['AUTHORS', 'COPYING', 'LICENSE', 'NOTICE', 'README'] 523 files = [os.path.join(SDK_SRC_DIR, filename) for filename in files]
583 files = [os.path.join(SDK_SRC_DIR, filename) for filename in files] 524 oshelpers.Copy(['-v'] + files + [pepperdir])
584 oshelpers.Copy(['-v'] + files + [pepperdir])
585 525
586 526
587 # Clean out the temporary toolchain untar directory 527 # Clean out the temporary toolchain untar directory
588 if not skip_untar: 528 if not skip_untar:
589 UntarToolchains(pepperdir, platform, arch, toolchains) 529 UntarToolchains(pepperdir, platform, arch, toolchains)
590 530
591 if not skip_build: 531 if not skip_build:
592 BuildToolchains(pepperdir, platform, arch, pepper_ver, toolchains) 532 BuildToolchains(pepperdir, platform, arch, pepper_ver, toolchains)
593 533
594 if not skip_build: 534 buildbot_common.BuildStep('Copy make OS helpers')
595 buildbot_common.BuildStep('Copy make OS helpers') 535 buildbot_common.CopyDir(os.path.join(SDK_SRC_DIR, 'tools', '*.py'),
596 buildbot_common.CopyDir(os.path.join(SDK_SRC_DIR, 'tools', '*.py'), 536 os.path.join(pepperdir, 'tools'))
597 os.path.join(pepperdir, 'tools')) 537 if platform == 'win':
598 if platform == 'win': 538 buildbot_common.BuildStep('Add MAKE')
599 buildbot_common.BuildStep('Add MAKE') 539 http_download.HttpDownload(GSTORE + MAKE,
600 http_download.HttpDownload(GSTORE + MAKE, 540 os.path.join(pepperdir, 'tools' ,'make.exe'))
601 os.path.join(pepperdir, 'tools' ,'make.exe')) 541 # Add missing extention to Windows apps
542 rename_list = ['ncval_x86_32', 'ncval_x86_64',
543 » » 'sel_ldr_x86_32', 'sel_ldr_x86_64']
binji 2012/05/01 17:24:18 remove tabs
544 tools = os.path.join(pepperdir, 'tools')
545 for name in rename_list:
546 buildbot_common.Move(os.path.join(tools, name),
547 » » » os.path.join(tools, name + '.exe'))
binji 2012/05/01 17:24:18 remove tabs
548
602 549
603 if not skip_examples: 550 if not skip_examples:
604 CopyExamples(pepperdir, toolchains) 551 CopyExamples(pepperdir, toolchains)
605 552
606 tarname = 'naclsdk_' + platform + '.bz2'
607 if 'pnacl' in toolchains:
608 tarname = 'p' + tarname
609 tarfile = os.path.join(OUT_DIR, tarname)
610
611 if not skip_tar: 553 if not skip_tar:
612 buildbot_common.BuildStep('Tar Pepper Bundle') 554 buildbot_common.BuildStep('Tar Pepper Bundle')
555 tarname = 'naclsdk_' + platform + '.bz2'
556 if 'pnacl' in toolchains:
557 tarname = 'p' + tarname
558 tarfile = os.path.join(OUT_DIR, tarname)
613 buildbot_common.Run([sys.executable, CYGTAR, '-C', OUT_DIR, '-cjf', tarfile, 559 buildbot_common.Run([sys.executable, CYGTAR, '-C', OUT_DIR, '-cjf', tarfile,
614 'pepper_' + pepper_ver], cwd=NACL_DIR) 560 'pepper_' + pepper_ver], cwd=NACL_DIR)
615 561
616 # build sdk update 562 # Archive on non-trybots.
617 if not skip_update: 563 if options.archive or '-sdk' in os.environ.get('BUILDBOT_BUILDERNAME', ''):
618 BuildUpdater() 564 buildbot_common.BuildStep('Archive build')
565 buildbot_common.Archive(tarname,
566 'nativeclient-mirror/nacl/nacl_sdk/%s' % build_utils.ChromeVersion(),
567 OUT_DIR)
619 568
620 # start local server sharing a manifest + the new bundle
621 if not skip_test_updater:
622 buildbot_common.BuildStep('Move bundle to localserver dir')
623 buildbot_common.MakeDir(SERVER_DIR)
624 buildbot_common.Move(tarfile, SERVER_DIR)
625 tarfile = os.path.join(SERVER_DIR, tarname)
626
627 server = None
628 try:
629 buildbot_common.BuildStep('Run local server')
630 server = LocalHTTPServer(SERVER_DIR)
631
632 buildbot_common.BuildStep('Generate manifest')
633 with open(tarfile, 'rb') as tarfile_stream:
634 archive_sha1, archive_size = manifest_util.DownloadAndComputeHash(
635 tarfile_stream)
636 archive = manifest_util.Archive(manifest_util.GetHostOS())
637 archive.CopyFrom({'url': server.GetURL(tarname),
638 'size': archive_size,
639 'checksum': {'sha1': archive_sha1}})
640 bundle = manifest_util.Bundle('pepper_' + pepper_ver)
641 bundle.CopyFrom({
642 'revision': clnumber,
643 'repath': 'pepper_' + pepper_ver,
644 'version': pepper_ver,
645 'description': 'Chrome %s bundle, revision %s' % (
646 pepper_ver, clnumber),
647 'stability': 'dev',
648 'recommended': 'no',
649 'archives': [archive]})
650 manifest = manifest_util.SDKManifest()
651 manifest.SetBundle(bundle)
652 manifest_name = 'naclsdk_manifest2.json'
653 with open(os.path.join(SERVER_DIR, manifest_name), 'wb') as \
654 manifest_stream:
655 manifest_stream.write(manifest.GetDataAsString())
656
657 # use newly built sdk updater to pull this bundle
658 buildbot_common.BuildStep('Update from local server')
659 updater_py = os.path.join(OUT_DIR, 'nacl_sdk', 'sdk_tools',
660 'sdk_update.py')
661 buildbot_common.Run([sys.executable, updater_py, '-U',
662 server.GetURL(manifest_name), 'update', 'pepper_' + pepper_ver])
663
664 # If we are testing examples, do it in the newly pulled directory.
665 pepperdir = os.path.join(OUT_DIR, 'nacl_sdk', 'pepper_' + pepper_ver)
666
667 # kill server
668 finally:
669 if server:
670 server.Shutdown()
671
672 # build examples.
673 if not skip_examples: 569 if not skip_examples:
674 buildbot_common.BuildStep('Test Build Examples') 570 buildbot_common.BuildStep('Test Build Examples')
675 filelist = os.listdir(os.path.join(pepperdir, 'examples')) 571 filelist = os.listdir(os.path.join(pepperdir, 'examples'))
676 for filenode in filelist: 572 for filenode in filelist:
677 dirnode = os.path.join(pepperdir, 'examples', filenode) 573 dirnode = os.path.join(pepperdir, 'examples', filenode)
678 makefile = os.path.join(dirnode, 'Makefile') 574 makefile = os.path.join(dirnode, 'Makefile')
679 if os.path.isfile(makefile): 575 if os.path.isfile(makefile):
680 print "\n\nMake: " + dirnode 576 print "\n\nMake: " + dirnode
681 buildbot_common.Run(['make', 'all', '-j8'], 577 buildbot_common.Run(['make', 'all', '-j8'],
682 cwd=os.path.abspath(dirnode), shell=True) 578 cwd=os.path.abspath(dirnode), shell=True)
683 579
684 # Archive on non-trybots. 580 # Build SDK Tools
685 if options.archive or '-sdk' in os.environ.get('BUILDBOT_BUILDERNAME', ''): 581 if not skip_update:
686 buildbot_common.BuildStep('Archive build') 582 BuildUpdater()
687 bucket_path = 'nativeclient-mirror/nacl/nacl_sdk/%s' % \
688 build_utils.ChromeVersion()
689 buildbot_common.Archive(tarname, bucket_path, os.path.dirname(tarfile))
690
691 # generate "manifest snippet" for this archive.
692 if not skip_test_updater:
693 archive = bundle.GetArchive(manifest_util.GetHostOS())
694 archive.url = 'https://commondatastorage.googleapis.com/' \
695 'nativeclient-mirror/nacl/nacl_sdk/%s/%s' % (
696 build_utils.ChromeVersion(), tarname)
697 manifest_snippet_file = os.path.join(OUT_DIR, tarname + '.json')
698 with open(manifest_snippet_file, 'wb') as manifest_snippet_stream:
699 manifest_snippet_stream.write(bundle.ToJSON())
700
701 buildbot_common.Archive(tarname + '.json', bucket_path, OUT_DIR,
702 step_link=False)
703 583
704 return 0 584 return 0
705 585
706 586
707 if __name__ == '__main__': 587 if __name__ == '__main__':
708 sys.exit(main(sys.argv)) 588 sys.exit(main(sys.argv))
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698