Assists music production by grouping standalone programs into sessions. Community version of "Non Session Manager".
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
4.0KB

  1. #!/usr/bin/env python
  2. import os
  3. import subprocess
  4. import waflib.Logs as Logs, waflib.Options as Options
  5. import string
  6. VERSION = 'xxx'
  7. APPNAME = 'non-things'
  8. top = '.'
  9. out = 'build'
  10. common = [ 'nonlib']
  11. projects = [ 'session-manager' ]
  12. def options(opt):
  13. # opt.add_option('--use-system-ntk', action='store_true', default=False,
  14. # dest='use_system_ntk',
  15. # help="Link to system-installed shared NTK instead of bundled version")
  16. opt.add_option('--enable-debug', action='store_true', default=False, dest='debug',
  17. help='Build for debugging')
  18. opt.add_option('--disable-sse', action='store_false', default=True, dest='sse',
  19. help='Disable SSE optimization')
  20. opt.add_option('--project', action='store', default=False, dest='project',
  21. help='Limit build to a single project (' + ', '.join( projects ) + ')')
  22. for i in projects:
  23. opt.recurse(i)
  24. def configure(conf):
  25. conf.load('compiler_c')
  26. conf.load('compiler_cxx')
  27. conf.load('gnu_dirs')
  28. conf.load('gccdeps')
  29. conf.line_just = 52
  30. conf.env['LIB_PTHREAD'] = ['pthread']
  31. conf.env['LIB_DL'] = ['dl']
  32. conf.env['LIB_M'] = ['m']
  33. if Options.options.sse:
  34. if os.system("grep -q '^flags.*\<sse2\>' /proc/cpuinfo"):
  35. Options.options.sse = 0
  36. print( "Processor lacks sse, disabling..." )
  37. conf.check_cfg(package='jack', uselib_store='JACK', args="--cflags --libs",
  38. atleast_version='0.103.0', mandatory=True)
  39. conf.check_cfg(package='liblo', uselib_store='LIBLO',args="--cflags --libs",
  40. atleast_version='0.26', mandatory=True)
  41. conf.check_cc(msg='Checking for compiler pointer alignment hints',
  42. uselib_store='HAS_BUILTIN_ASSUME_ALIGNED',
  43. fragment='int main ( char**argv, int argc ) { const char *s = (const char*)__builtin_assume_aligned( 0, 16 ); return 0; }',
  44. execute=False, mandatory=False)
  45. ###
  46. for i in common:
  47. conf.recurse(i)
  48. optimization_flags = [
  49. "-O3",
  50. "-fomit-frame-pointer",
  51. "-ffast-math",
  52. "-pipe"
  53. ]
  54. if Options.options.sse:
  55. print('Using SSE optimization')
  56. optimization_flags.extend( [
  57. "-msse2",
  58. "-mfpmath=sse" ] );
  59. conf.define( 'USE_SSE', 1 )
  60. debug_flags = [ '-O0', '-g3' ]
  61. if Options.options.debug:
  62. print('Building for debugging')
  63. conf.env.append_value('CFLAGS', debug_flags )
  64. conf.env.append_value('CXXFLAGS', debug_flags )
  65. else:
  66. print('Building for performance')
  67. conf.env.append_value('CFLAGS', optimization_flags )
  68. conf.env.append_value('CXXFLAGS', optimization_flags )
  69. #conf.define( 'NDEBUG', 1 )
  70. conf.define( "_GNU_SOURCE", 1)
  71. conf.env.append_value('CFLAGS',['-Wall'])
  72. # conf.env.append_value('CXXFLAGS',['-Wall','-fno-exceptions', '-fno-rtti'])
  73. conf.env.append_value('CXXFLAGS',['-Wall','-fno-rtti'])
  74. global_flags = [ '-pthread',
  75. '-D_LARGEFILE64_SOURCE',
  76. '-D_FILE_OFFSET_BITS=64',
  77. '-D_GNU_SOURCE' ]
  78. conf.env.append_value('CFLAGS', global_flags )
  79. conf.env.append_value('CXXFLAGS', global_flags )
  80. conf.env.PROJECT = conf.options.project
  81. if conf.env.PROJECT:
  82. pl = [ conf.env.PROJECT ]
  83. else:
  84. pl = projects;
  85. for i in pl:
  86. Logs.pprint('YELLOW', 'Configuring %s' % i)
  87. conf.recurse(i);
  88. def run(ctx):
  89. if not Options.options.cmd:
  90. Logs.error("missing --cmd option for run command")
  91. return
  92. cmd = Options.options.cmd
  93. Logs.pprint('GREEN', 'Running %s' % cmd)
  94. subprocess.call(cmd, shell=True, env=source_tree_env())
  95. def build(bld):
  96. for i in common:
  97. bld.recurse(i)
  98. if bld.env.PROJECT:
  99. pl = [ bld.env.PROJECT ]
  100. else:
  101. pl = projects;
  102. for i in pl:
  103. bld.recurse(i);