From 7b6a87e2389d2e24770a297b219562b89eaa33a0 Mon Sep 17 00:00:00 2001 From: Erik Kooistra <kooistra@astron.nl> Date: Tue, 19 Apr 2016 06:02:31 +0000 Subject: [PATCH] Added fileSections argument to specifiy target specific section headers in the config dictionary file. Support multiple technologyNames. Issue warning instead of error when duplicate HDL library config files is found and removed from the dictionary list. --- tools/oneclick/base/hdl_config.py | 58 ++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/tools/oneclick/base/hdl_config.py b/tools/oneclick/base/hdl_config.py index d73dd06920..c4536ea986 100644 --- a/tools/oneclick/base/hdl_config.py +++ b/tools/oneclick/base/hdl_config.py @@ -58,7 +58,7 @@ import argparse class HdlConfig: - def __init__(self, toolRootDir, libFileName='hdllib.cfg', toolFileName='hdltool_<toolset>.cfg'): + def __init__(self, toolRootDir, libFileName='hdllib.cfg', libFileSections=None, toolFileName='hdltool_<toolset>.cfg'): """Get tool dictionary info from toolRootDir and all HDL library dictionary info for it - self.tool.dicts = single dictionary that contains the tool info (only one tool dict in dicts list) @@ -76,27 +76,24 @@ class HdlConfig: self.toolRootDir = toolRootDir # HDL tool config file - self.tool = common_dict_file.CommonDictFile(toolRootDir, toolFileName) # tool dict file + self.tool = common_dict_file.CommonDictFile(toolRootDir, toolFileName) # tool dict filedupkc if self.tool.nof_dicts==0: sys.exit('Error : No HDL tool config file found') if self.tool.nof_dicts >1: sys.exit('Error : Multiple HDL tool config files found') self.tool_dict = self.tool.dicts[0] # there is only one tool dict in dicts list so for convenience make it also accessible as self.tool_dict # HDL library config files self.libRootDir = os.path.expandvars(self.tool_dict['lib_root_dir']) - self.libs = common_dict_file.CommonDictFile(self.libRootDir, libFileName) # library dict files + self.libs = common_dict_file.CommonDictFile(self.libRootDir, libFileName, libFileSections) # library dict files if self.libs.nof_dicts==0: sys.exit('Error : No HDL library config file found') # Keep the generic HDL libraries and remove those that do not match the specified IP technologies - self.technologyNames = os.path.expandvars(self.tool_dict['technology_names']) + self.technologyNames = self.tool_dict['technology_names'].split() self.removed_dicts = [] print 'self.technologyNames=',self.technologyNames if len(self.technologyNames)>0: for d in self.libs.dicts: - #if not(d['hdl_lib_technology']=='' or d['hdl_lib_technology'] in self.technologyNames): - #print 'd[hdl_lib_technology]=',d['hdl_lib_technology'] - if not(d['hdl_lib_technology']=='' or d['hdl_lib_technology'] == self.technologyNames): + if not(d['hdl_lib_technology']=='' or d['hdl_lib_technology'] in self.technologyNames): self.removed_dicts.append(d) - #print 'remove=',d for d in self.removed_dicts: self.libs.remove_dict_from_list(d) @@ -105,7 +102,15 @@ class HdlConfig: # Check that there are no duplicate library names (eg. due to copying a hdlib.cfg without modifying the hdl_lib_name value) duplicate_lib_names = cm.list_duplicates(self.lib_names) - if len(duplicate_lib_names)>0: sys.exit('Error : Duplicate HDL library config file found %s' % duplicate_lib_names) + if len(duplicate_lib_names)>0: + for dup_name in duplicate_lib_names: + dup_dicts = self.libs.get_dicts('hdl_lib_name', values=dup_name) + for d in dup_dicts: + self.libs.remove_dict_from_list(d) + print 'Warning : Duplicate HDL library config files found and removed from list %s' % duplicate_lib_names + # Update list of HDL library names + self.lib_names = self.libs.get_key_values('hdl_lib_name') + def get_used_libs(self, build_type, lib_dict, arg_exclude_libs=[]): """Get the list of used HDL libraries from the lib_dict and remove the excluded libs. @@ -152,7 +157,6 @@ class HdlConfig: # use recursion to include all used libs use_libs, exclude_libs = self.get_used_libs(build_type, lib_dict, exclude_libs) try: - use_libs for use_lib in use_libs: if use_lib in self.lib_names: all_use_libs.append(use_lib) @@ -337,7 +341,7 @@ if __name__ == '__main__': # Parse command line arguments toolsetSelect = ['unb1', 'unb2', 'unb2a'] - argparser = argparse.ArgumentParser(description='Create Modelsim mpf files for all hdllib.cfg') + argparser = argparse.ArgumentParser(description='Derive HDL library dictionary from hdllib.cfg') argparser.add_argument('-t','--toolset', help='choose toolset %s (default: %s)' % (toolsetSelect,toolsetSelect[0]), default=toolsetSelect[0], required=False) argparser.add_argument('-v','--verbosity', help='verbosity >= 0 for more info', type=int, default=0, required=False) args = vars(argparser.parse_args()) @@ -364,22 +368,30 @@ if __name__ == '__main__': print '' print '' - print 'tool = ', hdl.tool.filePathNames[0] + print 'Toolset file = ', hdl.tool.filePathNames[0] print '' - print 'lib paths' + print 'Library paths :' for p in hdl.libs.filePaths: print ' ', p print '' - print 'lib paths names' + print 'Library paths names :"' for p in hdl.libs.filePathNames: print ' ', p print '' - print 'lib_names = ', hdl.lib_names - print 'derive_lib_order for sim : ', hdl.derive_lib_order('sim') - print 'derive_lib_order for synth : ', hdl.derive_lib_order('synth') + print 'Library section headers :' + for lib_name in hdl.lib_names: + lib_dict = hdl.libs.dicts[hdl.lib_names.index(lib_name)] + print ' %-52s :' % lib_name, lib_dict['section_headers'] + + print '' + print 'Library names = \n', hdl.lib_names + print '' + print 'derive_lib_order for sim :\n', hdl.derive_lib_order('sim') + print '' + print 'derive_lib_order for synth :\n', hdl.derive_lib_order('synth') print '' print 'get_lib_build_dirs for simulation:' @@ -393,15 +405,19 @@ if __name__ == '__main__': #use_libs = hdl.derive_all_use_libs('sim', 'tech_xaui') use_libs = hdl.derive_all_use_libs('sim', 'unb1_test_10GbE') use_libs = hdl.derive_all_use_libs('sim', 'tech_ddr') - print 'derive_all_use_libs = ', use_libs + print '' + print 'derive_all_use_libs = \n', use_libs lib_order = hdl.derive_lib_order('sim', use_libs) - print 'derive_lib_order = ', lib_order + print '' + print 'derive_lib_order = \n', lib_order if hdl.libRootDir=='UNB': use_libs = hdl.derive_all_use_libs('sim', 'unb_minimal') use_libs = hdl.derive_all_use_libs('sim', 'dp') - print 'derive_all_use_libs = ', use_libs + print '' + print 'derive_all_use_libs = \n', use_libs lib_order = hdl.derive_lib_order('sim', use_libs) - print 'derive_lib_order = ', lib_order + print '' + print 'derive_lib_order = \n', lib_order if mode==1: key = 'build_dir' -- GitLab