import edalize
import os

work_root = 'build'

pins = {
    'clk': os.environ['URAY_PIN_00'],
    'stb': os.environ['URAY_PIN_01'],
    'di': os.environ['URAY_PIN_02'],
    'do': os.environ['URAY_PIN_03'],
}

xdc_file = os.path.realpath(os.path.join(work_root, 'top.xdc'))
pre_imp_file = os.path.realpath(os.path.join(work_root, 'pre.tcl'))
post_imp_file = os.path.realpath(os.path.join(work_root, 'post.tcl'))

os.makedirs(work_root, exist_ok=True)

synth_tool = 'yosys' if 'USE_YOSYS' in os.environ else 'vivado'

with open(xdc_file, 'w') as f:
    f.write('set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets *]\n')
    for key, val in pins.items():
        f.write('set_property PACKAGE_PIN {} [get_ports {}]\n'.format(
            val, key))
        f.write(
            'set_property IOSTANDARD LVCMOS33 [get_ports {}]\n'.format(key))

with open(pre_imp_file, 'w') as f:
    f.write('create_pblock roi\n')
    f.write('add_cells_to_pblock [get_pblocks roi] [get_cells roi]\n')
    f.write('resize_pblock [get_pblocks roi] -add "{}"\n'.format(
        os.environ['URAY_ROI']))
    f.write(
        'set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]\n')

with open(post_imp_file, 'w') as f:
    f.write('write_checkpoint -force design.dcp')

files = [
    {
        'name': os.path.realpath('top.v'),
        'file_type': 'verilogSource'
    },
    {
        'name': xdc_file,
        'file_type': 'xdc'
    },
]

tool = 'vivado'

edam = {
    'files': files,
    'name': 'design',
    'toplevel': 'top',
    'tool_options': {
        'vivado': {
            'part': os.environ['URAY_PART'],
            'pre_imp': pre_imp_file,
            'post_imp': post_imp_file,
            'synth': synth_tool
        }
    }
}

backend = edalize.get_edatool(tool)(edam=edam, work_root=work_root)

backend.configure("")
backend.build()
