Add .dylib file extension and improve some messages in d_cosim.

On Macos, the command "ghdl -e -shared ..." creates .dylib files.
This commit is contained in:
Giles Atkinson 2025-01-26 14:17:03 +00:00
parent e858ca9465
commit da8e237e11
1 changed files with 22 additions and 4 deletions

View File

@ -94,14 +94,21 @@ static void callback(ARGS, Mif_Callback_Reason_t reason)
if (reason == MIF_CB_DESTROY) {
if (!ip)
return;
if (ip->info.cleanup)
if (ip->info.cleanup) {
DBG("Calling cleanup.");
(*ip->info.cleanup)(&ip->info);
}
if (ip->info.lib_argv)
free((void *)ip->info.lib_argv);
if (ip->info.sim_argv)
free((void *)ip->info.sim_argv);
if (ip->so_handle)
dlclose(ip->so_handle);
if (ip->so_handle) {
DBG("Unloading co-simulation.");
if (dlclose(ip->so_handle)) {
cm_message_printf("Error unloading co-simulation: %s",
dlerror());
}
}
if (ip->q)
free(ip->q);
if (ip->out_vals)
@ -131,6 +138,13 @@ static const char *exts[] = { "", ".so", ".DLL", NULL};
#define NGSPICELIBDIR "C:\\Spice64\\lib\\ngspice" // Defined by configure?
#endif
#elif defined(__APPLE__)
static const char *exts[] = { "", ".so", ".dylib", NULL};
#define CMPFN strcmp
#define TESTFN(f) (access(f, R_OK) == 0)
#define SLIBFILE "dynamic library"
#else
static const char *exts[] = { "", ".so", NULL};
@ -138,6 +152,7 @@ static const char *exts[] = { "", ".so", NULL};
#define TESTFN(f) (access(f, R_OK) == 0)
#define SLIBFILE "shared library"
#endif
#define FLAGS (RTLD_GLOBAL | RTLD_NOW)
static void *cosim_dlopen(const char *fn)
@ -422,6 +437,8 @@ static bool check_input(struct instance *ip, Digital_t *ovp,
while (ip->q_index >= 0 && ip->q[ip->q_index].when >= rp->when)
--ip->q_index;
if (ip->q_index >= 0) {
DBG("Input Q full: d_cosim setting back to %.15g.",
(rp->when + ip->q[ip->q_index].when) / 2);
cm_analog_set_temp_bkpt(
(rp->when + ip->q[ip->q_index].when) / 2);
} else {
@ -473,7 +490,8 @@ void ucm_d_cosim(ARGS)
fn = PARAM(simulation);
handle = cosim_dlopen(fn);
if (!handle) {
cm_message_send("d_cosim failed to load simulation binary.");
cm_message_printf("d_cosim failed to load simulation binary %s.",
fn);
return;
}
ifp = (void (*)(struct co_info *))dlsym(handle, "Cosim_setup");