Skip to content
Snippets Groups Projects
__main__.py 6.45 KiB
Newer Older
# -*- coding: utf-8 -*-
Pawel Szostek's avatar
Pawel Szostek committed
# Copyright (c) 2013 CERN
# Author: Pawel Szostek (pawel.szostek@cern.ch)
Lucas Russo's avatar
Lucas Russo committed
# Modified to allow ISim simulation by Lucas Russo (lucas.russo@lnls.br)
from connection import Connection
Pawel Szostek's avatar
Pawel Szostek committed
import optparse
from fetch import ModulePool
    usage = "usage: %prog [options]\n"
    usage += "type %prog --help to get help message"
    
    parser = optparse.OptionParser(usage=usage)
Pawel Szostek's avatar
Pawel Szostek committed

    parser.add_option("--manifest-help", action="store_true",
    dest="manifest_help", help="print manifest file variables description")

    parser.add_option("--make-vsim", dest="make_vsim", action="store_true",
    default=None, help="generate a ModelSim simulation Makefile")

    parser.add_option("--make-isim", dest="make_isim", action="store_true",
    default=None, help="generate a ISE Simulation (ISim) simulation Makefile")
    parser.add_option("--make-iv-sim", dest="make_iv_sim", action="store_true",
    default=None, help="generate an iverilog compiler based simulation Makefile")
    parser.add_option("--make-fetch", dest="make_fetch", action="store_true",
    default=None, help="generate a makefile for modules' fetching")
    parser.add_option("--make-ise", dest="make_ise", action="store_true",
    default=None, help="generate a makefile for local ISE synthesis")

    parser.add_option("--make-remote", dest="make_remote", action="store_true",
    default=None, help="generate a makefile for remote synthesis")
Pawel Szostek's avatar
Pawel Szostek committed
    parser.add_option("-f", "--fetch", action="store_true", dest="fetch",
    default=None, help="fetch and/or update remote modules listed in Manifest")
    parser.add_option("--clean", action="store_true", dest="clean",
Paweł Szostek's avatar
Paweł Szostek committed
    default=None, help="remove all modules fetched for this one")
    parser.add_option("--list", action="store_true", dest="list",
    default=None, help="List all modules together with their files")
Lucas Russo's avatar
Lucas Russo committed

    parser.add_option("--list-files", action="store_true", dest="list_files",
    default=None, help="List all files in a from of a space-separated string")
    parser.add_option("--merge-cores=name", default=None, dest="merge_cores",
        help="Merges entire synthesizable content of an project into a pair of VHDL/Verilog files")
    parser.add_option("--ise-proj", action="store_true", dest="ise_proj",
Pawel Szostek's avatar
Pawel Szostek committed
    default=None, help="create/update an ise project including list of project"
        "files")
    parser.add_option("--quartus-proj", action="store_true", dest="quartus_proj",
    default=None, help="create/update a quartus project including list of project"
        "files")

Pawel Szostek's avatar
Pawel Szostek committed
    parser.add_option("-l", "--synthesize-locally", dest="local",
Paweł Szostek's avatar
Paweł Szostek committed
    default=None, action="store_true", help="perform a local synthesis")
Pawel Szostek's avatar
Pawel Szostek committed

    parser.add_option("-r", "--synthesize-remotelly", dest="remote",
Paweł Szostek's avatar
Paweł Szostek committed
    default=None, action="store_true", help="perform a remote synthesis")
Pawel Szostek's avatar
Pawel Szostek committed

    parser.add_option("--synth-server", dest="synth_server",
Pawel Szostek's avatar
Pawel Szostek committed
    default=None, help="use given SERVER for remote synthesis",
        metavar="SERVER")
Pawel Szostek's avatar
Pawel Szostek committed

    parser.add_option("--synth-user", dest="synth_user",
    default=None, help="use given USER for remote synthesis", metavar="USER")

    parser.add_option("--force-ise", dest="force_ise",
Pawel Szostek's avatar
Pawel Szostek committed
    default=None, type=float, help="Force given ISE version to be used in"
        " synthesis,use 0 for current version", metavar="ISE")
    parser.add_option("--py", dest="arbitrary_code",
    default="", help="add arbitrary code to all manifests' evaluation")

    parser.add_option("-v", "--verbose", dest="verbose", action="store_true",
    default="false", help="verbose mode")
    parser.add_option("--version", dest="print_version", action="store_true",
    default="false", help="print version id of this Hdlmake build")

Pawel Szostek's avatar
Pawel Szostek committed
    (options, _) = parser.parse_args()

    # Setting global variable (global_mod.py)
    global_mod.options = options
    #HANDLE PROJECT INDEPENDENT OPTIONS
    if options.manifest_help is True:
        from manifest_parser import ManifestParser
        ManifestParser().help()
        quit()
    if options.print_version is True:
  # Check later if a simulation tool should have been specified
    if options.make_isim is True:
    elif options.make_vsim is True:
  #  p.info("Simulation tool: " + str(global_mod.sim_tool))
Pawel Szostek's avatar
Pawel Szostek committed
    p.vprint("LoadTopManifest")
    pool = ModulePool()
    pool.new_module(parent=None, url=os.getcwd(), source="local", fetchto=".")
    # Setting top_module as top module of design (ModulePool class)
    if pool.get_top_module().manifest is None:
        p.rawprint("No manifest found. At least an empty one is needed")
        p.rawprint("To see some help, type hdlmake --help")

    # Setting global variable (global_mod.py)
    global_mod.top_module = pool.get_top_module()
    global_mod.global_target = global_mod.top_module.target
    global_mod.mod_pool = pool
Pawel Szostek's avatar
Pawel Szostek committed
    ssh = Connection(ssh_user=options.synth_user,
        ssh_server=options.synth_server)
    from hdlmake_kernel import HdlmakeKernel
    kernel = HdlmakeKernel(modules_pool=pool, connection=ssh, options=options)
Pawel Szostek's avatar
Pawel Szostek committed

    options_kernel_mapping = {
        "fetch" : "fetch",
        "ise_proj" : "generate_ise_project",
        "quartus_proj" : "generate_quartus_project",
        "local" : "run_local_synthesis",
        "remote": "run_remote_synthesis",
        "make_fetch": "generate_fetch_makefile",
        "make_ise" : "generate_ise_makefile",
        "make_iv_sim" : "generate_iverilog_makefile",
        "make_vsim" : "generate_vsim_makefile",
        "make_isim" : "generate_isim_makefile",

        "make_remote" : "generate_remote_synthesis_makefile",
        "list" : "list_modules",
        "clean" : "clean_modules",
        "merge_cores" : "merge_cores"
    sth_chosen = False
    import traceback
    for option, function in options_kernel_mapping.items():
        try:
Pawel Szostek's avatar
Pawel Szostek committed
            is_set = getattr(options, option)
                sth_chosen = True
Paweł Szostek's avatar
Paweł Szostek committed
                getattr(kernel, function)()
        except Exception, unknown_error:
            p.echo("Oooops! We've got an error. Here is the appropriate info:\n")
            print(unknown_error)
            traceback.print_exc()
        p.rawprint("No option selected. Running automatic flow")
        p.rawprint("To see some help, type hdlmake --help")
        kernel.run()
if __name__ == "__main__":
    main()