Make and use a req_interp helper
[ghc.git] / testsuite / config / ghc
1
2 import os
3 import re
4
5 # Testsuite configuration setup for GHC
6 #
7 # This file is Python source
8 #
9 config.compiler_type         = 'ghc'
10 config.compiler              = 'ghc'
11 config.compiler_always_flags = ['-fforce-recomp', '-dcore-lint', '-dcmm-lint', '-dno-debug-output', '-no-user-package-conf', '-rtsopts']
12
13 config.hp2ps                 = 'hp2ps'
14 config.hpc                   = 'hpc'
15 config.gs                    = 'gs'
16 config.confdir               = '.'
17
18 # By default, we test the 'normal', 'opt' and 'hpc' ways.
19 # 'optasm' is added by mk/test.mk if the compiler has a native code gen,
20 # 'prof'   is added by mk/test.mk if the profiling way is enabled.
21 config.compile_ways          = ['normal', 'hpc']
22 config.run_ways              = ['normal', 'hpc']
23
24 # ways that are not enabled by default, but can always be invoked explicitly
25 config.other_ways            = ['extcore','optextcore',
26                                 'prof_hc_hb','prof_hb',
27                                 'prof_hd','prof_hy','prof_hr',
28                                 'threaded1_ls',
29                                 'threaded2_hT',
30                                 'llvm']
31
32 if (ghc_with_native_codegen == 1):
33         config.compile_ways.append('optasm')
34         config.run_ways.append('optasm')
35
36 if (ghc_with_profiling == 1):
37         config.have_profiling = True
38         if (ghc_with_native_codegen == 1):
39                 config.compile_ways.append('profasm')
40                 config.run_ways.append('profasm')
41
42 if (ghc_with_interpreter == 1):
43         config.have_interp = True
44         config.run_ways.append('ghci')
45
46 config.unregisterised = (ghc_unregisterised == 1)
47
48 if (ghc_with_threaded_rts == 1):
49         config.run_ways.append('threaded1')
50         if (ghc_with_smp == 1):
51                 config.run_ways.append('threaded2')
52
53 if (ghc_with_dynamic_rts == 1):
54         config.have_shared_libs = True
55         config.run_ways.append('dyn')
56
57 if (ghc_with_profiling == 1 and ghc_with_threaded_rts == 1):
58         config.run_ways.append('profthreaded')
59
60 if (ghc_with_llvm == 1):
61         config.run_ways.append('optllvm')
62
63 config.in_tree_compiler = in_tree_compiler
64
65 config.way_flags = {
66         'normal'     : [],
67         'g1'         : [],
68         'optasm'     : ['-O -fasm'],
69         'llvm'       : ['-fllvm'],
70         'optllvm'    : ['-O -fllvm'],
71         'profasm'    : ['-O -prof -auto-all -fasm'],
72         'profthreaded' : ['-O -prof -auto-all -fasm -threaded'],
73         'ghci'       : ['--interactive', '-v0', '-ignore-dot-ghci', '+RTS', '-I0.1', '-RTS'],
74         'extcore'    : ['-fext-core'],
75         'optextcore' : ['-O -fext-core'],
76         'threaded1'  : ['-threaded', '-debug'],
77         'threaded1_ls'  : ['-threaded', '-debug'],
78         'threaded2'  : ['-O', '-threaded', '-eventlog'],
79         'threaded2_hT'  : ['-O', '-threaded'],
80         'hpc'        : ['-O', '-fhpc' ],
81         'prof_hc_hb' : ['-O -prof -auto-all'],
82         'prof_hb'    : ['-O -prof -auto-all'],
83         'prof_hd'    : ['-O -prof -auto-all'],
84         'prof_hy'    : ['-O -prof -auto-all'],
85         'prof_hr'    : ['-O -prof -auto-all'],
86         'dyn'        : ['-O -dynamic']
87         }
88
89 config.way_rts_flags = { 
90         'normal'     : [],
91         'g1'         : ['-G1'],
92         'optasm'     : [],
93         'llvm'       : [],
94         'optllvm'    : [],
95         'profasm'    : ['-hc'], # test heap profiling too
96         'profthreaded' : ['-p'],
97         'ghci'       : [],
98         'extcore'    : [],
99         'optextcore' : [],
100         'threaded1'  : [],
101         'threaded1_ls'  : ['-ls'],
102         'threaded2'  : ['-N2 -ls'],
103         'threaded2_hT'  : ['-N2', '-hT'],
104         'hpc'        : [],
105         'prof_hc_hb' : ['-hc -hbvoid'],
106         'prof_hb'    : ['-hb'],
107         'prof_hd'    : ['-hd'],
108         'prof_hy'    : ['-hy'],
109         'prof_hr'    : ['-hr'],
110         'dyn'        : []
111         }
112
113 # Useful classes of ways:
114
115 prof_ways = filter(lambda x: x in config.run_ways, 
116                    ['profasm','profthreaded'])
117
118 threaded_ways = filter(lambda x: x in config.run_ways, 
119                        ['threaded1','threaded2','ghci','profthreaded'])
120
121 def get_compiler_info():
122     # This should really not go through the shell
123     h = os.popen('"' + config.compiler + '" --info', 'r')
124     s = h.read()
125     s = re.sub('[\r\n]', '', s)
126     h.close()
127     compilerInfoDict = dict(eval(s))
128     h = os.popen('"' + config.compiler + '" +RTS --info', 'r')
129     s = h.read()
130     s = re.sub('[\r\n]', '', s)
131     h.close()
132     rtsInfoDict = dict(eval(s))
133
134     v = compilerInfoDict["Project version"].split('-')
135     config.compiler_version = v[0]
136     config.compiler_maj_version = re.sub('^([0-9]+\.[0-9]+).*',r'\1', v[0])
137     config.compiler_tags = v[1:]
138
139     if re.match(".*_p(_.*|$)", rtsInfoDict["RTS way"]):
140         config.compiler_profiled = True
141         config.run_ways = filter(lambda x: x != 'ghci', config.run_ways)
142     else:
143         config.compiler_profiled = False
144
145     try:
146             config.package_conf_cache_file = compilerInfoDict["Global Package DB"] + '/package.cache'
147     except:
148             config.package_conf_cache_file = ''