X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=wizard%2Fbertos_utils.py;h=57f88694b0b30898e73e5c2abd0cb4cdc68ae18f;hb=c7579be1f09977673ab25da3a0f17f9ff2b66c97;hp=8e175dbecbf4653b99f85ec5aa5ea3b8a06f6a89;hpb=4b618efcfab54800f2dc276d46e251f108819a6f;p=bertos.git diff --git a/wizard/bertos_utils.py b/wizard/bertos_utils.py index 8e175dbe..57f88694 100644 --- a/wizard/bertos_utils.py +++ b/wizard/bertos_utils.py @@ -14,9 +14,10 @@ import fnmatch import glob import re import shutil +import pickle import const -import codelite_project +from plugins import codelite_project import DefineException def isBertosDir(directory): @@ -31,24 +32,24 @@ def createBertosProject(project_info): if not os.path.isdir(directory): os.mkdir(directory) f = open(directory + "/project.bertos", "w") - f.write(repr(project_info)) + f.write(pickle.dumps(project_info)) f.close() - ## Destination source dir + # Destination source dir srcdir = directory + "/bertos" shutil.rmtree(srcdir, True) shutil.copytree(sources_dir + "/bertos", srcdir) - ## Destination makefile + # Destination makefile makefile = directory + "/Makefile" if os.path.exists(makefile): os.remove(makefile) makefile = open("mktemplates/Makefile").read() makefile = makefileGenerator(project_info, makefile) open(directory + "/Makefile", "w").write(makefile) - ## Destination project dir + # Destination project dir prjdir = directory + "/" + os.path.basename(directory) shutil.rmtree(prjdir, True) os.mkdir(prjdir) - ## Destination configurations files + # Destination configurations files cfgdir = prjdir + "/cfg" shutil.rmtree(cfgdir, True) os.mkdir(cfgdir) @@ -67,18 +68,16 @@ def createBertosProject(project_info): f = open(cfgdir + "/" + os.path.basename(configuration), "w") f.write(string) f.close() - ## Destinatio mk file + # Destinatio mk file makefile = open("mktemplates/template.mk", "r").read() makefile = mkGenerator(project_info, makefile) open(prjdir + "/" + os.path.basename(prjdir) + ".mk", "w").write(makefile) - ## Destination main.c file + # Destination main.c file main = open("srctemplates/main.c", "r").read() open(prjdir + "/main.c", "w").write(main) + # Codelite project files if "codelite" in project_info.info("OUTPUT"): - workspace = codeliteWorkspaceGenerator(project_info) - open(directory + "/" + os.path.basename(prjdir) + ".workspace", "w").write(workspace) - project = codeliteProjectGenerator(project_info) - open(directory + "/" + os.path.basename(prjdir) + ".project", "w").write(project) + codelite_project.createProject(project_info) def mkGenerator(project_info, makefile): """ @@ -103,7 +102,7 @@ def makefileGenerator(project_info, makefile): """ Generate the Makefile for the current project. """ - # TODO: write a general function that works for both the mk file and the Makefile + # TODO write a general function that works for both the mk file and the Makefile while makefile.find("project_name") != -1: makefile = makefile.replace("project_name", os.path.basename(project_info.info("PROJECT_PATH"))) return makefile @@ -115,18 +114,18 @@ def csrcGenerator(project_info): harvard = True else: harvard = False - ## file to be included in CSRC variable + # file to be included in CSRC variable csrc = [] - ## file to be included in PCSRC variable + # file to be included in PCSRC variable pcsrc = [] - ## files to be included in CPPASRC variable + # files to be included in CPPASRC variable asrc = [] - ## constants to be included at the beginning of the makefile + # constants to be included at the beginning of the makefile constants = {} for module, information in modules.items(): module_files = set([]) dependency_files = set([]) - ## assembly sources + # assembly sources asm_files = set([]) if information["enabled"]: if "constants" in information: @@ -141,13 +140,13 @@ def csrcGenerator(project_info): asm_files |= set(dependencySFiles) for file in module_files: if not harvard or "harvard" not in information or information["harvard"] == "both": - csrc.append(file) + csrc.append(os.path.normpath(file)) if harvard and "harvard" in information: - pcsrc.append(file) + pcsrc.append(os.path.normpath(file)) for file in dependency_files: - csrc.append(file) + csrc.append(os.path.normpath(file)) for file in asm_files: - asrc.append(file) + asrc.append(os.path.normpath(file)) csrc = " \\\n\t".join(csrc) + " \\" pcsrc = " \\\n\t".join(pcsrc) + " \\" asrc = " \\\n\t".join(asrc) + " \\" @@ -155,49 +154,32 @@ def csrcGenerator(project_info): return csrc, pcsrc, asrc, constants def findModuleFiles(module, project_info): - ## Find the files related to the selected module + # Find the files related to the selected module cfiles = [] sfiles = [] - ## .c files related to the module and the cpu architecture + # .c files related to the module and the cpu architecture for filename, path in findDefinitions(module + ".c", project_info) + \ findDefinitions(module + "_" + project_info.info("CPU_INFOS")["TOOLCHAIN"] + ".c", project_info): - path = path.replace(project_info.info("SOURCES_PATH") + "/", "") - cfiles.append(path + "/" + filename) - ## .s files related to the module and the cpu architecture + path = path.replace(project_info.info("SOURCES_PATH") + os.sep, "") + cfiles.append(path + os.sep + filename) + # .s files related to the module and the cpu architecture for filename, path in findDefinitions(module + ".s", project_info) + \ findDefinitions(module + "_" + project_info.info("CPU_INFOS")["TOOLCHAIN"] + ".s", project_info) + \ findDefinitions(module + ".S", project_info) + \ findDefinitions(module + "_" + project_info.info("CPU_INFOS")["TOOLCHAIN"] + ".S", project_info): - path = path.replace(project_info.info("SOURCES_PATH") + "/", "") - sfiles.append(path + "/" + filename) - ## .c and .s files related to the module and the cpu tags + path = path.replace(project_info.info("SOURCES_PATH") + os.sep, "") + sfiles.append(path + os.sep + filename) + # .c and .s files related to the module and the cpu tags for tag in project_info.info("CPU_INFOS")["CPU_TAGS"]: for filename, path in findDefinitions(module + "_" + tag + ".c", project_info): - path = path.replace(project_info.info("SOURCES_PATH") + "/", "") - cfiles.append(path + "/" + filename) + path = path.replace(project_info.info("SOURCES_PATH") + os.sep, "") + cfiles.append(path + os.sep + filename) for filename, path in findDefinitions(module + "_" + tag + ".s", project_info) + \ findDefinitions(module + "_" + tag + ".S", project_info): - path = path.replace(project_info.info("SOURCES_PATH") + "/", "") - sfiles.append(path + "/" + filename) + path = path.replace(project_info.info("SOURCES_PATH") + os.sep, "") + sfiles.append(path + os.sep + filename) return cfiles, sfiles -def codeliteProjectGenerator(project_info): - template = open("cltemplates/bertos.project").read() - filelist = "\n".join(codelite_project.clFiles(codelite_project.findSources(project_info.info("PROJECT_PATH")), project_info.info("PROJECT_PATH"))) - while template.find("$filelist") != -1: - template = template.replace("$filelist", filelist) - project_name = os.path.basename(project_info.info("PROJECT_PATH")) - while template.find("$project") != -1: - template = template.replace("$project", project_name) - return template - -def codeliteWorkspaceGenerator(project_info): - template = open("cltemplates/bertos.workspace").read() - project_name = os.path.basename(project_info.info("PROJECT_PATH")) - while template.find("$project") != -1: - template = template.replace("$project", project_name) - return template - def getSystemPath(): path = os.environ["PATH"] if os.name == "nt":