Commit d8bf8483 authored by Andrey Filippov's avatar Andrey Filippov

Tool dependency, sequencing, wait for VEditor database

parent e166573a
...@@ -158,5 +158,7 @@ public class VDT { ...@@ -158,5 +158,7 @@ public class VDT {
public static final String GENERATOR_ID_STATE_DIR = "StateDir"; public static final String GENERATOR_ID_STATE_DIR = "StateDir";
public static final String GENERATOR_ID_STATE_FILE = "StateFile"; public static final String GENERATOR_ID_STATE_FILE = "StateFile";
public static final String TIME_STAMP_FORMAT = "yyyyMMddHHmmssSSS";
} // class VDT } // class VDT
...@@ -24,8 +24,10 @@ import java.util.Iterator; ...@@ -24,8 +24,10 @@ import java.util.Iterator;
import java.util.Set; import java.util.Set;
import java.util.Vector; import java.util.Vector;
import com.elphel.vdt.ui.variables.SelectedResourceManager;
import com.elphel.vdt.veditor.VerilogPlugin; import com.elphel.vdt.veditor.VerilogPlugin;
import com.elphel.vdt.veditor.document.HdlDocument; import com.elphel.vdt.veditor.document.HdlDocument;
import com.elphel.vdt.veditor.document.VerilogDocument;
import com.elphel.vdt.veditor.parser.OutlineContainer; import com.elphel.vdt.veditor.parser.OutlineContainer;
import com.elphel.vdt.veditor.parser.OutlineDatabase; import com.elphel.vdt.veditor.parser.OutlineDatabase;
//import com.elphel.vdt.veditor.parser.vhdl.VhdlOutlineElementFactory.PackageDeclElement; //import com.elphel.vdt.veditor.parser.vhdl.VhdlOutlineElementFactory.PackageDeclElement;
...@@ -67,7 +69,9 @@ public class VerilogUtils { ...@@ -67,7 +69,9 @@ public class VerilogUtils {
e.printStackTrace(); e.printStackTrace();
} }
if (hdlDocument!=null) return hdlDocument.getOutlineDatabase(); /* will create a new one if does not exist */ if (hdlDocument!=null) return hdlDocument.getOutlineDatabase(); /* will create a new one if does not exist */
return null; // Create HdlDocument from selected/restored HDLfile
hdlDocument=new VerilogDocument(project, (IFile) SelectedResourceManager.getDefault().getChosenVerilogFile());
return hdlDocument.getOutlineDatabase(); /* will create a new one if does not exist */
} }
public static String [] getExtList(String str){ public static String [] getExtList(String str){
......
...@@ -39,7 +39,7 @@ public class ParamBasedListOption extends ParamBasedOption { ...@@ -39,7 +39,7 @@ public class ParamBasedListOption extends ParamBasedOption {
/** /**
* Set the option value * Set the option value
* *
* @param value the sequnce of the list items separated by SEPARATOR. * @param value the sequence of the list items separated by SEPARATOR.
*/ */
public void setValue(String value) { public void setValue(String value) {
List<String> list = OptionsUtils.convertStringToList(value); List<String> list = OptionsUtils.convertStringToList(value);
......
...@@ -46,7 +46,7 @@ public class ValueBasedListOption extends Option { ...@@ -46,7 +46,7 @@ public class ValueBasedListOption extends Option {
/** /**
* Set the option value * Set the option value
* *
* @param value the sequnce of the list items separated by SEPARATOR. * @param value the sequence of the list items separated by SEPARATOR.
*/ */
public void setValue(String value) { public void setValue(String value) {
List<String> list = OptionsUtils.convertStringToList(value); List<String> list = OptionsUtils.convertStringToList(value);
......
...@@ -114,6 +114,7 @@ public class XMLConfig extends Config { ...@@ -114,6 +114,7 @@ public class XMLConfig extends Config {
static final String CONTEXT_TOOL_DEPENDS_LIST_TAG = "depends-list"; static final String CONTEXT_TOOL_DEPENDS_LIST_TAG = "depends-list";
static final String CONTEXT_TOOL_DEPENDS_TAG = "depends"; static final String CONTEXT_TOOL_DEPENDS_TAG = "depends";
static final String CONTEXT_TOOL_DEPENDS_STATE_TAG = "state"; static final String CONTEXT_TOOL_DEPENDS_STATE_TAG = "state";
static final String CONTEXT_TOOL_DEPENDS_FILES_TAG = "files";
// TODO: May add other types of dependencies // TODO: May add other types of dependencies
static final String CONTEXT_TOOL_DFLT_ACTION_LABEL = "Run for"; static final String CONTEXT_TOOL_DFLT_ACTION_LABEL = "Run for";
...@@ -663,7 +664,8 @@ public class XMLConfig extends Config { ...@@ -663,7 +664,8 @@ public class XMLConfig extends Config {
List<String> toolExtensionsList = readToolExtensionsList(contextNode, contextName); List<String> toolExtensionsList = readToolExtensionsList(contextNode, contextName);
List<RunFor> toolRunfor= readToolRunForList(contextNode, contextName); List<RunFor> toolRunfor= readToolRunForList(contextNode, contextName);
List<String> toolDepends= readToolDependsList(contextNode, contextName); List<String> toolDependsStates= readToolDependsList(contextNode, contextName,false);
List<String> toolDependsFiles= readToolDependsList(contextNode, contextName,true);
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_OTHER)) { if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_OTHER)) {
System.out.println("contextNode.getNodeValue()="+contextNode.getNodeValue()); System.out.println("contextNode.getNodeValue()="+contextNode.getNodeValue());
...@@ -692,7 +694,8 @@ public class XMLConfig extends Config { ...@@ -692,7 +694,8 @@ public class XMLConfig extends Config {
toolInfo, toolInfo,
toolRunfor, toolRunfor,
ignoreFilter, ignoreFilter,
toolDepends, toolDependsStates,
toolDependsFiles,
logDir, logDir,
stateDir, stateDir,
disabled, disabled,
...@@ -1045,9 +1048,12 @@ public class XMLConfig extends Config { ...@@ -1045,9 +1048,12 @@ public class XMLConfig extends Config {
return extList; return extList;
} }
private List<String> readToolDependsList(Node toolNode, String toolName) private List<String> readToolDependsList(Node toolNode, String toolName, boolean filesNotStates)
throws ConfigException throws ConfigException
{ {
String filesStateTag= filesNotStates?CONTEXT_TOOL_DEPENDS_FILES_TAG:CONTEXT_TOOL_DEPENDS_STATE_TAG;
String otherTag= (!filesNotStates)?CONTEXT_TOOL_DEPENDS_FILES_TAG:CONTEXT_TOOL_DEPENDS_STATE_TAG;
String toolInfo = "Tool '" + toolName + "'"; String toolInfo = "Tool '" + toolName + "'";
List<String> depList = new ArrayList<String>(); List<String> depList = new ArrayList<String>();
...@@ -1066,10 +1072,14 @@ public class XMLConfig extends Config { ...@@ -1066,10 +1072,14 @@ public class XMLConfig extends Config {
// TODO: allow here other types of dependencies (conditionals(source files) // TODO: allow here other types of dependencies (conditionals(source files)
for(Iterator<Node> n = depNodes.iterator(); n.hasNext();) { for(Iterator<Node> n = depNodes.iterator(); n.hasNext();) {
Node node = (Node)n.next(); Node node = (Node)n.next();
String dep = getAttributeValue(node, CONTEXT_TOOL_DEPENDS_STATE_TAG); String dep = getAttributeValue(node, filesStateTag);
if(dep == null) if (dep != null) {
throw new ConfigException(toolInfo + ": Attribute '" + CONTEXT_TOOL_DEPENDS_STATE_TAG + "' is absent");
depList.add(dep); depList.add(dep);
} else if (getAttributeValue(node, otherTag)==null){
throw new ConfigException(toolInfo + ": Both alternative attributes '" + CONTEXT_TOOL_DEPENDS_FILES_TAG +
" and '"+CONTEXT_TOOL_DEPENDS_STATE_TAG +"' are absent");
}
} }
return depList; return depList;
} }
......
...@@ -262,6 +262,9 @@ public abstract class Context { ...@@ -262,6 +262,9 @@ public abstract class Context {
createdControlFiles.clear(); createdControlFiles.clear();
currentHash=0; currentHash=0;
// if (name.equals("VivadoSynthesis")){
// System.out.println("1. Check here: VivadoSynthesis");
// }
while(commandLinesBlockIter.hasNext()) { while(commandLinesBlockIter.hasNext()) {
CommandLinesBlock commandLinesBlock = (CommandLinesBlock)commandLinesBlockIter.next(); CommandLinesBlock commandLinesBlock = (CommandLinesBlock)commandLinesBlockIter.next();
...@@ -398,15 +401,23 @@ public abstract class Context { ...@@ -398,15 +401,23 @@ public abstract class Context {
String [] params=item.getParams(); String [] params=item.getParams();
if (params!=null) for (int i=0;i<params.length;i++){ if (params!=null) for (int i=0;i<params.length;i++){
currentHash += params[i].hashCode(); currentHash += params[i].hashCode();
// if (name.equals("VivadoSynthesis")){
// System.out.println(params[i]+": "+currentHash);
// }
} }
} }
} }
// System.out.println("BildParam("+dryRun+"), name="+name+" currentHash="+currentHash); // System.out.println("BildParam("+dryRun+"), name="+name+" currentHash="+currentHash);
// Seems that during build it worked on a working copy of the tool, so calculated parameter did not get back // Seems that during build it worked on a working copy of the tool, so calculated parameter did not get back
Tool proto=ToolsCore.getConfig().getContextManager().findTool(name); Tool proto=ToolsCore.getConfig().getContextManager().findTool(name);
// System.out.println("Calculated currentHash for "+name+"="+currentHash);
// if (name.equals("VivadoSynthesis")){
// System.out.println("Check here: VivadoSynthesis");
// }
if (proto!=null){ if (proto!=null){
if (proto!=this){ if (proto!=this){
System.out.println("++++ Updating tool's currentHas from working copy, name="+name); System.out.println("++++ Updating tool's currentHash from working copy, name="+name);
proto.setCurrentHash(currentHash); proto.setCurrentHash(currentHash);
} }
......
...@@ -38,9 +38,25 @@ public class ParamRepeaterRecognizer extends RepeaterRecognizer { ...@@ -38,9 +38,25 @@ public class ParamRepeaterRecognizer extends RepeaterRecognizer {
String repSuffix, String repSuffix,
String separator) String separator)
{ {
// TODO make repetitor to accept several pattern generators with only one generating a list
/*
if(genName.equals(ParamFormatRecognizer.FORMAT_PARAM_NAME_MARK)) {
return new AbstractGenerator() {
public String getName() {
return "ParamName (parameter '" + param.getID() +
"' of context '" + param.getContext().getName() +
"')";
}
protected String[] getStringValues() {
return new String[]{param.getOutID()};
}
};
}
*/
if(genName.equals(ParamFormatRecognizer.FORMAT_PARAM_VALUE_MARK)) if(genName.equals(ParamFormatRecognizer.FORMAT_PARAM_VALUE_MARK))
return new ValueGenerator(param, repPrefix, repSuffix, separator); return new ValueGenerator(param, repPrefix, repSuffix, separator);
/* Trying to put these here */ /* Trying to put these here */
if(genName.equals(FilteredSourceListGenerator.NAME)) if(genName.equals(FilteredSourceListGenerator.NAME))
return new FilteredSourceListGenerator(repPrefix, repSuffix, separator); return new FilteredSourceListGenerator(repPrefix, repSuffix, separator);
else if(genName.equals(SourceListGenerator.NAME)) else if(genName.equals(SourceListGenerator.NAME))
......
...@@ -39,7 +39,9 @@ public class SimpleGeneratorRecognizer implements Recognizer { ...@@ -39,7 +39,9 @@ public class SimpleGeneratorRecognizer implements Recognizer {
new UserNameGenerator(), new UserNameGenerator(),
new StateDirGenerator(), new StateDirGenerator(),
new StateFileGenerator(), new StateFileGenerator(),
new StateBaseGenerator() new StateBaseGenerator(),
new SourceListGenerator("","",""),
new FilteredSourceListGenerator("","","")
}; };
public SimpleGeneratorRecognizer(){ public SimpleGeneratorRecognizer(){
......
...@@ -17,12 +17,15 @@ ...@@ -17,12 +17,15 @@
*******************************************************************************/ *******************************************************************************/
package com.elphel.vdt.ui.variables; package com.elphel.vdt.ui.variables;
import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.Stack; import java.util.Stack;
import com.elphel.vdt.VDT;
import com.elphel.vdt.VerilogUtils; import com.elphel.vdt.VerilogUtils;
import com.elphel.vdt.core.tools.params.Tool; import com.elphel.vdt.core.tools.params.Tool;
import com.elphel.vdt.core.tools.params.ToolSequence;
import com.elphel.vdt.veditor.VerilogPlugin; import com.elphel.vdt.veditor.VerilogPlugin;
import com.elphel.vdt.veditor.preference.PreferenceStrings; import com.elphel.vdt.veditor.preference.PreferenceStrings;
...@@ -39,6 +42,7 @@ import org.eclipse.jface.viewers.ISelection; ...@@ -39,6 +42,7 @@ import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IPageLayout; import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.ISelectionService; import org.eclipse.ui.ISelectionService;
...@@ -59,9 +63,9 @@ import org.eclipse.ui.PlatformUI; ...@@ -59,9 +63,9 @@ import org.eclipse.ui.PlatformUI;
*/ */
public class SelectedResourceManager implements IWindowListener, ISelectionListener { public class SelectedResourceManager implements IWindowListener, ISelectionListener {
// singleton // singleton
private static SelectedResourceManager fgDefault = new SelectedResourceManager(); private static SelectedResourceManager fgDefault = new SelectedResourceManager();
private IResource fSelectedResource = null; private IResource fSelectedResource = null;
private IResource fSelectedVerilogFile = null; private IResource fSelectedVerilogFile = null;
private ITextSelection fSelectedText = null; private ITextSelection fSelectedText = null;
...@@ -76,6 +80,7 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe ...@@ -76,6 +80,7 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe
private String timestamp; private String timestamp;
private String ignoreFilter=null; private String ignoreFilter=null;
private boolean toolsLinked=true; private boolean toolsLinked=true;
private ToolSequence toolSequence=null; // to be able to reach toolSequence instance from VEditor
// private Tool selectedTool=null; // last selected tool // private Tool selectedTool=null; // last selected tool
// //
...@@ -117,6 +122,14 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe ...@@ -117,6 +122,14 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe
return toolsLinked; return toolsLinked;
} }
public void setToolSequence (ToolSequence toolSequence){
this.toolSequence=toolSequence;
}
public ToolSequence getToolSequence(){
return toolSequence;
}
/** /**
* @see org.eclipse.ui.IWindowListener#windowActivated(org.eclipse.ui.IWorkbenchWindow) * @see org.eclipse.ui.IWindowListener#windowActivated(org.eclipse.ui.IWorkbenchWindow)
*/ */
...@@ -161,7 +174,7 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe ...@@ -161,7 +174,7 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe
/** /**
* Returns the currently selected resource in the active workbench window, * Returns the currently selected resource in the active workbench window,
* or <code>null</code> if none. If an editor is active, the resource adapater * or <code>null</code> if none. If an editor is active, the resource adapter
* associated with the editor is returned. * associated with the editor is returned.
* *
* @return selected resource or <code>null</code> * @return selected resource or <code>null</code>
...@@ -286,10 +299,10 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe ...@@ -286,10 +299,10 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe
} }
} }
// Build stamp/date methods
public String setBuildStamp(){ public String setBuildStamp(){
// timestamp=System.nanoTime(); timestamp=getBuildStamp(new Date());
//String fileName = new SimpleDateFormat("yyyyMMddHHmmssSSS'.txt'").format(new Date()));
timestamp= new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
return getBuildStamp(); return getBuildStamp();
} }
...@@ -297,6 +310,26 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe ...@@ -297,6 +310,26 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe
return timestamp; return timestamp;
} }
public static String getBuildStamp(Date date){
return new SimpleDateFormat(VDT.TIME_STAMP_FORMAT).format(date);
}
public static Date parseStamp(String stamp){
Date d;
try {
d = new SimpleDateFormat(VDT.TIME_STAMP_FORMAT).parse(stamp);
} catch (ParseException e) {
d=new Date(0);
System.out.println("Date format '"+stamp+"' not recognized, using beginning of all of times: "+
new SimpleDateFormat(VDT.TIME_STAMP_FORMAT).format(d));
return d; // 1970
}
return d;
}
public static boolean afterStamp(String after, String before){
return parseStamp(before).after(parseStamp(after));
}
public String getChosenTarget() { public String getChosenTarget() {
return fChosenTarget; return fChosenTarget;
...@@ -309,6 +342,13 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe ...@@ -309,6 +342,13 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe
return (fChosenVerilogFile!=null)?fChosenVerilogFile:fSelectedVerilogFile; return (fChosenVerilogFile!=null)?fChosenVerilogFile:fSelectedVerilogFile;
} }
// Used when restoring from memento
public void setChosenVerilogFile(IResource file) {
fChosenVerilogFile=file;
if (fSelectedResource==null) fSelectedResource=file;
}
public int getChosenAction() { public int getChosenAction() {
return fChosenAction; return fChosenAction;
} }
...@@ -320,6 +360,9 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe ...@@ -320,6 +360,9 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe
public String getFilter(){ public String getFilter(){
return ignoreFilter; return ignoreFilter;
} }
public void setFilter(String filter){
ignoreFilter=filter;
}
......
...@@ -58,6 +58,7 @@ import com.elphel.vdt.core.tools.params.ToolSequence; ...@@ -58,6 +58,7 @@ import com.elphel.vdt.core.tools.params.ToolSequence;
import com.elphel.vdt.core.tools.params.types.RunFor; import com.elphel.vdt.core.tools.params.types.RunFor;
import com.elphel.vdt.Txt; import com.elphel.vdt.Txt;
import com.elphel.vdt.VDT; import com.elphel.vdt.VDT;
import com.elphel.vdt.VerilogUtils;
import com.elphel.vdt.veditor.VerilogPlugin; import com.elphel.vdt.veditor.VerilogPlugin;
import com.elphel.vdt.veditor.preference.PreferenceStrings; import com.elphel.vdt.veditor.preference.PreferenceStrings;
import com.elphel.vdt.ui.MessageUI; import com.elphel.vdt.ui.MessageUI;
...@@ -95,6 +96,8 @@ public class DesignFlowView extends ViewPart implements ISelectionListener { ...@@ -95,6 +96,8 @@ public class DesignFlowView extends ViewPart implements ISelectionListener {
// Persistance tags. // Persistance tags.
private static final String TAG_SELECTED_RESOURCE = "SelectedProject"; private static final String TAG_SELECTED_RESOURCE = "SelectedProject";
private static final String TAG_SELECTED_HDL_FILE = "SelectedHdlFile";
private static final String TAG_SELECTED_HDL_FILTER = "SelectedHdlFilter";
private static final String TAG_LINKED_TOOLS = "LinkedTools"; private static final String TAG_LINKED_TOOLS = "LinkedTools";
private TreeViewer viewer; private TreeViewer viewer;
...@@ -268,6 +271,10 @@ public class DesignFlowView extends ViewPart implements ISelectionListener { ...@@ -268,6 +271,10 @@ public class DesignFlowView extends ViewPart implements ISelectionListener {
} }
} }
public void changeMenuTitle(String title){
setPartName(title);
}
private void hookContextMenu() { private void hookContextMenu() {
MenuManager menuMgr = new MenuManager("#PopupMenu"); MenuManager menuMgr = new MenuManager("#PopupMenu");
menuMgr.setRemoveAllWhenShown(true); menuMgr.setRemoveAllWhenShown(true);
...@@ -973,6 +980,7 @@ public class DesignFlowView extends ViewPart implements ISelectionListener { ...@@ -973,6 +980,7 @@ public class DesignFlowView extends ViewPart implements ISelectionListener {
DesignMenu newDesignMenu = dialog.getSelectedDesignMenu(); DesignMenu newDesignMenu = dialog.getSelectedDesignMenu();
String newDesignMenuName = newDesignMenu == null ? null String newDesignMenuName = newDesignMenu == null ? null
: newDesignMenu.getName(); : newDesignMenu.getName();
desigMenuName.setValue(newDesignMenuName); // ??? Andrey
OptionsCore.doStoreOption(desigMenuName, project); OptionsCore.doStoreOption(desigMenuName, project);
doLoadDesignMenu(newDesignMenuName); doLoadDesignMenu(newDesignMenuName);
} }
...@@ -1112,20 +1120,52 @@ public class DesignFlowView extends ViewPart implements ISelectionListener { ...@@ -1112,20 +1120,52 @@ public class DesignFlowView extends ViewPart implements ISelectionListener {
* @since 2.0 * @since 2.0
*/ */
protected void restoreState(IMemento memento) { protected void restoreState(IMemento memento) {
SelectedResourceManager.getDefault().setToolSequence(toolSequence); // to enable access through static method
Boolean linkedTools= memento.getBoolean(TAG_LINKED_TOOLS); Boolean linkedTools= memento.getBoolean(TAG_LINKED_TOOLS);
ToolsCore.restoreToolsState(memento); ToolsCore.restoreToolsState(memento);
if (linkedTools==null) linkedTools=true;
SelectedResourceManager.getDefault().setToolsLinked(linkedTools);
toggleLinkedTools.setChecked(!SelectedResourceManager.getDefault().isToolsLinked());
String location = memento.getString(TAG_SELECTED_RESOURCE); String location = memento.getString(TAG_SELECTED_RESOURCE);
if (location == null) if (location == null) {
System.out.println("No project selected");
return; return;
}
selectedResource = ResourcesPlugin.getWorkspace().getRoot().findMember(Path.fromPortableString(location)); selectedResource = ResourcesPlugin.getWorkspace().getRoot().findMember(Path.fromPortableString(location));
String HDLLocation=memento.getString(TAG_SELECTED_HDL_FILE);
if (HDLLocation!=null) {
IResource HDLFile=ResourcesPlugin.getWorkspace().getRoot().findMember(Path.fromPortableString(HDLLocation));
SelectedResourceManager.getDefault().setChosenVerilogFile(HDLFile);
System.out.println("Setting HDL file to "+HDLFile.toString());
}
String HDLFilter=memento.getString(TAG_SELECTED_HDL_FILTER); //SelectedResourceManager.getDefault().getFilter();
if (HDLFilter!=null){
SelectedResourceManager.getDefault().setFilter(HDLFilter);
System.out.println("Setting HDL filter to "+HDLFilter);
}
if (linkedTools==null) linkedTools=true;
SelectedResourceManager.getDefault().setToolsLinked(linkedTools);
toggleLinkedTools.setChecked(!SelectedResourceManager.getDefault().isToolsLinked());
// Initialize VEditor database build
IResource HDLFile=SelectedResourceManager.getDefault().getChosenVerilogFile();
if ((HDLFile!=null) && HDLFile.exists()){
toolSequence.setUnfinishedBoot(memento);
VerilogUtils.getTopModuleNames((IFile) HDLFile);
} else {
toolSequence.setUnfinishedBoot(null);
finalizeAfterVEditorDB(memento);
}
}
public void finalizeAfterVEditorDB(IMemento memento){
toolSequence.restoreCurrentStates(memento); // restore states and recalc "dirty" flags - should be after tools themselves
doLoadDesignMenu(); doLoadDesignMenu();
updateLaunchAction(); updateLaunchAction();
} }
/** /**
* @see ViewPart#saveState * @see ViewPart#saveState
*/ */
...@@ -1139,9 +1179,19 @@ public class DesignFlowView extends ViewPart implements ISelectionListener { ...@@ -1139,9 +1179,19 @@ public class DesignFlowView extends ViewPart implements ISelectionListener {
String location = selectedResource.getFullPath().toPortableString(); String location = selectedResource.getFullPath().toPortableString();
memento.putString(TAG_SELECTED_RESOURCE, location); memento.putString(TAG_SELECTED_RESOURCE, location);
} }
IResource HDLFile=SelectedResourceManager.getDefault().getChosenVerilogFile();
if (HDLFile!=null){
memento.putString(TAG_SELECTED_HDL_FILE,HDLFile.getFullPath().toPortableString());
System.out.println("memento.putString("+TAG_SELECTED_HDL_FILE+","+HDLFile.getFullPath().toPortableString()+")");
}
String HDLFilter=SelectedResourceManager.getDefault().getFilter();
if (HDLFilter!=null){
memento.putString(TAG_SELECTED_HDL_FILTER,HDLFilter);
System.out.println("memento.putString("+TAG_SELECTED_HDL_FILTER+","+HDLFilter+")");
}
memento.putBoolean(TAG_LINKED_TOOLS, new Boolean(SelectedResourceManager.getDefault().isToolsLinked())); memento.putBoolean(TAG_LINKED_TOOLS, new Boolean(SelectedResourceManager.getDefault().isToolsLinked()));
ToolsCore.saveToolsState(memento); ToolsCore.saveToolsState(memento);
toolSequence.saveCurrentStates(memento);
} }
} // class DesignFlowView } // class DesignFlowView
\ No newline at end of file
...@@ -303,7 +303,6 @@ public class DesignMenuModel { ...@@ -303,7 +303,6 @@ public class DesignMenuModel {
public void measureItem (Event event){ public void measureItem (Event event){
super.measureItem (event); super.measureItem (event);
boolean dirty=tool.isDirty();
boolean pinned=tool.isPinned() || !SelectedResourceManager.getDefault().isToolsLinked(); boolean pinned=tool.isPinned() || !SelectedResourceManager.getDefault().isToolsLinked();
String iconName,key; String iconName,key;
if (tool.isRunning()){ if (tool.isRunning()){
...@@ -325,7 +324,7 @@ public class DesignMenuModel { ...@@ -325,7 +324,7 @@ public class DesignMenuModel {
key= VDTPluginImages.KEY_TOOLSTATE_NEW; key= VDTPluginImages.KEY_TOOLSTATE_NEW;
break; break;
case FAILURE: case FAILURE:
if (dirty){ if (tool.isDirtyOrChanged()){
iconName=VDTPluginImages.ICON_TOOLSTATE_BAD_OLD; iconName=VDTPluginImages.ICON_TOOLSTATE_BAD_OLD;
key= VDTPluginImages.KEY_TOOLSTATE_BAD_OLD; key= VDTPluginImages.KEY_TOOLSTATE_BAD_OLD;
} else { } else {
...@@ -338,7 +337,7 @@ public class DesignMenuModel { ...@@ -338,7 +337,7 @@ public class DesignMenuModel {
iconName=VDTPluginImages.ICON_TOOLSTATE_PINNED; iconName=VDTPluginImages.ICON_TOOLSTATE_PINNED;
key= VDTPluginImages.KEY_TOOLSTATE_PINNED; key= VDTPluginImages.KEY_TOOLSTATE_PINNED;
} else { } else {
if (dirty){ if (tool.isDirtyOrChanged()){
iconName=VDTPluginImages.ICON_TOOLSTATE_GOOD_OLD; iconName=VDTPluginImages.ICON_TOOLSTATE_GOOD_OLD;
key= VDTPluginImages.KEY_TOOLSTATE_GOOD_OLD; key= VDTPluginImages.KEY_TOOLSTATE_GOOD_OLD;
} else { } else {
...@@ -352,7 +351,7 @@ public class DesignMenuModel { ...@@ -352,7 +351,7 @@ public class DesignMenuModel {
key= VDTPluginImages.KEY_TOOLSTATE_KEPT_OPEN; key= VDTPluginImages.KEY_TOOLSTATE_KEPT_OPEN;
break; break;
default: default:
if (dirty){ if (tool.isDirtyOrChanged()){
iconName=VDTPluginImages.ICON_TOOLSTATE_WTF_OLD; iconName=VDTPluginImages.ICON_TOOLSTATE_WTF_OLD;
key= VDTPluginImages.KEY_TOOLSTATE_WTF_OLD; key= VDTPluginImages.KEY_TOOLSTATE_WTF_OLD;
} else { } else {
......
...@@ -94,6 +94,11 @@ ...@@ -94,6 +94,11 @@
<syntax name="DashListIndividual" format="%(-%%ParamName %%ParamValue%| %)" /> <syntax name="DashListIndividual" format="%(-%%ParamName %%ParamValue%| %)" />
<syntax name="DashListCommon" format="-%%ParamName %(%%ParamValue%| %)" /> <syntax name="DashListCommon" format="-%%ParamName %(%%ParamValue%| %)" />
<syntax name="DashName" format=" -%%ParamName" /> <syntax name="DashName" format=" -%%ParamName" />
<!--
Does not work according to 2.2.1. "Inside text-repetitor, one and only one pattern-generator is mandatory".
<syntax name="RepeatCommandSyntax" format="%(%%ParamName %%ParamValue%|\n%)" /> -->
</interface> </interface>
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
<vdt-project> <vdt-project>
<interface name="FPGAPprojectInterface"> <interface name="FPGAPprojectInterface">
<syntax name="RemoteRootSyntax" format="%%ParamValue/%%ProjectName" /> <syntax name="RemoteRootSyntax" format="%%ParamValue/%%ProjectName" />
<syntax name="SourceListSyntax" format="%(%%SourceList%| %)" /> <!-- <syntax name="SourceListSyntax" format="%(%%SourceList%| %)" />
<syntax name="FilteredSourceListSyntax" format="%(%%FilteredSourceList%| %)" /> <syntax name="FilteredSourceListSyntax" format="%(%%FilteredSourceList%| %)" /> -->
<syntax name="ProgramSyntax" format="%(%%ParamValue%|\n%)" /> <syntax name="ProgramSyntax" format="%(%%ParamValue%|\n%)" />
<!-- typedef --> <!-- typedef -->
</interface> </interface>
...@@ -129,37 +129,37 @@ ...@@ -129,37 +129,37 @@
<parameter id="SnapshotSynth" <parameter id="SnapshotSynth"
label="Synthesis snapshot" tooltip="Name of Vivado snapshot archive after synthesis" label="Synthesis snapshot" tooltip="Name of Vivado snapshot archive after synthesis"
default="%%ProjectName-synth.dcp" default="%%ProjectName-synth.dcp"
type="Filename" format="CopyValue" /> type="String" format="CopyValue" />
<parameter id="SnapshotOptPlace" <parameter id="SnapshotOptPlace"
label="Placement snapshot" tooltip="Name of Vivado snapshot archive after optimization/placement" label="Placement snapshot" tooltip="Name of Vivado snapshot archive after optimization/placement"
default="%%ProjectName-opt-place.dcp" default="%%ProjectName-opt-place.dcp"
type="Filename" format="CopyValue" /> type="String" format="CopyValue" />
<parameter id="SnapshotOpt" <parameter id="SnapshotOpt"
label="Optimization snapshot" tooltip="Name of Vivado snapshot archive after optimization" label="Optimization snapshot" tooltip="Name of Vivado snapshot archive after optimization"
default="%%ProjectName-opt.dcp" default="%%ProjectName-opt.dcp"
type="Filename" format="CopyValue" /> type="String" format="CopyValue" />
<parameter id="SnapshotOptPower" <parameter id="SnapshotOptPower"
label="Power optimization snapshot" tooltip="Name of Vivado snapshot archive after power optimization" label="Power optimization snapshot" tooltip="Name of Vivado snapshot archive after power optimization"
default="%%ProjectName-opt-power.dcp" default="%%ProjectName-opt-power.dcp"
type="Filename" format="CopyValue" /> type="String" format="CopyValue" />
<parameter id="SnapshotPlace" <parameter id="SnapshotPlace"
label="Placement snapshot" tooltip="Name of Vivado snapshot archive after placement" label="Placement snapshot" tooltip="Name of Vivado snapshot archive after placement"
default="%%ProjectName-place.dcp" default="%%ProjectName-place.dcp"
type="Filename" format="CopyValue" /> type="String" format="CopyValue" />
<parameter id="SnapshotOptPhys" <parameter id="SnapshotOptPhys"
label="Physical optimization snapshot" tooltip="Name of Vivado snapshot archive after physical optimization" label="Physical optimization snapshot" tooltip="Name of Vivado snapshot archive after physical optimization"
default="%%ProjectName-opt-phys.dcp" default="%%ProjectName-opt-phys.dcp"
type="Filename" format="CopyValue" /> type="String" format="CopyValue" />
<parameter id="SnapshotRoute" <parameter id="SnapshotRoute"
label="Routing snapshot" tooltip="Name of Vivado snapshot archive after routing" label="Routing snapshot" tooltip="Name of Vivado snapshot archive after routing"
default="%%ProjectName-route.dcp" default="%%ProjectName-route.dcp"
type="Filename" format="CopyValue" /> type="String" format="CopyValue" />
<parameter id="DisableVivadoSynth" <parameter id="DisableVivadoSynth"
label="Disable Vivado synthesis" tooltip="Disable tool Vivado Synthesis" label="Disable Vivado synthesis" tooltip="Disable tool Vivado Synthesis"
......
...@@ -119,9 +119,11 @@ ...@@ -119,9 +119,11 @@
<parameter id="v" type="SwitchType" format="SwitchSyntax" <parameter id="v" type="SwitchType" format="SwitchSyntax"
default="true" label="Verbose" /> default="true" label="Verbose" />
<parameter id="Param_SourceList" label="Param_SourceList" <!-- <parameter id="Param_SourceList" label="Param_SourceList"
type="Stringlist" format="SourceListSyntax" default="" readonly="true" type="Stringlist" format="SourceListSyntax" default="" readonly="true"
visible="true" /> visible="true" /> -->
<parameter id="SourceListPar" label="Param_SourceList" type="Filelist"
format="ParamListSyntax" default="%%FilteredSourceList" readonly="true" visible="false" />
<parameter id="ShowNoProblem" type="BoolYesNo" format="None" <parameter id="ShowNoProblem" type="BoolYesNo" format="None"
...@@ -199,8 +201,10 @@ ...@@ -199,8 +201,10 @@
<parameter id="IVerilogActionIndex" default="%%ChosenActionIndex" <parameter id="IVerilogActionIndex" default="%%ChosenActionIndex"
type="String" format="CopyValue" visible="false" /> type="String" format="CopyValue" visible="false" />
<parameter id="SourceList" format="SourceListSyntax" <!-- <parameter id="SourceList" format="SourceListSyntax"
type="Stringlist" default="" readonly="true" visible="false" /> type="Stringlist" default="" readonly="true" visible="false" /> -->
<parameter id="SourceListPar" label="Param_SourceList" type="Filelist"
format="ParamListSyntax" default="%%FilteredSourceList" readonly="true" visible="false" />
<parameter id="iverilog_include_file" default="IVERILOG_INCLUDE.v" <parameter id="iverilog_include_file" default="IVERILOG_INCLUDE.v"
type="Filename" format="CopyValue" visible="false" /> type="Filename" format="CopyValue" visible="false" />
...@@ -300,7 +304,7 @@ ...@@ -300,7 +304,7 @@
"%legacy_model" "%legacy_model"
"%no_specify" "%no_specify"
"%v" "%v"
"%SourceList" "%SourceListPar"
"%ExtraFiles" "%ExtraFiles"
<if ShowNoProblem="false"> <if ShowNoProblem="false">
"2&gt;&amp;1" "2&gt;&amp;1"
......
...@@ -75,10 +75,17 @@ ...@@ -75,10 +75,17 @@
<action label="Check by Vivado Synthesis:" resource="%%SelectedFile" <action label="Check by Vivado Synthesis:" resource="%%SelectedFile"
check-extension="true" check-existence="true" icon="IconTestTube.png" /> check-extension="true" check-existence="true" icon="IconTestTube.png" />
</action-menu> </action-menu>
<!-- TODO: find out, how to reset state and make a tool to depend on-->
<depends-list>
<depends files="FilteredSourceListPar"/>
<depends files="ConstraintsFiles"/>
</depends-list>
<parameter id="ConstraintsFiles" type="Filelist" format="ParamListSyntax" <parameter id="ConstraintsFiles" type="Filelist" format="ParamListSyntax"
default="" label="Constraints files" tooltip="Select constraint files to load to Vivado" readonly="false" default="" label="Constraints files" tooltip="Select constraint files to load to Vivado" readonly="false"
visible="true" /> visible="true" />
<parameter id="SkipSnapshotSynth" label="Skip snapshot" tooltip="Do not create snapshot after synthesis" <parameter id="SkipSnapshotSynth" label="Skip snapshot" tooltip="Do not create snapshot after synthesis"
default="false" default="false"
type= "Boolean" format="None"/> type= "Boolean" format="None"/>
...@@ -149,12 +156,19 @@ ...@@ -149,12 +156,19 @@
default="false" visible="true" omit="false" type="Boolean" format="DashName"/> default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<!-- hidden (calculated) parameters --> <!-- hidden (calculated) parameters -->
<parameter id="FilteredSourceList" type="Stringlist" <!-- <parameter id="FilteredSourceList" type="Filelist"
format="FilteredSourceListSyntax" default="" readonly="true" visible="false" /> format="FilteredSourceListSyntax" default="" readonly="true" visible="false" /> -->
<parameter id="FilteredSourceListPar" type="Filelist"
format="ParamListSyntax" default="%%FilteredSourceList" readonly="true" visible="false" />
<!-- Parameter read_xdc just copies parameter ConstraintsFiles, but they have different syntax (output representation) --> <!-- Parameter read_xdc just copies parameter ConstraintsFiles, but they have different syntax (output representation) -->
<parameter id="read_xdc" type="Filelist" format="read_xdc_syntax" label="" tooltip="read_xdc"
<parameter id="read_xdc" type="Filelist" format="read_xdc_syntax"
default="%ConstraintsFiles" visible="false" /> default="%ConstraintsFiles" visible="false" />
<!-- <parameter id="read_xdc" type="Filelist" format="read_xdc_syntax" label="" tooltip="read_xdc"
default="%ConstraintsFiles" visible="false" /> -->
<!-- <parameter id="top" label="" tooltip= "Top module of the design" <!-- <parameter id="top" label="" tooltip= "Top module of the design"
default="%%TopModule" visible="false" omit="" type="String" format="Dash"/> --> default="%%TopModule" visible="false" omit="" type="String" format="Dash"/> -->
<parameter id="VivadoSynthActionIndex" default="%%ChosenActionIndex" <parameter id="VivadoSynthActionIndex" default="%%ChosenActionIndex"
...@@ -190,7 +204,8 @@ ...@@ -190,7 +204,8 @@
<!-- invisible/calculated parameters --> <!-- invisible/calculated parameters -->
<parameter id="AutosaveVivadoSynthesis" default="?%%ChosenActionIndex=0 ^ %SkipSnapshotSynth=false : true, false" <parameter id="AutosaveVivadoSynthesis" default="?%%ChosenActionIndex=0 ^ %SkipSnapshotSynth=false : true, false"
visible="false" type="Boolean" format="None"/> visible="false" type="Boolean" format="None"/>
<parameter id="condConstraintsFiles" default="?%%ChosenActionIndex=0 : %ConstraintsFiles, "
visible="false" type="Filelist" format="None"/>
<input> <input>
<group name="General"> <group name="General">
...@@ -257,7 +272,7 @@ ...@@ -257,7 +272,7 @@
"%VivadoProjectRoot" "%VivadoProjectRoot"
"' ;" "' ;"
"rsync -avrR -e ssh" "rsync -avrR -e ssh"
"%FilteredSourceList" "%FilteredSourceListPar"
<if VivadoSynthActionIndex="0"> <if VivadoSynthActionIndex="0">
"%ConstraintsFiles" "%ConstraintsFiles"
</if> </if>
...@@ -279,7 +294,8 @@ ...@@ -279,7 +294,8 @@
"reset_project -quiet\n" "reset_project -quiet\n"
</if> </if>
"file mkdir $outputDir\n" "file mkdir $outputDir\n"
"read_verilog %FilteredSourceList\n" "read_verilog "
"%FilteredSourceListPar\n"
<if VivadoSynthActionIndex="0"> <if VivadoSynthActionIndex="0">
<if ConstraintsFiles=""> <if ConstraintsFiles="">
"puts \"No constraints files specified, skipping read_xdc command\";\n" "puts \"No constraints files specified, skipping read_xdc command\";\n"
......
...@@ -25,8 +25,10 @@ ...@@ -25,8 +25,10 @@
<parameter id="Timeout" label="Script timeout(sec)" type="Cardinal" <parameter id="Timeout" label="Script timeout(sec)" type="Cardinal"
format="CopyValue" default="10" readonly="false" visible="true" /> format="CopyValue" default="10" readonly="false" visible="true" />
<!-- hidden (calculated) parameters --> <!-- hidden (calculated) parameters -->
<parameter id="FilteredSourceList" type="Stringlist" <!-- <parameter id="FilteredSourceList" type="Stringlist"
format="FilteredSourceListSyntax" default="" readonly="true" visible="false" /> format="FilteredSourceListSyntax" default="" readonly="true" visible="false" /> -->
<parameter id="FilteredSourceListPar" type="Filelist"
format="ParamListSyntax" default="%%FilteredSourceList" readonly="true" visible="false" />
<input> <input>
<group name="General"> <group name="General">
...@@ -40,7 +42,7 @@ ...@@ -40,7 +42,7 @@
"-c" "-c"
"echo 'scp files here' ;" "echo 'scp files here' ;"
"echo '" "echo '"
"%FilteredSourceList" "%FilteredSourceListPar"
"' ;" "' ;"
"sleep 2 ;" "sleep 2 ;"
</line> </line>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment