Skip to content

Commit

Permalink
artiq_flash: explicitly pass path within conda env to openocd dataroo…
Browse files Browse the repository at this point in the history
…tdir.

By default, openocd searches for scripts in DATAROOTDIR/openocd/scripts.
This of course makes it not relocatable. Conda has a flag to try to
detect and fix such hardcoded paths, but it does not work on openocd
(likely because the .rodata contains an already concatenated path,
which cannot be padded with zeroes from the right).

So, we pass the path explicitly instead.
whitequark committed Jun 6, 2016
1 parent 6db96f8 commit 57be065
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions artiq/frontend/artiq_flash.py
Original file line number Diff line number Diff line change
@@ -5,6 +5,7 @@
import os
import subprocess
import tempfile
import site

from artiq import __artiq_dir__ as artiq_dir
from artiq.frontend.bit2bin import bit2bin
@@ -76,6 +77,12 @@ def main():
raise SystemExit("Binaries directory '{}' does not exist"
.format(opts.dir))

conda_prefix_path = site.getsitepackages()[0]
if os.name == "nt":
scripts_path = os.path.join(conda_prefix_path, "Library", "share", "openocd", "scripts")
else:
scripts_path = os.path.join(conda_prefix_path, "share", "openocd", "scripts")

conv = False

prog = []
@@ -124,6 +131,7 @@ def main():
bit2bin(bit, bin_handle)
subprocess.check_call([
"openocd",
"-s", scripts_path,
"-f", os.path.join("board", opts.target + ".cfg"),
"-c", "; ".join(prog),
])

3 comments on commit 57be065

@sbourdeauducq
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Won't this break on non-conda installs?

@whitequark
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nope. It just adds another search path (which may or may not exist).

@whitequark
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree that this is not an especially clean fix, but I don't see a much better way short of making openocd properly relocatable (which would go against autoconf conventions and probably rejected by upstream).

Please sign in to comment.