- for filename, path in findDefinitions(module + ".c", projectInfo):
- files.append(path + "/" + filename)
- for filename, path in findDefinitions(module + "_" + projectInfo.info("CPU_INFOS")["TOOLCHAIN"] + ".c", projectInfo):
- files.append(path + "/" + filename)
- for tag in projectInfo.info("CPU_INFOS")["CPU_TAGS"]:
- for filename, path in findDefinitions(module + "_" + tag + ".c", projectInfo):
- files.append(path + "/" + filename)
- csrc = " \\\n\t".join(files) + " \\"
- return csrc
-
-def codeliteProjectGenerator(projectInfo):
- template = open("cltemplates/bertos.project").read()
- filelist = "\n".join(codelite_project.clFiles(codelite_project.findSources(projectInfo.info("PROJECT_PATH")), projectInfo.info("PROJECT_PATH")))
- while template.find("$filelist") != -1:
- template = template.replace("$filelist", filelist)
- return template
-
-def codeliteWorkspaceGenerator(projectInfo):
- template = open("cltemplates/bertos.workspace").read()
- projectName = os.path.basename(projectInfo.info("PROJECT_PATH"))
- while template.find("$project") != -1:
- template = template.replace("$project", projectName)
- return template
-
+ if "constants" in information:
+ constants.update(information["constants"])
+ cfiles, sfiles = findModuleFiles(module, project_info)
+ module_files |= set(cfiles)
+ asm_files |= set(sfiles)
+ for file in information["hw"]:
+ if file.endswith(".c"):
+ module_files |= set([hwdir + "/" + os.path.basename(file)])
+ for file_dependency in information["depends"] + tuple(files.keys()):
+ dependencyCFiles, dependencySFiles = findModuleFiles(file_dependency, project_info)
+ dependency_files |= set(dependencyCFiles)
+ asm_files |= set(dependencySFiles)
+ for file in module_files:
+ if not harvard or information.get("harvard", "both") == "both":
+ csrc.append(file)
+ if harvard and "harvard" in information:
+ pcsrc.append(file)
+ for file in dependency_files:
+ csrc.append(file)
+ for file in project_info.info("CPU_INFOS")["C_SRC"]:
+ csrc.append(file)
+ for file in project_info.info("CPU_INFOS")["PC_SRC"]:
+ pcsrc.append(file)
+ for file in asm_files:
+ cppasrc.append(file)
+ for file in project_info.info("CPU_INFOS")["CPPA_SRC"]:
+ cppasrc.append(file)
+ for file in project_info.info("CPU_INFOS")["CXX_SRC"]:
+ cxxsrc.append(file)
+ for file in project_info.info("CPU_INFOS")["ASRC"]:
+ asrc.append(file)
+ csrc = set(csrc)
+ csrc = " \\\n\t".join(csrc) + " \\"
+ pcsrc = set(pcsrc)
+ pcsrc = " \\\n\t".join(pcsrc) + " \\"
+ cppasrc = set(cppasrc)
+ cppasrc = " \\\n\t".join(cppasrc) + " \\"
+ cxxsrc = set(cxxsrc)
+ cxxsrc = " \\\n\t".join(cxxsrc) + " \\"
+ asrc = set(asrc)
+ asrc = " \\\n\t".join(asrc) + " \\"
+ constants = "\n".join([os.path.basename(project_info.info("PROJECT_PATH")) + "_" + key + " = " + unicode(value) for key, value in constants.items()])
+ return csrc, pcsrc, cppasrc, cxxsrc, asrc, constants
+
+def findModuleFiles(module, project_info):
+ # Find the files related to the selected module
+ cfiles = []
+ sfiles = []
+ # .c files related to the module and the cpu architecture
+ for filename, path in project_info.searchFiles(module + ".c"):
+ path = path.replace(project_info.info("BERTOS_PATH") + os.sep, "")
+ path = replaceSeparators(path)
+ cfiles.append(path + "/" + filename)
+ # .s files related to the module and the cpu architecture
+ for filename, path in project_info.searchFiles(module + ".s") + \
+ project_info.searchFiles(module + ".S"):
+ path = path.replace(project_info.info("BERTOS_PATH") + os.sep, "")
+ path = replaceSeparators(path)
+ sfiles.append(path + "/" + filename)
+ # .c and .s files related to the module and the cpu tags
+ tags = project_info.info("CPU_INFOS")["CPU_TAGS"]
+
+ # Awful, but secure check for version
+ # TODO: split me in a method/function
+ try:
+ version_string = bertosVersion(project_info.info("BERTOS_PATH"))
+ version_list = [int(i) for i in version_string.split()[1].split('.')]
+ except ValueError:
+ # If the version file hasn't a valid version number assume it's an older
+ # project.
+ version_list = [0, 0]
+ if version_list < [2, 5]:
+ # For older versions of BeRTOS add the toolchain to the tags
+ tags.append(project_info.info("CPU_INFOS")["TOOLCHAIN"])
+
+ for tag in tags:
+ for filename, path in project_info.searchFiles(module + "_" + tag + ".c"):
+ path = path.replace(project_info.info("BERTOS_PATH") + os.sep, "")
+ if os.sep != "/":
+ path = replaceSeparators(path)
+ cfiles.append(path + "/" + filename)
+ for filename, path in project_info.searchFiles(module + "_" + tag + ".s") + \
+ project_info.searchFiles(module + "_" + tag + ".S"):
+ path = path.replace(project_info.info("BERTOS_PATH") + os.sep, "")
+ path = replaceSeparators(path)
+ sfiles.append(path + "/" + filename)
+ return cfiles, sfiles
+
+def replaceSeparators(path):
+ """
+ Replace the separators in the given path with unix standard separator.
+ """
+ if os.sep != "/":
+ path = path.replace(os.sep, "/")
+ return path
+