wscript 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. from waflib.Configure import ConfigurationContext, conf
  2. from platform_capabilities import get_capability_dict
  3. @conf
  4. def get_board(ctx):
  5. if isinstance(ctx, ConfigurationContext):
  6. return ctx.options.board
  7. else:
  8. return ctx.env.BOARD
  9. @conf
  10. def is_bigboard(ctx):
  11. return '_bb' in ctx.get_board()
  12. # Platform specific predicates
  13. @conf
  14. def is_tintin(ctx):
  15. return ctx.get_board() in ('bigboard', 'bb2', 'ev2_4', 'v1_5', 'v2_0')
  16. @conf
  17. def is_snowy(ctx):
  18. return ctx.get_board().startswith('snowy')
  19. @conf
  20. def is_spalding(ctx):
  21. return ctx.get_board().startswith('spalding')
  22. @conf
  23. def is_silk(ctx):
  24. return ctx.get_board().startswith('silk')
  25. @conf
  26. def is_cutts(ctx):
  27. return ctx.get_board().startswith('cutts')
  28. @conf
  29. def is_robert(ctx):
  30. return ctx.get_board().startswith('robert')
  31. @conf
  32. def is_asterix(ctx):
  33. return ctx.get_board().startswith('asterix')
  34. @conf
  35. def get_platform_name(ctx):
  36. if is_tintin(ctx):
  37. return "tintin"
  38. elif is_snowy(ctx):
  39. return "snowy"
  40. elif is_spalding(ctx):
  41. return "spalding"
  42. elif is_silk(ctx):
  43. return "silk"
  44. elif is_cutts(ctx):
  45. return "calculus"
  46. elif is_robert(ctx):
  47. return "robert"
  48. elif is_asterix(ctx):
  49. return "asterix"
  50. else:
  51. return "unknown"
  52. # Composite platform predicates
  53. @conf
  54. def is_snowy_compatible(ctx):
  55. return (ctx.is_snowy() or ctx.is_spalding())
  56. # Platform features
  57. @conf
  58. def get_qemu_machine(ctx):
  59. if is_tintin(ctx):
  60. return 'pebble-bb2'
  61. elif is_snowy(ctx):
  62. return 'pebble-snowy-bb'
  63. elif is_spalding(ctx):
  64. return 'pebble-s4-bb'
  65. elif is_silk(ctx):
  66. return 'pebble-silk-bb'
  67. elif is_cutts(ctx):
  68. return 'pebble-cutts-bb'
  69. elif is_robert(ctx):
  70. return 'pebble-robert-bb'
  71. else:
  72. return 'unknown'
  73. @conf
  74. def get_qemu_cpu(ctx):
  75. if is_tintin(ctx):
  76. return 'cortex-m3'
  77. elif is_snowy(ctx):
  78. return 'cortex-m4'
  79. elif is_spalding(ctx):
  80. return 'cortex-m4'
  81. elif is_silk(ctx):
  82. return 'cortex-m4'
  83. elif is_cutts(ctx):
  84. return 'cortex-m4'
  85. elif is_robert(ctx):
  86. return 'cortex-m4'
  87. elif is_asterix(ctx):
  88. return 'cortex-m4'
  89. else:
  90. return 'unknown'
  91. @conf
  92. def get_qemu_extflash_device_type(ctx):
  93. if is_tintin(ctx):
  94. return '-mtdblock'
  95. elif is_snowy(ctx):
  96. return '-pflash'
  97. elif is_spalding(ctx):
  98. return '-pflash'
  99. elif is_silk(ctx):
  100. return '-mtdblock'
  101. elif is_cutts(ctx):
  102. return '-pflash'
  103. elif is_robert(ctx):
  104. return '-pflash'
  105. else:
  106. return None
  107. @conf
  108. def has_touch(ctx):
  109. if is_tintin(ctx):
  110. return False
  111. elif is_snowy(ctx):
  112. return False
  113. elif is_spalding(ctx):
  114. return False
  115. elif is_silk(ctx):
  116. return False
  117. elif is_cutts(ctx):
  118. return True
  119. elif is_robert(ctx):
  120. return False
  121. elif is_asterix(ctx):
  122. return False
  123. else:
  124. return None
  125. @conf
  126. def get_hrm(ctx):
  127. if is_robert(ctx):
  128. return "AS7000"
  129. elif is_silk(ctx):
  130. return "AS7000"
  131. else:
  132. return None
  133. @conf
  134. def capabilities_dict(ctx):
  135. board = ctx.get_board()
  136. # capabilities will never be None. An exception is raised if it fails.
  137. capabilities = get_capability_dict(ctx, board)
  138. return capabilities
  139. @conf
  140. def capability(ctx, capability_str):
  141. capabilities = ctx.capabilities_dict()
  142. return capabilities[capability_str]
  143. @conf
  144. def add_platform_defines(ctx, env):
  145. if ctx.is_tintin():
  146. bit_depth = 1
  147. platform = 'TINTIN'
  148. elif ctx.is_snowy():
  149. bit_depth = 8
  150. platform = 'SNOWY'
  151. elif ctx.is_spalding():
  152. bit_depth = 8
  153. platform = 'SPALDING'
  154. elif ctx.is_silk():
  155. bit_depth = 1
  156. platform = 'SILK'
  157. elif ctx.is_cutts():
  158. bit_depth = 8
  159. platform = 'CALCULUS'
  160. elif ctx.is_robert():
  161. bit_depth = 8
  162. platform = 'ROBERT'
  163. elif ctx.is_asterix():
  164. bit_depth = 1
  165. platform = 'ASTERIX'
  166. else:
  167. ctx.fatal('No platform specified for {}!'.format(ctx.options.board))
  168. env.append_value(
  169. 'DEFINES', ['USE_STDPERIPH_DRIVER=1',
  170. 'BOARD_{}=1'.format(ctx.options.board.upper()),
  171. 'PLATFORM_{}=1'.format(platform),
  172. 'MICRO_FAMILY_{}=1'.format(env.MICRO_FAMILY),
  173. 'SCREEN_COLOR_DEPTH_BITS={}'.format(bit_depth),
  174. 'MIN_SDK_VERSION={}'.format(env.MIN_SDK_VERSION)])
  175. if 'NRF5' in env.MICRO_FAMILY:
  176. env.append_value('DEFINES', 'MICRO_FAMILY_NRF5=1')
  177. for cap, val in ctx.capabilities_dict().items():
  178. env.append_value('DEFINES', "CAPABILITY_%s=%s" % (cap, int(val)))
  179. # Build
  180. def configure(ctx):
  181. pass
  182. def build(ctx):
  183. pass
  184. # vim:filetype=python