def test_get_scripts(): flag_combos = [{'target' : 'sim' , 'is_toplevel' : False}, {'target' : 'sim' , 'is_toplevel' : True}, {'target' : 'synth', 'is_toplevel' : False}, {'target' : 'synth', 'is_toplevel' : True}, ] filename = os.path.join(os.path.dirname(__file__), 'cores', 'misc', 'scriptscore.core') core = Core(filename) for flags in flag_combos: env = { 'FILES_ROOT' : 'dummyroot' } result = core.get_scripts("dummyroot", flags) expected = {} if flags['target'] == 'sim': sections = ['post_run', 'pre_build', 'pre_run'] else: if flags['is_toplevel']: env['SYSTEM_ROOT'] = core.files_root sections = ['pre_build', 'post_build'] else: sections = [] for section in sections: _name = flags['target']+section+'_scripts{}' expected[section] = [{'cmd' : ['sh', os.path.join('dummyroot', _name.format(i))], 'name' : _name.format(i), 'env' : env} for i in range(2)] assert expected == result
def test_capi2_get_depends(): from fusesoc.core import Core from fusesoc.vlnv import Vlnv core = Core(os.path.join(tests_dir, "capi2_cores", "misc", "depends.core")) flags = {} result = core.get_depends(flags) expected = [ Vlnv('unversioned'), Vlnv('versioned-1.0'), Vlnv('<lt-1.0'), Vlnv('<=lte-1.0'), Vlnv('=eq-1.0'), Vlnv('>gt-1.0'), Vlnv('>=gte-1.0'), Vlnv('::n'), Vlnv('::nv:1.0'), Vlnv(':l:nv:1.0'), Vlnv('v:l:nv:1.0'), Vlnv('<::vlnvlt:1.0'), Vlnv('<=::vlnvlte:1.0'), Vlnv('=::vlnveq:1.0'), Vlnv('>::vlnvgt:1.0'), Vlnv('>=::vlnvgte:1.0'), ] assert len(result) == len(expected) for i in range(len(result)): assert result[i] == expected[i]
def test_capi2_get_generators(): from fusesoc.core import Core core = Core(os.path.join(cores_dir, "generators.core")) generators = core.get_generators({}) assert len(generators) == 1 assert generators['generator1'].command == 'testgen.py'
def test_url_provider(): cache_root = tempfile.mkdtemp('url_') core = Core(os.path.join(cores_root, 'mmuart', 'mmuart.core'), cache_root) core.setup() assert (os.path.isfile(os.path.join(core.files_root, 'uart_transceiver.v')))
def test_url_provider(): cores_root = os.path.join(tests_dir, "capi2_cores", "providers") for corename in ["url_simple", "url_simple_with_user_agent", "url_tar", "url_zip"]: cache_root = tempfile.mkdtemp(prefix="url_") core = Core(os.path.join(cores_root, corename + ".core"), cache_root) core.setup() assert os.path.isfile(os.path.join(core.files_root, "file.v"))
def test_opencores_provider(): cache_root = tempfile.mkdtemp("opencores_") core = Core(os.path.join(cores_root, "misc", "opencorescore.core"), cache_root) core.setup() assert os.path.isfile(os.path.join(core.files_root, "tap_defines.v")) assert os.path.isfile(os.path.join(core.files_root, "tap_top.v"))
def test_opencores_provider(): cache_root = tempfile.mkdtemp('opencores_') core = Core(os.path.join(cores_root, 'misc', 'opencorescore.core'), cache_root) core.setup() assert(os.path.isfile(os.path.join(core.files_root, 'tap_defines.v'))) assert(os.path.isfile(os.path.join(core.files_root, 'tap_top.v')))
def test_core_info(): tests_dir = os.path.dirname(__file__) cores_root = os.path.join(tests_dir, 'cores') for core_name in ['sockit', 'mor1kx-generic']: core = Core(os.path.join(cores_root, core_name, core_name+'.core')) gen_info = '\n'.join([x for x in core.info().split('\n') if not 'Core root' in x]) with open(os.path.join(tests_dir, __name__, core_name+".info")) as f: assert f.read() == gen_info, core_name
def test_core_info(): tests_dir = os.path.dirname(__file__) cores_root = os.path.join(tests_dir, 'cores') for core_name in ['sockit', 'mor1kx-generic']: core = Core(os.path.join(cores_root, core_name, core_name + '.core')) gen_info = '\n'.join( [x for x in core.info().split('\n') if not 'Core root' in x]) with open(os.path.join(tests_dir, __name__, core_name + ".info")) as f: assert f.read() == gen_info, core_name
def test_core_info(): tests_dir = os.path.dirname(__file__) cores_root = os.path.join(tests_dir, "cores") for core_name in ["sockit", "mor1kx-generic"]: core = Core(os.path.join(cores_root, core_name, core_name + ".core")) gen_info = "\n".join( [x for x in core.info().split("\n") if not "Core root" in x]) with open(os.path.join(tests_dir, __name__, core_name + ".info")) as f: assert f.read() == gen_info, core_name
def test_opencores_provider(): cache_root = tempfile.mkdtemp('opencores_') core = Core(os.path.join(cores_root, 'misc', 'opencorescore.core'), cache_root) core.setup() assert (os.path.isfile(os.path.join(core.files_root, 'tap_defines.v'))) assert (os.path.isfile(os.path.join(core.files_root, 'tap_top.v')))
def test_simulator(): #Explicit toplevel filename = os.path.join(os.path.dirname(__file__), __name__, "c3demo.core") core = Core(filename, cache_root, build_root) assert core.simulator['toplevel'] == 'testbench' #Implicit toplevel filename = os.path.join(os.path.dirname(__file__), __name__, "atlys.core") core = Core(filename, cache_root, build_root) assert core.simulator['toplevel'] == 'orpsoc_tb'
def test_simulator(): # Explicit toplevel filename = os.path.join(os.path.dirname(__file__), __name__, "c3demo.core") core = Core(filename) assert core.simulator["toplevel"] == "testbench" # Implicit toplevel filename = os.path.join(os.path.dirname(__file__), __name__, "atlys.core") core = Core(filename) assert core.simulator["toplevel"] == "orpsoc_tb"
def test_url_provider(): cores_root = os.path.join(tests_dir, 'capi2_cores', 'providers') for corename in [ 'url_simple', 'url_simple_with_user_agent', 'url_tar', 'url_zip' ]: cache_root = tempfile.mkdtemp(prefix='url_') core = Core(os.path.join(cores_root, corename + '.core'), cache_root) core.setup() assert (os.path.isfile(os.path.join(core.files_root, 'file.v')))
def test_capi2_info(): from fusesoc.core import Core for core_name in ['targets']: core_file = os.path.join(tests_dir, "capi2_cores", "misc", core_name + '.core') core = Core(core_file, None, None) gen_info = '\n'.join( [x for x in core.info().split('\n') if not 'Core root' in x]) with open(os.path.join(tests_dir, __name__, core_name + ".info")) as f: assert f.read() == gen_info, core_name
def test_git_provider(): cache_root = tempfile.mkdtemp('git_') core = Core(os.path.join(cores_root, 'misc', 'gitcore.core'), cache_root) core.setup() for f in [ 'LICENSE', 'README.md', 'wb_common.core', 'wb_common.v', 'wb_common_params.v' ]: assert (os.path.isfile(os.path.join(core.files_root, f)))
def test_get_toplevel(): filename = os.path.join(os.path.dirname(__file__), __name__, "atlys.core") core = Core(filename) assert 'orpsoc_tb' == core.get_toplevel() assert 'orpsoc_tb' == core.get_toplevel({'testbench': None}) assert 'tb' == core.get_toplevel({'testbench': 'tb'}) filename = os.path.join(os.path.dirname(__file__), __name__, "sockit.core") core = Core(filename) assert 'dummy_tb' == core.get_toplevel() assert 'dummy_tb' == core.get_toplevel({'testbench': None}) assert 'tb' == core.get_toplevel({'testbench': 'tb'})
def test_url_provider(): cores_root = os.path.join(tests_dir, 'capi2_cores', 'providers') for corename in ['url_simple', 'url_simple_with_user_agent', 'url_tar', 'url_zip']: cache_root = tempfile.mkdtemp(prefix='url_') core = Core(os.path.join(cores_root, corename+'.core'), cache_root) core.setup() assert(os.path.isfile(os.path.join(core.files_root, 'file.v')))
def test_capi2_info(): from fusesoc.core import Core for core_name in ["targets", "generators"]: core_file = os.path.join(tests_dir, "capi2_cores", "misc", core_name + ".core") core = Core(core_file) gen_info = "\n".join( [x for x in core.info().split("\n") if not "Core root" in x]) with open(os.path.join(tests_dir, __name__, core_name + ".info")) as f: assert f.read() == gen_info, core_name
def test_capi2_info(): from fusesoc.core import Core for core_name in ['targets']: core_file = os.path.join(tests_dir, "capi2_cores", "misc", core_name+'.core') core = Core(core_file) gen_info = '\n'.join([x for x in core.info().split('\n') if not 'Core root' in x]) with open(os.path.join(tests_dir, __name__, core_name+".info")) as f: assert f.read() == gen_info, core_name
def test_git_provider(): cache_root = tempfile.mkdtemp('git_') core = Core(os.path.join(cores_root, 'misc', 'gitcore.core'), cache_root) core.setup() for f in ['LICENSE', 'README.md', 'wb_common.core', 'wb_common.v', 'wb_common_params.v']: assert(os.path.isfile(os.path.join(core.files_root, f)))
def test_core_parsing(): from fusesoc.vlnv import Vlnv cores_root = os.path.join(os.path.dirname(__file__), 'cores', 'misc') core = Core(os.path.join(cores_root, 'nomain.core')) assert core.name == Vlnv("::nomain:0") import sys if sys.version_info[0] > 2: with pytest.raises(SyntaxError) as e: core = Core(os.path.join(cores_root, "duplicateoptions.core")) assert "option 'file_type' in section 'fileset dummy' already exists" in str( e.value)
def test_verilator(): cores_root = os.path.join(os.path.dirname(__file__), __name__) core = Core(os.path.join(cores_root, "verilator_managed_systemc.core")) expected = {'cli_parser' : 'managed', 'libs' : [], 'mode' : 'sc'} assert expected == core.get_tool_options({'is_toplevel' : True, 'tool' : 'verilator'}) assert len(core.file_sets) == 2 compare_fileset(core.file_sets[0], 'verilator_src_files', ['file1.sc', 'file2.sc']) assert core.file_sets[0].file[0].file_type == 'systemCSource' assert core.file_sets[0].file[1].file_type == 'systemCSource' compare_fileset(core.file_sets[1], 'verilator_tb_toplevel', [])
def test_capi2_get_files(): from fusesoc.core import Core core_file = os.path.join(tests_dir, "capi2_cores", "misc", "files.core") core = Core(core_file) expected = [ {'is_include_file' : False, 'file_type' : 'vhdlSource', 'copyto' : '', 'logical_name' : 'overridden_logical_name', 'name' : 'vlogfile'}, {'is_include_file' : False, 'file_type' : 'vhdlSource', 'copyto' : '', 'logical_name' : 'default_logical_name', 'name' : 'vhdlfile'}, {'is_include_file' : False, 'file_type' : 'user', 'copyto' : 'copied.file', 'logical_name' : '', 'name' : 'subdir/dummy.extra'}, {'is_include_file' : False, 'file_type' : 'tclSource', 'copyto' : 'subdir/another.file', 'logical_name' : '', 'name' : 'dummy.tcl'}, {'copyto' : '', 'file_type' : 'verilogSource', 'is_include_file' : True, 'logical_name' : '', 'name' : 'vlogfile'}, {'copyto' : '', 'file_type' : 'vhdlSource', 'is_include_file' : False, 'logical_name' : '', 'name' : 'vhdlfile'}, {'copyto' : '', 'file_type' : 'user', 'is_include_file' : False, 'logical_name' : '', 'name' : 'pickthisfile'}, ] flags = {'tool' : 'icarus'} result = [vars(x) for x in core.get_files(flags)] assert expected == result
def test_git_provider(): cache_root = tempfile.mkdtemp("git_") core = Core(os.path.join(cores_root, "misc", "gitcore.core"), cache_root) core.setup() for f in [ "LICENSE", "README.md", "wb_common.core", "wb_common.v", "wb_common_params.v", ]: assert os.path.isfile(os.path.join(core.files_root, f))
def test_capi2_get_tool(): from fusesoc.core import Core core_file = os.path.join(tests_dir, "capi2_cores", "misc", "tools.core") core = Core(core_file) assert None == core.get_tool({'tool' : None}) assert 'verilator' == core.get_tool({'tool' : 'verilator'}) assert 'icarus' == core.get_tool({'target' : 'with_tool'}) assert 'verilator' == core.get_tool({'target' : 'with_tool', 'tool' : 'verilator'})
def test_capi2_get_tool_options(): from fusesoc.core import Core core_file = os.path.join(tests_dir, "capi2_cores", "misc", "targets.core") core = Core(core_file) with pytest.raises(KeyError): core.get_tool_options({}) assert {} == core.get_tool_options({'tool' : 'icarus'}) flags = {'target' : 'target_with_tool_options', 'is_toplevel' : True} flags['tool'] = 'icarus' expected = {'iverilog_options' : ['a', 'few', 'options']} assert expected == core.get_tool_options(flags) flags['tool'] = 'vivado' expected = {'part' : 'xc7a35tcsg324-1'} assert expected == core.get_tool_options(flags) flags['tool'] = 'invalid' expected = {} assert expected == core.get_tool_options(flags)
def test_logicore_provider(): cache_root = tempfile.mkdtemp('logicore_') core = Core(os.path.join(cores_root, 'misc', 'logicorecore.core'), cache_root) os.environ['PATH'] = os.path.join(tests_dir, 'mock_commands')+':'+os.environ['PATH'] core.setup() for f in ['dummy.tcl', 'dummy.xci', os.path.join('subdir', 'dummy.extra')]: assert(os.path.isfile(os.path.join(core.files_root, f))) with open(os.path.join(core.files_root, 'vivado.cmd')) as f: assert(f.read() == '-mode batch -source dummy.tcl\n')
def test_coregen_provider(): cache_root = tempfile.mkdtemp("coregen_") core = Core(os.path.join(cores_root, "misc", "coregencore.core"), cache_root) os.environ["PATH"] = (os.path.join(tests_dir, "mock_commands") + ":" + os.environ["PATH"]) core.setup() for f in ["dummy.cgp", "dummy.xco", os.path.join("subdir", "dummy.extra")]: assert os.path.isfile(os.path.join(core.files_root, f)) with open(os.path.join(core.files_root, "run.cmd")) as f: assert f.read() == "-r -b dummy.xco -p dummy.cgp\n"
def test_logicore_provider(): cache_root = tempfile.mkdtemp("logicore_") core = Core(os.path.join(cores_root, "misc", "logicorecore.core"), cache_root) os.environ["PATH"] = (os.path.join(tests_dir, "mock_commands") + ":" + os.environ["PATH"]) core.setup() for f in ["dummy.tcl", "dummy.xci", os.path.join("subdir", "dummy.extra")]: assert os.path.isfile(os.path.join(core.files_root, f)) with open(os.path.join(core.files_root, "vivado.cmd")) as f: assert f.read() == "-mode batch -source dummy.tcl\n"
def test_coregen_provider(): cache_root = tempfile.mkdtemp('coregen_') core = Core(os.path.join(cores_root, 'misc', 'coregencore.core'), cache_root) os.environ['PATH'] = os.path.join(tests_dir, 'mock_commands')+':'+os.environ['PATH'] core.setup() for f in ['dummy.cgp', 'dummy.xco', os.path.join('subdir', 'dummy.extra')]: assert(os.path.isfile(os.path.join(core.files_root, f))) with open(os.path.join(core.files_root, 'run.cmd')) as f: assert(f.read() == '-r -b dummy.xco -p dummy.cgp\n')
def test_logicore_provider(): cache_root = tempfile.mkdtemp('logicore_') core = Core(os.path.join(cores_root, 'misc', 'logicorecore.core'), cache_root) os.environ['PATH'] = os.path.join( tests_dir, 'mock_commands') + ':' + os.environ['PATH'] core.setup() for f in ['dummy.tcl', 'dummy.xci', os.path.join('subdir', 'dummy.extra')]: assert (os.path.isfile(os.path.join(core.files_root, f))) with open(os.path.join(core.files_root, 'vivado.cmd')) as f: assert (f.read() == '-mode batch -source dummy.tcl\n')
def test_coregen_provider(): cache_root = tempfile.mkdtemp('coregen_') core = Core(os.path.join(cores_root, 'misc', 'coregencore.core'), cache_root) os.environ['PATH'] = os.path.join( tests_dir, 'mock_commands') + ':' + os.environ['PATH'] core.setup() for f in ['dummy.cgp', 'dummy.xco', os.path.join('subdir', 'dummy.extra')]: assert (os.path.isfile(os.path.join(core.files_root, f))) with open(os.path.join(core.files_root, 'run.cmd')) as f: assert (f.read() == '-r -b dummy.xco -p dummy.cgp\n')
def test_get_tool(): cores_root = os.path.join(os.path.dirname(__file__), 'cores') core = Core(os.path.join(cores_root, 'atlys', 'atlys.core')) assert None == core.get_tool({'target' : 'sim', 'tool' : None}) assert 'icarus' == core.get_tool({'target' : 'sim', 'tool' : 'icarus'}) assert 'ise' == core.get_tool({'target' : 'synth', 'tool' : None}) assert 'vivado' == core.get_tool({'target' : 'synth', 'tool' : 'vivado'}) core = Core(os.path.join(cores_root, 'sockit', 'sockit.core')) assert 'icarus' == core.get_tool({'target' : 'sim', 'tool' : None}) assert 'icarus' == core.get_tool({'target' : 'sim', 'tool' : 'icarus'}) del core.main.backend assert None == core.get_tool({'target' : 'synth', 'tool' : None}) assert 'vivado' == core.get_tool({'target' : 'synth', 'tool' : 'vivado'}) core.main.backend = 'quartus'
def test_quartus(): filename = os.path.join(os.path.dirname(__file__), __name__, "sockit.core") core = Core(filename) #Check filesets assert len(core.file_sets) == 4 assert core.file_sets[0].name == 'verilog_src_files' assert core.file_sets[1].name == 'verilog_tb_src_files' assert core.file_sets[2].name == 'verilog_tb_private_src_files' #Check that backend files are converted to fileset properly assert len(core.file_sets[3].file) == 3 compare_fileset(core.file_sets[3], 'backend_files', ['data/sockit.qsys', 'data/sockit.sdc', 'data/pinmap.tcl']) assert core.file_sets[3].file[0].file_type == 'QSYS' assert core.file_sets[3].file[1].file_type == 'SDC' assert core.file_sets[3].file[2].file_type == 'tclSource' #Check backend section assert core.quartus.quartus_options == '--64bit' assert core.quartus.family == '"Cyclone V"' assert core.quartus.device == '5CSXFC6D6F31C8ES' assert core.quartus.top_module == 'orpsoc_top' assert core.quartus.warnings == []
def test_quartus(): filename = os.path.join(os.path.dirname(__file__), __name__, "sockit.core") core = Core(filename) # Check filesets assert len(core.file_sets) == 4 assert core.file_sets[0].name == "verilog_src_files" assert core.file_sets[1].name == "verilog_tb_src_files" assert core.file_sets[2].name == "verilog_tb_private_src_files" # Check that backend files are converted to fileset properly assert len(core.file_sets[3].file) == 3 compare_fileset( core.file_sets[3], "backend_files", ["data/sockit.qsys", "data/sockit.sdc", "data/pinmap.tcl"], ) assert core.file_sets[3].file[0].file_type == "QSYS" assert core.file_sets[3].file[1].file_type == "SDC" assert core.file_sets[3].file[2].file_type == "tclSource" # Check backend section assert core.quartus.quartus_options == "--64bit" assert core.quartus.family == '"Cyclone V"' assert core.quartus.device == "5CSXFC6D6F31C8ES" assert core.quartus.top_module == "orpsoc_top" assert core.quartus.warnings == []
def test_export(): import os import tempfile from fusesoc.edalizer import Edalizer from fusesoc.core import Core core = Core( os.path.join(os.path.dirname(__file__), 'cores', 'wb_intercon', 'wb_intercon-1.0.core')) build_root = tempfile.mkdtemp(prefix='export_') export_root = os.path.join(build_root, 'exported_files') eda_api = Edalizer(core.name, { 'tool': 'icarus' }, [core], cache_root=None, work_root=os.path.join(build_root, 'work'), export_root=export_root).edalize for f in [ 'wb_intercon_1.0/dummy_icarus.v', 'wb_intercon_1.0/bench/wb_mux_tb.v', 'wb_intercon_1.0/bench/wb_upsizer_tb.v', 'wb_intercon_1.0/bench/wb_intercon_tb.v', 'wb_intercon_1.0/bench/wb_arbiter_tb.v', 'wb_intercon_1.0/rtl/verilog/wb_data_resize.v', 'wb_intercon_1.0/rtl/verilog/wb_mux.v', 'wb_intercon_1.0/rtl/verilog/wb_arbiter.v', 'wb_intercon_1.0/rtl/verilog/wb_upsizer.v', ]: assert os.path.isfile(os.path.join(export_root, f))
def test_copyto(): import os import tempfile from fusesoc.edalizer import Edalizer from fusesoc.core import Core core = Core( os.path.join(os.path.dirname(__file__), 'cores', 'misc', 'copytocore.core')) flags = {'tool': 'icarus'} work_root = tempfile.mkdtemp(prefix='copyto_') eda_api = Edalizer(core.name, flags, [core], None, work_root, None).edalize assert eda_api['files'] == [{ 'file_type': 'user', 'core': '::copytocore:0', 'logical_name': '', 'name': 'copied.file', 'is_include_file': False }, { 'file_type': 'tclSource', 'core': '::copytocore:0', 'logical_name': '', 'name': 'subdir/another.file', 'is_include_file': False }] assert os.path.exists(os.path.join(work_root, 'copied.file')) assert os.path.exists(os.path.join(work_root, 'subdir', 'another.file'))
def test_github_provider(): cache_root = tempfile.mkdtemp('github_') core = Core(os.path.join(cores_root, 'vlog_tb_utils', 'vlog_tb_utils-1.1.core'), cache_root) core.setup() for f in ['LICENSE', 'vlog_functions.v', 'vlog_tap_generator.v', 'vlog_tb_utils.core', 'vlog_tb_utils.v']: assert(os.path.isfile(os.path.join(core.files_root, f))) ref_dir = os.path.join(os.path.dirname(__file__), __name__) f = 'vlog_functions.v' with open(os.path.join(ref_dir, f)) as fref, open(os.path.join(core.files_root, f)) as fgen: assert fref.read() == fgen.read(), f
def find_cores(self, library): found_cores = [] path = os.path.expanduser(library.location) exclude = {".git"} if os.path.isdir(path) == False: raise OSError(path + " is not a directory") logger.debug("Checking for cores in " + path) for root, dirs, files in os.walk(path, followlinks=True): if "FUSESOC_IGNORE" in files: del dirs[:] continue dirs[:] = [directory for directory in dirs if directory not in exclude] for f in files: if f.endswith(".core"): core_file = os.path.join(root, f) try: core = Core(core_file, self.config.cache_root) found_cores.append(core) except SyntaxError as e: w = "Parse error. Ignoring file " + core_file + ": " + e.msg logger.warning(w) except ImportError as e: w = 'Failed to register "{}" due to unknown provider: {}' logger.warning(w.format(core_file, str(e))) return found_cores
def test_copyto(): import os import tempfile from fusesoc.edalizer import Edalizer from fusesoc.core import Core core = Core( os.path.join(os.path.dirname(__file__), "cores", "misc", "copytocore.core")) flags = {"tool": "icarus"} work_root = tempfile.mkdtemp(prefix="copyto_") eda_api = Edalizer(core.name, flags, [core], None, work_root, None).edalize assert eda_api["files"] == [ { "file_type": "user", "core": "::copytocore:0", "logical_name": "", "name": "copied.file", "is_include_file": False, }, { "file_type": "tclSource", "core": "::copytocore:0", "logical_name": "", "name": "subdir/another.file", "is_include_file": False, }, ] assert os.path.exists(os.path.join(work_root, "copied.file")) assert os.path.exists(os.path.join(work_root, "subdir", "another.file"))
def test_capi2_get_toplevel(): from fusesoc.core import Core core_file = os.path.join(tests_dir, "capi2_cores", "misc", "toplevel.core") core = Core(core_file) flags = {'target' : 'no_toplevel'} with pytest.raises(SyntaxError): core.get_toplevel(flags) flags = {'target' : 'str_toplevel'} assert 'toplevel_as_string' == core.get_toplevel(flags) flags = {'target' : 'list_toplevel'} assert 'toplevel as list' == core.get_toplevel(flags)
def test_get_tool_options(): cores_root = os.path.join(os.path.dirname(__file__), 'cores') core = Core(os.path.join(cores_root, 'mor1kx-generic', 'mor1kx-generic.core')) assert {'iverilog_options' : ['-DSIM']} == core.get_tool_options({'is_toplevel' : True, 'tool' : 'icarus'}) assert {} == core.get_tool_options({'is_toplevel' : True, 'tool' : 'modelsim'}) assert {'fuse_options' : ['some','isim','options']} == core.get_tool_options({'is_toplevel' : True, 'tool' : 'isim'}) expected = {'xelab_options' : ['--timescale 1ps/1ps', '--debug typical', 'dummy', 'options', 'for', 'xelab']} assert expected == core.get_tool_options({'is_toplevel' : True, 'tool' : 'xsim'}) assert {} == core.get_tool_options({'is_toplevel' : False, 'tool' : 'icarus'}) core = Core(os.path.join(cores_root, 'elf-loader', 'elf-loader.core')) assert {'libs' : ['-lelf']} == core.get_tool_options({'is_toplevel' : False, 'tool' : 'verilator'}) assert {} == core.get_tool_options({'is_toplevel' : True, 'tool' : 'invalid'})
def test_capi2_get_files(): from fusesoc.core import Core core_file = os.path.join(tests_dir, "capi2_cores", "misc", "files.core") core = Core(core_file) expected = [ {'is_include_file' : False, 'file_type' : 'user', 'copyto' : 'copied.file', 'logical_name' : '', 'name' : 'subdir/dummy.extra'}, {'is_include_file' : False, 'file_type' : 'tclSource', 'copyto' : 'subdir/another.file', 'logical_name' : '', 'name' : 'dummy.tcl'}, {'copyto' : '', 'file_type' : 'verilogSource', 'is_include_file' : True, 'logical_name' : '', 'name' : 'vlogfile'}, {'copyto' : '', 'file_type' : 'vhdlSource', 'is_include_file' : False, 'logical_name' : '', 'name' : 'vhdlfile'}, {'copyto' : '', 'file_type' : 'user', 'is_include_file' : False, 'logical_name' : '', 'name' : 'pickthisfile'}, ] flags = {'tool' : 'icarus'} result = [vars(x) for x in core.get_files(flags)] assert expected == result
def test_capi2_get_ttptttg(): from fusesoc.core import Core core = Core(os.path.join(cores_dir, "generate.core")) flags = {'is_toplevel' : True} expected = [ {'name' : 'testgenerate_without_params', 'generator' : 'generator1', 'pos' : 'append', 'config' : {}}, {'name' : 'testgenerate_with_params', 'generator' : 'generator1', 'pos' : 'append', 'config' : {'param1' : 'a param', 'param2' : ['list', 'of', 'stuff']}}, ] assert expected == core.get_ttptttg(flags) flags['target'] = 'nogenerate' assert [] == core.get_ttptttg(flags) flags['target'] = 'invalid_generate' with pytest.raises(SyntaxError) as excinfo: core.get_ttptttg(flags) assert "Generator instance 'idontexist', requested by target 'invalid_generate', was not found" in str(excinfo.value) flags['target'] = 'invalid_target' assert [] == core.get_ttptttg(flags)
def test_capi2_get_vpi(): from fusesoc.core import Core core_file = os.path.join(tests_dir, "capi2_cores", "misc", "vpi.core") core = Core(core_file) expected = [ {'src_files': ['f1', 'f3'], 'include_dirs': [''], 'libs': ['some_lib'], 'name': 'vpi1'}, {'src_files': ['f4'], 'include_dirs': [], 'libs': [], 'name': 'vpi2'} ] assert [] == core.get_vpi({'is_toplevel' : True, 'target' : 'invalid'}) assert expected == core.get_vpi({'is_toplevel' : True}) assert expected == core.get_vpi({'is_toplevel' : False})
def test_get_toplevel(): filename = os.path.join(os.path.dirname(__file__), __name__, "atlys.core") core = Core(filename) assert 'orpsoc_tb' == core.get_toplevel({'tool' : 'icarus'}) assert 'orpsoc_tb' == core.get_toplevel({'tool' : 'icarus', 'testbench' : None}) assert 'tb' == core.get_toplevel({'tool' : 'icarus', 'testbench' : 'tb'}) assert 'orpsoc_top' == core.get_toplevel({'tool' : 'vivado'}) filename = os.path.join(os.path.dirname(__file__), __name__, "sockit.core") core = Core(filename) assert 'dummy_tb' == core.get_toplevel({'tool' : 'icarus'}) assert 'dummy_tb' == core.get_toplevel({'tool' : 'icarus', 'testbench' : None}) assert 'tb' == core.get_toplevel({'tool' : 'icarus', 'testbench' : 'tb'}) assert 'orpsoc_top' == core.get_toplevel({'tool' : 'vivado'})
def test_capi2_get_work_root(): from fusesoc.core import Core core_file = os.path.join(tests_dir, "capi2_cores", "misc", "targets.core") core = Core(core_file) with pytest.raises(SyntaxError): core.get_work_root({}) assert 'default-icarus' == core.get_work_root({'tool' : 'icarus'}) assert 'default-vivado' == core.get_work_root({'tool' : 'vivado'}) assert 'default-icarus' == core.get_work_root({'tool' : 'icarus', 'target' : None}) with pytest.raises(SyntaxError): core.get_work_root({'tool' : 'icarus', 'target' : 'invalid_target'}) assert 'empty_target-icarus' == core.get_work_root({'tool' : 'icarus', 'target' : 'empty_target'})
def test_capi2_export(): import os import tempfile from fusesoc.core import Core core_file = os.path.join(tests_dir, "capi2_cores", "misc", "files.core") core = Core(core_file) export_root = tempfile.mkdtemp(prefix='capi2_export_') core.export(export_root) expected = [ 'dontpickthisfile', 'dummy.tcl', 'scriptfile', 'subdir/dummy.extra', 'vhdlfile', 'vlogfile', 'vpifile'] result = [] for root, dirs, files in os.walk(export_root): result += [os.path.relpath(os.path.join(root, f), export_root) for f in files] assert expected == sorted(result) with pytest.raises(RuntimeError) as excinfo: core.export(export_root, {'target' : 'will_fail', 'is_toplevel' : True}) assert "Cannot find idontexist in" in str(excinfo.value) core.files_root = os.path.join(tests_dir, __name__) core.export(export_root, {'target' : 'files_root_test', 'is_toplevel' : True}) expected = ['targets.info'] result = [] for root, dirs, files in os.walk(export_root): result += [os.path.relpath(os.path.join(root, f), export_root) for f in files] assert expected == sorted(result)
def test_cachable(): cache_root = tempfile.mkdtemp('opencores_') core = Core(os.path.join(cores_root, 'misc', 'opencorescore.core'), cache_root) assert(core.cache_status() == 'empty') core.setup() assert(core.cache_status() == 'downloaded')
def test_capi2_get_parameters(): from fusesoc.core import Core from fusesoc.capi2.core import Generators core_file = os.path.join(tests_dir, "capi2_cores", "misc", "parameters.core") core = Core(core_file) param1 = { 'datatype' : 'str', 'paramtype' : 'vlogparam', } param2 = { 'datatype' : 'str', 'default' : 'default_value', 'description' : 'This is a parameter', 'paramtype' : 'vlogparam', } intparam = { 'datatype' : 'int', 'default' : 5446, 'paramtype' : 'vlogparam', } boolfalse = { 'datatype' : 'bool', 'default' : False, 'paramtype' : 'vlogparam', } booltrue = { 'datatype' : 'bool', 'default' : True, 'paramtype' : 'vlogparam', } int0 = { 'datatype' : 'int', 'default' : 0, 'paramtype' : 'vlogparam', } emptystr = { 'datatype' : 'str', 'paramtype' : 'vlogparam', } flags = {'is_toplevel' : True} expected = {'param1' : param1} assert expected == core.get_parameters(flags) flags['target'] = 'noparameters' expected = {} assert expected == core.get_parameters(flags) flags['target'] = 'nonexistant' with pytest.raises(SyntaxError) as excinfo: core.get_parameters(flags) assert "Parameter 'idontexist', requested by target 'nonexistant', was not found" in str(excinfo.value) flags['target'] = 'multiparameters' expected = {'param1' : param1, 'param2' : param2} assert expected == core.get_parameters(flags) flags['target'] = 'use_flags' expected = {'param2' : param2, 'condparamtype' : {'datatype' : 'str', 'paramtype' : 'vlogparam'} } assert expected == core.get_parameters(flags) flags['tool'] = 'icarus' expected = {'param1' : param1, 'condparamtype' : {'datatype' : 'str', 'paramtype' : 'plusarg'} } assert expected == core.get_parameters(flags) flags['target'] = 'types' expected = {'param2' : param2, 'intparam' : intparam, 'boolfalse' : boolfalse, 'booltrue' : booltrue, } result = core.get_parameters(flags) assert expected == result assert str == type(result['param2']['datatype']) assert str == type(result['param2']['default']) assert str == type(result['param2']['description']) assert str == type(result['param2']['paramtype']) assert int == type(result['intparam']['default']) assert bool == type(result['boolfalse']['default']) assert bool == type(result['booltrue']['default']) flags['target'] = 'empty' expected = {'int0' : int0, 'emptystr' : emptystr} assert expected == core.get_parameters(flags) flags['target'] = 'override' param1['default'] = 'def' param2['default'] = 'new_def' intparam['default'] = 0xdeadbeef boolfalse['default'] = True booltrue['default'] = False expected = {'param1' : param1, 'param2' : param2, 'intparam' : intparam, 'boolfalse' : boolfalse, 'booltrue' : booltrue, } assert expected == core.get_parameters(flags)
def test_uncachable(): cores_root = os.path.join(tests_dir, 'capi2_cores', 'misc') cache_root = tempfile.mkdtemp('uncachable_') core = Core(os.path.join(cores_root, 'uncachable.core'), cache_root) assert(core.cache_status() == 'outofdate')
def test_capi2_get_scripts(): from fusesoc.core import Core simple1 = {'cmd' : ['simple_cmd1'], 'env' : {'FILES_ROOT' : 'my_files_root'}, 'name' : 'simple1'} simple2 = {'cmd' : ['simple_cmd2'], 'env' : {'FILES_ROOT' : 'my_files_root'}, 'name' : 'simple2'} simple3 = {'cmd' : ['simple_cmd3'], 'env' : {'FILES_ROOT' : 'my_files_root'}, 'name' : 'simple3'} simple4 = {'cmd' : ['simple_cmd4'], 'env' : {'FILES_ROOT' : 'my_files_root'}, 'name' : 'simple4'} with_env = {'cmd' : ['simple5'], 'env' : {'FILES_ROOT' : 'my_files_root', 'TESTENV' : 'testvalue'}, 'name' : 'with_env'} multi_cmd = {'cmd' : ['command', 'with', 'args'], 'env' : {'FILES_ROOT' : 'my_files_root'}, 'name' : 'multi_cmd'} core_file = os.path.join(tests_dir, "capi2_cores", "misc", "hooks.core") core = Core(core_file) flags = {'is_toplevel' : True} expected = {'pre_build' : [simple1]} assert expected == core.get_scripts("my_files_root", flags) flags['target'] = 'nohooks' expected = {} assert expected == core.get_scripts("my_files_root", flags) flags['target'] = 'nonexistant' with pytest.raises(SyntaxError) as excinfo: core.get_scripts("", flags) assert "Script 'idontexist', requested by target 'nonexistant', was not found" in str(excinfo.value) flags['target'] = 'allhooks' expected = { 'pre_build' : [simple1], 'post_build' : [simple2], 'pre_run' : [simple3], 'post_run' : [simple4], } assert expected == core.get_scripts("my_files_root", flags) flags['target'] = 'multihooks' expected = { 'pre_run' : [simple1, with_env, multi_cmd] } assert expected == core.get_scripts("my_files_root", flags) flags['target'] = 'use_flags' expected = {'post_run' : [simple2]} assert expected == core.get_scripts("my_files_root", flags) flags['tool'] = 'icarus' expected = {'post_run' : [simple1]} assert expected == core.get_scripts("my_files_root", flags)