Define the GHC "compiler_always_flags" in make; fixes trac #5213
[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 = ghc_compiler_always_flags.split()
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',
26                              'prof_hc_hb','prof_hb',
27                              'prof_hd','prof_hy','prof_hr',
28                              'threaded1_ls', 'threaded2_hT',
29                              'llvm', 'debugllvm']
30
31 if (ghc_with_native_codegen == 1):
32     config.compile_ways.append('optasm')
33     config.run_ways.append('optasm')
34
35 if (ghc_with_profiling == 1):
36     config.have_profiling = True
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.compile_ways.append('optllvm')
60     config.run_ways.append('optllvm')
61
62 config.in_tree_compiler = in_tree_compiler
63 config.clean_only       = clean_only
64
65 config.way_flags = {
66     'normal'       : [],
67     'g1'           : [],
68     'optasm'       : ['-O -fasm'],
69     'llvm'         : ['-fllvm'],
70     'optllvm'      : ['-O -fllvm'],
71     'debugllvm'    : ['-fllvm -keep-llvm-files'],
72     'prof'         : ['-prof -auto-all -fasm'],
73     'profasm'      : ['-O -prof -auto-all'],
74     'profthreaded' : ['-O -prof -auto-all -threaded'],
75     'ghci'         : ['--interactive', '-v0', '-ignore-dot-ghci', '+RTS', '-I0.1', '-RTS'],
76     'extcore'      : ['-fext-core'],
77     'optextcore'   : ['-O -fext-core'],
78     'threaded1'    : ['-threaded', '-debug'],
79     'threaded1_ls' : ['-threaded', '-debug'],
80     'threaded2'    : ['-O', '-threaded', '-eventlog'],
81     'threaded2_hT' : ['-O', '-threaded'],
82     'hpc'          : ['-O', '-fhpc' ],
83     'prof_hc_hb'   : ['-O -prof -auto-all'],
84     'prof_hb'      : ['-O -prof -auto-all'],
85     'prof_hd'      : ['-O -prof -auto-all'],
86     'prof_hy'      : ['-O -prof -auto-all'],
87     'prof_hr'      : ['-O -prof -auto-all'],
88     'dyn'          : ['-O -dynamic']
89    }
90
91 config.way_rts_flags = { 
92     'normal'       : [],
93     'g1'           : ['-G1'],
94     'optasm'       : [],
95     'llvm'         : [],
96     'optllvm'      : [],
97     'debugllvm'    : [],
98     'prof'         : ['-p'],
99     'profasm'      : ['-hc', '-p'], # test heap profiling too
100     'profthreaded' : ['-p'],
101     'ghci'         : [],
102     'extcore'      : [],
103     'optextcore'   : [],
104     'threaded1'    : [],
105     'threaded1_ls' : ['-ls'],
106     'threaded2'    : ['-N2 -ls'],
107     'threaded2_hT' : ['-N2', '-hT'],
108     'hpc'          : [],
109     'prof_hc_hb'   : ['-hc -hbvoid'],
110     'prof_hb'      : ['-hb'],
111     'prof_hd'      : ['-hd'],
112     'prof_hy'      : ['-hy'],
113     'prof_hr'      : ['-hr'],
114     'dyn'          : []
115    }
116
117 # Useful classes of ways:
118
119 prof_ways = filter(lambda x: x in config.run_ways, 
120                    ['prof', 'profasm','profthreaded'])
121
122 threaded_ways = filter(lambda x: x in config.run_ways, 
123                        ['threaded1','threaded2','ghci','profthreaded'])
124
125 def get_compiler_info():
126 # This should really not go through the shell
127     h = os.popen('"' + config.compiler + '" --info', 'r')
128     s = h.read()
129     s = re.sub('[\r\n]', '', s)
130     h.close()
131     compilerInfoDict = dict(eval(s))
132     h = os.popen('"' + config.compiler + '" +RTS --info', 'r')
133     s = h.read()
134     s = re.sub('[\r\n]', '', s)
135     h.close()
136     rtsInfoDict = dict(eval(s))
137
138     # We use a '/'-separated path for libdir, even on Windows
139     config.libdir = re.sub('\\\\','/',compilerInfoDict['LibDir'])
140
141     v = compilerInfoDict["Project version"].split('-')
142     config.compiler_version = v[0]
143     config.compiler_maj_version = re.sub('^([0-9]+\.[0-9]+).*',r'\1', v[0])
144     config.compiler_tags = v[1:]
145
146     # -fno-ghci-history was added in 7.3
147     if version_ge(config.compiler_version, '7.3'):
148        config.compiler_always_flags = \
149           config.compiler_always_flags + ['-fno-ghci-history']
150
151     if re.match(".*_p(_.*|$)", rtsInfoDict["RTS way"]):
152         config.compiler_profiled = True
153         config.run_ways = filter(lambda x: x != 'ghci', config.run_ways)
154     else:
155         config.compiler_profiled = False
156
157     try:
158         config.package_conf_cache_file = compilerInfoDict["Global Package DB"] + '/package.cache'
159     except:
160         config.package_conf_cache_file = ''
161