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"
20 if env['platform'] != 'windows':
21 print "warning: swr scons build only supports windows: not building swr"
29 # construct llvm include dir
30 if env['platform'] == 'windows':
31 # on windows there is no llvm-config, so LLVM is defined
32 llvm_includedir = os.path.join(os.environ['LLVM'], 'include')
34 llvm_config = os.environ.get('LLVM_CONFIG', 'llvm-config')
35 llvm_includedir = env.backtick('%s --includedir' % llvm_config).rstrip()
36 print "llvm include dir %s" % llvm_includedir
38 # the loader is included in the mesa lib itself
39 # All the remaining files are in loadable modules
40 loadersource = env.ParseSourceList('Makefile.sources', [
44 env.Append(CPPDEFINES = [
45 '__STDC_CONSTANT_MACROS',
50 env.Append(CCFLAGS = [
54 swrroot = '#src/gallium/drivers/swr/'
57 target = 'rasterizer/scripts/gen_knobs.cpp',
58 script = swrroot + 'rasterizer/scripts/gen_knobs.py',
59 source = 'rasterizer/scripts/templates/knobs.template',
60 command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET --gen_cpp'
64 target = 'rasterizer/scripts/gen_knobs.h',
65 script = swrroot + 'rasterizer/scripts/gen_knobs.py',
66 source = 'rasterizer/scripts/templates/knobs.template',
67 command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET --gen_h'
71 target = 'rasterizer/jitter/state_llvm.h',
72 script = swrroot + 'rasterizer/jitter/scripts/gen_llvm_types.py',
73 source = 'rasterizer/core/state.h',
74 command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET'
78 target = 'rasterizer/jitter/builder_gen.h',
79 script = swrroot + 'rasterizer/jitter/scripts/gen_llvm_ir_macros.py',
80 source = os.path.join(llvm_includedir, 'llvm/IR/IRBuilder.h'),
81 command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET --gen_h'
85 target = 'rasterizer/jitter/builder_gen.cpp',
86 script = swrroot + 'rasterizer/jitter/scripts/gen_llvm_ir_macros.py',
87 source = os.path.join(llvm_includedir, 'llvm/IR/IRBuilder.h'),
88 command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET --gen_cpp'
92 target = 'rasterizer/jitter/builder_x86.h',
93 script = swrroot + 'rasterizer/jitter/scripts/gen_llvm_ir_macros.py',
95 command = python_cmd + ' $SCRIPT --output $TARGET --gen_x86_h'
99 target = 'rasterizer/jitter/builder_x86.cpp',
100 script = swrroot + 'rasterizer/jitter/scripts/gen_llvm_ir_macros.py',
102 command = python_cmd + ' $SCRIPT --output $TARGET --gen_x86_cpp'
106 target = 'swr_context_llvm.h',
107 script = swrroot + 'rasterizer/jitter/scripts/gen_llvm_types.py',
108 source = 'swr_context.h',
109 command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET'
113 target = 'rasterizer/archrast/gen_ar_event.h',
114 script = swrroot + 'rasterizer/scripts/gen_archrast.py',
115 source = 'rasterizer/archrast/events.proto',
116 command = python_cmd + ' $SCRIPT --proto $SOURCE --output $TARGET --gen_event_h'
120 target = 'rasterizer/archrast/gen_ar_event.cpp',
121 script = swrroot + 'rasterizer/scripts/gen_archrast.py',
122 source = 'rasterizer/archrast/events.proto',
123 command = python_cmd + ' $SCRIPT --proto $SOURCE --output $TARGET --gen_event_cpp'
127 target = 'rasterizer/archrast/gen_ar_eventhandler.h',
128 script = swrroot + 'rasterizer/scripts/gen_archrast.py',
129 source = 'rasterizer/archrast/events.proto',
130 command = python_cmd + ' $SCRIPT --proto $SOURCE --output $TARGET --gen_eventhandler_h'
134 target = 'rasterizer/archrast/gen_ar_eventhandlerfile.h',
135 script = swrroot + 'rasterizer/scripts/gen_archrast.py',
136 source = 'rasterizer/archrast/events.proto',
137 command = python_cmd + ' $SCRIPT --proto $SOURCE --output $TARGET --gen_eventhandlerfile_h'
140 # Auto-generated .cpp files (that need to generate object files)
142 'rasterizer/scripts/gen_knobs.cpp',
143 'rasterizer/jitter/builder_gen.cpp',
144 'rasterizer/jitter/builder_x86.cpp',
145 'rasterizer/archrast/gen_ar_event.cpp',
148 source = built_sources
149 source += env.ParseSourceList(swrroot + 'Makefile.sources', [
151 'ARCHRAST_CXX_SOURCES',
152 'COMMON_CXX_SOURCES',
154 'JITTER_CXX_SOURCES',
158 env.Prepend(LIBS = [ mesautil, mesa, gallium ])
160 env.Prepend(CPPPATH = [
163 'rasterizer/scripts',
166 'rasterizer/archrast',
172 envavx.Append(CPPDEFINES = ['KNOB_ARCH=KNOB_ARCH_AVX'])
173 if env['platform'] == 'windows':
174 envavx.Append(CCFLAGS = ['/arch:AVX'])
176 envavx.Append(CCFLAGS = ['-mavx'])
178 swrAVX = envavx.SharedLibrary(
183 env.Alias('swrAVX', swrAVX)
186 envavx2 = env.Clone()
188 envavx2.Append(CPPDEFINES = ['KNOB_ARCH=KNOB_ARCH_AVX2'])
189 if env['platform'] == 'windows':
190 envavx2.Append(CCFLAGS = ['/arch:AVX2'])
192 envavx2.Append(CCFLAGS = ['-mavx2'])
194 swrAVX2 = envavx2.SharedLibrary(
199 env.Alias('swrAVX2', swrAVX2)
203 swr = env.ConvenienceLibrary(
205 source = loadersource,
209 # treat arch libs as dependencies, even though they are not linked
210 # into swr, so we don't have to build them separately
211 Depends(swr, ['swrAVX', 'swrAVX2'])
213 env.Alias('swr', swr)
215 env.Prepend(LIBS = [swr])