build_projects.py revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#!/usr/bin/env python 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# Copyright (c) 2013 The Chromium Authors. All rights reserved. 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# found in the LICENSE file. 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import optparse 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import os 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import sys 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import buildbot_common 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import build_version 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import generate_make 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import parse_dsc 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)from build_paths import NACL_DIR, SDK_SRC_DIR, OUT_DIR, SDK_EXAMPLE_DIR 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)from build_paths import GSTORE 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)from generate_index import LandingPage 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)sys.path.append(os.path.join(SDK_SRC_DIR, 'tools')) 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)sys.path.append(os.path.join(NACL_DIR, 'build')) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import getos 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import http_download 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)MAKE = 'nacl_sdk/make_3_81/make.exe' 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)LIB_DICT = { 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 'linux': [], 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 'mac': [], 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 'win': ['x86_32'] 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)def CopyFilesFromTo(filelist, srcdir, dstdir): 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for filename in filelist: 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) srcpath = os.path.join(srcdir, filename) 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dstpath = os.path.join(dstdir, filename) 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) buildbot_common.CopyFile(srcpath, dstpath) 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)def UpdateHelpers(pepperdir, platform, clobber=False): 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if not os.path.exists(os.path.join(pepperdir, 'tools')): 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) buildbot_common.ErrorExit('Examples depend on missing tools.') 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) exampledir = os.path.join(pepperdir, 'examples') 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if clobber: 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) buildbot_common.RemoveDir(exampledir) 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) buildbot_common.MakeDir(exampledir) 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # Copy files for individual bild and landing page 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) files = ['favicon.ico', 'httpd.cmd'] 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CopyFilesFromTo(files, SDK_EXAMPLE_DIR, exampledir) 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) resourcesdir = os.path.join(SDK_EXAMPLE_DIR, 'resources') 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) files = ['index.css', 'index.js', 'button_close.png', 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 'button_close_hover.png'] 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CopyFilesFromTo(files, resourcesdir, exampledir) 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # Copy tools scripts and make includes 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) buildbot_common.CopyDir(os.path.join(SDK_SRC_DIR, 'tools', '*.py'), 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) os.path.join(pepperdir, 'tools')) 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) buildbot_common.CopyDir(os.path.join(SDK_SRC_DIR, 'tools', '*.mk'), 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) os.path.join(pepperdir, 'tools')) 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # On Windows add a prebuilt make 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if platform == 'win': 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) buildbot_common.BuildStep('Add MAKE') 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) http_download.HttpDownload(GSTORE + MAKE, 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) os.path.join(pepperdir, 'tools', 'make.exe')) 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)def UpdateProjects(pepperdir, platform, project_tree, toolchains, 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) clobber=False, configs=None, first_toolchain=False): 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if configs is None: 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) configs = ['Debug', 'Release'] 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if not os.path.exists(os.path.join(pepperdir, 'tools')): 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) buildbot_common.ErrorExit('Examples depend on missing tools.') 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if not os.path.exists(os.path.join(pepperdir, 'toolchain')): 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) buildbot_common.ErrorExit('Examples depend on missing toolchains.') 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # Create the library output directories 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) libdir = os.path.join(pepperdir, 'lib') 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for config in configs: 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for arch in LIB_DICT[platform]: 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dirpath = os.path.join(libdir, '%s_%s_host' % (platform, arch), config) 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if clobber: 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) buildbot_common.RemoveDir(dirpath) 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) buildbot_common.MakeDir(dirpath) 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) landing_page = None 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for branch, projects in project_tree.iteritems(): 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dirpath = os.path.join(pepperdir, branch) 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if clobber: 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) buildbot_common.RemoveDir(dirpath) 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) buildbot_common.MakeDir(dirpath) 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) targets = [desc['NAME'] for desc in projects] 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # Generate master make for this branch of projects 99a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) generate_make.GenerateMasterMakefile(pepperdir, 100a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) os.path.join(pepperdir, branch), 101a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) targets) 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if branch.startswith('examples') and not landing_page: 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) landing_page = LandingPage() 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # Generate individual projects 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for desc in projects: 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) srcroot = os.path.dirname(desc['FILEPATH']) 109a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) generate_make.ProcessProject(pepperdir, srcroot, pepperdir, desc, 110a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) toolchains, configs=configs, 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) first_toolchain=first_toolchain) 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if branch.startswith('examples'): 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) landing_page.AddDesc(desc) 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if landing_page: 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # Generate the landing page text file. 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) index_html = os.path.join(pepperdir, 'examples', 'index.html') 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) example_resources_dir = os.path.join(SDK_EXAMPLE_DIR, 'resources') 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) index_template = os.path.join(example_resources_dir, 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 'index.html.template') 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) with open(index_html, 'w') as fh: 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) out = landing_page.GeneratePage(index_template) 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) fh.write(out) 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # Generate top Make for examples 127b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) targets = ['api', 'demo', 'getting_started', 'tutorial'] 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) targets = [x for x in targets if 'examples/'+x in project_tree] 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) branch_name = 'examples' 130a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) generate_make.GenerateMasterMakefile(pepperdir, 131a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) os.path.join(pepperdir, branch_name), 132a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) targets) 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 13590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)def BuildProjectsBranch(pepperdir, platform, branch, deps, clean, config): 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) make_dir = os.path.join(pepperdir, branch) 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) print "\n\nMake: " + make_dir 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if platform == 'win': 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # We need to modify the environment to build host on Windows. 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) make = os.path.join(make_dir, 'make.bat') 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) else: 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) make = 'make' 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extra_args = ['CONFIG='+config] 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if not deps: 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extra_args += ['IGNORE_DEPS=1'] 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) try: 149a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) buildbot_common.Run([make, '-j8', 'TOOLCHAIN=all'] + extra_args, 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cwd=make_dir) 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) except: 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) print 'Failed to build ' + branch 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) raise 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if clean: 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # Clean to remove temporary files but keep the built 157a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) buildbot_common.Run([make, '-j8', 'clean', 'TOOLCHAIN=all'] + extra_args, 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cwd=make_dir) 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)def BuildProjects(pepperdir, platform, project_tree, deps=True, 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) clean=False, config='Debug'): 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # First build libraries 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) build_order = ['src', 'testlibs'] 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for branch in build_order: 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if branch in project_tree: 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BuildProjectsBranch(pepperdir, platform, branch, deps, clean, config) 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # Build everything else. 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for branch in project_tree: 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if branch not in build_order: 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BuildProjectsBranch(pepperdir, platform, branch, deps, clean, config) 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)def main(args): 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) parser = optparse.OptionParser() 17790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) parser.add_option('-c', '--clobber', 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) help='Clobber project directories before copying new files', 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) action='store_true', default=False) 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) parser.add_option('-b', '--build', 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) help='Build the projects.', action='store_true') 18290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) parser.add_option('--config', 18390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) help='Choose configuration to build (Debug or Release). Builds both ' 18490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 'by default') 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) parser.add_option('-x', '--experimental', 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) help='Build experimental projects', action='store_true') 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) parser.add_option('-t', '--toolchain', 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) help='Build using toolchain. Can be passed more than once.', 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) action='append', default=[]) 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) parser.add_option('-d', '--dest', 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) help='Select which build destinations (project types) are valid.', 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) action='append') 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) parser.add_option('-p', '--project', 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) help='Select which projects are valid.', 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) action='append') 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) parser.add_option('-v', '--verbose', action='store_true') 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 19890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) options, args = parser.parse_args(args[1:]) 19990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if args: 20090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) parser.error('Not expecting any arguments.') 20190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 20290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if 'NACL_SDK_ROOT' in os.environ: 20390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) # We don't want the currently configured NACL_SDK_ROOT to have any effect 20490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) # on the build. 20590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) del os.environ['NACL_SDK_ROOT'] 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pepper_ver = str(int(build_version.ChromeMajorVersion())) 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pepperdir = os.path.join(OUT_DIR, 'pepper_' + pepper_ver) 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) platform = getos.GetPlatform() 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if not options.toolchain: 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) options.toolchain = ['newlib', 'glibc', 'pnacl', 'host'] 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if 'host' in options.toolchain: 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) options.toolchain.append(platform) 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) print 'Adding platform: ' + platform 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) filters = {} 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if options.toolchain: 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) filters['TOOLS'] = options.toolchain 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) print 'Filter by toolchain: ' + str(options.toolchain) 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if not options.experimental: 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) filters['EXPERIMENTAL'] = False 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if options.dest: 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) filters['DEST'] = options.dest 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) print 'Filter by type: ' + str(options.dest) 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if options.project: 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) filters['NAME'] = options.project 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) print 'Filter by name: ' + str(options.project) 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 231a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) project_tree = parse_dsc.LoadProjectTree(SDK_SRC_DIR, filters=filters) 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) parse_dsc.PrintProjectTree(project_tree) 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UpdateHelpers(pepperdir, platform, clobber=options.clobber) 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UpdateProjects(pepperdir, platform, project_tree, options.toolchain, 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) clobber=options.clobber) 23790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if options.build: 23990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if options.config: 24090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) configs = [options.config] 24190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) else: 24290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) configs = ['Debug', 'Release'] 24390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) for config in configs: 24490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BuildProjects(pepperdir, platform, project_tree, config=config) 24590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return 0 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)if __name__ == '__main__': 25090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) try: 25190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) sys.exit(main(sys.argv)) 25290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) except KeyboardInterrupt: 25390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) buildbot_common.ErrorExit('%s: interrupted' % os.path.basename(sys.argv[0])) 254