SConstruct 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import os
  2. import sys
  3. import rtconfig
  4. import platform
  5. import subprocess
  6. from rtconfig import RTT_ROOT
  7. import sys
  8. def generate_ldscript(input, output):
  9. if not os.path.exists(input):
  10. print('Error: file', input, 'not found')
  11. return
  12. if os.path.exists(output):
  13. os.remove(output)
  14. if rtconfig.PLATFORM == 'gcc':
  15. gcc_cmd = os.path.join(rtconfig.EXEC_PATH, rtconfig.CC)
  16. # gcc -E -P -x c $input -o $output
  17. if (platform.system() == 'Windows'):
  18. child = subprocess.Popen([gcc_cmd, '-E', '-P', '-x', 'c', input, '-o', output], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
  19. else:
  20. child = subprocess.Popen(gcc_cmd + f' -E -P -x c {input} -o {output}', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
  21. child.communicate()
  22. print(output, 'is generated from', input)
  23. sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
  24. from building import *
  25. TARGET = 'rtthread.' + rtconfig.TARGET_EXT
  26. # apply soft-FPU config
  27. options = LocalOptions("rtconfig.h")
  28. soft_fpu = GetLocalDepend(options, 'BSP_RISCV_FPU_SOFT')
  29. if soft_fpu:
  30. rtconfig.DEVICE = rtconfig.DEVICE.replace('-march=rv64imafdcv -mabi=lp64d', '-march=rv64imafdc -mabi=lp64')
  31. rtconfig.CFLAGS = rtconfig.CFLAGS.replace('-march=rv64imafdcv -mabi=lp64d', '-march=rv64imafdc -mabi=lp64')
  32. rtconfig.LFLAGS = rtconfig.LFLAGS.replace('-march=rv64imafdcv -mabi=lp64d', '-march=rv64imafdc -mabi=lp64')
  33. rtconfig.AFLAGS = rtconfig.AFLAGS.replace('-march=rv64imafdcv -mabi=lp64d', '-march=rv64imafdc -mabi=lp64')
  34. DefaultEnvironment(tools=[])
  35. env = Environment(tools = ['mingw'],
  36. AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS,
  37. CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS,
  38. CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS,
  39. AR = rtconfig.AR, ARFLAGS = '-rc',
  40. LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
  41. env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
  42. env['ASCOM'] = env['ASPPCOM']
  43. Export('RTT_ROOT')
  44. Export('rtconfig')
  45. # prepare building environment
  46. objs = PrepareBuilding(env, RTT_ROOT, has_libcpu = False)
  47. generate_ldscript('link.lds', 'link.lds.generated')
  48. # make a building
  49. DoBuilding(TARGET, objs)
  50. Clean(TARGET, 'link.lds.generated')
  51. Clean(TARGET, 'build')