Blame jemalloc/scripts/gen_run_tests.py

Packit Service 724aca
#!/usr/bin/env python
Packit Service 724aca
Packit Service 724aca
import sys
Packit Service 724aca
from itertools import combinations
Packit Service 724aca
from os import uname
Packit Service 724aca
from multiprocessing import cpu_count
Packit Service 724aca
from subprocess import call
Packit Service 724aca
Packit Service 724aca
# Later, we want to test extended vaddr support.  Apparently, the "real" way of
Packit Service 724aca
# checking this is flaky on OS X.
Packit Service 724aca
bits_64 = sys.maxsize > 2**32
Packit Service 724aca
Packit Service 724aca
nparallel = cpu_count() * 2
Packit Service 724aca
Packit Service 724aca
uname = uname()[0]
Packit Service 724aca
Packit Service 724aca
if "BSD" in uname:
Packit Service 724aca
    make_cmd = 'gmake'
Packit Service 724aca
else:
Packit Service 724aca
    make_cmd = 'make'
Packit Service 724aca
Packit Service 724aca
def powerset(items):
Packit Service 724aca
    result = []
Packit Service 724aca
    for i in xrange(len(items) + 1):
Packit Service 724aca
        result += combinations(items, i)
Packit Service 724aca
    return result
Packit Service 724aca
Packit Service 724aca
possible_compilers = []
Packit Service 724aca
for cc, cxx in (['gcc', 'g++'], ['clang', 'clang++']):
Packit Service 724aca
    try:
Packit Service 724aca
        cmd_ret = call([cc, "-v"])
Packit Service 724aca
        if cmd_ret == 0:
Packit Service 724aca
            possible_compilers.append((cc, cxx))
Packit Service 724aca
    except:
Packit Service 724aca
        pass
Packit Service 724aca
possible_compiler_opts = [
Packit Service 724aca
    '-m32',
Packit Service 724aca
]
Packit Service 724aca
possible_config_opts = [
Packit Service 724aca
    '--enable-debug',
Packit Service 724aca
    '--enable-prof',
Packit Service 724aca
    '--disable-stats',
Packit Service 724aca
    '--enable-opt-safety-checks',
Packit Service 724aca
]
Packit Service 724aca
if bits_64:
Packit Service 724aca
    possible_config_opts.append('--with-lg-vaddr=56')
Packit Service 724aca
Packit Service 724aca
possible_malloc_conf_opts = [
Packit Service 724aca
    'tcache:false',
Packit Service 724aca
    'dss:primary',
Packit Service 724aca
    'percpu_arena:percpu',
Packit Service 724aca
    'background_thread:true',
Packit Service 724aca
]
Packit Service 724aca
Packit Service 724aca
print 'set -e'
Packit Service 724aca
print 'if [ -f Makefile ] ; then %(make_cmd)s relclean ; fi' % {'make_cmd': make_cmd}
Packit Service 724aca
print 'autoconf'
Packit Service 724aca
print 'rm -rf run_tests.out'
Packit Service 724aca
print 'mkdir run_tests.out'
Packit Service 724aca
print 'cd run_tests.out'
Packit Service 724aca
Packit Service 724aca
ind = 0
Packit Service 724aca
for cc, cxx in possible_compilers:
Packit Service 724aca
    for compiler_opts in powerset(possible_compiler_opts):
Packit Service 724aca
        for config_opts in powerset(possible_config_opts):
Packit Service 724aca
            for malloc_conf_opts in powerset(possible_malloc_conf_opts):
Packit Service 724aca
                if cc is 'clang' \
Packit Service 724aca
                  and '-m32' in possible_compiler_opts \
Packit Service 724aca
                  and '--enable-prof' in config_opts:
Packit Service 724aca
                    continue
Packit Service 724aca
                config_line = (
Packit Service 724aca
                    'EXTRA_CFLAGS=-Werror EXTRA_CXXFLAGS=-Werror '
Packit Service 724aca
                    + 'CC="{} {}" '.format(cc, " ".join(compiler_opts))
Packit Service 724aca
                    + 'CXX="{} {}" '.format(cxx, " ".join(compiler_opts))
Packit Service 724aca
                    + '../../configure '
Packit Service 724aca
                    + " ".join(config_opts) + (' --with-malloc-conf=' +
Packit Service 724aca
                    ",".join(malloc_conf_opts) if len(malloc_conf_opts) > 0
Packit Service 724aca
                    else '')
Packit Service 724aca
                )
Packit Service 724aca
Packit Service 724aca
                # We don't want to test large vaddr spaces in 32-bit mode.
Packit Service 724aca
		if ('-m32' in compiler_opts and '--with-lg-vaddr=56' in
Packit Service 724aca
                  config_opts):
Packit Service 724aca
		    continue
Packit Service 724aca
Packit Service 724aca
                # Per CPU arenas are only supported on Linux.
Packit Service 724aca
                linux_supported = ('percpu_arena:percpu' in malloc_conf_opts \
Packit Service 724aca
                  or 'background_thread:true' in malloc_conf_opts)
Packit Service 724aca
                # Heap profiling and dss are not supported on OS X.
Packit Service 724aca
                darwin_unsupported = ('--enable-prof' in config_opts or \
Packit Service 724aca
                  'dss:primary' in malloc_conf_opts)
Packit Service 724aca
                if (uname == 'Linux' and linux_supported) \
Packit Service 724aca
                  or (not linux_supported and (uname != 'Darwin' or \
Packit Service 724aca
                  not darwin_unsupported)):
Packit Service 724aca
                    print """cat <<EOF > run_test_%(ind)d.sh
Packit Service 724aca
#!/bin/sh
Packit Service 724aca
Packit Service 724aca
set -e
Packit Service 724aca
Packit Service 724aca
abort() {
Packit Service 724aca
    echo "==> Error" >> run_test.log
Packit Service 724aca
    echo "Error; see run_tests.out/run_test_%(ind)d.out/run_test.log"
Packit Service 724aca
    exit 255 # Special exit code tells xargs to terminate.
Packit Service 724aca
}
Packit Service 724aca
Packit Service 724aca
# Environment variables are not supported.
Packit Service 724aca
run_cmd() {
Packit Service 724aca
    echo "==> \$@" >> run_test.log
Packit Service 724aca
    \$@ >> run_test.log 2>&1 || abort
Packit Service 724aca
}
Packit Service 724aca
Packit Service 724aca
echo "=> run_test_%(ind)d: %(config_line)s"
Packit Service 724aca
mkdir run_test_%(ind)d.out
Packit Service 724aca
cd run_test_%(ind)d.out
Packit Service 724aca
Packit Service 724aca
echo "==> %(config_line)s" >> run_test.log
Packit Service 724aca
%(config_line)s >> run_test.log 2>&1 || abort
Packit Service 724aca
Packit Service 724aca
run_cmd %(make_cmd)s all tests
Packit Service 724aca
run_cmd %(make_cmd)s check
Packit Service 724aca
run_cmd %(make_cmd)s distclean
Packit Service 724aca
EOF
Packit Service 724aca
chmod 755 run_test_%(ind)d.sh""" % {'ind': ind, 'config_line': config_line, 'make_cmd': make_cmd}
Packit Service 724aca
                    ind += 1
Packit Service 724aca
Packit Service 724aca
print '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}