X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;ds=sidebyside;f=wizard%2Fbertos_utils.py;h=ce526f013b5ed1f6f4ae6517ea88590f9301391b;hb=30edcd04a72705844739d3bee5dd16dd7c44cf20;hp=f0a1bc7fc2fad09f767cc42ba6a13dfad4f82f22;hpb=e0a72456d5be2386c8bae635b5e36d7312c55353;p=bertos.git diff --git a/wizard/bertos_utils.py b/wizard/bertos_utils.py index f0a1bc7f..ce526f01 100644 --- a/wizard/bertos_utils.py +++ b/wizard/bertos_utils.py @@ -47,20 +47,24 @@ import plugins import DefineException import BProject +from LoadException import VersionException, ToolchainException + def isBertosDir(directory): return os.path.exists(directory + "/VERSION") def bertosVersion(directory): return open(directory + "/VERSION").readline().strip() -def loadBertosProject(project_file): +def loadBertosProject(project_file, info_dict): project_data = pickle.loads(open(project_file, "r").read()) project_info = BProject.BProject() project_info.setInfo("PROJECT_PATH", os.path.dirname(project_file)) - project_info.setInfo("SOURCES_PATH", project_data["SOURCES_PATH"]) - project_info.setInfo("TOOLCHAIN", project_data["TOOLCHAIN"]) - project_info.setInfo("SELECTED_FREQ", project_data["SELECTED_FREQ"]) - project_info.setInfo("OUTPUT", project_data["OUTPUT"]) + if "SOURCES_PATH" in info_dict: + project_data["SOURCES_PATH"] = info_dict["SOURCES_PATH"] + if os.path.exists(project_data["SOURCES_PATH"]): + project_info.setInfo("SOURCES_PATH", project_data["SOURCES_PATH"]) + else: + raise VersionException(project_info) loadSourceTree(project_info) cpu_name = project_data["CPU_NAME"] project_info.setInfo("CPU_NAME", cpu_name) @@ -81,16 +85,47 @@ def loadBertosProject(project_file): else: tag_dict[tag] = False project_info.setInfo("ALL_CPU_TAGS", tag_dict) + if "TOOLCHAIN" in info_dict: + project_data["TOOLCHAIN"] = info_dict["TOOLCHAIN"] + if os.path.exists(project_data["TOOLCHAIN"]["path"]): + project_info.setInfo("TOOLCHAIN", project_data["TOOLCHAIN"]) + else: + raise ToolchainException(project_info) + project_info.setInfo("SELECTED_FREQ", project_data["SELECTED_FREQ"]) + project_info.setInfo("OUTPUT", project_data["OUTPUT"]) loadModuleData(project_info, True) + setEnabledModules(project_info, project_data["ENABLED_MODULES"]) + return project_info + +def setEnabledModules(project_info, enabled_modules): modules = project_info.info("MODULES") + files = {} for module, information in modules.items(): - information["enabled"] = module in project_data["ENABLED_MODULES"] + information["enabled"] = module in enabled_modules + for dependency in information["depends"]: + if not dependency in modules: + if dependency in files: + files[dependency] += 1 + else: + files[dependency] = 1 project_info.setInfo("MODULES", modules) - return project_info + project_info.setInfo("FILES", files) + +def enabledModules(project_info): + enabled_modules = [] + for name, module in project_info.info("MODULES").items(): + if module["enabled"]: + enabled_modules.append(name) + return enabled_modules def mergeSources(srcdir, new_sources, old_sources): + # The current mergeSources function provide only a raw copy of the sources in the + # created project. + # # TODO: implement the three way merge algorithm - pass + # + shutil.rmtree(srcdir, True) + copytree.copytree(os.path.join(new_sources, "bertos"), srcdir, ignore_list=const.IGNORE_LIST) def projectFileGenerator(project_info): directory = project_info.info("PROJECT_PATH") @@ -110,6 +145,7 @@ def projectFileGenerator(project_info): def createBertosProject(project_info, edit=False): directory = project_info.info("PROJECT_PATH") sources_dir = project_info.info("SOURCES_PATH") + old_sources_dir = project_info.info("OLD_SOURCES_PATH") if not edit: if os.path.isdir(directory): shutil.rmtree(directory, True) @@ -124,13 +160,11 @@ def createBertosProject(project_info, edit=False): # If not in editing mode it copies all the bertos sources in the /bertos subdirectory of the project shutil.rmtree(srcdir, True) copytree.copytree(sources_dir + "/bertos", srcdir, ignore_list=const.IGNORE_LIST) - else: + elif old_sources_dir: # If in editing mode it merges the current bertos sources with the selected ones # TODO: implement the three way merge algotihm # - # mergeSources(srcdir, sources_dir, old_sources_dir) - # - pass + mergeSources(srcdir, sources_dir, old_sources_dir) # Destination makefile makefile = directory + "/Makefile" makefile = open("mktemplates/Makefile").read() @@ -218,7 +252,7 @@ def mkGenerator(project_info, makefile): mk_data["$cpuclockfreq"] = project_info.info("SELECTED_FREQ") cpu_mk_parameters = [] for key, value in project_info.info("CPU_INFOS").items(): - if key.startswith("MK_"): + if key.startswith(const.MK_PARAM_ID): cpu_mk_parameters.append("%s = %s" %(key.replace("MK", mk_data["$pname"]), value)) mk_data["$cpuparameters"] = "\n".join(cpu_mk_parameters) mk_data["$csrc"], mk_data["$pcsrc"], mk_data["$cppasrc"], mk_data["$cxxsrc"], mk_data["$asrc"], mk_data["$constants"] = csrcGenerator(project_info) @@ -297,10 +331,15 @@ def csrcGenerator(project_info): 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 @@ -647,6 +686,7 @@ def loadConfigurationInfos(path): "long": boolean indicating if the num is a long "unsigned": boolean indicating if the num is an unsigned "value_list": the name of the enum for enum parameters + "conditional_deps": the list of conditional dependencies for boolean parameters """ configuration_infos = {} configuration_infos["paramlist"] = [] @@ -669,13 +709,22 @@ def loadConfigurationInfos(path): configuration_infos[name]["value"].find("U") != -1): configuration_infos[name]["informations"]["unsigned"] = True configuration_infos[name]["value"] = configuration_infos[name]["value"].replace("U", "") + if "conditional_deps" in configuration_infos[name]["informations"]: + if (type(configuration_infos[name]["informations"]["conditional_deps"]) == str or + type(configuration_infos[name]["informations"]["conditional_deps"]) == unicode): + configuration_infos[name]["informations"]["conditional_deps"] = (configuration_infos[name]["informations"]["conditional_deps"], ) + elif type(configuration_infos[name]["informations"]["conditional_deps"]) == tuple: + pass + else: + configuration_infos[name]["informations"]["conditional_deps"] = () configuration_infos[name]["description"] = description configuration_infos[name]["brief"] = brief return configuration_infos def updateConfigurationValues(def_conf, user_conf): for param in def_conf["paramlist"]: - def_conf[param[1]]["value"] = user_conf[param[1]]["value"] + if param[1] in user_conf and "value" in user_conf[param[1]]: + def_conf[param[1]]["value"] = user_conf[param[1]]["value"] return def_conf def findParameterType(parameter):