Guest User

Untitled

a guest
Oct 23rd, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # vim:ts=4:sw=4:expandtab
  4.  
  5. import threading
  6. import os
  7. import sys
  8. import optparse
  9.  
  10. __full_file_path__ = os.path.abspath(os.path.dirname(__file__))
  11. sys.path.append(os.path.join(__full_file_path__, '..'))
  12. import makefile_parser
  13. from BuildUtil import get_cpu_number
  14.  
  15. def run_nmake(target):
  16. return os.system('nmake -f "%s" /nologo MAKE="nmake /nologo" %s' % (
  17. makefile, target))
  18.  
  19. def nmake_thread(target):
  20. S.acquire()
  21. run_nmake(target)
  22. S.release()
  23.  
  24. def parallel_build():
  25. if base_target == 'release':
  26. _base_target = 'sub_Release'
  27. else:
  28. _base_target = 'sub_Debug'
  29. target_graph = makefile_parser.get_target_graph(makefile)
  30. while True:
  31. if not target_graph:
  32. break
  33. indep_targets = []
  34. for t in target_graph:
  35. if target_graph[t]['deps']:
  36. continue
  37. indep_targets.append(t)
  38. thread_list = []
  39. for target in indep_targets:
  40. for parent_t in target_graph[target]['in_deps']:
  41. target_graph[parent_t]['deps'].remove(target)
  42. del target_graph[target]
  43. t = threading.Thread(
  44. target = nmake_thread,
  45. args = ['%s-%s' % (target, _base_target)])
  46. t.setDaemon(True)
  47. thread_list.append(t)
  48. t.start()
  49. map(lambda t: t.join(), thread_list)
  50.  
  51. def serial_build():
  52. return run_nmake(base_target)
  53.  
  54. def main():
  55. global S
  56. global base_target
  57. global makefile
  58.  
  59. parser = optparse.OptionParser()
  60. parser.add_option(
  61. '-f',
  62. dest = 'makefile',
  63. default = os.path.join(os.getcwd(), 'Makefile'))
  64. parser.add_option(
  65. '-j',
  66. dest = 'nproc',
  67. default = get_cpu_number())
  68. opts, args = parser.parse_args()
  69.  
  70. makefile = opts.makefile
  71. nproc = int(opts.nproc)
  72. S = threading.Semaphore(nproc)
  73. if args:
  74. base_target = args[0]
  75. else:
  76. base_target = 'debug'
  77.  
  78. if base_target in ('release', 'debug'):
  79. parallel_build()
  80. return serial_build()
  81.  
  82. if __name__ == '__main__':
  83. sys.exit(main())
Add Comment
Please, Sign In to add comment