Advertisement
Guest User

build.py

a guest
Oct 9th, 2020
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.16 KB | None | 0 0
  1. #! /usr/bin/env python
  2. # -*- coding: UTF-8 -*-
  3. #----------------------------------------------------------------------
  4. #--- Python Build file for application lab1
  5. #--- automatically generated by goil on Fri Oct 09 11:14:37 2020
  6. #--- from root OIL file lab1.oil
  7. #---
  8. #--- Compiling a Trampoline application is done in 2 stages
  9. #--- 1 - From the OIL file, a set of files is generated as long as
  10. #--- build options. Among these files are the build.py and make.py
  11. #--- files. make.py contains compilation rules when the OIL file
  12. #--- and the included OIL files are modified. make.py is only
  13. #--- written once when the goil command is typed.
  14. #--- 2 - From all the C/assembly files (OS, Application, librairies,
  15. #--- configuration, ...), the objects and the executable are
  16. #--- produced. This is done by the build.py file.
  17. #--- build.py is generated each time goil is called by make.py
  18. #----------------------------------------------------------------------
  19.  
  20. import sys, os, subprocess, string, distutils.spawn
  21. from string import Template
  22.  
  23. #--- Add some function for Python3 support
  24.  
  25. if sys.version_info[0] >=3 :
  26. def bytesdecode(obj) :
  27. return obj.decode(sys.stdout.encoding)
  28. else :
  29. def bytesdecode(obj) :
  30. return obj
  31.  
  32. #--- Add the location of makefile.py to the import path
  33. sys.path.append("F:RessourcesLabsSTM32/trampoline-master/trampoline-master/make")
  34.  
  35. #--- Import the makefile system in python
  36. import makefile, projfile
  37.  
  38. #--- To work with relative paths
  39. scriptDir = os.path.dirname (os.path.abspath (sys.argv[0]))
  40. os.chdir (scriptDir)
  41.  
  42. #--- Get goal as first argument
  43. askedGoal = "all"
  44. if len (sys.argv) > 1 :
  45. askedGoal = sys.argv [1]
  46.  
  47. if askedGoal == "all" or askedGoal == "clean" :
  48. goal = askedGoal
  49. else :
  50. goal = "all"
  51.  
  52. #--- Get max parallel jobs as second argument
  53. maxParallelJobs = 0 # 0 means use host processor count
  54. if len (sys.argv) > 2 :
  55. maxParallelJobs = int (sys.argv [2])
  56.  
  57. #--- Instanciate a new makefile object
  58. make = makefile.Make(goal)
  59.  
  60. #----------------------------------------------------------------------
  61. #--- Various variables used after
  62. #----------------------------------------------------------------------
  63. compiler = r"arm-none-eabi-gcc"
  64. cppCompiler = r"g++"
  65. linker = r"arm-none-eabi-ld"
  66. assembler = r"arm-none-eabi-as"
  67. autosar = False
  68. autosar_sc = 0
  69. autosar_osapplications = False
  70. with_ioc = False
  71. with_com = False
  72. scheduler = "osek"
  73. trampoline_base_path = "F:RessourcesLabsSTM32/trampoline-master/trampoline-master/"
  74. cflags = []
  75. cppflags = []
  76. ldflags = []
  77. asflags = []
  78. # flags that should appear at the beginning of the command.
  79. precflags = []
  80. precppflags = []
  81. preldflags = []
  82. preasflags = []
  83. includeDirs = []
  84.  
  85. cflags += "--specs=nosys.specs".split()
  86. cflags += "-O0".split()
  87. cppflags += "-fno-rtti".split()
  88. cppflags += "-felide-constructors".split()
  89. cppflags += "-fno-threadsafe-statics".split()
  90. cppflags += "-fno-use-cxa-get-exception-ptr".split()
  91. cppflags += "-fno-enforce-eh-specs".split()
  92. cflags += "-g".split()
  93. cppflags += "-g".split()
  94. cflags += "-Wno-unused-but-set-variable".split()
  95. cppflags += "-Wno-unused-but-set-variable".split()
  96. cflags += "-Wmissing-field-initializers".split()
  97. cppflags += "-Wmissing-field-initializers".split()
  98. cflags += "-mcpu=cortex-m4".split()
  99. cppflags += "-mcpu=cortex-m4".split()
  100. cflags += "-mthumb".split()
  101. cppflags += "-mthumb".split()
  102. cflags += "-mfloat-abi=soft".split()
  103. cppflags += "-mfloat-abi=soft".split()
  104. cflags += "-mfpu=fpv4-sp-d16".split()
  105. cppflags += "-mfpu=fpv4-sp-d16".split()
  106. cflags += "-nostartfiles".split()
  107. cppflags += "-nostartfiles".split()
  108. cflags += "-fno-builtin".split()
  109. cppflags += "-fno-builtin".split()
  110. cflags += "-fno-exceptions".split()
  111. cppflags += "-fno-exceptions".split()
  112. cflags += "-nostdlib".split()
  113. cppflags += "-nostdlib".split()
  114. cflags += "-ffunction-sections".split()
  115. cppflags += "-ffunction-sections".split()
  116. cflags += "-fdata-sections".split()
  117. cppflags += "-fdata-sections".split()
  118. includeDirs += ["-I","F:RessourcesLabsSTM32/trampoline-master/trampoline-master/machines/cortex"]
  119. includeDirs += ["-I","F:RessourcesLabsSTM32/trampoline-master/trampoline-master/machines/cortex/CMSIS/Include"]
  120. includeDirs += ["-I","F:RessourcesLabsSTM32/trampoline-master/trampoline-master/machines/cortex/armv7em"]
  121. includeDirs += ["-I","F:RessourcesLabsSTM32/trampoline-master/trampoline-master/machines/cortex/armv7em/stm32f407"]
  122. includeDirs += ["-I","F:RessourcesLabsSTM32/trampoline-master/trampoline-master/machines/cortex/armv7em/stm32f407/lib"]
  123. includeDirs += ["-I","F:RessourcesLabsSTM32/trampoline-master/trampoline-master/machines/cortex/armv7em/stm32f407/CMSIS-ST/Device/ST/STM32F4xx/Include"]
  124. includeDirs += ["-I","F:RessourcesLabsSTM32/trampoline-master/trampoline-master/machines/cortex/armv7em/stm32f407/STM32F4xx_StdPeriph_Driver"]
  125. includeDirs += ["-I","F:RessourcesLabsSTM32/trampoline-master/trampoline-master/machines/cortex/armv7em/stm32f407/STM32F4xx_StdPeriph_Driver"]
  126. includeDirs += ["-I","F:RessourcesLabsSTM32/trampoline-master/trampoline-master/machines/cortex/armv7em/stm32f407/stm32f4discovery"]
  127. if with_ioc:
  128. includeDirs += ["-I", "F:RessourcesLabsSTM32/trampoline-master/trampoline-master/ioc"]
  129. includeDirs += ["-I", "F:RessourcesLabsSTM32/trampoline-master/trampoline-master/os"]
  130. includeDirs += ["-I", "F:RessourcesLabsSTM32/trampoline-master/trampoline-master/debug"]
  131. includeDirs += ["-I", "lab1"]
  132. cflags += includeDirs
  133. cppflags += includeDirs
  134. asflags += includeDirs
  135.  
  136. ldflags += "--fatal-warnings".split()
  137. ldflags += "--warn-common".split()
  138. ldflags += "--no-undefined".split()
  139. ldflags += "--gc-sections".split()
  140. ldflags += "-Map=lab1.map".split()
  141. ldflags += ["-T", "lab1/script.ld"]
  142. asflags += "-g".split()
  143. asflags += "-Wall".split()
  144. asflags += "-mcpu=cortex-m4".split()
  145. asflags += "-mthumb".split()
  146. asflags += "--fatal-warnings".split()
  147. asflags += "-mfloat-abi=soft".split()
  148. asflags += "-mfpu=fpv4-sp-d16".split()
  149.  
  150. #----------------------------------------------------------------------
  151. #--- Try to detect automatically the location of libc and libgcc
  152. #--- This supposes the compiler has a (something)-gcc name
  153. #--- for non posix target
  154. #----------------------------------------------------------------------
  155. if "gcc" in compiler:
  156. compilerFullPath = makefile.find_executable(compiler)
  157. if compilerFullPath != None:
  158. #--- Extract the (something) from the compiler executable name
  159. compilerParts = compiler.split('-')
  160. compilerParts.pop()
  161. compilerPrefix = "-".join(compilerParts)
  162. #--- Get the full path of the compiler
  163. compilerToolChainPath = os.path.dirname(os.path.dirname(compilerFullPath))
  164. #--- Get the version of the compiler, [:-1] removes the carriage return
  165. compilerVersion = subprocess.check_output([compiler, '-dumpversion'])[:-1]
  166. #--- Build the libc and libgcc paths
  167. procLibc =subprocess.Popen([compilerFullPath,"-print-file-name=libc.a"]+cflags,stdout=subprocess.PIPE)
  168. procLibgcc=subprocess.Popen([compilerFullPath,"-print-libgcc-file-name"]+cflags,stdout=subprocess.PIPE)
  169. procLibc.wait()
  170. procLibgcc.wait()
  171. libcPath = os.path.dirname(procLibc.stdout.readline().strip())
  172. libgccPath = os.path.dirname(procLibgcc.stdout.readline().strip())
  173. #--- Add both to linker flags
  174. ldflags += ['-L' + bytesdecode(libcPath), '-lc']
  175. ldflags += ['-L' + bytesdecode(libgccPath), '-lgcc']
  176.  
  177. #----------------------------------------------------------------------
  178. #--- Build the source files list
  179. #----------------------------------------------------------------------
  180. cSourceList = []
  181. cppSourceList = []
  182. sSourceList = []
  183. oilSourceList = []
  184.  
  185. #--- OIL file
  186. oilSourceList.append("lab1.oil")
  187.  
  188. #--- Kernel files
  189. cSourceList.append(projfile.ProjectFile("os/tpl_os_kernel.c", trampoline_base_path))
  190. cSourceList.append(projfile.ProjectFile("os/tpl_os_timeobj_kernel.c", trampoline_base_path))
  191. cSourceList.append(projfile.ProjectFile("os/tpl_os_action.c", trampoline_base_path))
  192. cSourceList.append(projfile.ProjectFile("os/tpl_os_error.c", trampoline_base_path))
  193. cSourceList.append(projfile.ProjectFile("os/tpl_os_os_kernel.c", trampoline_base_path))
  194. cSourceList.append(projfile.ProjectFile("os/tpl_os_os.c", trampoline_base_path))
  195. cSourceList.append(projfile.ProjectFile("os/tpl_os_interrupt_kernel.c", trampoline_base_path))
  196. cSourceList.append(projfile.ProjectFile("os/tpl_os_task_kernel.c", trampoline_base_path))
  197. cSourceList.append(projfile.ProjectFile("os/tpl_os_resource_kernel.c", trampoline_base_path))
  198.  
  199. #--- Add C files of the application
  200. cSourceList.append(projfile.ProjectFile("lab1.c"))
  201.  
  202. #--- Add generated files
  203. cSourceList.append(projfile.ProjectFile("lab1/tpl_app_config.c"))
  204.  
  205. cSourceList.append(projfile.ProjectFile("lab1/tpl_dispatch_table.c"))
  206. cSourceList.append(projfile.ProjectFile("lab1/tpl_invoque.S"))
  207. cSourceList.append(projfile.ProjectFile("lab1/tpl_primary_irq.S"))
  208. cSourceList.append(projfile.ProjectFile("lab1/tpl_vectors.c"))
  209. cSourceList.append(projfile.ProjectFile("lab1/tpl_external_interrupts.c"))
  210. cSourceList.append(projfile.ProjectFile("lab1/tpl_app_interrupts.c"))
  211. cSourceList.append(projfile.ProjectFile("machines/cortex/tpl_machine_cortex.c", trampoline_base_path))
  212. cSourceList.append(projfile.ProjectFile("machines/cortex/tpl_sc_handler.S", trampoline_base_path))
  213. cSourceList.append(projfile.ProjectFile("machines/cortex/tpl_startup.S", trampoline_base_path))
  214. cSourceList.append(projfile.ProjectFile("machines/cortex/armv7em/tpl_ctx_switch.S", trampoline_base_path))
  215. cSourceList.append(projfile.ProjectFile("machines/cortex/armv7em/tpl_ctx_switch_under_it.S", trampoline_base_path))
  216. cSourceList.append(projfile.ProjectFile("machines/cortex/armv7em/tpl_interrupts.S", trampoline_base_path))
  217. cSourceList.append(projfile.ProjectFile("machines/cortex/armv7em/stm32f407/tpl_memory_protection.c", trampoline_base_path))
  218. cSourceList.append(projfile.ProjectFile("machines/cortex/armv7em/stm32f407/tpl_machine_stm32f407.c", trampoline_base_path))
  219. cSourceList.append(projfile.ProjectFile("machines/cortex/armv7em/stm32f407/startup_stm32f4xx.c", trampoline_base_path))
  220. cSourceList.append(projfile.ProjectFile("machines/cortex/armv7em/stm32f407/system_stm32f4xx.c", trampoline_base_path))
  221. cSourceList.append(projfile.ProjectFile("machines/cortex/armv7em/stm32f407/handlers_stm32f4xx.c", trampoline_base_path))
  222. cSourceList.append(projfile.ProjectFile("machines/cortex/armv7em/stm32f407/lib/pinAccess.c", trampoline_base_path))
  223. cSourceList.append(projfile.ProjectFile("machines/cortex/armv7em/stm32f407/STM32F4xx_StdPeriph_Driver/stm32f4xx_gpio.c", trampoline_base_path))
  224. cSourceList.append(projfile.ProjectFile("machines/cortex/armv7em/stm32f407/STM32F4xx_StdPeriph_Driver/stm32f4xx_rcc.c", trampoline_base_path))
  225. cSourceList.append(projfile.ProjectFile("machines/cortex/armv7em/stm32f407/STM32F4xx_StdPeriph_Driver/stm32f4xx_exti.c", trampoline_base_path))
  226. cSourceList.append(projfile.ProjectFile("machines/cortex/armv7em/stm32f407/STM32F4xx_StdPeriph_Driver/stm32f4xx_syscfg.c", trampoline_base_path))
  227. cSourceList.append(projfile.ProjectFile("machines/cortex/armv7em/stm32f407/STM32F4xx_StdPeriph_Driver/misc.c", trampoline_base_path))
  228. cSourceList.append(projfile.ProjectFile("machines/cortex/armv7em/stm32f407/stm32f4discovery/stm32f4_discovery.c", trampoline_base_path))
  229. cSourceList.append(projfile.ProjectFile("machines/cortex/armv7em/stm32f407/stm32f4discovery/tp.c", trampoline_base_path))
  230. #----------------------------------------------------------------------
  231. #--- Build the object list and the compiler dependancies
  232. #----------------------------------------------------------------------
  233. objectList = []
  234.  
  235. for sourceFile in cSourceList:
  236. source = sourceFile.src()
  237. object = sourceFile.obj("build")
  238. depObject = sourceFile.dep("build")
  239. objectList.append(object)
  240. rule = makefile.Rule([object], "Compiling " + source)
  241. rule.deleteTargetDirectoryOnClean()
  242. rule.mDependences.append(source)
  243. rule.mCommand.append(compiler)
  244. rule.mCommand += precflags
  245. rule.mCommand += ["-c", source]
  246. rule.mCommand += ["-o", object]
  247. rule.mCommand += ["-MD", "-MP", "-MF", depObject]
  248. rule.mCommand += cflags
  249. rule.enterSecondaryDependanceFile (depObject, make)
  250. make.addRule(rule)
  251.  
  252. for sourceFile in cppSourceList:
  253. source = sourceFile.src()
  254. object = sourceFile.obj("build")
  255. depObject = sourceFile.dep("build")
  256. objectList.append(object)
  257. rule = makefile.Rule([object], "Compiling " + source)
  258. rule.deleteTargetDirectoryOnClean()
  259. rule.mDependences.append(source)
  260. rule.mCommand.append(cppCompiler)
  261. rule.mCommand += precppflags
  262. rule.mCommand += ["-c", source]
  263. rule.mCommand += ["-o", object]
  264. rule.mCommand += ["-MD", "-MP", "-MF", depObject]
  265. rule.mCommand += cppflags
  266. rule.enterSecondaryDependanceFile (depObject, make)
  267. make.addRule(rule)
  268.  
  269. for sourceFile in sSourceList:
  270. source = sourceFile.src()
  271. object = sourceFile.obj("build")
  272. objectList.append(object)
  273. rule = makefile.Rule([object], "Assembling " + source)
  274. rule.mDependences.append(source)
  275. rule.mCommand.append(assembler)
  276. rule.mCommand += preasflags
  277. rule.mCommand += ["-c", source]
  278. rule.mCommand += ["-o", object]
  279. rule.mCommand += asflags
  280. make.addRule(rule)
  281.  
  282. product = "lab1_exe"
  283. rule = makefile.Rule ([product], "Linking " + product)
  284. rule.deleteTargetFileOnClean()
  285. rule.mDeleteTargetOnError = True
  286. rule.mDependences += objectList
  287. rule.mCommand += [linker]
  288. rule.mCommand += ["-o", product]
  289. rule.mCommand += preldflags
  290. rule.mCommand += objectList
  291. rule.mCommand += ldflags
  292. if True:
  293. postCommand = makefile.PostCommand("Generating binary lab1_exe.bin from lab1_exe")
  294. postCommand.mCommand.append(r"arm-none-eabi-objcopy")
  295. postCommand.mCommand += "-O binary".split()
  296. postCommand.mCommand.append("lab1_exe")
  297. postCommand.mCommand.append("lab1_exe.bin")
  298. rule.mPostCommands.append(postCommand)
  299.  
  300. make.addRule (rule)
  301.  
  302. make.addGoal("all", [product], "Building all")
  303. make.addGoal("compile", objectList, "Compile source files")
  304.  
  305.  
  306. make.runGoal(maxParallelJobs, maxParallelJobs == 1)
  307.  
  308. postVariableMapping = dict(
  309. MACHINE_PATH='F:RessourcesLabsSTM32/trampoline-master/trampoline-master/machines',
  310. ARCH_PATH='F:RessourcesLabsSTM32/trampoline-master/trampoline-master/machines/cortex',
  311. BOARD_PATH='F:RessourcesLabsSTM32/trampoline-master/trampoline-master/machines/cortex/armv7em/stm32f407/stm32f4discovery',
  312. TARGET='cortex/armv7em/stm32f407/stm32f4discovery'
  313. )
  314.  
  315.  
  316. #----------------------------------------------------------------------
  317. #--- post commands
  318. #----------------------------------------------------------------------
  319. if make.errorCount() == 0:
  320. if askedGoal == "burn" :
  321. commandLine = "st-flash write "
  322. commandLine += "lab1_exe.bin "
  323. commandLine += "0x8000000 "
  324. commandLineTemplate = Template(commandLine)
  325. commandLine = commandLineTemplate.safe_substitute(postVariableMapping)
  326. if makefile.find_executable("st-flash") != None:
  327. print("\033[1m\033[95mFlashing lab1_exe on cortex/armv7em/stm32f407/stm32f4discovery\033[0m")
  328. subprocess.call(commandLine, shell=True)
  329. else:
  330. print("Command 'st-flash' not in PATH")
  331.  
  332. #----------------------------------------------------------------------
  333. #-- End of build.py
  334. #----------------------------------------------------------------------
  335.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement