handle netlisting remote (http[s]) hierarchic objects

This commit is contained in:
stefan schippers 2023-03-12 11:11:11 +01:00
parent b5852ffc70
commit 6e13f3cd77
5 changed files with 48 additions and 6 deletions

View File

@ -1250,7 +1250,6 @@ int descend_schematic(int instnumber)
if(!strcmp(xctx->sch[xctx->currsch],""))
{
char cmd[PATH_MAX+1000];
char filename[PATH_MAX];
char res[PATH_MAX];
my_strncpy(filename, xctx->sch[xctx->currsch], S(filename));
@ -1342,10 +1341,10 @@ int descend_schematic(int instnumber)
xctx->currsch++;
hilight_child_pins();
get_sch_from_sym(filename, xctx->inst[n].ptr+ xctx->sym);
dbg(1, "descend_schematic(): filename=%s\n", filename);
unselect_all(1);
get_sch_from_sym(filename, xctx->inst[n].ptr+ xctx->sym);
remove_symbols();
dbg(1, "descend_schematic(): filename=%s\n", filename);
/* we are descending from a parent schematic downloaded from the web */
if( strstr(xctx->current_dirname, "http://") == xctx->current_dirname ||
strstr(xctx->current_dirname, "https://") == xctx->current_dirname) {
@ -1354,10 +1353,9 @@ int descend_schematic(int instnumber)
tclvareval("try_download_url {", xctx->current_dirname, "} {", filename, "}", NULL);
/* build local file name of downloaded object and load it */
my_snprintf(sympath, S(sympath), "%s/xschem_web/%s", tclgetvar("XSCHEM_TMP_DIR"), get_cell_w_ext(filename, 0));
load_schematic(1, sympath, 1);
} else {
load_schematic(1, filename, 1);
my_strncpy(filename, sympath, S(filename));
}
load_schematic(1, filename, 1);
if(xctx->hilight_nets)
{
prepare_netlist_structs(0);

View File

@ -528,6 +528,17 @@ void spice_block_netlist(FILE *fd, int i)
else
spice_stop=0;
get_sch_from_sym(filename, xctx->sym + i);
if( strstr(xctx->current_dirname, "http://") == xctx->current_dirname ||
strstr(xctx->current_dirname, "https://") == xctx->current_dirname) {
char sympath[PATH_MAX];
/* download item into ${XSCHEM_TMP_DIR}/xschem_web */
tclvareval("try_download_url {", xctx->current_dirname, "} {", filename, "}", NULL);
/* build local file name of downloaded object and load it */
my_snprintf(sympath, S(sympath), "%s/xschem_web/%s", tclgetvar("XSCHEM_TMP_DIR"), get_cell_w_ext(filename, 0));
my_strncpy(filename, sympath, S(filename));
}
if(split_f) {
my_snprintf(netl_filename, S(netl_filename), "%s/.%s_%d",
tclgetvar("netlist_dir"), skip_dir(xctx->sym[i].name), getpid());

View File

@ -84,6 +84,17 @@ static void tedax_block_netlist(FILE *fd, int i)
else
tedax_stop=0;
get_sch_from_sym(filename, xctx->sym + i);
if( strstr(xctx->current_dirname, "http://") == xctx->current_dirname ||
strstr(xctx->current_dirname, "https://") == xctx->current_dirname) {
char sympath[PATH_MAX];
/* download item into ${XSCHEM_TMP_DIR}/xschem_web */
tclvareval("try_download_url {", xctx->current_dirname, "} {", filename, "}", NULL);
/* build local file name of downloaded object and load it */
my_snprintf(sympath, S(sympath), "%s/xschem_web/%s", tclgetvar("XSCHEM_TMP_DIR"), get_cell_w_ext(filename, 0));
my_strncpy(filename, sympath, S(filename));
}
fprintf(fd, "\n# expanding symbol: %s # of pins=%d\n",
xctx->sym[i].name,xctx->sym[i].rects[PINLAYER] );
fprintf(fd, "## sym_path: %s\n", abs_sym_path(xctx->sym[i].name, ""));

View File

@ -436,6 +436,17 @@ void verilog_block_netlist(FILE *fd, int i)
else
verilog_stop=0;
get_sch_from_sym(filename, xctx->sym + i);
if( strstr(xctx->current_dirname, "http://") == xctx->current_dirname ||
strstr(xctx->current_dirname, "https://") == xctx->current_dirname) {
char sympath[PATH_MAX];
/* download item into ${XSCHEM_TMP_DIR}/xschem_web */
tclvareval("try_download_url {", xctx->current_dirname, "} {", filename, "}", NULL);
/* build local file name of downloaded object and load it */
my_snprintf(sympath, S(sympath), "%s/xschem_web/%s", tclgetvar("XSCHEM_TMP_DIR"), get_cell_w_ext(filename, 0));
my_strncpy(filename, sympath, S(filename));
}
if(split_f) {
my_snprintf(netl_filename, S(netl_filename), "%s/.%s_%d",
tclgetvar("netlist_dir"), skip_dir(xctx->sym[i].name), getpid());

View File

@ -528,6 +528,17 @@ void vhdl_block_netlist(FILE *fd, int i)
else
vhdl_stop=0;
get_sch_from_sym(filename, xctx->sym + i);
if( strstr(xctx->current_dirname, "http://") == xctx->current_dirname ||
strstr(xctx->current_dirname, "https://") == xctx->current_dirname) {
char sympath[PATH_MAX];
/* download item into ${XSCHEM_TMP_DIR}/xschem_web */
tclvareval("try_download_url {", xctx->current_dirname, "} {", filename, "}", NULL);
/* build local file name of downloaded object and load it */
my_snprintf(sympath, S(sympath), "%s/xschem_web/%s", tclgetvar("XSCHEM_TMP_DIR"), get_cell_w_ext(filename, 0));
my_strncpy(filename, sympath, S(filename));
}
if(split_f) {
my_snprintf(netl_filename, S(netl_filename), "%s/.%s_%d",
tclgetvar("netlist_dir"), skip_dir(xctx->sym[i].name), getpid());