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

Side by Side Diff: SConstruct

Issue 12594036: Add a scons pnacl finalize step for pnacl_generate_pexe tests. (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client
Patch Set: merge steps Created 7 years, 9 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 | buildbot/buildbot_pnacl_toolchain_tests.sh » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #! -*- python -*- 1 #! -*- python -*-
2 # Copyright (c) 2012 The Native Client Authors. All rights reserved. 2 # Copyright (c) 2012 The Native Client 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 import atexit 6 import atexit
7 import os 7 import os
8 import platform 8 import platform
9 import re 9 import re
10 import subprocess 10 import subprocess
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 BitFromArgument(env, 'x86_64_zero_based_sandbox', default=False, 345 BitFromArgument(env, 'x86_64_zero_based_sandbox', default=False,
346 desc='Use the zero-address-based x86-64 sandbox model instead of ' 346 desc='Use the zero-address-based x86-64 sandbox model instead of '
347 'the r15-based model.') 347 'the r15-based model.')
348 348
349 BitFromArgument(env, 'android', default=False, 349 BitFromArgument(env, 'android', default=False,
350 desc='Build for Android target') 350 desc='Build for Android target')
351 351
352 BitFromArgument(env, 'arm_hard_float', default=False, 352 BitFromArgument(env, 'arm_hard_float', default=False,
353 desc='Build for hard float ARM ABI') 353 desc='Build for hard float ARM ABI')
354 354
355 BitFromArgument(env, 'skip_nonstable_bitcode', default=False,
356 desc='Skip tests involving non-stable bitcode')
357
355 ######################################################################### 358 #########################################################################
356 # EXPERIMENTAL 359 # EXPERIMENTAL
357 # This is for generating a testing library for use within private test 360 # This is for generating a testing library for use within private test
358 # enuminsts, where we want to compare and test different validators. 361 # enuminsts, where we want to compare and test different validators.
359 # 362 #
360 BitFromArgument(env, 'ncval_testing', default=False, 363 BitFromArgument(env, 'ncval_testing', default=False,
361 desc='EXPERIMENTAL: Compile validator code for testing within enuminsts') 364 desc='EXPERIMENTAL: Compile validator code for testing within enuminsts')
362 365
363 # PNaCl sanity checks 366 # PNaCl sanity checks
364 if ((env.Bit('pnacl_generate_pexe') or env.Bit('use_sandboxed_translator')) 367 if ((env.Bit('pnacl_generate_pexe') or env.Bit('use_sandboxed_translator'))
(...skipping 1188 matching lines...) Expand 10 before | Expand all | Expand 10 after
1553 def ShouldUseVerboseOptions(env, extra): 1556 def ShouldUseVerboseOptions(env, extra):
1554 """ Heuristic for setting up Verbose NACLLOG options. """ 1557 """ Heuristic for setting up Verbose NACLLOG options. """
1555 return ('process_output_single' in extra or 1558 return ('process_output_single' in extra or
1556 'log_golden' in extra) 1559 'log_golden' in extra)
1557 1560
1558 pre_base_env.AddMethod(ShouldUseVerboseOptions) 1561 pre_base_env.AddMethod(ShouldUseVerboseOptions)
1559 1562
1560 1563
1561 DeclareBit('tests_use_irt', 'Non-browser tests also load the IRT image', False) 1564 DeclareBit('tests_use_irt', 'Non-browser tests also load the IRT image', False)
1562 1565
1563 # Translate the given pexe. 1566 # Bit to be set by individual test/nacl.scons files that need to opt out.
1564 def GetTranslatedNexe(env, pexe): 1567 DeclareBit('nonstable_bitcode', 'Tests use non-stable bitcode features', False)
1568
1569 def GetFinalizedPexe(env, pexe):
Mark Seaborn 2013/03/28 18:44:17 Nit: 2 empty lines before this to separate top-lev
jvoung (off chromium) 2013/03/28 19:45:31 Done.
1570 """ Prep and finalize the ABI for a given pexe if needed.
1571 """
1572 if not env.Bit('pnacl_generate_pexe') or env.Bit('nonstable_bitcode'):
1573 return pexe
1574
1575 # There is no bitcode for trusted code.
Mark Seaborn 2013/03/28 18:44:17 BTW, is this check necessary? Surely no pexes can
jvoung (off chromium) 2013/03/28 19:45:31 There are a couple of CommandSelLdrTestNaCl() comi
1576 if env['NACL_BUILD_FAMILY'] == 'TRUSTED':
1577 return pexe
1578
1579 # Otherwise, finalize during the build step, since there is no finalize tool
1580 # that can run on triggered bots such as the ARM HW bots.
1565 pexe_name = pexe.abspath 1581 pexe_name = pexe.abspath
1566 nexe_name = pexe_name[:pexe_name.index('.pexe')] + '.nexe' 1582 final_name = pexe_name[:pexe_name.index('.nonfinal.pexe')] + '.final.pexe'
Mark Seaborn 2013/03/28 18:44:17 I think you missed this before: On 2013/03/28 01:
jvoung (off chromium) 2013/03/28 19:45:31 Ah yes, the StripSuffix helper is safer -- using t
1567 # Make sure the pexe doesn't get removed by the fake builders when 1583 # Make sure the pexe doesn't get removed by the fake builders when
1568 # built_elsewhere=1 1584 # built_elsewhere=1
1569 env.Precious(pexe) 1585 env.Precious(pexe)
1570 node = env.Command(target=nexe_name, source=[pexe_name], 1586 node = env.Command(target=final_name, source=[pexe_name],
1571 action=[Action('${TRANSLATECOM}', '${TRANSLATECOMSTR}')]) 1587 action=[Action('${PNACLFINALIZECOM}',
1588 '${PNACLFINALIZECOMSTR}')])
1572 assert len(node) == 1, node 1589 assert len(node) == 1, node
1573 return node[0] 1590 return node[0]
1574 1591
1575 pre_base_env.AddMethod(GetTranslatedNexe)
1576 1592
1593 # Translate the given pexe.
1594 def GetTranslatedNexe(env, pexe):
1595 # First finalize the pexe.
1596 pexe = GetFinalizedPexe(env, pexe)
1577 1597
1578 def ShouldTranslateToNexe(env, pexe): 1598 # Then check if we need to translate.
1579 """ Determine when we need to translate a Pexe to a Nexe.
1580 """
1581 # Check if we started with a pexe, so there is actually a translation step. 1599 # Check if we started with a pexe, so there is actually a translation step.
1582 if not env.Bit('pnacl_generate_pexe'): 1600 if not env.Bit('pnacl_generate_pexe'):
1583 return False 1601 return pexe
1584 1602
1585 # There is no bitcode for trusted code. 1603 # There is no bitcode for trusted code.
1586 if env['NACL_BUILD_FAMILY'] == 'TRUSTED': 1604 if env['NACL_BUILD_FAMILY'] == 'TRUSTED':
1587 return False 1605 return pexe
1588 1606
1589 # Often there is a build step (do_not_run_tests=1) and a test step 1607 # Often there is a build step (do_not_run_tests=1) and a test step
1590 # (which is run with -j1). Normally we want to translate in the build step 1608 # (which is run with -j1). Normally we want to translate in the build step
1591 # so we can translate in parallel. However when we do sandboxed translation 1609 # so we can translate in parallel. However when we do sandboxed translation
1592 # on arm hw, we do the build step on x86 and translation on arm, so we have 1610 # on arm hw, we do the build step on x86 and translation on arm, so we have
1593 # to force the translation to be done in the test step. Hence, 1611 # to force the translation to be done in the test step. Hence,
1594 # we check the bit 'translate_in_build_step' / check if we are 1612 # we check the bit 'translate_in_build_step' / check if we are
1595 # in the test step. 1613 # in the test step.
1596 return ( 1614 if not env.Bit('translate_in_build_step') and env.Bit('do_not_run_tests'):
1597 env.Bit('translate_in_build_step') or not env.Bit('do_not_run_tests')) 1615 return pexe
1598 1616
1599 pre_base_env.AddMethod(ShouldTranslateToNexe) 1617 pexe_name = pexe.abspath
1618 nexe_name = pexe_name[:pexe_name.index('.pexe')] + '.nexe'
Mark Seaborn 2013/03/28 18:44:17 Can you add an assertion here too, please? i.e. as
jvoung (off chromium) 2013/03/28 19:45:31 Done (using the asserting version), and simplified
1619 # Make sure the pexe doesn't get removed by the fake builders when
1620 # built_elsewhere=1
1621 env.Precious(pexe)
1622 node = env.Command(target=nexe_name, source=[pexe_name],
1623 action=[Action('${TRANSLATECOM}', '${TRANSLATECOMSTR}')])
1624 assert len(node) == 1, node
1625 return node[0]
1626
1627 pre_base_env.AddMethod(GetTranslatedNexe)
1600 1628
1601 1629
1602 def CommandTestFileDumpCheck(env, 1630 def CommandTestFileDumpCheck(env,
1603 name, 1631 name,
1604 target, 1632 target,
1605 check_file, 1633 check_file,
1606 objdump_flags): 1634 objdump_flags):
1607 """Create a test that disassembles a binary (|target|) and checks for 1635 """Create a test that disassembles a binary (|target|) and checks for
1608 patterns in the |check_file|. Disassembly is done using |objdump_flags|. 1636 patterns in the |check_file|. Disassembly is done using |objdump_flags|.
1609 """ 1637 """
1610 1638
1611 # Do not try to run OBJDUMP if 'built_elsewhere', since that *might* mean 1639 # Do not try to run OBJDUMP if 'built_elsewhere', since that *might* mean
1612 # that a toolchain is not even present. E.g., the arm hw buildbots do 1640 # that a toolchain is not even present. E.g., the arm hw buildbots do
1613 # not have the pnacl toolchain. We should be able to look for the host 1641 # not have the pnacl toolchain. We should be able to look for the host
1614 # ARM objdump though... a TODO(jvoung) for when there is time. 1642 # ARM objdump though... a TODO(jvoung) for when there is time.
1615 if env.Bit('built_elsewhere'): 1643 if env.Bit('built_elsewhere'):
1616 return [] 1644 return []
1617 if env.ShouldTranslateToNexe(target): 1645 target = env.GetTranslatedNexe(target)
1618 target_obj = env.GetTranslatedNexe(target)
1619 else:
1620 target_obj = target
1621 return env.CommandTestFileCheck(name, 1646 return env.CommandTestFileCheck(name,
1622 ['${OBJDUMP}', objdump_flags, target_obj], 1647 ['${OBJDUMP}', objdump_flags, target],
1623 check_file) 1648 check_file)
1624 1649
1625 pre_base_env.AddMethod(CommandTestFileDumpCheck) 1650 pre_base_env.AddMethod(CommandTestFileDumpCheck)
1626 1651
1627 1652
1628 def CommandTestFileCheck(env, name, cmd, check_file): 1653 def CommandTestFileCheck(env, name, cmd, check_file):
1629 """Create a test that runs a |cmd| (array of strings), 1654 """Create a test that runs a |cmd| (array of strings),
1630 which is expected to print to stdout. The results 1655 which is expected to print to stdout. The results
1631 of stdout will then be piped to the file_check.py tool which 1656 of stdout will then be piped to the file_check.py tool which
1632 will search for the regexes specified in |check_file|. """ 1657 will search for the regexes specified in |check_file|. """
(...skipping 20 matching lines...) Expand all
1653 # e.g., [ 'python', 'time_check.py', '--' ] 1678 # e.g., [ 'python', 'time_check.py', '--' ]
1654 **extra): 1679 **extra):
1655 # Disable all sel_ldr tests for windows under coverage. 1680 # Disable all sel_ldr tests for windows under coverage.
1656 # Currently several .S files block sel_ldr from being instrumented. 1681 # Currently several .S files block sel_ldr from being instrumented.
1657 # See http://code.google.com/p/nativeclient/issues/detail?id=831 1682 # See http://code.google.com/p/nativeclient/issues/detail?id=831
1658 if ('TRUSTED_ENV' in env and 1683 if ('TRUSTED_ENV' in env and
1659 env['TRUSTED_ENV'].Bit('coverage_enabled') and 1684 env['TRUSTED_ENV'].Bit('coverage_enabled') and
1660 env['TRUSTED_ENV'].Bit('windows')): 1685 env['TRUSTED_ENV'].Bit('windows')):
1661 return [] 1686 return []
1662 1687
1663 if env.ShouldTranslateToNexe(nexe): 1688 # The nexe might be a pexe that needs finalization, and translation.
1664 # The nexe is actually a pexe. Translate it before we run it. 1689 nexe = env.GetTranslatedNexe(nexe)
1665 nexe = env.GetTranslatedNexe(nexe) 1690
1666 command = [nexe] 1691 command = [nexe]
1667 if args is not None: 1692 if args is not None:
1668 command += args 1693 command += args
1669 1694
1670 if loader is None: 1695 if loader is None:
1671 loader = env.GetSelLdr() 1696 loader = env.GetSelLdr()
1672 if loader is None: 1697 if loader is None:
1673 print 'WARNING: no sel_ldr found. Skipping test %s' % name 1698 print 'WARNING: no sel_ldr found. Skipping test %s' % name
1674 return [] 1699 return []
1675 1700
(...skipping 2108 matching lines...) Expand 10 before | Expand all | Expand 10 after
3784 nacl_env.ValidateSdk() 3809 nacl_env.ValidateSdk()
3785 3810
3786 if BROKEN_TEST_COUNT > 0: 3811 if BROKEN_TEST_COUNT > 0:
3787 msg = "There are %d broken tests." % BROKEN_TEST_COUNT 3812 msg = "There are %d broken tests." % BROKEN_TEST_COUNT
3788 if GetOption('brief_comstr'): 3813 if GetOption('brief_comstr'):
3789 msg += " Add --verbose to the command line for more information." 3814 msg += " Add --verbose to the command line for more information."
3790 print msg 3815 print msg
3791 3816
3792 # separate warnings from actual build output 3817 # separate warnings from actual build output
3793 Banner('B U I L D - O U T P U T:') 3818 Banner('B U I L D - O U T P U T:')
OLDNEW
« no previous file with comments | « no previous file | buildbot/buildbot_pnacl_toolchain_tests.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698