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

Side by Side Diff: tests/callingconv/nacl.scons

Issue 8366024: Add pnacl-gcc generated code back into the callingconv test mix (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client/
Patch Set: '' Created 9 years, 2 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 | « tests/callingconv/generate.py ('k') | 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 # -*- python -*- 1 # -*- python -*-
2 # Copyright 2011 The Native Client Authors. All rights reserved. 2 # Copyright 2011 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('env') 6 Import('env')
7 7
8 # If this test is failing on the bots, you can find the seed 8 # If this test is failing on the bots, you can find the seed
9 # from the output of the bot. Look for "--seed=". 9 # from the output of the bot. Look for "--seed=".
10 # To reproduce the exact problem, set settings['seed'] below 10 # To reproduce the exact problem, set settings['seed'] below
11 # to the fixed seed you found on the bot. 11 # to the fixed seed you found on the bot.
12 12
13 # 13 #
14 # Calling Convention Test 14 # Calling Convention Test
15 # 15 #
16 # The "generate.py" script generates 4 modules (module0.c ... module3.c). 16 # The "generate.py" script generates 4 modules (module0.c ... module3.c).
17 # Each module has functions, and calls to other functions in other modules. 17 # Each module has functions, and calls to other functions in other modules.
18 # Each function has multiple fixed and variable arguments. 18 # Each function has multiple fixed and variable arguments.
19 # This tests (by brute force) the correctness of the calling convention. 19 # This tests (by brute force) the correctness of the calling convention.
20 # 20 #
21 # To test toolchain compatibility, some of the modules are built 21 # To test toolchain compatibility, some of the modules are built
22 # using PNaCl, and some with NNaCl. 22 # using PNaCl, and some with NNaCl.
23 23
24 import random 24 import random
25 25
26 base_env = env.Clone() 26 base_env = env.Clone()
27 callingconv_h = base_env.File('callingconv.h').srcnode() 27 callingconv_h = base_env.File('callingconv.h').srcnode()
28 extra_cflags = [ '-Wno-long-long', '-I' + callingconv_h.dir.abspath ] 28 extra_cflags = [ '-Wno-long-long', '-I' + callingconv_h.dir.abspath ]
29 base_env.Append(CFLAGS = extra_cflags)
30 29
31 settings = { 30 settings = {
32 'num_functions' : 200, 31 'num_functions' : 200,
33 'calls_per_func' : 4, 32 'calls_per_func' : 4,
34 'max_args_per_func': 16, 33 'max_args_per_func': 16,
35 'num_modules' : 4,
36 } 34 }
37 35
38 # va_arg of struct types is broken in PNaCl 36 # va_arg of struct types is broken in PNaCl
39 if env.Bit('bitcode'): 37 if env.Bit('bitcode'):
40 settings['allow_struct_va_arg'] = 0 38 settings['allow_struct_va_arg'] = 0
41 39
42 # Structure passing in PNaCl is broken. 40 # Structure passing in PNaCl is broken.
43 # On X86-32, long long and double in structures are passed 41 # On X86-32, long long and double in structures are passed
44 # with the wrong alignment. 42 # with the wrong alignment.
45 # On X86-64, the ABI is not implemented. 43 # On X86-64, the ABI is not implemented.
46 # There's a good chance ARM has similar problems. 44 # There's a good chance ARM has similar problems.
47 if env.Bit('bitcode'): 45 if env.Bit('bitcode'):
48 settings['allow_struct'] = 0 46 settings['allow_struct'] = 0
49 47
50 # Environments for building module sources 48 # Environments for building module sources
51 envlist = [] 49 envlist = []
52 50
53 if env.Bit('bitcode'): 51 if env.Bit('bitcode'):
54 # For PNaCl, do a mixed test: 52 # For PNaCl, we do a mixed test.
55 # Compile two modules with PNaCl (straight to native code) 53 # Create environments for pnacl-clang, pnacl-gcc, and nacl-gcc.
56 # and the other modules with the native toolchain. 54 # For each environment, we compile a test module straight to native code.
57 pnacl_env = base_env.Clone() 55 pnacl_env = base_env.Clone()
58 pnacl_env.PNaClForceNative() 56 pnacl_env.PNaClForceNative()
59 envlist.append(pnacl_env) 57 envlist.append(pnacl_env)
60 58
59 if env['PNACL_FRONTEND'] == 'clang':
60 alt_env = base_env.PNaClChangeFrontend('llvmgcc')
61 alt_env.PNaClForceNative()
62 envlist.append(alt_env)
63
61 # On X86-32 and X86-64, test against nacl-gcc also. 64 # On X86-32 and X86-64, test against nacl-gcc also.
62 # For ARM, we can only test PNaCl's self-consistency. 65 # For ARM, we can only test PNaCl's self-consistency.
63 if not base_env.Bit('target_arm'): 66 if not base_env.Bit('target_arm'):
64 native_env = base_env.PNaClGetNNaClEnv() # Clears CFLAGS 67 native_env = base_env.PNaClGetNNaClEnv()
65 native_env.Append(CFLAGS = extra_cflags)
66 envlist.append(native_env) 68 envlist.append(native_env)
67 69
68 link_env = pnacl_env 70 link_env = pnacl_env
69 else: 71 else:
70 # For NNaCl toolchain, just test self-consistency 72 # For NNaCl toolchain, just test self-consistency
71 link_env = base_env 73 link_env = base_env
72 envlist.append(base_env) 74 envlist.append(base_env)
73 75
74 num_modules = settings['num_modules'] 76 # Add custom CFLAGS
77 # This must be done here, since PNaClGetNNaClEnv and
78 # PNaclChangeFrontend wipe CFLAGS.
79 for e in envlist:
80 e.Append(CFLAGS = extra_cflags)
81
82 # Create two modules for each environment,
83 # so that we test toolchain self-interaction.
84 envlist = envlist + envlist
85
86 num_modules = len(envlist)
87 settings['num_modules'] = num_modules
75 module_filenames = [ 'module%d.c' % i for i in xrange(num_modules) ] 88 module_filenames = [ 'module%d.c' % i for i in xrange(num_modules) ]
76 89
77 # Generate the module source files (module0.c, module1.c, ...) 90 # Generate the module source files (module0.c, module1.c, ...)
78 settings_args = ['--%s=%s' % (k,str(v)) for k,v in settings.iteritems()] 91 settings_args = ['--%s=%s' % (k,str(v)) for k,v in settings.iteritems()]
79 base_env['GENERATOR_SETTINGS'] = ' '.join(settings_args) 92 base_env['GENERATOR_SETTINGS'] = ' '.join(settings_args)
80 93
81 nodes = base_env.Command( 94 nodes = base_env.Command(
82 ['callingconv.golden'] + module_filenames, 95 ['callingconv.golden'] + module_filenames,
83 base_env.File('generate.py'), 96 base_env.File('generate.py'),
84 Action('${PYTHON} ${SOURCE} ${GENERATOR_SETTINGS} -- ${TARGETS}')) 97 Action('${PYTHON} ${SOURCE} ${GENERATOR_SETTINGS} -- ${TARGETS}'))
85 98
86 # All the modules and callingconv.c depend on the header file 99 # Create the module objects
87 base_env.Depends(nodes, callingconv_h)
88
89 # Assign each module a build environment
90 module_env = []
91 j = 0
92 for i in xrange(num_modules):
93 module_env.append(envlist[j])
94 j = (j+1) % len(envlist)
95
96 # Create the module component objects
97 modules = [] 100 modules = []
98 for i in xrange(num_modules): 101 for i in xrange(num_modules):
99 modules.append(module_env[i].ComponentObject(nodes[i+1])) 102 obj = envlist[i].ComponentObject(nodes[i+1])
103 envlist[i].Depends(obj, callingconv_h)
104 modules.append(obj)
100 105
101 # Compile callingconv.c 106 # Compile callingconv.c
102 callingconv = link_env.ComponentObject('callingconv.c') 107 callingconv = link_env.ComponentObject('callingconv.c')
108 link_env.Depends(callingconv, callingconv_h)
109
103 110
104 prog = link_env.ComponentProgram('callingconv', 111 prog = link_env.ComponentProgram('callingconv',
105 [callingconv] + modules, 112 [callingconv] + modules,
106 EXTRA_LIBS=['${NONIRT_LIBS}']) 113 EXTRA_LIBS=['${NONIRT_LIBS}'])
107 114
108 node = link_env.CommandSelLdrTestNacl( 115 node = link_env.CommandSelLdrTestNacl(
109 'callingconv.out', 116 'callingconv.out',
110 prog, 117 prog,
111 stdout_golden=nodes[0]) 118 stdout_golden=nodes[0])
112 119
113 env.AddNodeToTestSuite(node, ['medium_tests'], 'run_callingconv_test', 120 env.AddNodeToTestSuite(node, ['medium_tests'], 'run_callingconv_test',
114 # This test takes too long to compile for ARM 121 # This test takes too long to compile for ARM
115 # and the resulting code doesn't pass this test. 122 # and the resulting code doesn't pass this test.
116 is_broken=env.Bit('target_arm')) 123 is_broken=env.Bit('target_arm'))
OLDNEW
« no previous file with comments | « tests/callingconv/generate.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698