xref: /aosp_15_r20/external/jemalloc_new/scripts/gen_run_tests.py (revision 1208bc7e437ced7eb82efac44ba17e3beba411da)
1*1208bc7eSAndroid Build Coastguard Worker#!/usr/bin/env python
2*1208bc7eSAndroid Build Coastguard Worker
3*1208bc7eSAndroid Build Coastguard Workerimport sys
4*1208bc7eSAndroid Build Coastguard Workerfrom itertools import combinations
5*1208bc7eSAndroid Build Coastguard Workerfrom os import uname
6*1208bc7eSAndroid Build Coastguard Workerfrom multiprocessing import cpu_count
7*1208bc7eSAndroid Build Coastguard Worker
8*1208bc7eSAndroid Build Coastguard Worker# Later, we want to test extended vaddr support.  Apparently, the "real" way of
9*1208bc7eSAndroid Build Coastguard Worker# checking this is flaky on OS X.
10*1208bc7eSAndroid Build Coastguard Workerbits_64 = sys.maxsize > 2**32
11*1208bc7eSAndroid Build Coastguard Worker
12*1208bc7eSAndroid Build Coastguard Workernparallel = cpu_count() * 2
13*1208bc7eSAndroid Build Coastguard Worker
14*1208bc7eSAndroid Build Coastguard Workeruname = uname()[0]
15*1208bc7eSAndroid Build Coastguard Worker
16*1208bc7eSAndroid Build Coastguard Workerdef powerset(items):
17*1208bc7eSAndroid Build Coastguard Worker    result = []
18*1208bc7eSAndroid Build Coastguard Worker    for i in xrange(len(items) + 1):
19*1208bc7eSAndroid Build Coastguard Worker        result += combinations(items, i)
20*1208bc7eSAndroid Build Coastguard Worker    return result
21*1208bc7eSAndroid Build Coastguard Worker
22*1208bc7eSAndroid Build Coastguard Workerpossible_compilers = [('gcc', 'g++'), ('clang', 'clang++')]
23*1208bc7eSAndroid Build Coastguard Workerpossible_compiler_opts = [
24*1208bc7eSAndroid Build Coastguard Worker    '-m32',
25*1208bc7eSAndroid Build Coastguard Worker]
26*1208bc7eSAndroid Build Coastguard Workerpossible_config_opts = [
27*1208bc7eSAndroid Build Coastguard Worker    '--enable-debug',
28*1208bc7eSAndroid Build Coastguard Worker    '--enable-prof',
29*1208bc7eSAndroid Build Coastguard Worker    '--disable-stats',
30*1208bc7eSAndroid Build Coastguard Worker]
31*1208bc7eSAndroid Build Coastguard Workerif bits_64:
32*1208bc7eSAndroid Build Coastguard Worker    possible_config_opts.append('--with-lg-vaddr=56')
33*1208bc7eSAndroid Build Coastguard Worker
34*1208bc7eSAndroid Build Coastguard Workerpossible_malloc_conf_opts = [
35*1208bc7eSAndroid Build Coastguard Worker    'tcache:false',
36*1208bc7eSAndroid Build Coastguard Worker    'dss:primary',
37*1208bc7eSAndroid Build Coastguard Worker    'percpu_arena:percpu',
38*1208bc7eSAndroid Build Coastguard Worker    'background_thread:true',
39*1208bc7eSAndroid Build Coastguard Worker]
40*1208bc7eSAndroid Build Coastguard Worker
41*1208bc7eSAndroid Build Coastguard Workerprint 'set -e'
42*1208bc7eSAndroid Build Coastguard Workerprint 'if [ -f Makefile ] ; then make relclean ; fi'
43*1208bc7eSAndroid Build Coastguard Workerprint 'autoconf'
44*1208bc7eSAndroid Build Coastguard Workerprint 'rm -rf run_tests.out'
45*1208bc7eSAndroid Build Coastguard Workerprint 'mkdir run_tests.out'
46*1208bc7eSAndroid Build Coastguard Workerprint 'cd run_tests.out'
47*1208bc7eSAndroid Build Coastguard Worker
48*1208bc7eSAndroid Build Coastguard Workerind = 0
49*1208bc7eSAndroid Build Coastguard Workerfor cc, cxx in possible_compilers:
50*1208bc7eSAndroid Build Coastguard Worker    for compiler_opts in powerset(possible_compiler_opts):
51*1208bc7eSAndroid Build Coastguard Worker        for config_opts in powerset(possible_config_opts):
52*1208bc7eSAndroid Build Coastguard Worker            for malloc_conf_opts in powerset(possible_malloc_conf_opts):
53*1208bc7eSAndroid Build Coastguard Worker                if cc is 'clang' \
54*1208bc7eSAndroid Build Coastguard Worker                  and '-m32' in possible_compiler_opts \
55*1208bc7eSAndroid Build Coastguard Worker                  and '--enable-prof' in config_opts:
56*1208bc7eSAndroid Build Coastguard Worker                    continue
57*1208bc7eSAndroid Build Coastguard Worker                config_line = (
58*1208bc7eSAndroid Build Coastguard Worker                    'EXTRA_CFLAGS=-Werror EXTRA_CXXFLAGS=-Werror '
59*1208bc7eSAndroid Build Coastguard Worker                    + 'CC="{} {}" '.format(cc, " ".join(compiler_opts))
60*1208bc7eSAndroid Build Coastguard Worker                    + 'CXX="{} {}" '.format(cxx, " ".join(compiler_opts))
61*1208bc7eSAndroid Build Coastguard Worker                    + '../../configure '
62*1208bc7eSAndroid Build Coastguard Worker                    + " ".join(config_opts) + (' --with-malloc-conf=' +
63*1208bc7eSAndroid Build Coastguard Worker                    ",".join(malloc_conf_opts) if len(malloc_conf_opts) > 0
64*1208bc7eSAndroid Build Coastguard Worker                    else '')
65*1208bc7eSAndroid Build Coastguard Worker                )
66*1208bc7eSAndroid Build Coastguard Worker
67*1208bc7eSAndroid Build Coastguard Worker                # We don't want to test large vaddr spaces in 32-bit mode.
68*1208bc7eSAndroid Build Coastguard Worker		if ('-m32' in compiler_opts and '--with-lg-vaddr=56' in
69*1208bc7eSAndroid Build Coastguard Worker                  config_opts):
70*1208bc7eSAndroid Build Coastguard Worker		    continue
71*1208bc7eSAndroid Build Coastguard Worker
72*1208bc7eSAndroid Build Coastguard Worker                # Per CPU arenas are only supported on Linux.
73*1208bc7eSAndroid Build Coastguard Worker                linux_supported = ('percpu_arena:percpu' in malloc_conf_opts \
74*1208bc7eSAndroid Build Coastguard Worker                  or 'background_thread:true' in malloc_conf_opts)
75*1208bc7eSAndroid Build Coastguard Worker                # Heap profiling and dss are not supported on OS X.
76*1208bc7eSAndroid Build Coastguard Worker                darwin_unsupported = ('--enable-prof' in config_opts or \
77*1208bc7eSAndroid Build Coastguard Worker                  'dss:primary' in malloc_conf_opts)
78*1208bc7eSAndroid Build Coastguard Worker                if (uname == 'Linux' and linux_supported) \
79*1208bc7eSAndroid Build Coastguard Worker                  or (not linux_supported and (uname != 'Darwin' or \
80*1208bc7eSAndroid Build Coastguard Worker                  not darwin_unsupported)):
81*1208bc7eSAndroid Build Coastguard Worker                    print """cat <<EOF > run_test_%(ind)d.sh
82*1208bc7eSAndroid Build Coastguard Worker#!/bin/sh
83*1208bc7eSAndroid Build Coastguard Worker
84*1208bc7eSAndroid Build Coastguard Workerset -e
85*1208bc7eSAndroid Build Coastguard Worker
86*1208bc7eSAndroid Build Coastguard Workerabort() {
87*1208bc7eSAndroid Build Coastguard Worker    echo "==> Error" >> run_test.log
88*1208bc7eSAndroid Build Coastguard Worker    echo "Error; see run_tests.out/run_test_%(ind)d.out/run_test.log"
89*1208bc7eSAndroid Build Coastguard Worker    exit 255 # Special exit code tells xargs to terminate.
90*1208bc7eSAndroid Build Coastguard Worker}
91*1208bc7eSAndroid Build Coastguard Worker
92*1208bc7eSAndroid Build Coastguard Worker# Environment variables are not supported.
93*1208bc7eSAndroid Build Coastguard Workerrun_cmd() {
94*1208bc7eSAndroid Build Coastguard Worker    echo "==> \$@" >> run_test.log
95*1208bc7eSAndroid Build Coastguard Worker    \$@ >> run_test.log 2>&1 || abort
96*1208bc7eSAndroid Build Coastguard Worker}
97*1208bc7eSAndroid Build Coastguard Worker
98*1208bc7eSAndroid Build Coastguard Workerecho "=> run_test_%(ind)d: %(config_line)s"
99*1208bc7eSAndroid Build Coastguard Workermkdir run_test_%(ind)d.out
100*1208bc7eSAndroid Build Coastguard Workercd run_test_%(ind)d.out
101*1208bc7eSAndroid Build Coastguard Worker
102*1208bc7eSAndroid Build Coastguard Workerecho "==> %(config_line)s" >> run_test.log
103*1208bc7eSAndroid Build Coastguard Worker%(config_line)s >> run_test.log 2>&1 || abort
104*1208bc7eSAndroid Build Coastguard Worker
105*1208bc7eSAndroid Build Coastguard Workerrun_cmd make all tests
106*1208bc7eSAndroid Build Coastguard Workerrun_cmd make check
107*1208bc7eSAndroid Build Coastguard Workerrun_cmd make distclean
108*1208bc7eSAndroid Build Coastguard WorkerEOF
109*1208bc7eSAndroid Build Coastguard Workerchmod 755 run_test_%(ind)d.sh""" % {'ind': ind, 'config_line': config_line}
110*1208bc7eSAndroid Build Coastguard Worker                    ind += 1
111*1208bc7eSAndroid Build Coastguard Worker
112*1208bc7eSAndroid Build Coastguard Workerprint '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}
113