SConstruct 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import os
  2. import sys
  3. import rtconfig
  4. if os.getenv('RTT_ROOT'):
  5. RTT_ROOT = os.getenv('RTT_ROOT')
  6. else:
  7. RTT_ROOT = os.path.join(os.getcwd(), '..', '..', '..')
  8. sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
  9. from building import *
  10. TARGET = 'rtthread.' + rtconfig.TARGET_EXT
  11. DefaultEnvironment(tools=[])
  12. env = Environment(tools = ['mingw'],
  13. AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS,
  14. CC = rtconfig.CC, CFLAGS = rtconfig.CFLAGS,
  15. CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS,
  16. AR = rtconfig.AR, ARFLAGS = '-rc',
  17. LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
  18. env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
  19. env['ASCOM'] = env['ASPPCOM']
  20. Export('RTT_ROOT')
  21. Export('rtconfig')
  22. # prepare building environment
  23. objs = PrepareBuilding(env, RTT_ROOT)
  24. def _replace_cortex_r52_with_startup(objects):
  25. startup_dir = os.path.join(Dir('#').abspath, 'startup')
  26. startup_names = set(
  27. name for name in os.listdir(startup_dir)
  28. if os.path.isfile(os.path.join(startup_dir, name))
  29. )
  30. cpu_dir = os.path.abspath(os.path.join(RTT_ROOT, 'libcpu', rtconfig.ARCH, rtconfig.CPU))
  31. def _source_path(node):
  32. for attr in ('srcnode', 'rfile'):
  33. if hasattr(node, attr):
  34. source = getattr(node, attr)()
  35. if hasattr(source, 'abspath'):
  36. return os.path.abspath(source.abspath)
  37. if hasattr(node, 'abspath'):
  38. return os.path.abspath(node.abspath)
  39. return None
  40. def _filter(items):
  41. filtered = []
  42. for item in items:
  43. if isinstance(item, list):
  44. filtered.append(_filter(item))
  45. continue
  46. if not hasattr(item, 'abspath'):
  47. filtered.append(item)
  48. continue
  49. item_path = _source_path(item)
  50. if item_path is None:
  51. filtered.append(item)
  52. continue
  53. item_name = os.path.basename(item_path)
  54. if item_name in startup_names and item_path.startswith(cpu_dir + os.sep):
  55. continue
  56. filtered.append(item)
  57. return filtered
  58. return _filter(objects)
  59. objs = _replace_cortex_r52_with_startup(objs)
  60. # make a building
  61. DoBuilding(TARGET, objs)