Choose PCSRC or CSRC compilation for harvard cpus
[bertos.git] / wizard / bertos_utils.py
index ac424f727516ed56b53667e56d9bb26a8c31946c..b872cf1501986baacbdd101199241a1b712d2cfc 100644 (file)
@@ -68,6 +68,9 @@ def createBertosProject(projectInfo):
     makefile = open("mktemplates/template.mk", "r").read()
     makefile = mkGenerator(projectInfo, makefile)
     open(prjdir + "/" + os.path.basename(prjdir) + ".mk", "w").write(makefile)
+    ## Destination main.c file
+    main = open("srctemplates/main.c", "r").read()
+    open(prjdir + "/main.c", "w").write(main)
     if "codelite" in projectInfo.info("OUTPUT"):
         workspace = codeliteWorkspaceGenerator(projectInfo)
         open(directory + "/" + os.path.basename(prjdir) + ".workspace", "w").write(workspace)
@@ -83,10 +86,11 @@ def mkGenerator(projectInfo, makefile):
     mkData["$cpuname"] = projectInfo.info("CPU_INFOS")["CORE_CPU"]
     mkData["$cflags"] = " ".join(projectInfo.info("CPU_INFOS")["C_FLAGS"])
     mkData["$ldflags"] = " ".join(projectInfo.info("CPU_INFOS")["LD_FLAGS"])
-    mkData["$csrc"], mkData["$pcsrc"] = csrcGenerator(projectInfo)
+    mkData["$csrc"], mkData["$pcsrc"], mkData["$constants"] = csrcGenerator(projectInfo)
     mkData["$prefix"] = projectInfo.info("TOOLCHAIN")["path"].split("gcc")[0]
     mkData["$suffix"] = projectInfo.info("TOOLCHAIN")["path"].split("gcc")[1]
     mkData["$cross"] = projectInfo.info("TOOLCHAIN")["path"].split("gcc")[0]
+    mkData["$main"] = projectInfo.info("PROJECT_PATH") + "/" + os.path.basename(projectInfo.info("PROJECT_PATH")) + "/main.c"
     for key in mkData:
         while makefile.find(key) != -1:
             makefile = makefile.replace(key, mkData[key])
@@ -104,32 +108,39 @@ def makefileGenerator(projectInfo, makefile):
 def csrcGenerator(projectInfo):
     modules = projectInfo.info("MODULES")
     if "harvard" in projectInfo.info("CPU_INFOS")["CPU_TAGS"]:
-        pcsrc_need = projectInfo.info("CPU_INFOS")["PC_SRC"]
+        harvard = True
     else:
-        pcsrc_need = []
+        harvard = False
     csrc = []
     pcsrc = []
+    constants = {}
     for module, information in modules.items():
         if information["enabled"]:
+            if "constants" in information:
+                constants.update(information["constants"])
             for filename, path in findDefinitions(module + ".c", projectInfo):
                 path = path.replace(projectInfo.info("SOURCES_PATH"), projectInfo.info("PROJECT_PATH"))
-                csrc.append(path + "/" + filename)
-                if module in pcsrc_need:
+                if not harvard or "harvard" not in information or information["harvard"] == "both":
+                    csrc.append(path + "/" + filename)
+                if harvard and "harvard" in information:
                     pcsrc.append(path + "/" + filename)
             for filename, path in findDefinitions(module + "_" + projectInfo.info("CPU_INFOS")["TOOLCHAIN"] + ".c", projectInfo):
                 path = path.replace(projectInfo.info("SOURCES_PATH"), projectInfo.info("PROJECT_PATH"))
-                csrc.append(path + "/" + filename)
-                if module in pcsrc_need:
+                if not harvard or "harvard" not in information or information["harvard"] == "both":
+                    csrc.append(path + "/" + filename)
+                if harvard and "harvard" in information:
                     pcsrc.append(path + "/" + filename)
             for tag in projectInfo.info("CPU_INFOS")["CPU_TAGS"]:
                 for filename, path in findDefinitions(module + "_" + tag + ".c", projectInfo):
                     path = path.replace(projectInfo.info("SOURCES_PATH"), projectInfo.info("PROJECT_PATH"))
-                    csrc.append(path + "/" + filename)
-                    if module in pcsrc_need:
+                    if not harvard or "harvard" not in information or information["harvard"] == "both":
+                        csrc.append(path + "/" + filename)
+                    if harvard and "harvard" in information:
                         pcsrc.append(path + "/" + filename)
     csrc = " \\\n\t".join(csrc) + " \\"
     pcsrc = " \\\n\t".join(pcsrc) + " \\"
-    return csrc, pcsrc
+    constants = "\n".join([os.path.basename(projectInfo.info("PROJECT_PATH")) + "_" + key + " = " + str(value) for key, value in constants.items()])
+    return csrc, pcsrc, constants
 
 def codeliteProjectGenerator(projectInfo):
     template = open("cltemplates/bertos.project").read()
@@ -258,7 +269,12 @@ def loadModuleDefinition(first_comment):
         if "module_description" in moduleDefinition.keys():
             moduleDict[moduleName]["description"] = moduleDefinition["module_description"]
             del moduleDefinition["module_description"]
-        moduleDict[moduleName]["consts"] = moduleDefinition
+        if const.MODULE_DEFINITION["module_harvard"] in moduleDefinition.keys():
+            harvard = moduleDefinition[const.MODULE_DEFINITION["module_harvard"]]
+            if harvard == "both" or harvard == "pgm_memory":
+                moduleDict[moduleName]["harvard"] = harvard
+            del moduleDefinition[const.MODULE_DEFINITION["module_harvard"]]
+        moduleDict[moduleName]["constants"] = moduleDefinition
         moduleDict[moduleName]["enabled"] = False
     return toBeParsed, moduleDict