swr: add linux to scons build
[mesa.git] / src / gallium / drivers / swr / SConscript
1 Import('*')
2
3 from sys import executable as python_cmd
4 import os.path
5 import distutils.version
6
7 if not env['swr']:
8 Return()
9
10 if not env['llvm']:
11 print 'warning: LLVM disabled: not building swr'
12 env['swr'] = False
13 Return()
14
15 if env['LLVM_VERSION'] < distutils.version.LooseVersion('3.9'):
16 print "warning: swr requires LLVM >= 3.9: not building swr"
17 env['swr'] = False
18 Return()
19
20 env.MSVC2013Compat()
21
22 env = env.Clone()
23
24 # construct llvm include dir
25 if env['platform'] == 'windows':
26 # on windows there is no llvm-config, so LLVM is defined
27 llvm_includedir = os.path.join(os.environ['LLVM'], 'include')
28 else:
29 llvm_config = os.environ.get('LLVM_CONFIG', 'llvm-config')
30 llvm_includedir = env.backtick('%s --includedir' % llvm_config).rstrip()
31 print "llvm include dir %s" % llvm_includedir
32
33 # the loader is included in the mesa lib itself
34 # All the remaining files are in loadable modules
35 loadersource = env.ParseSourceList('Makefile.sources', [
36 'LOADER_SOURCES'
37 ])
38
39 if not env['msvc'] :
40 env.Append(CCFLAGS = [
41 '-std=c++14',
42 ])
43
44 swrroot = '#src/gallium/drivers/swr/'
45 bldroot = Dir('.').abspath
46
47 env.CodeGenerate(
48 target = 'rasterizer/codegen/gen_knobs.cpp',
49 script = swrroot + 'rasterizer/codegen/gen_knobs.py',
50 source = '',
51 command = python_cmd + ' $SCRIPT --output $TARGET --gen_cpp'
52 )
53 Depends('rasterizer/codegen/gen_knobs.cpp',
54 swrroot + 'rasterizer/codegen/templates/gen_knobs.cpp')
55
56 env.CodeGenerate(
57 target = 'rasterizer/codegen/gen_knobs.h',
58 script = swrroot + 'rasterizer/codegen/gen_knobs.py',
59 source = '',
60 command = python_cmd + ' $SCRIPT --output $TARGET --gen_h'
61 )
62 Depends('rasterizer/codegen/gen_knobs.cpp',
63 swrroot + 'rasterizer/codegen/templates/gen_knobs.cpp')
64
65 env.CodeGenerate(
66 target = 'rasterizer/jitter/gen_state_llvm.h',
67 script = swrroot + 'rasterizer/codegen/gen_llvm_types.py',
68 source = 'rasterizer/core/state.h',
69 command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET'
70 )
71 Depends('rasterizer/jitter/gen_state_llvm.h',
72 swrroot + 'rasterizer/codegen/templates/gen_llvm.hpp')
73
74 env.CodeGenerate(
75 target = 'rasterizer/jitter/gen_builder.hpp',
76 script = swrroot + 'rasterizer/codegen/gen_llvm_ir_macros.py',
77 source = os.path.join(llvm_includedir, 'llvm/IR/IRBuilder.h'),
78 command = python_cmd + ' $SCRIPT --input $SOURCE --output ' + bldroot + '/rasterizer/jitter --gen_h'
79 )
80 Depends('rasterizer/jitter/gen_builder.hpp',
81 swrroot + 'rasterizer/codegen/templates/gen_builder.hpp')
82
83 env.CodeGenerate(
84 target = 'rasterizer/jitter/gen_builder_x86.hpp',
85 script = swrroot + 'rasterizer/codegen/gen_llvm_ir_macros.py',
86 source = '',
87 command = python_cmd + ' $SCRIPT --output ' + bldroot + '/rasterizer/jitter --gen_x86_h'
88 )
89 Depends('rasterizer/jitter/gen_builder.hpp',
90 swrroot + 'rasterizer/codegen/templates/gen_builder.hpp')
91
92 env.CodeGenerate(
93 target = './gen_swr_context_llvm.h',
94 script = swrroot + 'rasterizer/codegen/gen_llvm_types.py',
95 source = 'swr_context.h',
96 command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET'
97 )
98 Depends('rasterizer/jitter/gen_state_llvm.h',
99 swrroot + 'rasterizer/codegen/templates/gen_llvm.hpp')
100
101 env.CodeGenerate(
102 target = 'rasterizer/archrast/gen_ar_event.hpp',
103 script = swrroot + 'rasterizer/codegen/gen_archrast.py',
104 source = 'rasterizer/archrast/events.proto',
105 command = python_cmd + ' $SCRIPT --proto $SOURCE --output $TARGET --gen_event_h'
106 )
107 Depends('rasterizer/jitter/gen_state_llvm.h',
108 swrroot + 'rasterizer/codegen/templates/gen_ar_event.hpp')
109
110 env.CodeGenerate(
111 target = 'rasterizer/archrast/gen_ar_event.cpp',
112 script = swrroot + 'rasterizer/codegen/gen_archrast.py',
113 source = 'rasterizer/archrast/events.proto',
114 command = python_cmd + ' $SCRIPT --proto $SOURCE --output $TARGET --gen_event_cpp'
115 )
116 Depends('rasterizer/jitter/gen_state_llvm.h',
117 swrroot + 'rasterizer/codegen/templates/gen_ar_event.cpp')
118
119 env.CodeGenerate(
120 target = 'rasterizer/archrast/gen_ar_eventhandler.hpp',
121 script = swrroot + 'rasterizer/codegen/gen_archrast.py',
122 source = 'rasterizer/archrast/events.proto',
123 command = python_cmd + ' $SCRIPT --proto $SOURCE --output $TARGET --gen_eventhandler_h'
124 )
125 Depends('rasterizer/jitter/gen_state_llvm.h',
126 swrroot + 'rasterizer/codegen/templates/gen_ar_eventhandler.hpp')
127
128 env.CodeGenerate(
129 target = 'rasterizer/archrast/gen_ar_eventhandlerfile.hpp',
130 script = swrroot + 'rasterizer/codegen/gen_archrast.py',
131 source = 'rasterizer/archrast/events.proto',
132 command = python_cmd + ' $SCRIPT --proto $SOURCE --output $TARGET --gen_eventhandlerfile_h'
133 )
134 Depends('rasterizer/jitter/gen_state_llvm.h',
135 swrroot + 'rasterizer/codegen/templates/gen_ar_eventhandlerfile.hpp')
136
137 # 5 SWR_MULTISAMPLE_TYPE_COUNT
138 # 2 SWR_MSAA_SAMPLE_PATTERN_COUNT
139 # 3 SWR_INPUT_COVERAGE_COUNT
140 # 2 centroid
141 # 2 forcedSampleCount
142 # 2 canEarlyZ
143 env.CodeGenerate(
144 target = 'rasterizer/core/gen_BackendPixelRate0.cpp',
145 script = swrroot + 'rasterizer/codegen/gen_backends.py',
146 source = '',
147 command = python_cmd + ' $SCRIPT --outdir ' + bldroot + '/rasterizer/core --dim 5 2 3 2 2 2 --split 0 --cpp'
148 )
149 Depends('rasterizer/jitter/gen_state_llvm.h',
150 swrroot + 'rasterizer/codegen/templates/gen_backend.cpp')
151
152 # Auto-generated .cpp files (that need to generate object files)
153 built_sources = [
154 'rasterizer/codegen/gen_knobs.cpp',
155 'rasterizer/archrast/gen_ar_event.cpp',
156 'rasterizer/core/gen_BackendPixelRate0.cpp',
157 ]
158
159 source = built_sources
160 source += env.ParseSourceList(swrroot + 'Makefile.sources', [
161 'CXX_SOURCES',
162 'ARCHRAST_CXX_SOURCES',
163 'COMMON_CXX_SOURCES',
164 'CORE_CXX_SOURCES',
165 'JITTER_CXX_SOURCES',
166 'MEMORY_CXX_SOURCES'
167 ])
168
169 env.Prepend(LIBS = [ mesautil, mesa, gallium ])
170
171 env.Prepend(CPPPATH = [
172 '.',
173 'rasterizer',
174 'rasterizer/codegen',
175 'rasterizer/core',
176 'rasterizer/jitter',
177 'rasterizer/archrast',
178 ])
179
180 # AVX lib
181 envavx = env.Clone()
182
183 envavx.Append(CPPDEFINES = ['KNOB_ARCH=KNOB_ARCH_AVX'])
184 if env['platform'] == 'windows':
185 envavx.Append(CCFLAGS = ['/arch:AVX'])
186 else:
187 envavx.Append(CCFLAGS = ['-mavx'])
188
189 swrAVX = envavx.SharedLibrary(
190 target = 'swrAVX',
191 source = source,
192 OBJPREFIX = 'avx_'
193 )
194 env.Alias('swrAVX', swrAVX)
195
196 # AVX2 lib
197 envavx2 = env.Clone()
198
199 envavx2.Append(CPPDEFINES = ['KNOB_ARCH=KNOB_ARCH_AVX2'])
200 if env['platform'] == 'windows':
201 envavx2.Append(CCFLAGS = ['/arch:AVX2'])
202 else:
203 envavx2.Append(CCFLAGS = ['-mavx2', '-mfma', '-mbmi2', '-mf16c'])
204
205 swrAVX2 = envavx2.SharedLibrary(
206 target = 'swrAVX2',
207 source = source,
208 OBJPREFIX = 'avx2_'
209 )
210 env.Alias('swrAVX2', swrAVX2)
211
212
213 # main SWR lib
214 swr = env.ConvenienceLibrary(
215 target = 'swr',
216 source = loadersource,
217 )
218
219
220 # treat arch libs as dependencies, even though they are not linked
221 # into swr, so we don't have to build them separately
222 Depends(swr, ['swrAVX', 'swrAVX2'])
223
224 env.Alias('swr', swr)
225
226 env.Prepend(LIBS = [swr])
227
228 Export('swr')