xref: /aosp_15_r20/external/jemalloc_new/scripts/gen_travis.py (revision 1208bc7e437ced7eb82efac44ba17e3beba411da)
1*1208bc7eSAndroid Build Coastguard Worker#!/usr/bin/env python
2*1208bc7eSAndroid Build Coastguard Worker
3*1208bc7eSAndroid Build Coastguard Workerfrom itertools import combinations
4*1208bc7eSAndroid Build Coastguard Worker
5*1208bc7eSAndroid Build Coastguard Workertravis_template = """\
6*1208bc7eSAndroid Build Coastguard Workerlanguage: generic
7*1208bc7eSAndroid Build Coastguard Worker
8*1208bc7eSAndroid Build Coastguard Workermatrix:
9*1208bc7eSAndroid Build Coastguard Worker  include:
10*1208bc7eSAndroid Build Coastguard Worker%s
11*1208bc7eSAndroid Build Coastguard Worker
12*1208bc7eSAndroid Build Coastguard Workerbefore_script:
13*1208bc7eSAndroid Build Coastguard Worker  - autoconf
14*1208bc7eSAndroid Build Coastguard Worker  - ./configure ${COMPILER_FLAGS:+ \
15*1208bc7eSAndroid Build Coastguard Worker      CC="$CC $COMPILER_FLAGS" \
16*1208bc7eSAndroid Build Coastguard Worker      CXX="$CXX $COMPILER_FLAGS" } \
17*1208bc7eSAndroid Build Coastguard Worker      $CONFIGURE_FLAGS
18*1208bc7eSAndroid Build Coastguard Worker  - make -j3
19*1208bc7eSAndroid Build Coastguard Worker  - make -j3 tests
20*1208bc7eSAndroid Build Coastguard Worker
21*1208bc7eSAndroid Build Coastguard Workerscript:
22*1208bc7eSAndroid Build Coastguard Worker  - make check
23*1208bc7eSAndroid Build Coastguard Worker"""
24*1208bc7eSAndroid Build Coastguard Worker
25*1208bc7eSAndroid Build Coastguard Worker# The 'default' configuration is gcc, on linux, with no compiler or configure
26*1208bc7eSAndroid Build Coastguard Worker# flags.  We also test with clang, -m32, --enable-debug, --enable-prof,
27*1208bc7eSAndroid Build Coastguard Worker# --disable-stats, and --with-malloc-conf=tcache:false.  To avoid abusing
28*1208bc7eSAndroid Build Coastguard Worker# travis though, we don't test all 2**7 = 128 possible combinations of these;
29*1208bc7eSAndroid Build Coastguard Worker# instead, we only test combinations of up to 2 'unusual' settings, under the
30*1208bc7eSAndroid Build Coastguard Worker# hope that bugs involving interactions of such settings are rare.
31*1208bc7eSAndroid Build Coastguard Worker# Things at once, for C(7, 0) + C(7, 1) + C(7, 2) = 29
32*1208bc7eSAndroid Build Coastguard WorkerMAX_UNUSUAL_OPTIONS = 2
33*1208bc7eSAndroid Build Coastguard Worker
34*1208bc7eSAndroid Build Coastguard Workeros_default = 'linux'
35*1208bc7eSAndroid Build Coastguard Workeros_unusual = 'osx'
36*1208bc7eSAndroid Build Coastguard Worker
37*1208bc7eSAndroid Build Coastguard Workercompilers_default = 'CC=gcc CXX=g++'
38*1208bc7eSAndroid Build Coastguard Workercompilers_unusual = 'CC=clang CXX=clang++'
39*1208bc7eSAndroid Build Coastguard Worker
40*1208bc7eSAndroid Build Coastguard Workercompiler_flag_unusuals = ['-m32']
41*1208bc7eSAndroid Build Coastguard Worker
42*1208bc7eSAndroid Build Coastguard Workerconfigure_flag_unusuals = [
43*1208bc7eSAndroid Build Coastguard Worker    '--enable-debug',
44*1208bc7eSAndroid Build Coastguard Worker    '--enable-prof',
45*1208bc7eSAndroid Build Coastguard Worker    '--disable-stats',
46*1208bc7eSAndroid Build Coastguard Worker]
47*1208bc7eSAndroid Build Coastguard Worker
48*1208bc7eSAndroid Build Coastguard Workermalloc_conf_unusuals = [
49*1208bc7eSAndroid Build Coastguard Worker    'tcache:false',
50*1208bc7eSAndroid Build Coastguard Worker    'dss:primary',
51*1208bc7eSAndroid Build Coastguard Worker    'percpu_arena:percpu',
52*1208bc7eSAndroid Build Coastguard Worker    'background_thread:true',
53*1208bc7eSAndroid Build Coastguard Worker]
54*1208bc7eSAndroid Build Coastguard Worker
55*1208bc7eSAndroid Build Coastguard Workerall_unusuals = (
56*1208bc7eSAndroid Build Coastguard Worker    [os_unusual] + [compilers_unusual] + compiler_flag_unusuals
57*1208bc7eSAndroid Build Coastguard Worker    + configure_flag_unusuals + malloc_conf_unusuals
58*1208bc7eSAndroid Build Coastguard Worker)
59*1208bc7eSAndroid Build Coastguard Worker
60*1208bc7eSAndroid Build Coastguard Workerunusual_combinations_to_test = []
61*1208bc7eSAndroid Build Coastguard Workerfor i in xrange(MAX_UNUSUAL_OPTIONS + 1):
62*1208bc7eSAndroid Build Coastguard Worker    unusual_combinations_to_test += combinations(all_unusuals, i)
63*1208bc7eSAndroid Build Coastguard Worker
64*1208bc7eSAndroid Build Coastguard Workerinclude_rows = ""
65*1208bc7eSAndroid Build Coastguard Workerfor unusual_combination in unusual_combinations_to_test:
66*1208bc7eSAndroid Build Coastguard Worker    os = os_default
67*1208bc7eSAndroid Build Coastguard Worker    if os_unusual in unusual_combination:
68*1208bc7eSAndroid Build Coastguard Worker        os = os_unusual
69*1208bc7eSAndroid Build Coastguard Worker
70*1208bc7eSAndroid Build Coastguard Worker    compilers = compilers_default
71*1208bc7eSAndroid Build Coastguard Worker    if compilers_unusual in unusual_combination:
72*1208bc7eSAndroid Build Coastguard Worker        compilers = compilers_unusual
73*1208bc7eSAndroid Build Coastguard Worker
74*1208bc7eSAndroid Build Coastguard Worker    compiler_flags = [
75*1208bc7eSAndroid Build Coastguard Worker        x for x in unusual_combination if x in compiler_flag_unusuals]
76*1208bc7eSAndroid Build Coastguard Worker
77*1208bc7eSAndroid Build Coastguard Worker    configure_flags = [
78*1208bc7eSAndroid Build Coastguard Worker        x for x in unusual_combination if x in configure_flag_unusuals]
79*1208bc7eSAndroid Build Coastguard Worker
80*1208bc7eSAndroid Build Coastguard Worker    malloc_conf = [
81*1208bc7eSAndroid Build Coastguard Worker        x for x in unusual_combination if x in malloc_conf_unusuals]
82*1208bc7eSAndroid Build Coastguard Worker    # Filter out unsupported configurations on OS X.
83*1208bc7eSAndroid Build Coastguard Worker    if os == 'osx' and ('dss:primary' in malloc_conf or \
84*1208bc7eSAndroid Build Coastguard Worker      'percpu_arena:percpu' in malloc_conf or 'background_thread:true' \
85*1208bc7eSAndroid Build Coastguard Worker      in malloc_conf):
86*1208bc7eSAndroid Build Coastguard Worker        continue
87*1208bc7eSAndroid Build Coastguard Worker    if len(malloc_conf) > 0:
88*1208bc7eSAndroid Build Coastguard Worker        configure_flags.append('--with-malloc-conf=' + ",".join(malloc_conf))
89*1208bc7eSAndroid Build Coastguard Worker
90*1208bc7eSAndroid Build Coastguard Worker    # Filter out an unsupported configuration - heap profiling on OS X.
91*1208bc7eSAndroid Build Coastguard Worker    if os == 'osx' and '--enable-prof' in configure_flags:
92*1208bc7eSAndroid Build Coastguard Worker        continue
93*1208bc7eSAndroid Build Coastguard Worker
94*1208bc7eSAndroid Build Coastguard Worker    # We get some spurious errors when -Warray-bounds is enabled.
95*1208bc7eSAndroid Build Coastguard Worker    env_string = ('{} COMPILER_FLAGS="{}" CONFIGURE_FLAGS="{}" '
96*1208bc7eSAndroid Build Coastguard Worker	'EXTRA_CFLAGS="-Werror -Wno-array-bounds"').format(
97*1208bc7eSAndroid Build Coastguard Worker        compilers, " ".join(compiler_flags), " ".join(configure_flags))
98*1208bc7eSAndroid Build Coastguard Worker
99*1208bc7eSAndroid Build Coastguard Worker    include_rows += '    - os: %s\n' % os
100*1208bc7eSAndroid Build Coastguard Worker    include_rows += '      env: %s\n' % env_string
101*1208bc7eSAndroid Build Coastguard Worker    if '-m32' in unusual_combination and os == 'linux':
102*1208bc7eSAndroid Build Coastguard Worker        include_rows += '      addons:\n'
103*1208bc7eSAndroid Build Coastguard Worker	include_rows += '        apt:\n'
104*1208bc7eSAndroid Build Coastguard Worker	include_rows += '          packages:\n'
105*1208bc7eSAndroid Build Coastguard Worker	include_rows += '            - gcc-multilib\n'
106*1208bc7eSAndroid Build Coastguard Worker
107*1208bc7eSAndroid Build Coastguard Workerprint travis_template % include_rows
108