public static boolean generateXDLRCFile(String partName, String optionalOutputFileName, boolean briefFile){
		String fileNameSuffix = briefFile ? "_brief.xdlrc" : "_full.xdlrc";
		String defaultFileName = partName + fileNameSuffix;
		String xdlrcFileName = optionalOutputFileName==null ? defaultFileName : optionalOutputFileName;
		String commandParameters = briefFile ? "" : "-pips -all_conns "; 
		String command = "xdl -report " + commandParameters + PartNameTools.removeSpeedGrade(partName) + " " + xdlrcFileName;
		
		if(PartNameTools.isFamilyTypeLegacy(PartNameTools.getFamilyTypeFromPart(partName))){
			command = getBinPathToLegacyXilinxTools() + File.separator + command;
		}
		
		// Check to see if the file already exists
		if(new File(xdlrcFileName).exists()){
			// It already exists
			return true;
		}
		
		try{
			// Run the XDL command
			Process p = Runtime.getRuntime().exec(command);
			if(p.waitFor() != 0){
				MessageGenerator.briefError("XDLRC Generation failed, 'xdl' execution failed." +
						" COMMAND: " + command);
				return false;				
			}
			if(p.exitValue() != 0){
				MessageGenerator.briefError("XDLRC Generation failed, is the part \"" + 
						PartNameTools.removeSpeedGrade(partName) + "\" name valid?" + " COMMAND: " + command);
				return false;	
			}
		} 
		catch (IOException e){
			e.printStackTrace();
			MessageGenerator.briefError("XDLRC generation failed: error during 'xdl' execution.");
			return false;
		}
		catch (InterruptedException e){
			e.printStackTrace();
			MessageGenerator.briefError("XDLRC generation failed: process interrupted.");
			return false;
		}
		return true;
	}