Commit 03f8c5bd authored by Andrey Filippov's avatar Andrey Filippov

Updated private vdt repository to the later changes in the open vdt-plugin one

parent 6ae5df1f
......@@ -361,6 +361,12 @@
<extension
point="org.eclipse.core.variables.dynamicVariables">
<variable
name="verilog_project_loc"
description="Returns the absolute file system path of the project."
resolver="com.elphel.vdt.ui.variables.VerilogResolver"
supportsArgument="true">
</variable>
<variable
name="verilog_source_loc"
description="%verilog_source_loc.description"
......
......@@ -39,7 +39,6 @@ import org.eclipse.debug.core.model.ILaunchConfigurationDelegate;
import org.eclipse.swt.widgets.Display;
import com.elphel.vdt.Txt;
import com.elphel.vdt.core.tools.contexts.BuildParamsItem;
import com.elphel.vdt.ui.MessageUI;
import com.elphel.vdt.veditor.VerilogPlugin;
import com.elphel.vdt.veditor.preference.PreferenceStrings;
......
......@@ -139,7 +139,7 @@ public class XMLConfig extends Config {
static final String CONTEXT_TOOL_LOG_DIRECTORY = "log-dir"; // folder to store the tool log files
static final String CONTEXT_TOOL_STATE_DIRECTORY = "state-dir"; // folder to store the tool state (snapshot) files
static final String CONTEXT_TOOL_DISABLED = "disabled"; // Parameter name that disables the tool if true
static final String CONTEXT_TOOL_DISABLED = "disable"; // Parameter name that disables the tool if true
static final String CONTEXT_TOOL_RESULT = "result"; // Parameter name keeps the filename representing result (snapshot)
static final String CONTEXT_TOOL_RESTORE = "restore"; // tool name that restores the state from result (shapshot)
static final String CONTEXT_TOOL_SAVE = "save"; // tool name that saves the state to result file (snapshot)
......
......@@ -35,6 +35,12 @@ import java.util.Iterator;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.variables.IDynamicVariable;
import org.eclipse.core.variables.IStringVariableManager;
import org.eclipse.core.variables.IValueVariable;
import org.eclipse.core.variables.VariablesPlugin;
import com.elphel.vdt.core.tools.ToolsCore;
import com.elphel.vdt.core.tools.config.Config;
import com.elphel.vdt.core.tools.config.ConfigException;
......@@ -327,7 +333,7 @@ public abstract class Context {
for(Iterator<String> lineIter = lines.iterator(); lineIter.hasNext();) {
String line = (String)lineIter.next();
// the result will not be used as some other parameter value, so topProcessor is null in the next line /Andrey
commandSequence.add(buildCommandString(line,null)); // TODO: parses them here? VERIFY
commandSequence.add(resolveStrings(buildCommandString(line,null))); // TODO: parses them here? VERIFY
}
// Here - already resolved to empty
......@@ -736,4 +742,89 @@ public abstract class Context {
if(initialized)
throw new ConfigException("Context cannot be re-initialized");
}
//Substitute Eclipse and VDT ("verilog_") strings ${} here, after all VDT parameter processing
// recursively resolve variables
private List<String> resolveStrings(List<String> preResolved){
List<String> resolved = new ArrayList<String>();
for (String s:preResolved){
resolved.add(resolveStrings(s));
}
return resolved;
}
private String resolveStrings(String s){
int start = s.indexOf("${");
if (start < 0) return s;
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_OTHER)) System.out.println("Before substitution\""+s+"\"");
int end = s.indexOf("}", start);
if (end < 0) return s;
String dynVar = s.substring(start+2,end).trim();
String dynValue = resolveEclipseVariables(dynVar);
if (dynValue == null) {
System.out.println("getEclipseSubstitutedString("+s+") - undefined variable: "+dynVar);
dynValue = s.substring(start,end+1); // just no substitution
}
String result = s.substring(0,start)+dynValue;
if (end < s.length()) result += resolveStrings(s.substring(end+1));
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_OTHER)) System.out.println("After substitution\""+result+"\"");
return result;
}
// from http://www.programcreek.com/java-api-examples/index.php?api=org.eclipse.core.variables.IDynamicVariable
private String resolveEclipseVariables(String key){
if (key == null) return null;
IStringVariableManager variableManager=VariablesPlugin.getDefault().getStringVariableManager();
//debug
/*
IValueVariable [] variables = variableManager.getValueVariables();
IDynamicVariable [] dVariables = variableManager.getDynamicVariables();
System.out.println("resolveEclipseVariables: key=" + key);
for (IValueVariable v : variables){
System.out.println("resolveEclipseVariables: variables=" + v.getValue());
}
for (IDynamicVariable dv : dVariables){
if (!dv.getName().contains("prompt")) {
try {
System.out.print("resolveEclipseVariables: dVariables=" + dv.getName());
System.out.println(" -- "+dv.getValue(null));
} catch (CoreException e) {
// TODO Auto-generated catch block
System.out.println(" -- null?");
}
}
}
*/
int index=key.indexOf(':');
if (index > 1) {
String varName=key.substring(0,index);
IDynamicVariable variable=variableManager.getDynamicVariable(varName);
if (variable == null) return null;
try {
if (key.length() > index + 1) return variable.getValue(key.substring(index + 1));
return variable.getValue(null);
}
catch ( CoreException e) {
return null;
}
}
IValueVariable variable=variableManager.getValueVariable(key);
if (variable == null) {
IDynamicVariable dynamicVariable=variableManager.getDynamicVariable(key);
if (dynamicVariable == null) return null;
try {
return dynamicVariable.getValue(null);
}
catch ( CoreException e) {
return null;
}
}
return variable.getValue();
}
}
......@@ -46,7 +46,7 @@ import com.elphel.vdt.core.tools.params.types.ParamTypeBool;
import com.elphel.vdt.core.tools.params.types.ParamTypeString;
import com.elphel.vdt.core.tools.params.types.ParamTypeString.KIND;
import com.elphel.vdt.core.tools.params.types.RunFor;
import com.elphel.vdt.ui.MessageUI;
//import com.elphel.vdt.ui.MessageUI;
import com.elphel.vdt.ui.VDTPluginImages;
import com.elphel.vdt.ui.views.DesignFlowView;
import com.elphel.vdt.ui.variables.SelectedResourceManager;
......@@ -227,6 +227,7 @@ public class Tool extends Context implements Cloneable, Inheritable {
this.stateDirString= stateDirString;
this.disabledString= disabledString; // to disable tools from automatic running
this.resultString= resultString; // parameter name of kind of file that represents state after running this tool
this.restoreString= restoreString; // name of tool that restores the state of this tool ran (has own dependencies)
this.saveString= saveString; // name of tool that saves the state of this tool run
......@@ -239,7 +240,7 @@ public class Tool extends Context implements Cloneable, Inheritable {
result=null;
dependStates=null;
dependFiles=null;
DEBUG_PRINT("Created tool"+name+" disabledString = "+disabledString);
pinned=false;
openState=null;
openTool=null;
......@@ -577,14 +578,20 @@ public class Tool extends Context implements Cloneable, Inheritable {
"' must be of type '" + ParamTypeBool.NAME +
"'");
}
DEBUG_PRINT("initDisabled() tool "+name+" disabled = "+disabled); // parameter, not value
}
public boolean isDisabled(){
if (abstractTool) return true; // abstract are always disabled
if (disabled==null) return false;
List<String> values=disabled.getValue(new FormatProcessor(this)); // null for topFormatProcessor
if ((values==null) || (values.size()==0)) return false;
return (!values.get(0).equals("true"));
if ((values==null) || (values.size()==0)) {
DEBUG_PRINT(name+".isDisabled() ==> FALSE (((values==null) || (values.size()==0)))");
return false;
}
DEBUG_PRINT(name+".isDisabled() ==> "+values.get(0).equals("true"));
// return (!values.get(0).equals("true"));
return (values.get(0).equals("true"));
}
public void initDepends() throws ConfigException{
......
......@@ -530,8 +530,8 @@ java.lang.NullPointerException
DEBUG_PRINT("Could not find enabled tool to provide state "+state);
return null;
} else {
MessageUI.error("No tool provide state "+state);
DEBUG_PRINT("No tool provide state "+state);
MessageUI.error("No tool provides state "+state);
DEBUG_PRINT("No tool provides state "+state);
return null;
}
}
......@@ -698,8 +698,8 @@ java.lang.NullPointerException
if ((dependStates!=null) && (dependStates.size()>0)){
for (String state:dependStates){
if (!stateProviders.containsKey(state)){
MessageUI.error("No tool provide output state '"+state+"' needed to satisfy dependency of the tool "+tool.getName());
System.out.println("No tool provide output state '"+state+"' needed to satisfy dependency of the tool "+tool.getName());
MessageUI.error("No tool provides output state '"+state+"' needed to satisfy dependency of the tool "+tool.getName());
System.out.println("No tool provides output state '"+state+"' needed to satisfy dependency of the tool "+tool.getName());
}
}
}
......@@ -716,8 +716,10 @@ java.lang.NullPointerException
String ignoreFilter) throws CoreException {
if (!okToRun()) return;
// Set this tool dirty (not to try reports on this tool before it ran)
DEBUG_PRINT("launchToolSequence("+tool.getName()+", setting its state to \"Dirty\"");
tool.setDirty(true);
setStateProvides(); // just testing
// tool.setDesignFlowView(designFlowView);
tool.setDesignFlowView(designFlowView); // maybe will not be needed with ToolSequencing class
tool.setMode(mode) ; //TOOL_MODE.RUN);
......@@ -1603,11 +1605,11 @@ java.lang.NullPointerException
public void setDependState(Tool tool){
DEBUG_PRINT("++++++++ setDependState("+tool.getName()+")");
tool.clearDependStamps(); // is it needed?
Map <String,String> depStates=makeDependStates(tool);
Map <String,String> depStates=makeDependStates(tool,false);
for (String state:depStates.keySet()){
tool.setStateTimeStamp(state,depStates.get(state)); // name of the state file including timestamp
}
Map <String,String> depFiles=makeDependFiles(tool);
Map <String,String> depFiles=makeDependFiles(tool,false);
for (String file:depFiles.keySet()){
DEBUG_PRINT("setDependState("+tool.getName()+"), file="+file+" stamp="+depFiles.get(file));
tool.setFileTimeStamp(file,depFiles.get(file));
......@@ -1621,15 +1623,26 @@ java.lang.NullPointerException
* @return true if all timestamps matched, false otherwise
*/
public boolean matchDependState(Tool tool){
Map <String,String> depStates=makeDependStates(tool);
Map <String,String> depFiles=makeDependFiles(tool);
Map <String,String> depStates=makeDependStates(tool, true);
Map <String,String> depFiles=makeDependFiles(tool,true);
Map <String,String> storedDepStates = tool.getDependStatesTimestamps();
Map <String,String> storedDepFiles = tool.getDependFilesTimestamps();
if (depStates == null) {
DEBUG_PRINT("matchDependState("+tool.getName()+") :"+
" depStates == null");
return false;
}
if (depStates.size()!=storedDepStates.size()) {
DEBUG_PRINT("matchDependState("+tool.getName()+") :"+
" depStates.size()!=storedDepStates.size() - "+depStates.size()+"!="+storedDepStates.size());
return false;
}
if (depFiles == null) {
DEBUG_PRINT("matchDependState("+tool.getName()+") :"+
" depFiles == null");
return false;
}
if (depFiles.size()!=storedDepFiles.size()) {
DEBUG_PRINT("matchDependState("+tool.getName()+") :"+
" depFiles.size()!=storedDepFiles.size() - "+depFiles.size()+"!="+storedDepFiles.size());
......@@ -1662,7 +1675,7 @@ java.lang.NullPointerException
* @param tool tool just ran
* @return map of states (link names) to states files (full with timestamps)
*/
private Map <String,String> makeDependStates(Tool tool){
private Map <String,String> makeDependStates(Tool tool, boolean failOnMissing){
Map <String,String> depStates=new Hashtable<String,String>();
List<String> dependStates=tool.getDependStates();
if (dependStates!=null) for (String state: dependStates){
......@@ -1670,6 +1683,10 @@ java.lang.NullPointerException
ToolStateStamp tss=currentStates.get(state);
depStates.put(state,tss.getToolStateFile()); // name of the state file including timestamp
} else {
if (failOnMissing) {
DEBUG_PRINT("makeDependStates: no information for state "+state+" on which tool "+tool.getName()+" depends, failing");
return null;
}
DEBUG_PRINT("Seems a BUG (OK when called matchDependState): no information for state "+state+" on which tool "+tool.getName()+" depends");
/*
DEBUG_PRINT("currentStates are:");
......@@ -1681,10 +1698,10 @@ java.lang.NullPointerException
}
return depStates;
}
private Map <String,String> makeDependFiles(Tool tool){
private Map <String,String> makeDependFiles(Tool tool, boolean failOnMissing){
DEBUG_PRINT("++++++ makeDependFiles("+tool.getName()+")");
Map <String,String> depFiles=new Hashtable<String,String>();
List<String> dependFileNames=tool.getDependFiles();
List<String> dependFileNames=tool.getDependFiles(); // files on which this tool depends
if (dependFileNames!=null) {
IProject project = SelectedResourceManager.getDefault().getSelectedProject(); // should not be null when we got here
for (String depFile: dependFileNames){
......@@ -1698,6 +1715,12 @@ java.lang.NullPointerException
DEBUG_PRINT("makeDependFiles(): file="+depFile+", stamp="+sourceFile.getModificationStamp()+
" ("+sourceFile.toString()+")");
} else {
if (failOnMissing) {
DEBUG_PRINT("makeDependFiles(): source file "+sourceFile.getLocation()+" on which tool "+
tool.getName()+" depends does not exist, failing");
return null;
}
System.out.println("Seems a BUG: source file "+sourceFile.getLocation()+" on which tool "+
tool.getName()+" depends does not exist");
depFiles.put(depFile, ""); // empty stamp for non-existent files?
......
......@@ -77,7 +77,11 @@ public class VerilogResolver implements IDynamicVariableResolver {
*/
protected String translateToValue(IResource resource, IDynamicVariable variable) throws CoreException {
String name = variable.getName();
if (name.endsWith("_loc")) { //$NON-NLS-1$
if (name.endsWith("project_loc")) { //$NON-NLS-1$
resource = SelectedResourceManager.getDefault().getChosenVerilogFile();
return resource.getProject().getLocation().toOSString();
} else if (name.endsWith("_loc")) { //$NON-NLS-1$
return resource.getLocation().toOSString();
} else if (name.endsWith("_path")) { //$NON-NLS-1$
return resource.getFullPath().toOSString();
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
/*******************************************************************************
* Copyright (c) 2015 Elphel, Inc.
* This file is a part of VDT plug-in.
* VDT plug-in is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* VDT plug-in is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Additional permission under GNU GPL version 3 section 7:
* If you modify this Program, or any covered work, by linking or combining it
* with Eclipse or Eclipse plugins (or a modified version of those libraries),
* containing parts covered by the terms of EPL/CPL, the licensors of this
* Program grant you additional permission to convey the resulting work.
* {Corresponding Source for a non-source form of such a combination shall
* include the source code for the parts of Eclipse or Eclipse plugins used
* as well as that of the covered work.}
*******************************************************************************/
-->
<vdt-project>
<interface name="QuartusInterface" extends="FPGAPprojectInterface">
<syntax name="GrepFilterProblemSyntax" format='| grep --line-buffered -v "\[%%ParamName"' />
<syntax name="GrepFilterProblemOtherSyntax" format='%(| grep --line-buffered -v "\[%%ParamValue"%|\n%)' />
<typedef name="ParserModeType">
<paramtype kind= "enum" base="String">
<item value="0" label="Tool output is parsed immediately"/>
<item value="1" label="Tool output is delayed by not more than 1 line when consolidating bits"/>
<item value="2" label="As '1', but do not show same bits again"/>
<item value="3" label="All tool output containg hierarchical output is delayed to the very end"/>
</paramtype>
</typedef>
</interface>
<!-- Abstract tools to be inherited by instances used for various Quartus tools -->
<!-- Restore tool for Quartus -->
<tool name="RestoreQuartus" label="Restore state after Quartus tool"
project="FPGA_project"
interface="QuartusInterface"
package="FPGA_package"
shell="/bin/bash"
abstract="true">
<output>
<line name="quartus_pre_restore">
"-c"
<!-- Create project directory on remote server if it did not exist -->
"ssh"
"-oBatchMode=yes"
"-l %RemoteUser %RemoteHost"
"'"
"mkdir -p"
"%QuartusProjectRoot"
"' ;"
<!-- Copy snapshot generated after synthesis from local to remote -->
"rsync -avr -e ssh"
<!-- from: -->
"%QuartusLocalDir/%%StateFile"
<!-- to: -->
"%RemoteUser@%RemoteHost:%QuartusProjectRoot"
";"
</line>
<line name="quartus_restore"
dest="QuartusConsole"
mark="``"
sep="\n"
failure="ERROR"
prompt="@@FINISH@@"
log="">
"puts \"\Restoring snapshot %%StateFile""
"cd ~/%QuartusProjectRoot"
"set outputDir ~/%QuartusProjectRoot/%QuartusRemoteDir"
"file mkdir $outputDir"
"project_restore %QuartusRemoteDir/%%StateFile"
"puts \"@@FINISH@@\""
</line>
</output>
</tool>
<!-- Save tool for Quartus tool -->
<tool name="SaveQuartus"
label="SaveQuartus"
project="FPGA_project"
interface="QuartusInterface"
package="FPGA_package"
shell="/bin/bash"
abstract="true">
<output>
<line name="quartus_save"
dest="QuartusConsole"
mark="``"
sep="\n"
prompt="@@FINISH@@"
failure="ERROR"
log="">
"puts \"Saving snapshot %%StateFile\""
"cd ~/%QuartusProjectRoot"
"set outputDir ~/%QuartusProjectRoot/%QuartusRemoteDir"
"file mkdir $outputDir"
"project_archive -overwrite %QuartusRemoteDir/%%StateFile"
"puts \"@@FINISH@@\""
</line>
<line name="quartus_copy_after_save">
"-c"
"mkdir -p %QuartusLocalDir ;"
"rsync -avr -e ssh"
"%RemoteUser@%RemoteHost:%QuartusProjectRoot/%QuartusRemoteDir/%%StateFile"
"%%StateDir/"
</line>
</output>
</tool>
</vdt-project>
<?xml version="1.0" encoding="UTF-8"?>
<!--
/*******************************************************************************
* Copyright (c) 2015 Elphel, Inc.
* This file is a part of VDT plug-in.
* VDT plug-in is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* VDT plug-in is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Additional permission under GNU GPL version 3 section 7:
* If you modify this Program, or any covered work, by linking or combining it
* with Eclipse or Eclipse plugins (or a modified version of those libraries),
* containing parts covered by the terms of EPL/CPL, the licensors of this
* Program grant you additional permission to convey the resulting work.
* {Corresponding Source for a non-source form of such a combination shall
* include the source code for the parts of Eclipse or Eclipse plugins used
* as well as that of the covered work.}
*******************************************************************************/
-->
<vdt-project>
<tool name="Quartus"
label="Launch Quartus"
project="FPGA_project"
package="FPGA_package"
shell="/bin/bash" interface="QuartusInterface" description="Launching remote Quartus in console">
<action-menu>
<action label="Launch Quartus" resource="" icon="door_in.png" />
<action label="Generate public key" resource="" icon="key.png" />
<action label="Setup connection to" resource="%RemoteUser@%RemoteHost"
check-extension="false" check-existence="false" icon="setup.png" />
</action-menu>
<parameter id="command" label="Shell command" default="bash"
type="String" format="CopyValue" visible="true" readonly="false" />
<parameter id="actionIndex" default="%%ChosenActionIndex"
type="String" format="CopyValue" visible="false" />
<input>
<group name="General">
"QuartusRemoteCommand"
</group>
<group name="Shell">
"command"
</group>
</input>
<output>
<if actionIndex="0">
<line name="Quartus"
timeout="1"
keep-open= "true">
"%QuartusShellSwitches"
"%QuartusPreSSH"
"ssh"
"-oBatchMode=yes"
<if TerminalMode = "true">
"-t -t"
</if>
"%QuartusSSHSwitches"
"-l"
"%RemoteUser"
"%RemoteHost"
"'"
"%QuartusRemoteCommand"
"'"
"%QuartusSSHExtra"
"|| { echo '*** ssh connection to the server %RemoteUser@%RemoteHost failed ***';"
"echo 'You may need to configure connection - it is done in \"Package Setup\"';"
"echo 'Then generate a public key (if it is not done already), and post it to';"
"echo 'the remote server (currently set as %RemoteUser@%RemoteHost)';"
"exit 1; } ;"
</line>
<line name="quartus_check"
dest="QuartusConsole"
mark="``"
sep=""
success="All rights reserved."
prompt="@@FINISH@@">
<!--success="Finished parsing RTL primitives"-->
"puts \"@@FINISH@@\"\n"
</line>
</if>
<if actionIndex="1">
<line name="Keygen">
"%QuartusShellSwitches"
"echo \"Generating public key with command:\";"
"echo \"ssh-keygen -t rsa -q -f ~/.ssh/id_rsa -N ''\";"
"ssh-keygen -t rsa -q -f ~/.ssh/id_rsa -N ''"
</line>
</if>
<if actionIndex="2">
<line name="SSHCopyID">
"%QuartusShellSwitches"
"echo \"*********************************************\";"
"echo \"** **\";"
"echo \"** This command requires you to be able **\";"
"echo \"** to login to the remote system and enter **\";"
"echo \"** a password once to post your public key **\";"
"echo \"** there. **\";"
"echo \"** **\";"
"echo \"** For this you need 'ssh-askpass' to be **\";"
"echo \"** installed in your system. **\";"
"echo \"** **\";"
"echo \"** If the command will fail, you need to **\";"
"echo \"** install 'ssh-askpass' and try again or **\";"
"echo \"** just manually run: **\";"
"echo \"\n ssh-copy-id %RemoteUser@%RemoteHost\n\";"
"echo \"** from the system terminal and enter your **\";"
"echo \"** password when prompted. **\";"
"echo \"** **\";"
"echo \"** If you see nothing below this box, that **\";"
"echo \"** likely means that Eclipse is launched **\";"
"echo \"** from the terminal, and the system asks **\";"
"echo \"** your password (or permission to add **\";"
"echo \"** key of the remote host first) in that **\";"
"echo \"** terminal - just switch to it and **\";"
"echo \"** complete the setup. **\";"
"echo \"** **\";"
"echo \"*********************************************\";"
"ssh-copy-id %RemoteUser@%RemoteHost;"
</line>
</if>
</output>
</tool>
</vdt-project>
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8"?>
<!--
/*******************************************************************************
* Copyright (c) 2015 Elphel, Inc.
* This file is a part of VDT plug-in.
* VDT plug-in is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* VDT plug-in is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Additional permission under GNU GPL version 3 section 7:
* If you modify this Program, or any covered work, by linking or combining it
* with Eclipse or Eclipse plugins (or a modified version of those libraries),
* containing parts covered by the terms of EPL/CPL, the licensors of this
* Program grant you additional permission to convey the resulting work.
* {Corresponding Source for a non-source form of such a combination shall
* include the source code for the parts of Eclipse or Eclipse plugins used
* as well as that of the covered work.}
*******************************************************************************/
-->
<vdt-project>
<tool name="QuartusToolPrototype" label="QuartusToolPrototype"
project="FPGA_project"
interface="QuartusInterface"
package="FPGA_package"
shell="/bin/bash"
description="Quartus tool prototype"
abstract="true"
>
</tool>
</vdt-project>
This diff is collapsed.
......@@ -123,6 +123,8 @@
<syntax name="DashName" format=" -%%ParamName" />
<syntax name="QuotedDash" format=' -%%ParamName "%%ParamValue"' />
<syntax name="NameValue" format=" %%ParamName %%ParamValue" />
<syntax name="DoubleDash" format="--%%ParamName=%%ParamValue" />
<syntax name="DoubleDashName" format="--%%ParamName" />
<!--
Does not work according to 2.2.1. "Inside text-repetitor, one and only one pattern-generator is mandatory".
......
......@@ -82,8 +82,7 @@
icon="clock.png"
call="ISETraceMap"/>
<menuitem name="ISEPAR"
label="Place &amp; route design"
icon="route66.png"
label="Place &amp; route design" icon="route66.png"
call="ISEPAR"/>
<menuitem name="ISETracePAR"
label="Report post-implementation timing"
......@@ -178,9 +177,24 @@
label="Generate bitstream"
icon="bitstream.png"
call="VivadoBitstream"/>
</menu>
<menu name="Quartus"
label="Quartus tools"
icon="quartus16x16.png">
<menuitem name="Quartus Server"
label="Start remote Quartus session"
icon="door_in.png"
call="Quartus"/>
<menuitem name="QuartusSynthesis"
label="Synthesize design"
icon="Retort.png"
call="QuartusSynthesis"/>
<menuitem name="QuartusFitter"
label="Place and route design"
icon="route66.png"
call="QuartusPlace"/>
</menu>
</menu>
......
......@@ -29,8 +29,6 @@
<vdt-project>
<interface name="FPGAPprojectInterface">
<syntax name="RemoteRootSyntax" format="%%ParamValue/%%ProjectName" />
<!-- <syntax name="SourceListSyntax" format="%(%%SourceList%| %)" />
<syntax name="FilteredSourceListSyntax" format="%(%%FilteredSourceList%| %)" /> -->
<syntax name="ProgramSyntax" format="%(%%ParamValue%|\n%)" />
<!-- typedef -->
</interface>
......@@ -44,7 +42,7 @@
<parameter id="RemoteUser" label="Remote user name" tooltip="Remote user name" type="String"
format="CopyValue" default="%%UserName" readonly="false" visible="true" />
<!-- Vivado options -->
<!-- Vivado options -->
<parameter id="VivadoRelease" label="Vivado release" tooltip="Vivado release number (part of the path)"
type="String" format="CopyValue" default="2013.4" readonly="false"
visible="true" />
......@@ -53,7 +51,7 @@
type="String" format="CopyValue" default="/opt/Xilinx/Vivado" readonly="false"
visible="true" />
<!-- ISE options -->
<!-- ISE options -->
<parameter id="ISERelease" label="ISE release" tooltip="ISE release number (part of the path)"
type="String" format="CopyValue" default="14.7" readonly="false"
visible="true" />
......@@ -62,8 +60,16 @@
type="String" format="CopyValue" default="/opt/Xilinx" readonly="false"
visible="true" />
<!-- Quartus options -->
<parameter id="QuartusRelease" label="Quartus release" tooltip="Quartus release number (part of the path)"
type="String" format="CopyValue" default="15.0" readonly="false"
visible="true" />
<parameter id="QuartusInstallationRoot" label="Quartus root" tooltip="Quartus Installation Root"
type="String" format="CopyValue" default="/opt/Altera" readonly="false"
visible="true" />
<!-- Vivado advanced parameters -->
<!-- Vivado advanced parameters -->
<parameter id="TerminalMode" type="BoolYesNo" format="None"
default="false" label="Force terminal mode" tooltip="Force terminal mode for the remote program" />
......@@ -102,7 +108,7 @@
readonly="true"
visible="true" />
<!-- ISE advanced parameters -->
<!-- ISE advanced parameters -->
<parameter id="ISETerminalMode" type="BoolYesNo" format="None"
default="false" label="Force terminal mode" tooltip="Force terminal mode for the remote program" />
......@@ -147,9 +153,36 @@
readonly="true"
visible="true" />
<!-- Quartus advanced parameters -->
<parameter id="QuartusTerminalMode" type="BoolYesNo" format="None"
default="false" label="Force terminal mode" tooltip="Force terminal mode for the remote program" />
<parameter id="QuartusShellSwitches" label="Shell switch" tooltip="Shell switches" type="String"
format="CopyValue" default="-c" readonly="false" visible="true" />
<parameter id="QuartusPreSSH" label="pre-ssh" tooltip="pre-ssh shell parameters"
type="String" format="CopyValue" default="" readonly="false" visible="true" />
<parameter id="QuartusSSHSwitches" label="ssh switches" tooltip="Other ssh switches"
type="String" format="CopyValue" default="" readonly="false" visible="true" />
<!-- /opt/Xilinx/Vivado/2013.4/bin/vivado -mode tcl -->
<parameter id="QuartusSSHExtra" label="ssh extra parameters" tooltip="ssh extra parameters" type="String"
format="CopyValue" default="" readonly="false" visible="true" />
<parameter id="QuartusConsole" default="Quartus" label="Quartus console name" tooltip="Quartus console name in Eclipse, used by other tools"
type="String" format="CopyValue" visible="true" readonly="false"/>
<parameter id="QuartusRelativeExeOptions" label="Quartus launch command" tooltip="Quartus relative executable path and command options"
type="String" format="CopyValue" default="quartus/bin/quartus_sh -s" readonly="false"
visible="true" />
<parameter id="QuartusRemoteCommand" label="Remote command" tooltip="Remote ssh command"
type="String" format="CopyValue"
default="%QuartusInstallationRoot/%QuartusRelease/%QuartusRelativeExeOptions"
readonly="true"
visible="true" />
<!-- /opt/Xilinx/Vivado/2013.4/bin/vivado -mode tcl -->
<parameter id="NoBabyTalk" label="No Baby talk" tooltip= "Remove licensing baby talk from INFO messages."
default="true" visible="true" omit="false" type="Boolean" format="DashName"/>
......@@ -161,6 +194,8 @@
"VivadoInstallationRoot"
"ISERelease"
"ISEInstallationRoot"
"QuartusRelease"
"QuartusInstallationRoot"
</group>
<group name="AdvancedVivado" label="Vivado server advanced setup">
"TerminalMode"
......@@ -186,6 +221,16 @@
"ISEBinDirectory"
"ISEUnisimsAbsolutePath"
</group>
<group name="AdvancedQuartus" label="Quartus server advanced setup">
"QuartusTerminalMode"
"QuartusShellSwitches"
"QuartusPreSSH"
"QuartusSSHSwitches"
"QuartusSSHExtra"
"QuartusConsole"
"QuartusRelativeExeOptions"
"QuartusRemoteCommand"
</group>
</input>
</package>
......@@ -223,7 +268,7 @@
<parameter id="VivadoIgnoreSource" label="Ignore source files" tooltip="Pattern to ignore source files that match this regular expression"
type="String" default=".*unisims.*" format="CopyValue" readonly="false" />
<!-- ISE parameters -->
<!-- ISE parameters -->
<parameter id="ISEProjectRoot" label="Workspace directory" tooltip="Relative (to user home directory) path of the workspace on ISE server"
type="String" default="vdt_ise" format="RemoteRootSyntax" readonly="false" />
......@@ -242,12 +287,30 @@
<parameter id="ISEIgnoreSource" label="Ignore source files" tooltip="Pattern to ignore source files that match this regular expression"
type="String" default=".*unisims.*" format="CopyValue" readonly="false" />
<!-- Quartus parameters -->
<parameter id="part" label="Device" tooltip= "FPGA part number (device) to use"
default="" visible="true" omit="" type="String" format="CopyValue"/>
<parameter id="QuartusProjectRoot" label="Workspace directory" tooltip="Relative (to user home directory) path of the workspace on Quartus server"
type="String" default="vdt" format="RemoteRootSyntax" readonly="false" />
<parameter id="QuartusRemoteDir" label="Remote Quartus directory" tooltip="Remote Quartus output subdirectroy for snapshot and result files"
type="Pathname" default="quartus_build" format="CopyValue" readonly="false" />
<!-- Calculated -->
<!-- <parameter id="VivadoProjectRoot" label="" tooltip="Relative (to user home directory) path of the project on Vivado server"
type="String" default="vdt" format="RemoteRootSyntax" readonly="false" /> -->
<parameter id="QuartusLocalDir" label="Local Quartus directory" tooltip="Local project subdirectroy for Quartus snapshot files"
type="Pathname" default="quartus_state" format="CopyValue" readonly="false" />
<parameter id="QuartusLocalResultDir" label="Local Quartus results directory"
tooltip="Local project subdirectroy for Xilinx Quartus generated result files"
type="Pathname" default="quartus_results" format="CopyValue" readonly="false" />
<parameter id="QuartusLogDir" label="Local Quartus tool logs directory" tooltip="Local project subdirectroy for Quartus tools log files"
type="Pathname" default="quartus_logs" format="CopyValue" readonly="false" />
<parameter id="QuartusIgnoreSource" label="Ignore source files" tooltip="Pattern to ignore source files that match this regular expression"
type="String" default="" format="CopyValue" readonly="false" />
<!-- Calculated -->
<parameter id="SnapshotSynth"
label="Synthesis snapshot" tooltip="Name of Vivado snapshot archive after synthesis"
default="%%ProjectName-synth.dcp"
......@@ -324,7 +387,7 @@
type="Boolean" format="None" />
"" <!-- same as in project -->
<!-- Invisible (calculated) project-wide parameters -->
<!-- Invisible (calculated) project-wide parameters -->
<parameter id="SimulDirSlash" type="Pathname" visible="false"
default="?%SimulDir=:,%SimulDir/" format="CopyValue"/>
<parameter id="VivadoSedPaths" type="String" format="CopyValue"
......@@ -335,6 +398,10 @@
label="sed command line" tooltip="Remote file prefix to be removed for the local error parser when running ISE tools"
default="sed -u 's@/home/%RemoteUser/%ISEProjectRoot/%%ProjectName/@@'"/>
<parameter id="QuartusSedPaths" type="String" format="CopyValue"
label="sed command line" tooltip="Remote file prefix to be removed for the local error parser when running Quartus tools"
default="sed -u 's@/home/%RemoteUser/%QuartusProjectRoot/%%ProjectName/@@'"/>
<parameter id="ISEWorkspace" label="Workspace directory" tooltip="Relative (to user home directory) path of the workspace on ISE server"
type="String" default="%ISEProjectRoot" format="CopyValue" readonly="true" />
......@@ -394,11 +461,18 @@
tooltip= "Remove remote ISE project files before unpacking snapshot archives"
default="true" visible="true" type="Boolean" format="None"/>
<parameter id="QuartusSnapshotSynth"
label="Synthesis snapshot" tooltip="Name of Quartus snapshot archive"
default="%%ProjectName-synth.qar"
type="String" format="CopyValue" />
<parameter id="QuartusSnapshotPlace"
label="Place and route snapshot" tooltip="Name of Quartus snapshot archive"
default="%%ProjectName-par.qar"
type="String" format="CopyValue" />
<input>
<group name="Genaral" label="General parameters">
<group name="General" label="General parameters">
"part"
"ImplementationTopFile"
</group>
......@@ -459,8 +533,15 @@
"ISESnapshotOptPhys"
"ISESnapshotRoute"
</group>
<group name="Quartus" label="Quartus general properties">
"QuartusProjectRoot"
"QuartusRemoteDir"
"QuartusLocalDir"
"QuartusLocalResultDir"
"QuartusLogDir"
"QuartusIgnoreSource"
"QuartusSedPaths"
</group>
</input>
<output>
</output>
</project>
</vdt-project>
......@@ -28,8 +28,8 @@
-->
<vdt-project>
<interface name="ISEInterface" extends="FPGAPprojectInterface">
<syntax name="GrepFilterProblemSyntax" format='| grep --line-buffered -v "\[%%ParamName"' />
<syntax name="GrepFilterProblemOtherSyntax" format='%(| grep --line-buffered -v "\[%%ParamValue"%|\n%)' />
<syntax name="GrepFilterProblemSyntax" format='| grep --line-buffered -v "%%ParamName"' />
<syntax name="GrepFilterProblemOtherSyntax" format='%(| grep --line-buffered -v "%%ParamValue"%|\n%)' />
<typedef name="intstyleType">
<paramtype kind= "enum" base="String">
<item value="ise" label="Indicates the program is being run as part of an integrated design environment"/>
......
......@@ -194,7 +194,7 @@
default="off" visible="true" omit="off" type="PRIOType" format="Dash"/>
<!-- default not clear , disabling omit-->
<parameter id="register_duplication" label="Register duplication"
tooltip="PRegister duplication (disabled if '-global_opt' is used, reguires '-timing')"
tooltip="Register duplication (disabled if '-global_opt' is used, reguires '-timing')"
default="true" omit="" type= "Bool_on_off" format="Dash"/>
<parameter id="register_ordering" outid="r" label="Register ordering"
tooltip="Register ordering in a slice (use 4 or 8)"
......
......@@ -240,6 +240,7 @@
<!-- TODO: find out, how to reset state and make a tool to depend on-->
<depends-list>
<depends files="FilteredSourceListPar"/>
<depends files="FilteredIncludesListPar"/>
<depends files="constraints"/>
</depends-list>
<parameter id="clean_start" label="Clean start" tooltip= "Delete all files on remote before running XST"
......@@ -496,6 +497,8 @@
<!-- calculated parameters -->
<parameter id="FilteredSourceListPar" type="Filelist" label="FilteredSourceListPar"
format="ParamListSyntax" default="%%FilteredSourceList" readonly="false" visible="true" />
<parameter id="FilteredIncludesListPar" type="Filelist" label="FilteredIncludesListPar"
format="ParamListSyntax" default="%%FilteredIncludesList" readonly="false" visible="true" />
<parameter id="ISESynthActionIndex" default="%%ChosenActionIndex"
type="String" format="CopyValue" visible="false" />
<parameter id="ConstraintsFiles" type="Filelist" format="ParamListSyntax"
......@@ -532,6 +535,7 @@
"target_device" <!-- outid="p" -->
"---"
"FilteredSourceListPar"
"FilteredIncludesListPar"
"RawOutFile"
"xst_prj"
"---"
......@@ -665,6 +669,7 @@
"' ;"
"rsync -avrR -e ssh"
"%FilteredSourceListPar"
"%FilteredIncludesListPar"
<if ISESynthActionIndex="0">
"%ConstraintsFiles"
</if>
......
......@@ -25,6 +25,9 @@
* include the source code for the parts of Eclipse or Eclipse plugins used
* as well as that of the covered work.}
*******************************************************************************/
Warnings was (was in an attempt to catch "CRITICAL WARNING" too?):
default=".*([^ ]WARNING:) (\[.*\].*)\[(.*):([0-9]+)\]"
Problem was - missing 1-st line as group 0 had the previous end of line)
-->
<vdt-project>
<tool name="VivadoToolPrototype" label="VivadoToolPrototype"
......@@ -40,7 +43,7 @@
default=".*(ERROR:|CRITICAL WARNING:) (\[.*\].*)\[(.*):([0-9]+)\]"
visible="true" type="String" format="CopyValue"/>
<parameter id="PatternWarnings" label="Warnings" tooltip= "Regular expression for warnings messages"
default=".*([^ ]WARNING:) (\[.*\].*)\[(.*):([0-9]+)\]"
default=".*(WARNING:) (\[.*\].*)\[(.*):([0-9]+)\]"
visible="true" type="String" format="CopyValue"/>
<parameter id="PatternInfo" label="Info" tooltip= "Regular expression for info messages"
default=".*(INFO:) (\[.*\].*)\[(.*):([0-9]+)\]"
......
......@@ -106,6 +106,7 @@
<!-- TODO: find out, how to reset state and make a tool to depend on-->
<depends-list>
<depends files="FilteredSourceListPar"/>
<depends files="FilteredIncludesListPar"/>
<depends files="ConstraintsFiles"/>
</depends-list>
......@@ -186,6 +187,8 @@
format="read_xdc_syntax" default="%ConstraintsFiles" visible="false" />
<parameter id="FilteredSourceListPar" type="Filelist" label="FilteredSourceListPar"
format="ParamListSyntax" default="%%FilteredSourceList" readonly="false" visible="true" />
<parameter id="FilteredIncludesListPar" type="Filelist" label="FilteredIncludesListPar"
format="ParamListSyntax" default="%%FilteredIncludesList" readonly="false" visible="true" />
<parameter id="VivadoSynthActionIndex" default="%%ChosenActionIndex"
type="String" format="CopyValue" visible="false" />
......@@ -226,6 +229,7 @@
<input>
<group name="General">
"FilteredSourceListPar"
"FilteredIncludesListPar"
"ConstraintsFiles"
"SkipSnapshotSynth"
"SnapshotSynth" <!-- same as in project -->
......@@ -275,6 +279,7 @@
"' ;"
"rsync -avrR -e ssh"
"%FilteredSourceListPar"
"%FilteredIncludesListPar"
<if VivadoSynthActionIndex="0">
"%ConstraintsFiles"
</if>
......@@ -289,14 +294,14 @@
success="synth_design completed successfully"
log=""
stdout="parser_Vivado">
<!-- synth_design completed successfully -->
<!-- synth_design completed successfully reset_project -quiet (quiet - will not complain if nothing opened)-->
"cd ~/%VivadoProjectRoot\n"
"set outputDir ~/%VivadoProjectRoot/%VivadoRemoteDir\n"
<if ResetProject="true">
"reset_project -quiet\n"
"close_project -quiet\n"
</if>
<!-- Increase number of warning lines, filter them separately. TODO: add configuration parameter -->
"set_msg_config -severity WARNING -limit 1000\n"
"set_msg_config -severity WARNING -limit 10000\n"
"file mkdir $outputDir\n"
"read_verilog "
"%FilteredSourceListPar\n"
......
This diff is collapsed.
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