xref: /freebsd/contrib/jemalloc/scripts/gen_run_tests.py (revision c43cad87172039ccf38172129c79755ea79e6102)
1*c43cad87SWarner Losh<<<<<<< HEAD
2*c43cad87SWarner Losh#!/usr/bin/env python3
3*c43cad87SWarner Losh
4*c43cad87SWarner Loshimport sys
5*c43cad87SWarner Loshfrom itertools import combinations
6*c43cad87SWarner Loshfrom os import uname
7*c43cad87SWarner Loshfrom multiprocessing import cpu_count
8*c43cad87SWarner Loshfrom subprocess import call
9*c43cad87SWarner Losh
10*c43cad87SWarner Losh# Later, we want to test extended vaddr support.  Apparently, the "real" way of
11*c43cad87SWarner Losh# checking this is flaky on OS X.
12*c43cad87SWarner Loshbits_64 = sys.maxsize > 2**32
13*c43cad87SWarner Losh
14*c43cad87SWarner Loshnparallel = cpu_count() * 2
15*c43cad87SWarner Losh
16*c43cad87SWarner Loshuname = uname()[0]
17*c43cad87SWarner Losh
18*c43cad87SWarner Loshif call("command -v gmake", shell=True) == 0:
19*c43cad87SWarner Losh    make_cmd = 'gmake'
20*c43cad87SWarner Loshelse:
21*c43cad87SWarner Losh    make_cmd = 'make'
22*c43cad87SWarner Losh
23*c43cad87SWarner Loshdef powerset(items):
24*c43cad87SWarner Losh    result = []
25*c43cad87SWarner Losh    for i in range(len(items) + 1):
26*c43cad87SWarner Losh        result += combinations(items, i)
27*c43cad87SWarner Losh    return result
28*c43cad87SWarner Losh
29*c43cad87SWarner Loshpossible_compilers = []
30*c43cad87SWarner Loshfor cc, cxx in (['gcc', 'g++'], ['clang', 'clang++']):
31*c43cad87SWarner Losh    try:
32*c43cad87SWarner Losh        cmd_ret = call([cc, "-v"])
33*c43cad87SWarner Losh        if cmd_ret == 0:
34*c43cad87SWarner Losh            possible_compilers.append((cc, cxx))
35*c43cad87SWarner Losh    except:
36*c43cad87SWarner Losh        pass
37*c43cad87SWarner Loshpossible_compiler_opts = [
38*c43cad87SWarner Losh    '-m32',
39*c43cad87SWarner Losh]
40*c43cad87SWarner Loshpossible_config_opts = [
41*c43cad87SWarner Losh    '--enable-debug',
42*c43cad87SWarner Losh    '--enable-prof',
43*c43cad87SWarner Losh    '--disable-stats',
44*c43cad87SWarner Losh    '--enable-opt-safety-checks',
45*c43cad87SWarner Losh    '--with-lg-page=16',
46*c43cad87SWarner Losh]
47*c43cad87SWarner Loshif bits_64:
48*c43cad87SWarner Losh    possible_config_opts.append('--with-lg-vaddr=56')
49*c43cad87SWarner Losh
50*c43cad87SWarner Loshpossible_malloc_conf_opts = [
51*c43cad87SWarner Losh    'tcache:false',
52*c43cad87SWarner Losh    'dss:primary',
53*c43cad87SWarner Losh    'percpu_arena:percpu',
54*c43cad87SWarner Losh    'background_thread:true',
55*c43cad87SWarner Losh]
56*c43cad87SWarner Losh
57*c43cad87SWarner Loshprint('set -e')
58*c43cad87SWarner Loshprint('if [ -f Makefile ] ; then %(make_cmd)s relclean ; fi' % {'make_cmd':
59*c43cad87SWarner Losh    make_cmd})
60*c43cad87SWarner Loshprint('autoconf')
61*c43cad87SWarner Loshprint('rm -rf run_tests.out')
62*c43cad87SWarner Loshprint('mkdir run_tests.out')
63*c43cad87SWarner Loshprint('cd run_tests.out')
64*c43cad87SWarner Losh
65*c43cad87SWarner Loshind = 0
66*c43cad87SWarner Loshfor cc, cxx in possible_compilers:
67*c43cad87SWarner Losh    for compiler_opts in powerset(possible_compiler_opts):
68*c43cad87SWarner Losh        for config_opts in powerset(possible_config_opts):
69*c43cad87SWarner Losh            for malloc_conf_opts in powerset(possible_malloc_conf_opts):
70*c43cad87SWarner Losh                if cc == 'clang' \
71*c43cad87SWarner Losh                  and '-m32' in possible_compiler_opts \
72*c43cad87SWarner Losh                  and '--enable-prof' in config_opts:
73*c43cad87SWarner Losh                    continue
74*c43cad87SWarner Losh                config_line = (
75*c43cad87SWarner Losh                    'EXTRA_CFLAGS=-Werror EXTRA_CXXFLAGS=-Werror '
76*c43cad87SWarner Losh                    + 'CC="{} {}" '.format(cc, " ".join(compiler_opts))
77*c43cad87SWarner Losh                    + 'CXX="{} {}" '.format(cxx, " ".join(compiler_opts))
78*c43cad87SWarner Losh                    + '../../configure '
79*c43cad87SWarner Losh                    + " ".join(config_opts) + (' --with-malloc-conf=' +
80*c43cad87SWarner Losh                    ",".join(malloc_conf_opts) if len(malloc_conf_opts) > 0
81*c43cad87SWarner Losh                    else '')
82*c43cad87SWarner Losh                )
83*c43cad87SWarner Losh
84*c43cad87SWarner Losh                # We don't want to test large vaddr spaces in 32-bit mode.
85*c43cad87SWarner Losh                if ('-m32' in compiler_opts and '--with-lg-vaddr=56' in
86*c43cad87SWarner Losh                    config_opts):
87*c43cad87SWarner Losh                    continue
88*c43cad87SWarner Losh
89*c43cad87SWarner Losh                # Per CPU arenas are only supported on Linux.
90*c43cad87SWarner Losh                linux_supported = ('percpu_arena:percpu' in malloc_conf_opts \
91*c43cad87SWarner Losh                  or 'background_thread:true' in malloc_conf_opts)
92*c43cad87SWarner Losh                # Heap profiling and dss are not supported on OS X.
93*c43cad87SWarner Losh                darwin_unsupported = ('--enable-prof' in config_opts or \
94*c43cad87SWarner Losh                  'dss:primary' in malloc_conf_opts)
95*c43cad87SWarner Losh                if (uname == 'Linux' and linux_supported) \
96*c43cad87SWarner Losh                  or (not linux_supported and (uname != 'Darwin' or \
97*c43cad87SWarner Losh                  not darwin_unsupported)):
98*c43cad87SWarner Losh                    print("""cat <<EOF > run_test_%(ind)d.sh
99*c43cad87SWarner Losh#!/bin/sh
100*c43cad87SWarner Losh
101*c43cad87SWarner Loshset -e
102*c43cad87SWarner Losh
103*c43cad87SWarner Loshabort() {
104*c43cad87SWarner Losh    echo "==> Error" >> run_test.log
105*c43cad87SWarner Losh    echo "Error; see run_tests.out/run_test_%(ind)d.out/run_test.log"
106*c43cad87SWarner Losh    exit 255 # Special exit code tells xargs to terminate.
107*c43cad87SWarner Losh}
108*c43cad87SWarner Losh
109*c43cad87SWarner Losh# Environment variables are not supported.
110*c43cad87SWarner Loshrun_cmd() {
111*c43cad87SWarner Losh    echo "==> \$@" >> run_test.log
112*c43cad87SWarner Losh    \$@ >> run_test.log 2>&1 || abort
113*c43cad87SWarner Losh}
114*c43cad87SWarner Losh
115*c43cad87SWarner Loshecho "=> run_test_%(ind)d: %(config_line)s"
116*c43cad87SWarner Loshmkdir run_test_%(ind)d.out
117*c43cad87SWarner Loshcd run_test_%(ind)d.out
118*c43cad87SWarner Losh
119*c43cad87SWarner Loshecho "==> %(config_line)s" >> run_test.log
120*c43cad87SWarner Losh%(config_line)s >> run_test.log 2>&1 || abort
121*c43cad87SWarner Losh
122*c43cad87SWarner Loshrun_cmd %(make_cmd)s all tests
123*c43cad87SWarner Loshrun_cmd %(make_cmd)s check
124*c43cad87SWarner Loshrun_cmd %(make_cmd)s distclean
125*c43cad87SWarner LoshEOF
126*c43cad87SWarner Loshchmod 755 run_test_%(ind)d.sh""" % {'ind': ind, 'config_line': config_line,
127*c43cad87SWarner Losh      'make_cmd': make_cmd})
128*c43cad87SWarner Losh                    ind += 1
129*c43cad87SWarner Losh
130*c43cad87SWarner Loshprint('for i in `seq 0 %(last_ind)d` ; do echo run_test_${i}.sh ; done | xargs'
131*c43cad87SWarner Losh    ' -P %(nparallel)d -n 1 sh' % {'last_ind': ind-1, 'nparallel': nparallel})
132*c43cad87SWarner Losh||||||| dec341af7695
133*c43cad87SWarner Losh=======
134bf6039f0SWarner Losh#!/usr/bin/env python
135bf6039f0SWarner Losh
136bf6039f0SWarner Loshimport sys
137bf6039f0SWarner Loshfrom itertools import combinations
138bf6039f0SWarner Loshfrom os import uname
139bf6039f0SWarner Loshfrom multiprocessing import cpu_count
140bf6039f0SWarner Loshfrom subprocess import call
141bf6039f0SWarner Losh
142bf6039f0SWarner Losh# Later, we want to test extended vaddr support.  Apparently, the "real" way of
143bf6039f0SWarner Losh# checking this is flaky on OS X.
144bf6039f0SWarner Loshbits_64 = sys.maxsize > 2**32
145bf6039f0SWarner Losh
146bf6039f0SWarner Loshnparallel = cpu_count() * 2
147bf6039f0SWarner Losh
148bf6039f0SWarner Loshuname = uname()[0]
149bf6039f0SWarner Losh
150bf6039f0SWarner Loshif "BSD" in uname:
151bf6039f0SWarner Losh    make_cmd = 'gmake'
152bf6039f0SWarner Loshelse:
153bf6039f0SWarner Losh    make_cmd = 'make'
154bf6039f0SWarner Losh
155bf6039f0SWarner Loshdef powerset(items):
156bf6039f0SWarner Losh    result = []
157bf6039f0SWarner Losh    for i in xrange(len(items) + 1):
158bf6039f0SWarner Losh        result += combinations(items, i)
159bf6039f0SWarner Losh    return result
160bf6039f0SWarner Losh
161bf6039f0SWarner Loshpossible_compilers = []
162bf6039f0SWarner Loshfor cc, cxx in (['gcc', 'g++'], ['clang', 'clang++']):
163bf6039f0SWarner Losh    try:
164bf6039f0SWarner Losh        cmd_ret = call([cc, "-v"])
165bf6039f0SWarner Losh        if cmd_ret == 0:
166bf6039f0SWarner Losh            possible_compilers.append((cc, cxx))
167bf6039f0SWarner Losh    except:
168bf6039f0SWarner Losh        pass
169bf6039f0SWarner Loshpossible_compiler_opts = [
170bf6039f0SWarner Losh    '-m32',
171bf6039f0SWarner Losh]
172bf6039f0SWarner Loshpossible_config_opts = [
173bf6039f0SWarner Losh    '--enable-debug',
174bf6039f0SWarner Losh    '--enable-prof',
175bf6039f0SWarner Losh    '--disable-stats',
176bf6039f0SWarner Losh    '--enable-opt-safety-checks',
177bf6039f0SWarner Losh]
178bf6039f0SWarner Loshif bits_64:
179bf6039f0SWarner Losh    possible_config_opts.append('--with-lg-vaddr=56')
180bf6039f0SWarner Losh
181bf6039f0SWarner Loshpossible_malloc_conf_opts = [
182bf6039f0SWarner Losh    'tcache:false',
183bf6039f0SWarner Losh    'dss:primary',
184bf6039f0SWarner Losh    'percpu_arena:percpu',
185bf6039f0SWarner Losh    'background_thread:true',
186bf6039f0SWarner Losh]
187bf6039f0SWarner Losh
188bf6039f0SWarner Loshprint 'set -e'
189bf6039f0SWarner Loshprint 'if [ -f Makefile ] ; then %(make_cmd)s relclean ; fi' % {'make_cmd': make_cmd}
190bf6039f0SWarner Loshprint 'autoconf'
191bf6039f0SWarner Loshprint 'rm -rf run_tests.out'
192bf6039f0SWarner Loshprint 'mkdir run_tests.out'
193bf6039f0SWarner Loshprint 'cd run_tests.out'
194bf6039f0SWarner Losh
195bf6039f0SWarner Loshind = 0
196bf6039f0SWarner Loshfor cc, cxx in possible_compilers:
197bf6039f0SWarner Losh    for compiler_opts in powerset(possible_compiler_opts):
198bf6039f0SWarner Losh        for config_opts in powerset(possible_config_opts):
199bf6039f0SWarner Losh            for malloc_conf_opts in powerset(possible_malloc_conf_opts):
200bf6039f0SWarner Losh                if cc is 'clang' \
201bf6039f0SWarner Losh                  and '-m32' in possible_compiler_opts \
202bf6039f0SWarner Losh                  and '--enable-prof' in config_opts:
203bf6039f0SWarner Losh                    continue
204bf6039f0SWarner Losh                config_line = (
205bf6039f0SWarner Losh                    'EXTRA_CFLAGS=-Werror EXTRA_CXXFLAGS=-Werror '
206bf6039f0SWarner Losh                    + 'CC="{} {}" '.format(cc, " ".join(compiler_opts))
207bf6039f0SWarner Losh                    + 'CXX="{} {}" '.format(cxx, " ".join(compiler_opts))
208bf6039f0SWarner Losh                    + '../../configure '
209bf6039f0SWarner Losh                    + " ".join(config_opts) + (' --with-malloc-conf=' +
210bf6039f0SWarner Losh                    ",".join(malloc_conf_opts) if len(malloc_conf_opts) > 0
211bf6039f0SWarner Losh                    else '')
212bf6039f0SWarner Losh                )
213bf6039f0SWarner Losh
214bf6039f0SWarner Losh                # We don't want to test large vaddr spaces in 32-bit mode.
215bf6039f0SWarner Losh		if ('-m32' in compiler_opts and '--with-lg-vaddr=56' in
216bf6039f0SWarner Losh                  config_opts):
217bf6039f0SWarner Losh		    continue
218bf6039f0SWarner Losh
219bf6039f0SWarner Losh                # Per CPU arenas are only supported on Linux.
220bf6039f0SWarner Losh                linux_supported = ('percpu_arena:percpu' in malloc_conf_opts \
221bf6039f0SWarner Losh                  or 'background_thread:true' in malloc_conf_opts)
222bf6039f0SWarner Losh                # Heap profiling and dss are not supported on OS X.
223bf6039f0SWarner Losh                darwin_unsupported = ('--enable-prof' in config_opts or \
224bf6039f0SWarner Losh                  'dss:primary' in malloc_conf_opts)
225bf6039f0SWarner Losh                if (uname == 'Linux' and linux_supported) \
226bf6039f0SWarner Losh                  or (not linux_supported and (uname != 'Darwin' or \
227bf6039f0SWarner Losh                  not darwin_unsupported)):
228bf6039f0SWarner Losh                    print """cat <<EOF > run_test_%(ind)d.sh
229bf6039f0SWarner Losh#!/bin/sh
230bf6039f0SWarner Losh
231bf6039f0SWarner Loshset -e
232bf6039f0SWarner Losh
233bf6039f0SWarner Loshabort() {
234bf6039f0SWarner Losh    echo "==> Error" >> run_test.log
235bf6039f0SWarner Losh    echo "Error; see run_tests.out/run_test_%(ind)d.out/run_test.log"
236bf6039f0SWarner Losh    exit 255 # Special exit code tells xargs to terminate.
237bf6039f0SWarner Losh}
238bf6039f0SWarner Losh
239bf6039f0SWarner Losh# Environment variables are not supported.
240bf6039f0SWarner Loshrun_cmd() {
241bf6039f0SWarner Losh    echo "==> \$@" >> run_test.log
242bf6039f0SWarner Losh    \$@ >> run_test.log 2>&1 || abort
243bf6039f0SWarner Losh}
244bf6039f0SWarner Losh
245bf6039f0SWarner Loshecho "=> run_test_%(ind)d: %(config_line)s"
246bf6039f0SWarner Loshmkdir run_test_%(ind)d.out
247bf6039f0SWarner Loshcd run_test_%(ind)d.out
248bf6039f0SWarner Losh
249bf6039f0SWarner Loshecho "==> %(config_line)s" >> run_test.log
250bf6039f0SWarner Losh%(config_line)s >> run_test.log 2>&1 || abort
251bf6039f0SWarner Losh
252bf6039f0SWarner Loshrun_cmd %(make_cmd)s all tests
253bf6039f0SWarner Loshrun_cmd %(make_cmd)s check
254bf6039f0SWarner Loshrun_cmd %(make_cmd)s distclean
255bf6039f0SWarner LoshEOF
256bf6039f0SWarner Loshchmod 755 run_test_%(ind)d.sh""" % {'ind': ind, 'config_line': config_line, 'make_cmd': make_cmd}
257bf6039f0SWarner Losh                    ind += 1
258bf6039f0SWarner Losh
259bf6039f0SWarner Loshprint 'for i in `seq 0 %(last_ind)d` ; do echo run_test_${i}.sh ; done | xargs -P %(nparallel)d -n 1 sh' % {'last_ind': ind-1, 'nparallel': nparallel}
260*c43cad87SWarner Losh>>>>>>> main
261