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('3.9'):
16 print "warning: swr requires LLVM >= 3.9: 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
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', [
40 env.Append(CCFLAGS = [
44 swrroot = '#src/gallium/drivers/swr/'
45 bldroot = Dir('.').abspath
48 target = 'rasterizer/codegen/gen_knobs.cpp',
49 script = swrroot + 'rasterizer/codegen/gen_knobs.py',
51 command = python_cmd + ' $SCRIPT --output $TARGET --gen_cpp'
53 Depends('rasterizer/codegen/gen_knobs.cpp',
54 swrroot + 'rasterizer/codegen/templates/gen_knobs.cpp')
57 target = 'rasterizer/codegen/gen_knobs.h',
58 script = swrroot + 'rasterizer/codegen/gen_knobs.py',
60 command = python_cmd + ' $SCRIPT --output $TARGET --gen_h'
62 Depends('rasterizer/codegen/gen_knobs.cpp',
63 swrroot + 'rasterizer/codegen/templates/gen_knobs.cpp')
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'
71 Depends('rasterizer/jitter/gen_state_llvm.h',
72 swrroot + 'rasterizer/codegen/templates/gen_llvm.hpp')
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'
80 Depends('rasterizer/jitter/gen_builder.hpp',
81 swrroot + 'rasterizer/codegen/templates/gen_builder.hpp')
84 target = 'rasterizer/jitter/gen_builder_x86.hpp',
85 script = swrroot + 'rasterizer/codegen/gen_llvm_ir_macros.py',
87 command = python_cmd + ' $SCRIPT --output ' + bldroot + '/rasterizer/jitter --gen_x86_h'
89 Depends('rasterizer/jitter/gen_builder.hpp',
90 swrroot + 'rasterizer/codegen/templates/gen_builder.hpp')
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'
98 Depends('rasterizer/jitter/gen_state_llvm.h',
99 swrroot + 'rasterizer/codegen/templates/gen_llvm.hpp')
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'
107 Depends('rasterizer/jitter/gen_state_llvm.h',
108 swrroot + 'rasterizer/codegen/templates/gen_ar_event.hpp')
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'
116 Depends('rasterizer/jitter/gen_state_llvm.h',
117 swrroot + 'rasterizer/codegen/templates/gen_ar_event.cpp')
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'
125 Depends('rasterizer/jitter/gen_state_llvm.h',
126 swrroot + 'rasterizer/codegen/templates/gen_ar_eventhandler.hpp')
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'
134 Depends('rasterizer/jitter/gen_state_llvm.h',
135 swrroot + 'rasterizer/codegen/templates/gen_ar_eventhandlerfile.hpp')
137 # 5 SWR_MULTISAMPLE_TYPE_COUNT
138 # 2 SWR_MSAA_SAMPLE_PATTERN_COUNT
139 # 3 SWR_INPUT_COVERAGE_COUNT
141 # 2 forcedSampleCount
144 target = 'rasterizer/core/gen_BackendPixelRate0.cpp',
145 script = swrroot + 'rasterizer/codegen/gen_backends.py',
147 command = python_cmd + ' $SCRIPT --outdir ' + bldroot + '/rasterizer/core --dim 5 2 3 2 2 2 --split 0 --cpp'
149 Depends('rasterizer/jitter/gen_state_llvm.h',
150 swrroot + 'rasterizer/codegen/templates/gen_backend.cpp')
152 # Auto-generated .cpp files (that need to generate object files)
154 'rasterizer/codegen/gen_knobs.cpp',
155 'rasterizer/archrast/gen_ar_event.cpp',
156 'rasterizer/core/gen_BackendPixelRate0.cpp',
159 source = built_sources
160 source += env.ParseSourceList(swrroot + 'Makefile.sources', [
162 'ARCHRAST_CXX_SOURCES',
163 'COMMON_CXX_SOURCES',
165 'JITTER_CXX_SOURCES',
169 env.Prepend(LIBS = [ mesautil, mesa, gallium ])
171 env.Prepend(CPPPATH = [
174 'rasterizer/codegen',
177 'rasterizer/archrast',
183 envavx.Append(CPPDEFINES = ['KNOB_ARCH=KNOB_ARCH_AVX'])
184 if env['platform'] == 'windows':
185 envavx.Append(CCFLAGS = ['/arch:AVX'])
187 envavx.Append(CCFLAGS = ['-mavx'])
189 swrAVX = envavx.SharedLibrary(
194 env.Alias('swrAVX', swrAVX)
197 envavx2 = env.Clone()
199 envavx2.Append(CPPDEFINES = ['KNOB_ARCH=KNOB_ARCH_AVX2'])
200 if env['platform'] == 'windows':
201 envavx2.Append(CCFLAGS = ['/arch:AVX2'])
203 envavx2.Append(CCFLAGS = ['-mavx2', '-mfma', '-mbmi2', '-mf16c'])
205 swrAVX2 = envavx2.SharedLibrary(
210 env.Alias('swrAVX2', swrAVX2)
214 swr = env.ConvenienceLibrary(
216 source = loadersource,
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'])
224 env.Alias('swr', swr)
226 env.Prepend(LIBS = [swr])