def get_ttptttg(self, flags): self._debug("Getting ttptttg for flags {}".format(str(flags))) target = self._get_target(flags) ttptttg = [] if not target: return ttptttg _ttptttg = [] for f in target.generate: pf = f.name.parse(flags) # f.name might end up empty after parse. In that case, we ignore it if pf: _ttptttg.append({"name": pf, "params": f.params}) if _ttptttg: self._debug(" Matched generator instances {}".format(_ttptttg)) for gen in _ttptttg: gen_name = gen["name"] if not gen_name in self.generate: raise SyntaxError( "Generator instance '{}', requested by target '{}', was not found" .format(gen_name, target.name)) gen_inst = self.generate[gen_name] params = utils.merge_dict(gen_inst.parameters or {}, gen["params"]) t = { "name": gen_name, "generator": str(gen_inst.generator), "config": dict(params), "pos": str(self.generate[gen_name].position or "append"), } ttptttg.append(t) return ttptttg
def create_eda_api_struct(self): first_snippets = [] snippets = [] last_snippets = [] parameters = {} for core in self.cores: snippet = {} logger.debug("Collecting EDA API parameters from {}".format( str(core.name))) _flags = self._core_flags(core) # Extract direct dependencies snippet["dependencies"] = {str(core.name): core.direct_deps} # Extract files if self.export_root: files_root = os.path.join(self.export_root, core.sanitized_name) core.export(files_root, _flags) else: files_root = core.files_root rel_root = os.path.relpath(files_root, self.work_root) # Extract parameters snippet["parameters"] = core.get_parameters(_flags, parameters) merge_dict(parameters, snippet["parameters"]) # Extract tool options snippet["tool_options"] = { self.flags["tool"]: core.get_tool_options(_flags) } # Extract scripts snippet["hooks"] = core.get_scripts(rel_root, _flags) _files = [] for file in core.get_files(_flags): _f = file if file.get("copyto"): _name = file["copyto"] dst = os.path.join(self.work_root, _name) _dstdir = os.path.dirname(dst) if not os.path.exists(_dstdir): os.makedirs(_dstdir) shutil.copy2(os.path.join(files_root, file["name"]), dst) del _f["copyto"] else: _name = os.path.join(rel_root, file["name"]) _f["name"] = str(_name) _f["core"] = str(core.name) if file.get("include_path"): _f["include_path"] = os.path.join(rel_root, file["include_path"]) _files.append(_f) snippet["files"] = _files # Extract VPI modules snippet["vpi"] = [] for _vpi in core.get_vpi(_flags): snippet["vpi"].append({ "name": _vpi["name"], "src_files": [os.path.join(rel_root, f) for f in _vpi["src_files"]], "include_dirs": [os.path.join(rel_root, i) for i in _vpi["include_dirs"]], "libs": _vpi["libs"], }) if hasattr(core, "pos"): if core.pos == "first": first_snippets.append(snippet) elif core.pos == "last": last_snippets.append(snippet) else: snippets.append(snippet) else: snippets.append(snippet) top_core = self.resolved_cores[-1] self.edalize = { "version": "0.2.1", "dependencies": {}, "files": [], "hooks": {}, "name": self.system_name or top_core.sanitized_name, "parameters": {}, "tool_options": {}, "toplevel": top_core.get_toplevel(self.flags), "vpi": [], } for snippet in first_snippets + snippets + last_snippets: merge_dict(self.edalize, snippet)