Merge branch 'master' of http://darcs.haskell.org/testsuite
[ghc.git] / testsuite / config / ghc
1 import os
2 import re
3
4 # Testsuite configuration setup for GHC
5 #
6 # This file is Python source
7 #
8 config.compiler_type         = 'ghc'
9 config.compiler              = 'ghc'
10 config.compiler_always_flags = ['-fforce-recomp', '-dcore-lint', '-dcmm-lint', '-dno-debug-output', '-no-user-package-conf', '-rtsopts', '-fno-ghci-history']
11
12 config.hp2ps                 = 'hp2ps'
13 config.hpc                   = 'hpc'
14 config.gs                    = 'gs'
15 config.confdir               = '.'
16
17 # By default, we test the 'normal', 'opt' and 'hpc' ways.
18 # 'optasm' is added by mk/test.mk if the compiler has a native code gen,
19 # 'prof'   is added by mk/test.mk if the profiling way is enabled.
20 config.compile_ways       = ['normal', 'hpc']
21 config.run_ways           = ['normal', 'hpc']
22
23 # ways that are not enabled by default, but can always be invoked explicitly
24 config.other_ways         = ['extcore','optextcore',
25                              'prof_hc_hb','prof_hb',
26                              'prof_hd','prof_hy','prof_hr',
27                              'threaded1_ls', 'threaded2_hT',
28                              'llvm', 'debugllvm']
29
30 if (ghc_with_native_codegen == 1):
31     config.compile_ways.append('optasm')
32     config.run_ways.append('optasm')
33
34 if (ghc_with_profiling == 1):
35     config.have_profiling = True
36     if (ghc_with_native_codegen == 1):
37         config.compile_ways.append('profasm')
38         config.run_ways.append('profasm')
39
40 if (ghc_with_interpreter == 1):
41     config.have_interp = True
42     config.run_ways.append('ghci')
43
44 config.unregisterised = (ghc_unregisterised == 1)
45
46 if (ghc_with_threaded_rts == 1):
47     config.run_ways.append('threaded1')
48     if (ghc_with_smp == 1):
49         config.run_ways.append('threaded2')
50
51 if (ghc_with_dynamic_rts == 1):
52     config.have_shared_libs = True
53     config.run_ways.append('dyn')
54
55 if (ghc_with_profiling == 1 and ghc_with_threaded_rts == 1):
56     config.run_ways.append('profthreaded')
57
58 if (ghc_with_llvm == 1):
59     config.run_ways.append('optllvm')
60
61 config.in_tree_compiler = in_tree_compiler
62
63 config.way_flags = {
64     'normal'       : [],
65     'g1'           : [],
66     'optasm'       : ['-O -fasm'],
67     'llvm'         : ['-fllvm'],
68     'optllvm'      : ['-O -fllvm'],
69     'debugllvm'    : ['-fllvm -keep-llvm-files'],
70     'profasm'      : ['-O -prof -auto-all -fasm'],
71     'profthreaded' : ['-O -prof -auto-all -fasm -threaded'],
72     'ghci'         : ['--interactive', '-v0', '-ignore-dot-ghci', '+RTS', '-I0.1', '-RTS'],
73     'extcore'      : ['-fext-core'],
74     'optextcore'   : ['-O -fext-core'],
75     'threaded1'    : ['-threaded', '-debug'],
76     'threaded1_ls' : ['-threaded', '-debug'],
77     'threaded2'    : ['-O', '-threaded', '-eventlog'],
78     'threaded2_hT' : ['-O', '-threaded'],
79     'hpc'          : ['-O', '-fhpc' ],
80     'prof_hc_hb'   : ['-O -prof -auto-all'],
81     'prof_hb'      : ['-O -prof -auto-all'],
82     'prof_hd'      : ['-O -prof -auto-all'],
83     'prof_hy'      : ['-O -prof -auto-all'],
84     'prof_hr'      : ['-O -prof -auto-all'],
85     'dyn'          : ['-O -dynamic']
86    }
87
88 config.way_rts_flags = { 
89     'normal'       : [],
90     'g1'           : ['-G1'],
91     'optasm'       : [],
92     'llvm'         : [],
93     'optllvm'      : [],
94     'debugllvm'    : [],
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 = ''