xilinx/programmer/vivado: fix Linux support
authorSebastien Bourdeauducq <sb@m-labs.hk>
Tue, 3 Mar 2015 02:06:39 +0000 (02:06 +0000)
committerSebastien Bourdeauducq <sb@m-labs.hk>
Tue, 3 Mar 2015 02:06:39 +0000 (02:06 +0000)
mibuild/xilinx/programmer.py

index 6d2f17f619f9a01fcf587951a6c57a85b2a33001..12c8b6cbd98d5f597e0a13081bf991b0d66eccb4 100644 (file)
@@ -63,23 +63,22 @@ class FpgaProg(GenericProgrammer):
                subprocess.call(["fpgaprog", "-v", "-sa", "-r", "-b", flash_proxy,
                                   "-f", data_file])
 
-def _source_vivado(vivado_path, ver=None):
+def _run_vivado(path, ver, cmds):
        if sys.platform == "win32" or sys.platform == "cygwin":
-               pass
+               vivado_cmd = "vivado -mode tcl"
        else:
-               settings = common.settings(vivado_path, ver)
-               subprocess.call(["source", settings])
-
-def _run_vivado(cmds):
-       with subprocess.Popen("vivado -mode tcl", stdin=subprocess.PIPE, shell=True) as process:
+               settings = common.settings(path, ver)
+               vivado_cmd = "bash -c \"source " + settings + "&& vivado -mode tcl\""
+       with subprocess.Popen(vivado_cmd, stdin=subprocess.PIPE, shell=True) as process:
                process.stdin.write(cmds.encode("ASCII"))
                process.communicate()
 
 class VivadoProgrammer(GenericProgrammer):
        needs_bitreverse = False
-       def __init__(self, vivado_path="/opt/Xilinx/Vivado"):
+       def __init__(self, vivado_path="/opt/Xilinx/Vivado", vivado_ver=None):
                GenericProgrammer.__init__(self)
-               _source_vivado(vivado_path)
+               self.vivado_path = vivado_path
+               self.vivado_ver = vivado_ver
 
        def load_bitstream(self, bitstream_file):
                cmds = """open_hw
@@ -94,7 +93,7 @@ refresh_hw_device [lindex [get_hw_devices] 0]
 
 quit
 """.format(bitstream=bitstream_file)
-               _run_vivado(cmds)
+               _run_vivado(self.vivado_path, self.vivado_ver, cmds)
 
        # XXX works to flash bitstream, adapt it to flash bios
        def flash(self, address, data_file):
@@ -124,4 +123,4 @@ endgroup
 
 quit
 """.format(data=data_file)
-               _run_vivado(cmds)
\ No newline at end of file
+               _run_vivado(self.vivado_path, self.vivado_ver, cmds)