mirror of https://github.com/YosysHQ/yosys.git
Various win32 build fixes in yosys.cc
This commit is contained in:
parent
ee5165c6e4
commit
986bcc13cb
|
@ -24,7 +24,10 @@
|
||||||
# include <readline/history.h>
|
# include <readline/history.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <dlfcn.h>
|
#ifndef _WIN32
|
||||||
|
# include <dlfcn.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
@ -55,8 +58,22 @@ std::string vstringf(const char *fmt, va_list ap)
|
||||||
std::string string;
|
std::string string;
|
||||||
char *str = NULL;
|
char *str = NULL;
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
int sz = 64, rc;
|
||||||
|
while (1) {
|
||||||
|
va_list apc;
|
||||||
|
va_copy(apc, ap);
|
||||||
|
str = (char*)realloc(str, sz);
|
||||||
|
rc = vsnprintf(str, sz, fmt, apc);
|
||||||
|
va_end(apc);
|
||||||
|
if (rc >= 0 && rc < sz)
|
||||||
|
break;
|
||||||
|
sz *= 2;
|
||||||
|
}
|
||||||
|
#else
|
||||||
if (vasprintf(&str, fmt, ap) < 0)
|
if (vasprintf(&str, fmt, ap) < 0)
|
||||||
str = NULL;
|
str = NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (str != NULL) {
|
if (str != NULL) {
|
||||||
string = str;
|
string = str;
|
||||||
|
@ -163,8 +180,10 @@ void yosys_shutdown()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef _WIN32
|
||||||
for (auto &it : loaded_plugins)
|
for (auto &it : loaded_plugins)
|
||||||
dlclose(it.second);
|
dlclose(it.second);
|
||||||
|
#endif
|
||||||
|
|
||||||
loaded_plugins.clear();
|
loaded_plugins.clear();
|
||||||
loaded_plugin_aliases.clear();
|
loaded_plugin_aliases.clear();
|
||||||
|
@ -272,7 +291,7 @@ struct TclPass : public Pass {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
std::string proc_self_dirname ()
|
std::string proc_self_dirname()
|
||||||
{
|
{
|
||||||
char path [PATH_MAX];
|
char path [PATH_MAX];
|
||||||
ssize_t buflen = readlink("/proc/self/exe", path, sizeof(path));
|
ssize_t buflen = readlink("/proc/self/exe", path, sizeof(path));
|
||||||
|
@ -285,7 +304,7 @@ std::string proc_self_dirname ()
|
||||||
}
|
}
|
||||||
#elif defined(__APPLE__)
|
#elif defined(__APPLE__)
|
||||||
#include <mach-o/dyld.h>
|
#include <mach-o/dyld.h>
|
||||||
std::string proc_self_dirname ()
|
std::string proc_self_dirname()
|
||||||
{
|
{
|
||||||
char * path = NULL;
|
char * path = NULL;
|
||||||
uint32_t buflen = 0;
|
uint32_t buflen = 0;
|
||||||
|
@ -295,8 +314,14 @@ std::string proc_self_dirname ()
|
||||||
buflen--;
|
buflen--;
|
||||||
return std::string(path, buflen);
|
return std::string(path, buflen);
|
||||||
}
|
}
|
||||||
|
#elif defined(_WIN32)
|
||||||
|
std::string proc_self_dirname()
|
||||||
|
{
|
||||||
|
#warning Fixme: Implement proc_self_dirname() for win32.
|
||||||
|
log_error("proc_self_dirname() is not implemented for win32 yet!\n");
|
||||||
|
}
|
||||||
#elif defined(EMSCRIPTEN)
|
#elif defined(EMSCRIPTEN)
|
||||||
std::string proc_self_dirname ()
|
std::string proc_self_dirname()
|
||||||
{
|
{
|
||||||
return "/";
|
return "/";
|
||||||
}
|
}
|
||||||
|
@ -304,7 +329,7 @@ std::string proc_self_dirname ()
|
||||||
#error Dont know how to determine process executable base path!
|
#error Dont know how to determine process executable base path!
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
std::string proc_share_dirname ()
|
std::string proc_share_dirname()
|
||||||
{
|
{
|
||||||
std::string proc_self_path = proc_self_dirname();
|
std::string proc_self_path = proc_self_dirname();
|
||||||
std::string proc_share_path = proc_self_path + "share/";
|
std::string proc_share_path = proc_self_path + "share/";
|
||||||
|
|
Loading…
Reference in New Issue