12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#!/usr/bin/env python 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved. 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# found in the LICENSE file. 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch"""Script for a testing an existing SDK. 77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochThis script is normally run immediately after build_sdk.py. 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch""" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import optparse 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import os 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochimport subprocess 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import sys 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import buildbot_common 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import build_projects 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import build_sdk 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import build_version 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import parse_dsc 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SDK_SRC_DIR = os.path.dirname(SCRIPT_DIR) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SDK_LIBRARY_DIR = os.path.join(SDK_SRC_DIR, 'libraries') 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SDK_DIR = os.path.dirname(SDK_SRC_DIR) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SRC_DIR = os.path.dirname(SDK_DIR) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OUT_DIR = os.path.join(SRC_DIR, 'out') 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)sys.path.append(os.path.join(SDK_SRC_DIR, 'tools')) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import getos 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochdef StepBuildExamples(pepperdir): 337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) for config in ('Debug', 'Release'): 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch build_sdk.BuildStepMakeAll(pepperdir, 'examples', 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 'Build Examples (%s)' % config, 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) deps=False, config=config) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochdef StepCopyTests(pepperdir, toolchains, build_experimental): 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) buildbot_common.BuildStep('Copy Tests') 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # Update test libraries and test apps 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) filters = { 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 'DEST': ['tests'] 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if not build_experimental: 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) filters['EXPERIMENTAL'] = False 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 49ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch tree = parse_dsc.LoadProjectTree(SDK_SRC_DIR, include=filters) 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch build_projects.UpdateHelpers(pepperdir, clobber=False) 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch build_projects.UpdateProjects(pepperdir, tree, clobber=False, 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) toolchains=toolchains) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochdef StepBuildTests(pepperdir): 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) for config in ('Debug', 'Release'): 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch build_sdk.BuildStepMakeAll(pepperdir, 'tests', 587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 'Build Tests (%s)' % config, 597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch deps=False, config=config) 607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochdef StepRunSelLdrTests(pepperdir): 637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch filters = { 647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 'SEL_LDR': True 657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 67ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch tree = parse_dsc.LoadProjectTree(SDK_SRC_DIR, include=filters) 687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch def RunTest(test, toolchain, arch, config): 707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch args = ['TOOLCHAIN=%s' % toolchain, 'NACL_ARCH=%s' % arch] 717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch args += ['SEL_LDR=1', 'run'] 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch build_projects.BuildProjectsBranch(pepperdir, test, clean=False, 737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch deps=False, config=config, 747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch args=args) 757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if getos.GetPlatform() == 'win': 777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch # On win32 we only support running on the system 787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch # arch 797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch archs = (getos.GetSystemArch('win'),) 807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch elif getos.GetPlatform() == 'mac': 817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch # We only ship 32-bit version of sel_ldr on mac. 827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch archs = ('x86_32',) 837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch else: 847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch # On linux we can run both 32 and 64-bit 857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch archs = ('x86_64', 'x86_32') 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for root, projects in tree.iteritems(): 887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for project in projects: 897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch title = 'sel_ldr tests: %s' % os.path.basename(project['NAME']) 907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch location = os.path.join(root, project['NAME']) 917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch buildbot_common.BuildStep(title) 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for toolchain in ('newlib', 'glibc'): 937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for arch in archs: 947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for config in ('Debug', 'Release'): 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch RunTest(location, toolchain, arch, config) 967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 98ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochdef StepRunBrowserTests(toolchains, experimental): 997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch buildbot_common.BuildStep('Run Tests') 1007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 101ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch args = [ 102ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch sys.executable, 103ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch os.path.join(SCRIPT_DIR, 'test_projects.py'), 104ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ] 1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 106ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if experimental: 107ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch args.append('-x') 108ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch for toolchain in toolchains: 109ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch args.extend(['-t', toolchain]) 1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 111ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch try: 112ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch subprocess.check_call(args) 113ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch except subprocess.CalledProcessError: 1147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch buildbot_common.ErrorExit('Error running tests.') 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def main(args): 1187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch usage = '%prog [<options>] [<phase...>]' 1197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch parser = optparse.OptionParser(description=__doc__, usage=usage) 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) parser.add_option('--experimental', help='build experimental tests', 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) action='store_true') 122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch parser.add_option('--verbose', help='Verbose output', action='store_true') 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 124a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if 'NACL_SDK_ROOT' in os.environ: 125a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) # We don't want the currently configured NACL_SDK_ROOT to have any effect 126a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) # of the build. 127a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) del os.environ['NACL_SDK_ROOT'] 128a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) options, args = parser.parse_args(args[1:]) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pepper_ver = str(int(build_version.ChromeMajorVersion())) 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pepperdir = os.path.join(OUT_DIR, 'pepper_' + pepper_ver) 1337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) toolchains = ['newlib', 'glibc', 'pnacl'] 134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch toolchains.append(getos.GetPlatform()) 135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if options.verbose: 137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch build_projects.verbose = True 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch phases = [ 1407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ('build_examples', StepBuildExamples, pepperdir), 1417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ('copy_tests', StepCopyTests, pepperdir, toolchains, options.experimental), 1427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ('build_tests', StepBuildTests, pepperdir), 1437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ('sel_ldr_tests', StepRunSelLdrTests, pepperdir), 144ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ('browser_tests', StepRunBrowserTests, toolchains, options.experimental), 1457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ] 1467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if args: 1487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch phase_names = [p[0] for p in phases] 1497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for arg in args: 1507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if arg not in phase_names: 1517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch msg = 'Invalid argument: %s\n' % arg 1527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch msg += 'Possible arguments:\n' 1537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for name in phase_names: 1547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch msg += ' %s\n' % name 1557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch parser.error(msg.strip()) 1567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for phase in phases: 1587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch phase_name = phase[0] 1597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if args and phase_name not in args: 1607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch continue 1617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch phase_func = phase[1] 1627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch phase_args = phase[2:] 1637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch phase_func(*phase_args) 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 0 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)if __name__ == '__main__': 16990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) try: 17090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) sys.exit(main(sys.argv)) 17190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) except KeyboardInterrupt: 17290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) buildbot_common.ErrorExit('test_sdk: interrupted') 173