3 from sys import executable as python_cmd
5 import distutils.version
11 print('warning: LLVM disabled: not building swr')
15 if env['LLVM_VERSION'] < distutils.version.LooseVersion('6.0'):
16 print("warning: swr requires LLVM >= 6.0: not building swr")
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')
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)
34 env.Append(CCFLAGS = [
38 swrroot = '#src/gallium/drivers/swr/'
39 srcroot = Dir(swrroot).abspath
40 bldroot = Dir('.').abspath
43 target = 'rasterizer/codegen/gen_knobs.cpp',
44 script = swrroot + 'rasterizer/codegen/gen_knobs.py',
46 command = python_cmd + ' $SCRIPT --output $TARGET --gen_cpp'
48 Depends('rasterizer/codegen/gen_knobs.cpp',
49 swrroot + 'rasterizer/codegen/templates/gen_knobs.cpp')
52 target = 'rasterizer/codegen/gen_knobs.h',
53 script = swrroot + 'rasterizer/codegen/gen_knobs.py',
55 command = python_cmd + ' $SCRIPT --output $TARGET --gen_h'
57 Depends('rasterizer/codegen/gen_knobs.h',
58 swrroot + 'rasterizer/codegen/templates/gen_knobs.h')
61 target = 'rasterizer/jitter/gen_state_llvm.h',
62 script = swrroot + 'rasterizer/codegen/gen_llvm_types.py',
63 source = 'rasterizer/core/state.h',
64 command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET'
66 Depends('rasterizer/jitter/gen_state_llvm.h',
67 swrroot + 'rasterizer/codegen/templates/gen_llvm.hpp')
70 target = 'rasterizer/jitter/gen_builder.hpp',
71 script = swrroot + 'rasterizer/codegen/gen_llvm_ir_macros.py',
72 source = os.path.join(llvm_includedir, 'llvm/IR/IRBuilder.h'),
73 command = python_cmd + ' $SCRIPT --input $SOURCE --output ' + bldroot + '/rasterizer/jitter --gen_h'
75 Depends('rasterizer/jitter/gen_builder.hpp',
76 swrroot + 'rasterizer/codegen/templates/gen_builder.hpp')
79 target = 'rasterizer/jitter/gen_builder_meta.hpp',
80 script = swrroot + 'rasterizer/codegen/gen_llvm_ir_macros.py',
82 command = python_cmd + ' $SCRIPT --output ' + bldroot + '/rasterizer/jitter --gen_meta_h'
84 Depends('rasterizer/jitter/gen_builder.hpp',
85 swrroot + 'rasterizer/codegen/templates/gen_builder.hpp')
88 target = 'rasterizer/jitter/gen_builder_intrin.hpp',
89 script = swrroot + 'rasterizer/codegen/gen_llvm_ir_macros.py',
91 command = python_cmd + ' $SCRIPT --output ' + bldroot + '/rasterizer/jitter --gen_intrin_h'
93 Depends('rasterizer/jitter/gen_builder.hpp',
94 swrroot + 'rasterizer/codegen/templates/gen_builder.hpp')
97 target = './gen_swr_context_llvm.h',
98 script = swrroot + 'rasterizer/codegen/gen_llvm_types.py',
99 source = 'swr_context.h',
100 command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET'
102 Depends('rasterizer/jitter/gen_state_llvm.h',
103 swrroot + 'rasterizer/codegen/templates/gen_llvm.hpp')
106 target = 'rasterizer/archrast/gen_ar_event.hpp',
107 script = swrroot + 'rasterizer/codegen/gen_archrast.py',
108 source = 'rasterizer/archrast/events.proto',
109 command = python_cmd + ' $SCRIPT --proto $SOURCE --proto_private ' + srcroot + '/rasterizer/archrast/events_private.proto --output $TARGET --gen_event_hpp'
111 Depends('rasterizer/archrast/gen_ar_event.hpp',
112 swrroot + 'rasterizer/archrast/events_private.proto')
113 Depends('rasterizer/jitter/gen_state_llvm.h',
114 swrroot + 'rasterizer/codegen/templates/gen_ar_event.hpp')
117 target = 'rasterizer/archrast/gen_ar_event.cpp',
118 script = swrroot + 'rasterizer/codegen/gen_archrast.py',
119 source = 'rasterizer/archrast/events.proto',
120 command = python_cmd + ' $SCRIPT --proto $SOURCE --proto_private ' + srcroot + '/rasterizer/archrast/events_private.proto --output $TARGET --gen_event_cpp'
122 Depends('rasterizer/archrast/gen_ar_event.cpp',
123 swrroot + 'rasterizer/archrast/events_private.proto')
124 Depends('rasterizer/jitter/gen_state_llvm.h',
125 swrroot + 'rasterizer/codegen/templates/gen_ar_event.cpp')
128 target = 'rasterizer/archrast/gen_ar_eventhandler.hpp',
129 script = swrroot + 'rasterizer/codegen/gen_archrast.py',
130 source = 'rasterizer/archrast/events.proto',
131 command = python_cmd + ' $SCRIPT --proto $SOURCE --proto_private ' + srcroot + '/rasterizer/archrast/events_private.proto --output $TARGET --gen_eventhandler_hpp'
133 Depends('rasterizer/archrast/gen_ar_eventhandler.hpp',
134 swrroot + 'rasterizer/archrast/events_private.proto')
135 Depends('rasterizer/jitter/gen_state_llvm.h',
136 swrroot + 'rasterizer/codegen/templates/gen_ar_eventhandler.hpp')
139 target = 'rasterizer/archrast/gen_ar_eventhandlerfile.hpp',
140 script = swrroot + 'rasterizer/codegen/gen_archrast.py',
141 source = 'rasterizer/archrast/events.proto',
142 command = python_cmd + ' $SCRIPT --proto $SOURCE --proto_private ' + srcroot + '/rasterizer/archrast/events_private.proto --output $TARGET --gen_eventhandlerfile_hpp'
144 Depends('rasterizer/archrast/gen_ar_eventhandlerfile.hpp',
145 swrroot + 'rasterizer/archrast/events_private.proto')
146 Depends('rasterizer/jitter/gen_state_llvm.h',
147 swrroot + 'rasterizer/codegen/templates/gen_ar_eventhandlerfile.hpp')
149 # 5 SWR_MULTISAMPLE_TYPE_COUNT
150 # 2 SWR_MSAA_SAMPLE_PATTERN_COUNT
151 # 3 SWR_INPUT_COVERAGE_COUNT
153 # 2 forcedSampleCount
155 backendPixelRateFileCount = 4
156 backendPixelRateFilePat = "rasterizer/core/backends/gen_BackendPixelRate%s.cpp"
157 backendPixelRateFiles = list(backendPixelRateFilePat % x for x in range(0, backendPixelRateFileCount))
159 target = 'rasterizer/core/backends/gen_BackendPixelRate.hpp',
160 script = swrroot + 'rasterizer/codegen/gen_backends.py',
162 command = python_cmd + ' $SCRIPT --outdir ' + bldroot + '/rasterizer/core/backends --dim 5 2 3 2 2 2 --numfiles ' + str(backendPixelRateFileCount) + ' --cpp --hpp'
164 Depends(backendPixelRateFiles,
165 ['rasterizer/core/backends/gen_BackendPixelRate.hpp',
166 'rasterizer/archrast/gen_ar_event.hpp',
167 'rasterizer/archrast/gen_ar_eventhandler.hpp',
168 'rasterizer/codegen/gen_knobs.h']
171 # 5 SWR_MULTISAMPLE_TYPE_COUNT
174 # 3 SWR_INPUT_COVERAGE_COUNT
175 # 5 STATE_VALID_TRI_EDGE_COUNT
176 # 2 RasterScissorEdges
177 genRasterizerFileCount = 4
178 genRasterizerFilePat = "rasterizer/core/backends/gen_rasterizer%s.cpp"
179 genRasterizerFiles = list(genRasterizerFilePat % x for x in range(0, genRasterizerFileCount))
181 target = 'rasterizer/core/backends/gen_rasterizer.hpp',
182 script = swrroot + 'rasterizer/codegen/gen_backends.py',
184 command = python_cmd + ' $SCRIPT --outdir ' + bldroot + '/rasterizer/core/backends --rast --dim 5 2 2 3 5 2 --numfiles ' + str(genRasterizerFileCount) + ' --cpp --hpp'
186 Depends(genRasterizerFiles,
187 ['rasterizer/core/backends/gen_rasterizer.hpp',
188 'rasterizer/archrast/gen_ar_event.hpp',
189 'rasterizer/archrast/gen_ar_eventhandler.hpp',
190 'rasterizer/codegen/gen_knobs.h']
193 Depends('rasterizer/jitter/gen_state_llvm.h',
194 swrroot + 'rasterizer/codegen/templates/gen_backend.cpp')
196 # Auto-generated .cpp files (that need to generate object files)
198 'rasterizer/codegen/gen_knobs.cpp',
199 'rasterizer/archrast/gen_ar_event.cpp',
202 built_sources += [backendPixelRateFiles, genRasterizerFiles]
204 source = built_sources
205 source += env.ParseSourceList(swrroot + 'Makefile.sources', [
206 'ARCHRAST_CXX_SOURCES',
207 'COMMON_CXX_SOURCES',
212 env.Prepend(CPPPATH = [
215 'rasterizer/codegen',
218 'rasterizer/archrast',
224 envavx.Append(CPPDEFINES = ['KNOB_ARCH=KNOB_ARCH_AVX'])
225 if env['platform'] == 'windows':
226 envavx.Append(CCFLAGS = ['/arch:AVX'])
228 envavx.Append(CCFLAGS = ['-mavx'])
230 swrAVX = envavx.SharedLibrary(
235 env.Alias('swrAVX', swrAVX)
238 envavx2 = env.Clone()
240 envavx2.Append(CPPDEFINES = ['KNOB_ARCH=KNOB_ARCH_AVX2'])
241 if env['platform'] == 'windows':
242 envavx2.Append(CCFLAGS = ['/arch:AVX2'])
244 envavx2.Append(CCFLAGS = ['-mavx2', '-mfma', '-mbmi2', '-mf16c'])
246 swrAVX2 = envavx2.SharedLibrary(
251 env.Alias('swrAVX2', swrAVX2)
253 source = env.ParseSourceList(swrroot + 'Makefile.sources', [
255 'COMMON_CXX_SOURCES',
256 'JITTER_CXX_SOURCES',
260 'rasterizer/codegen/gen_knobs.cpp',
261 'rasterizer/archrast/gen_ar_event.cpp',
265 envSWR = envavx.Clone() # pick up the arch flag for intrinsic usage
266 envSWR.Append(CPPDEFINES = ['HAVE_SWR_AVX', 'HAVE_SWR_AVX2'])
267 swr = envSWR.ConvenienceLibrary(
272 # treat arch libs as dependencies, even though they are not linked
273 # into swr, so we don't have to build them separately
274 Depends(swr, ['swrAVX', 'swrAVX2'])
276 env.Alias('swr', swr)
278 env.Prepend(LIBS = [swr])