scons: use python3-compatible print()
[mesa.git] / src / gallium / drivers / swr / SConscript
index c0677afc97fda3b0fced3df3b63ce8967c9faeba..fdced66463c912048e043dbec9b0f3f1591cdb62 100644 (file)
@@ -8,17 +8,12 @@ if not env['swr']:
     Return()
 
 if not env['llvm']:
-    print 'warning: LLVM disabled: not building swr'
+    print('warning: LLVM disabled: not building swr')
     env['swr'] = False
     Return()
 
 if env['LLVM_VERSION'] < distutils.version.LooseVersion('3.9'):
-    print "warning: swr requires LLVM >= 3.9: not building swr"
-    env['swr'] = False
-    Return()
-
-if env['platform'] != 'windows':
-    print "warning: swr scons build only supports windows: not building swr"
+    print("warning: swr requires LLVM >= 3.9: not building swr")
     env['swr'] = False
     Return()
 
@@ -33,13 +28,7 @@ if env['platform'] == 'windows':
 else:
     llvm_config = os.environ.get('LLVM_CONFIG', 'llvm-config')
     llvm_includedir = env.backtick('%s --includedir' % llvm_config).rstrip()
-    print "llvm include dir %s" % llvm_includedir
-
-# the loader is included in the mesa lib itself
-# All the remaining files are in loadable modules
-loadersource = env.ParseSourceList('Makefile.sources', [
-    'LOADER_SOURCES'
-])
+    print("llvm include dir %s" % llvm_includedir)
 
 if not env['msvc'] :
     env.Append(CCFLAGS = [
@@ -47,115 +36,165 @@ if not env['msvc'] :
     ])
 
 swrroot = '#src/gallium/drivers/swr/'
+bldroot = Dir('.').abspath
 
 env.CodeGenerate(
-    target = 'rasterizer/scripts/gen_knobs.cpp',
-    script = swrroot + 'rasterizer/scripts/gen_knobs.py',
-    source = 'rasterizer/scripts/templates/knobs.template',
-    command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET --gen_cpp'
+    target = 'rasterizer/codegen/gen_knobs.cpp',
+    script = swrroot + 'rasterizer/codegen/gen_knobs.py',
+    source = '',
+    command = python_cmd + ' $SCRIPT --output $TARGET --gen_cpp'
 )
+Depends('rasterizer/codegen/gen_knobs.cpp',
+        swrroot + 'rasterizer/codegen/templates/gen_knobs.cpp')
 
 env.CodeGenerate(
-    target = 'rasterizer/scripts/gen_knobs.h',
-    script = swrroot + 'rasterizer/scripts/gen_knobs.py',
-    source = 'rasterizer/scripts/templates/knobs.template',
-    command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET --gen_h'
+    target = 'rasterizer/codegen/gen_knobs.h',
+    script = swrroot + 'rasterizer/codegen/gen_knobs.py',
+    source = '',
+    command = python_cmd + ' $SCRIPT --output $TARGET --gen_h'
 )
+Depends('rasterizer/codegen/gen_knobs.h',
+        swrroot + 'rasterizer/codegen/templates/gen_knobs.h')
 
 env.CodeGenerate(
-    target = 'rasterizer/jitter/state_llvm.h',
-    script = swrroot + 'rasterizer/jitter/scripts/gen_llvm_types.py',
+    target = 'rasterizer/jitter/gen_state_llvm.h',
+    script = swrroot + 'rasterizer/codegen/gen_llvm_types.py',
     source = 'rasterizer/core/state.h',
     command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET'
 )
+Depends('rasterizer/jitter/gen_state_llvm.h',
+        swrroot + 'rasterizer/codegen/templates/gen_llvm.hpp')
 
 env.CodeGenerate(
-    target = 'rasterizer/jitter/builder_gen.h',
-    script = swrroot + 'rasterizer/jitter/scripts/gen_llvm_ir_macros.py',
-    source = os.path.join(llvm_includedir, 'llvm/IR/IRBuilder.h'),
-    command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET --gen_h'
-)
-
-env.CodeGenerate(
-    target = 'rasterizer/jitter/builder_gen.cpp',
-    script = swrroot + 'rasterizer/jitter/scripts/gen_llvm_ir_macros.py',
+    target = 'rasterizer/jitter/gen_builder.hpp',
+    script = swrroot + 'rasterizer/codegen/gen_llvm_ir_macros.py',
     source = os.path.join(llvm_includedir, 'llvm/IR/IRBuilder.h'),
-    command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET --gen_cpp'
+    command = python_cmd + ' $SCRIPT --input $SOURCE --output ' + bldroot + '/rasterizer/jitter --gen_h'
 )
+Depends('rasterizer/jitter/gen_builder.hpp',
+        swrroot + 'rasterizer/codegen/templates/gen_builder.hpp')
 
 env.CodeGenerate(
-    target = 'rasterizer/jitter/builder_x86.h',
-    script = swrroot + 'rasterizer/jitter/scripts/gen_llvm_ir_macros.py',
+    target = 'rasterizer/jitter/gen_builder_x86.hpp',
+    script = swrroot + 'rasterizer/codegen/gen_llvm_ir_macros.py',
     source = '',
-    command = python_cmd + ' $SCRIPT --output $TARGET --gen_x86_h'
+    command = python_cmd + ' $SCRIPT --output ' + bldroot + '/rasterizer/jitter --gen_x86_h'
 )
+Depends('rasterizer/jitter/gen_builder.hpp',
+        swrroot + 'rasterizer/codegen/templates/gen_builder.hpp')
 
 env.CodeGenerate(
-    target = 'rasterizer/jitter/builder_x86.cpp',
-    script = swrroot + 'rasterizer/jitter/scripts/gen_llvm_ir_macros.py',
-    source = '',
-    command = python_cmd + ' $SCRIPT --output $TARGET --gen_x86_cpp'
-)
-
-env.CodeGenerate(
-    target = 'swr_context_llvm.h',
-    script = swrroot + 'rasterizer/jitter/scripts/gen_llvm_types.py',
+    target = './gen_swr_context_llvm.h',
+    script = swrroot + 'rasterizer/codegen/gen_llvm_types.py',
     source = 'swr_context.h',
     command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET'
 )
+Depends('rasterizer/jitter/gen_state_llvm.h',
+        swrroot + 'rasterizer/codegen/templates/gen_llvm.hpp')
 
 env.CodeGenerate(
-    target = 'rasterizer/archrast/gen_ar_event.h',
-    script = swrroot + 'rasterizer/scripts/gen_archrast.py',
+    target = 'rasterizer/archrast/gen_ar_event.hpp',
+    script = swrroot + 'rasterizer/codegen/gen_archrast.py',
     source = 'rasterizer/archrast/events.proto',
     command = python_cmd + ' $SCRIPT --proto $SOURCE --output $TARGET --gen_event_h'
 )
+Depends('rasterizer/jitter/gen_state_llvm.h',
+        swrroot + 'rasterizer/codegen/templates/gen_ar_event.hpp')
 
 env.CodeGenerate(
     target = 'rasterizer/archrast/gen_ar_event.cpp',
-    script = swrroot + 'rasterizer/scripts/gen_archrast.py',
+    script = swrroot + 'rasterizer/codegen/gen_archrast.py',
     source = 'rasterizer/archrast/events.proto',
     command = python_cmd + ' $SCRIPT --proto $SOURCE --output $TARGET --gen_event_cpp'
 )
+Depends('rasterizer/jitter/gen_state_llvm.h',
+        swrroot + 'rasterizer/codegen/templates/gen_ar_event.cpp')
 
 env.CodeGenerate(
-    target = 'rasterizer/archrast/gen_ar_eventhandler.h',
-    script = swrroot + 'rasterizer/scripts/gen_archrast.py',
+    target = 'rasterizer/archrast/gen_ar_eventhandler.hpp',
+    script = swrroot + 'rasterizer/codegen/gen_archrast.py',
     source = 'rasterizer/archrast/events.proto',
     command = python_cmd + ' $SCRIPT --proto $SOURCE --output $TARGET --gen_eventhandler_h'
 )
+Depends('rasterizer/jitter/gen_state_llvm.h',
+        swrroot + 'rasterizer/codegen/templates/gen_ar_eventhandler.hpp')
 
 env.CodeGenerate(
-    target = 'rasterizer/archrast/gen_ar_eventhandlerfile.h',
-    script = swrroot + 'rasterizer/scripts/gen_archrast.py',
+    target = 'rasterizer/archrast/gen_ar_eventhandlerfile.hpp',
+    script = swrroot + 'rasterizer/codegen/gen_archrast.py',
     source = 'rasterizer/archrast/events.proto',
     command = python_cmd + ' $SCRIPT --proto $SOURCE --output $TARGET --gen_eventhandlerfile_h'
 )
+Depends('rasterizer/jitter/gen_state_llvm.h',
+        swrroot + 'rasterizer/codegen/templates/gen_ar_eventhandlerfile.hpp')
+
+# 5 SWR_MULTISAMPLE_TYPE_COUNT
+# 2 SWR_MSAA_SAMPLE_PATTERN_COUNT
+# 3 SWR_INPUT_COVERAGE_COUNT
+# 2 centroid
+# 2 forcedSampleCount
+# 2 canEarlyZ
+backendPixelRateFileCount = 4
+backendPixelRateFilePat = "rasterizer/core/backends/gen_BackendPixelRate%s.cpp"
+backendPixelRateFiles = map(lambda x: backendPixelRateFilePat % x,
+                            range(0, backendPixelRateFileCount))
+env.CodeGenerate(
+    target = 'rasterizer/core/backends/gen_BackendPixelRate.hpp',
+    script = swrroot + 'rasterizer/codegen/gen_backends.py',
+    source = '',
+    command = python_cmd + ' $SCRIPT --outdir ' + bldroot + '/rasterizer/core/backends --dim 5 2 3 2 2 2 --numfiles ' + str(backendPixelRateFileCount) + ' --cpp --hpp'
+    )
+Depends(backendPixelRateFiles,
+        ['rasterizer/core/backends/gen_BackendPixelRate.hpp',
+         'rasterizer/archrast/gen_ar_event.hpp',
+         'rasterizer/codegen/gen_knobs.h']
+        )
+
+# 5 SWR_MULTISAMPLE_TYPE_COUNT
+# 2 CenterPattern
+# 2 Conservative
+# 3 SWR_INPUT_COVERAGE_COUNT
+# 5 STATE_VALID_TRI_EDGE_COUNT
+# 2 RasterScissorEdges
+genRasterizerFileCount = 4
+genRasterizerFilePat = "rasterizer/core/backends/gen_rasterizer%s.cpp"
+genRasterizerFiles = map(lambda x: genRasterizerFilePat % x,
+                         range(0, genRasterizerFileCount))
+env.CodeGenerate(
+    target = 'rasterizer/core/backends/gen_rasterizer.hpp',
+    script = swrroot + 'rasterizer/codegen/gen_backends.py',
+    source = '',
+    command = python_cmd + ' $SCRIPT --outdir ' + bldroot + '/rasterizer/core/backends --rast --dim 5 2 2 3 5 2 --numfiles ' + str(genRasterizerFileCount) + ' --cpp --hpp'
+    )
+Depends(genRasterizerFiles,
+        ['rasterizer/core/backends/gen_rasterizer.hpp',
+         'rasterizer/archrast/gen_ar_event.hpp',
+         'rasterizer/codegen/gen_knobs.h']
+        )
+
+Depends('rasterizer/jitter/gen_state_llvm.h',
+        swrroot + 'rasterizer/codegen/templates/gen_backend.cpp')
 
 # Auto-generated .cpp files (that need to generate object files)
 built_sources = [
-    'rasterizer/scripts/gen_knobs.cpp',
-    'rasterizer/jitter/builder_gen.cpp',
-    'rasterizer/jitter/builder_x86.cpp',
+    'rasterizer/codegen/gen_knobs.cpp',
     'rasterizer/archrast/gen_ar_event.cpp',
     ]
 
+built_sources += [backendPixelRateFiles, genRasterizerFiles]
+
 source = built_sources
 source += env.ParseSourceList(swrroot + 'Makefile.sources', [
-    'CXX_SOURCES',
     'ARCHRAST_CXX_SOURCES',
     'COMMON_CXX_SOURCES',
     'CORE_CXX_SOURCES',
-    'JITTER_CXX_SOURCES',
     'MEMORY_CXX_SOURCES'
 ])
 
-env.Prepend(LIBS = [ mesautil, mesa, gallium ])
-
 env.Prepend(CPPPATH = [
     '.',
     'rasterizer',
-    'rasterizer/scripts',
+    'rasterizer/codegen',
     'rasterizer/core',
     'rasterizer/jitter',
     'rasterizer/archrast',
@@ -184,7 +223,7 @@ envavx2.Append(CPPDEFINES = ['KNOB_ARCH=KNOB_ARCH_AVX2'])
 if env['platform'] == 'windows':
     envavx2.Append(CCFLAGS = ['/arch:AVX2'])
 else:
-    envavx2.Append(CCFLAGS = ['-mavx2'])
+    envavx2.Append(CCFLAGS = ['-mavx2', '-mfma', '-mbmi2', '-mf16c'])
 
 swrAVX2 = envavx2.SharedLibrary(
     target = 'swrAVX2',
@@ -193,14 +232,25 @@ swrAVX2 = envavx2.SharedLibrary(
     )
 env.Alias('swrAVX2', swrAVX2)
 
+source = env.ParseSourceList(swrroot + 'Makefile.sources', [
+    'CXX_SOURCES',
+    'COMMON_CXX_SOURCES',
+    'JITTER_CXX_SOURCES',
+    'LOADER_SOURCES'
+])
+source += [
+    'rasterizer/codegen/gen_knobs.cpp',
+    'rasterizer/archrast/gen_ar_event.cpp',
+    ]
 
 # main SWR lib
-swr = env.ConvenienceLibrary(
+envSWR = envavx.Clone() # pick up the arch flag for intrinsic usage
+envSWR.Append(CPPDEFINES = ['HAVE_SWR_AVX', 'HAVE_SWR_AVX2'])
+swr = envSWR.ConvenienceLibrary(
     target = 'swr',
-    source = loadersource,
+    source = source,
     )
 
-
 # treat arch libs as dependencies, even though they are not linked
 # into swr, so we don't have to build them separately
 Depends(swr, ['swrAVX', 'swrAVX2'])