about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/compilers/yosys/plugin-search-dirs.patch
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2021-01-26 18:06:19 +0000
committerAlyssa Ross <hi@alyssa.is>2021-01-26 18:21:18 +0000
commit7ac6743433dd45ceaead2ca96f6356dc0d064ce6 (patch)
treeb68ec89d7d2a8d2b6e6b1ff94ba26d6af4096350 /nixpkgs/pkgs/development/compilers/yosys/plugin-search-dirs.patch
parentc5c7451dbef37b51f52792d6395a670ef5183d27 (diff)
parent891f607d5301d6730cb1f9dcf3618bcb1ab7f10e (diff)
downloadnixlib-7ac6743433dd45ceaead2ca96f6356dc0d064ce6.tar
nixlib-7ac6743433dd45ceaead2ca96f6356dc0d064ce6.tar.gz
nixlib-7ac6743433dd45ceaead2ca96f6356dc0d064ce6.tar.bz2
nixlib-7ac6743433dd45ceaead2ca96f6356dc0d064ce6.tar.lz
nixlib-7ac6743433dd45ceaead2ca96f6356dc0d064ce6.tar.xz
nixlib-7ac6743433dd45ceaead2ca96f6356dc0d064ce6.tar.zst
nixlib-7ac6743433dd45ceaead2ca96f6356dc0d064ce6.zip
Merge commit '891f607d5301d6730cb1f9dcf3618bcb1ab7f10e'
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/yosys/plugin-search-dirs.patch')
-rw-r--r--nixpkgs/pkgs/development/compilers/yosys/plugin-search-dirs.patch34
1 files changed, 34 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/compilers/yosys/plugin-search-dirs.patch b/nixpkgs/pkgs/development/compilers/yosys/plugin-search-dirs.patch
new file mode 100644
index 000000000000..0cb0aee9c7ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/yosys/plugin-search-dirs.patch
@@ -0,0 +1,34 @@
+diff --git a/passes/cmds/plugin.cc b/passes/cmds/plugin.cc
+index 3ed19497..f9534bd0 100644
+--- a/passes/cmds/plugin.cc
++++ b/passes/cmds/plugin.cc
+@@ -75,8 +75,27 @@ void load_plugin(std::string filename, std::vector<std::string> aliases)
+ 		#endif
+ 
+ 		void *hdl = dlopen(filename.c_str(), RTLD_LAZY|RTLD_LOCAL);
+-		if (hdl == NULL && orig_filename.find('/') == std::string::npos)
+-			hdl = dlopen((proc_share_dirname() + "plugins/" + orig_filename + ".so").c_str(), RTLD_LAZY|RTLD_LOCAL);
++		if (hdl == NULL && orig_filename.find('/') == std::string::npos) {
++			std::string install_dir = proc_share_dirname() + "plugins";
++
++			vector<string> all_dirs;
++			all_dirs.push_back(install_dir);
++
++			char* plugin_dirs = getenv("NIX_YOSYS_PLUGIN_DIRS");
++			if (plugin_dirs != NULL) {
++				std::string p(plugin_dirs), t;
++				std::stringstream ss(p);
++
++				while(std::getline(ss, t, ':')) {
++					all_dirs.push_back(t);
++				}
++			}
++
++			for (auto dir : all_dirs) {
++				hdl = dlopen((dir + "/" + orig_filename + ".so").c_str(), RTLD_LAZY|RTLD_LOCAL);
++				if (hdl != NULL) break;
++			}
++		}
+ 		if (hdl == NULL)
+ 			log_cmd_error("Can't load module `%s': %s\n", filename.c_str(), dlerror());
+ 		loaded_plugins[orig_filename] = hdl;