SConstruct 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. # -*- coding: utf-8; mode: Python -*-
  2. # (c) Daniel Llorens - 2015-2016, 2018-2019
  3. # This library is free software; you can redistribute it and/or modify it under
  4. # the terms of the GNU Lesser General Public License as published by the Free
  5. # Software Foundation; either version 3 of the License, or (at your option) any
  6. # later version.
  7. # SConstruct for ra/bench
  8. # FIXME Shared pieces with {examples,test,docs}/SConstruct
  9. import os, string, atexit
  10. from os.path import join, abspath
  11. import imp
  12. ra = imp.load_source('ra', '../config/ra.py')
  13. # FIXME pick BLAS flags from here.
  14. try:
  15. Import('top')
  16. except:
  17. top = {}
  18. vars = Variables()
  19. vars.AddVariables(PathVariable('variant_dir', 'build directory', '.', PathVariable.PathIsDirCreate))
  20. env = Environment(options=vars,
  21. ENV=dict([(k, os.environ[k] if k in os.environ else '')
  22. for k in ['PATH', 'HOME', 'TERM', 'LD_RUN_PATH', 'DYLD_LIBRARY_PATH',
  23. 'RPATH', 'LIBRARY_PATH', 'TEXINPUTS', 'GCC_COLORS', 'BOOST_ROOT',
  24. 'RA_USE_BLAS']]))
  25. variant_dir = env['variant_dir']
  26. for var, default in [('CC', 'gcc'), ('CXX', 'g++'), ('FORTRAN', 'gfortran')]:
  27. ra.take_from_environ(env, var, default=default)
  28. for var in ['FORTRANFLAGS', 'LINKFLAGS', 'CCFLAGS', 'CXXFLAGS']:
  29. ra.take_from_environ(env, var, wrapper=string.split)
  30. for var in ['RPATH', 'LIBPATH']:
  31. ra.take_from_environ(env, var, wrapper=lambda x: [x])
  32. arch = os.popen('../config/config.guess').read()
  33. cppcomp = os.popen('%s --version' % env['CXX']).read()
  34. if (arch.find('apple-darwin') >= 0) and (cppcomp.find('g++') >= 0):
  35. archflags=['-march=native', '-Wa,-q']
  36. else:
  37. archflags=['-march=native']
  38. env.Prepend(CPPPATH=['..', '.'],
  39. CCFLAGS=archflags if str(env['CCFLAGS']).strip()=='' else '',
  40. CXXFLAGS=ra.CXXFLAGS)
  41. if 'RA_USE_BLAS' in env['ENV'] and env['ENV']['RA_USE_BLAS']=='1':
  42. print("[%s] BLAS will be used." % Dir('.').path)
  43. env_blas = ra.blas_flags(Configure, env, arch)
  44. env_blas.Append(CPPDEFINES={'RA_USE_BLAS': 1})
  45. else:
  46. env_blas = env
  47. print("[%s] BLAS won't be used." % Dir('.').path)
  48. [ra.to_test_ra(env, variant_dir)(bench)
  49. for bench in ['bench-dot', 'bench-reduce-sqrm',
  50. 'bench-gemv', 'bench-sum-rows', 'bench-sum-cols',
  51. 'bench-pack', 'bench-from',
  52. 'bench-stencil1', 'bench-stencil2', 'bench-stencil3',
  53. 'bench-optimize'
  54. ]]
  55. [ra.to_test_ra(env_blas, variant_dir)(bench)
  56. for bench in ['bench-gemm']]
  57. if 'skip_summary' not in top:
  58. atexit.register(lambda: ra.print_summary(GetBuildFailures, 'ra/bench'))