From d8761211a4eaaf7ac5c089c41a9c42fd8f98fd7d Mon Sep 17 00:00:00 2001 From: steve Date: Sun, 16 Feb 2003 02:23:54 +0000 Subject: [PATCH] Add the cadpli interface module. --- autoconf.sh | 2 +- cadpli/.cvsignore | 6 ++ cadpli/Makefile.in | 81 +++++++++++++++++ cadpli/cadpli.c | 96 ++++++++++++++++++++ cadpli/configure.in | 208 ++++++++++++++++++++++++++++++++++++++++++++ configure.in | 2 +- 6 files changed, 393 insertions(+), 2 deletions(-) create mode 100644 cadpli/.cvsignore create mode 100644 cadpli/Makefile.in create mode 100644 cadpli/cadpli.c create mode 100644 cadpli/configure.in diff --git a/autoconf.sh b/autoconf.sh index 82c60f0e0..31967ce0b 100644 --- a/autoconf.sh +++ b/autoconf.sh @@ -9,7 +9,7 @@ echo "Autoconf in root..." autoconf -for dir in vpip vvp tgt-vvp tgt-fpga libveriuser +for dir in vpip vvp tgt-vvp tgt-fpga libveriuser cadpli do echo "Autoconf in $dir..." ( cd ./$dir ; autoconf ) diff --git a/cadpli/.cvsignore b/cadpli/.cvsignore new file mode 100644 index 000000000..0c7b97ae0 --- /dev/null +++ b/cadpli/.cvsignore @@ -0,0 +1,6 @@ +Makefile +cadpli.vpl +dep +configure +config.log +config.status diff --git a/cadpli/Makefile.in b/cadpli/Makefile.in new file mode 100644 index 000000000..8f39f1c79 --- /dev/null +++ b/cadpli/Makefile.in @@ -0,0 +1,81 @@ +# +# This source code is free software; you can redistribute it +# and/or modify it in source code form under the terms of the GNU +# Library General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., +# 59 Temple Place - Suite 330 +# Boston, MA 02111-1307, USA +# +#ident "$Id: Makefile.in,v 1.1 2003/02/16 02:23:54 steve Exp $" +# +# +SHELL = /bin/sh + +VERSION = 0.0 + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +srcdir = @srcdir@ + +VPATH = $(srcdir) + +bindir = @bindir@ +libdir = @libdir@ +includedir = $(prefix)/include + +strip_dynamic=@strip_dynamic@ + +CC = @CC@ +CXX = @CXX@ +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ + +CPPFLAGS = @CPPFLAGS@ @DEFS@ @PICFLAG@ +CFLAGS = @CFLAGS@ +LDFLAGS = @LDFLAGS@ +STRIP = @STRIP@ + +all: cadpli.vpl + +%.o: %.c + @[ -d dep ] || mkdir dep + $(CC) -Wall -I$(srcdir) -I$(srcdir)/.. $(CPPFLAGS) $(CFLAGS) -MD -c $< + mv $*.d dep + +O = cadpli.o + +SYSTEM_VPI_LDFLAGS = -Wl,-whole-archive ../libveriuser/libveriuser.a -Wl,-no-whole-archive -L../vvp -lvpi +ifeq (@WIN32@,yes) + SYSTEM_VPI_LDFLAGS += -liberty +endif + +cadpli.vpl: $O ../vvp/libvpi.a ../libveriuser/libveriuser.a + $(CC) @shared@ -o $@ $O $(SYSTEM_VPI_LDFLAGS) + +clean: + rm -f *.o dep/*.d + +install: all installdirs $(libdir)/ivl/cadpli.vpl + +$(libdir)/ivl/cadpli.vpl: ./cadpli.vpl + $(INSTALL_PROGRAM) ./cadpli.vpl $(libdir)/ivl/cadpli.vpl + +installdirs: ../mkinstalldirs + $(srcdir)/../mkinstalldirs $(libdir)/ivl + +uninstall: + rm -f $(libdir)/ivl/cadpli.vpl + + +-include $(patsubst %.o, dep/%.d, $O) diff --git a/cadpli/cadpli.c b/cadpli/cadpli.c new file mode 100644 index 000000000..35fa57af3 --- /dev/null +++ b/cadpli/cadpli.c @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2003 Stephen Williams (steve@icarus.com) + * + * This source code is free software; you can redistribute it + * and/or modify it in source code form under the terms of the GNU + * General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ +#ident "$Id: cadpli.c,v 1.1 2003/02/16 02:23:54 steve Exp $" + +# include +# include +# include +# include +# include +# include + +typedef void* (*funcvp)(void); + +static void thunker_register(void) +{ + struct t_vpi_vlog_info vlog_info; + void*mod; + void*boot; + void*tf; + int idx; + + vpi_get_vlog_info(&vlog_info); + + for (idx = 0 ; idx < vlog_info.argc ; idx += 1) { + char*module, *cp, *bp; + if (strncmp("+cadpli=", vlog_info.argv[idx], 8) != 0) + continue; + + cp = vlog_info.argv[idx] + 8; + assert(cp); + + bp = strchr(cp, ':'); + assert(bp); + + module = malloc(bp-cp+1); + strncpy(module, cp, bp-cp); + module[bp-cp] = 0; + + mod = dlopen(module, RTLD_LAZY); + if (mod == 0) { + vpi_printf("%s link: %s\n", vlog_info.argv[idx], dlerror()); + free(module); + continue; + } + + bp += 1; + boot = dlsym(mod, bp); + if (boot == 0) { + vpi_printf("%s: Symbol %s not found.\n", + vlog_info.argv[idx], bp); + free(module); + continue; + } + + free(module); + assert(boot); + + tf = (*((funcvp)boot))(); + assert(tf); + + veriusertfs_register_table(tf); + } +} + +void (*vlog_startup_routines[])() = { + thunker_register, + 0 +}; + +/* STUB */ +s_tfcell veriusertfs[0]; + + +/* + * $Log: cadpli.c,v $ + * Revision 1.1 2003/02/16 02:23:54 steve + * Add the cadpli interface module. + * + */ + diff --git a/cadpli/configure.in b/cadpli/configure.in new file mode 100644 index 000000000..197b44613 --- /dev/null +++ b/cadpli/configure.in @@ -0,0 +1,208 @@ +AC_INIT(Makefile.in) + +AC_PROG_CC +AC_PROG_CXX +AC_CHECK_TOOL(STRIP, strip, true) + +AC_CYGWIN +AC_EXEEXT +AC_MINGW32 +AC_SUBST(EXEEXT) + +AC_PROG_INSTALL + +AC_CHECK_HEADERS(malloc.h) + +AC_CHECK_SIZEOF(unsigned long long) +AC_CHECK_SIZEOF(unsigned long) +AC_CHECK_SIZEOF(unsigned) + +# -- +# Look for a dl library to use. First look for the standard dlopen +# functions, and failing that look for the HP specific shl_load function. + +AC_CHECK_HEADERS(dlfcn.h dl.h, break) + +DLLIB='' +AC_CHECK_LIB(dl,dlopen,[DLLIB=-ldl]) +if test -z "$DLLIB" ; then +AC_CHECK_LIB(dld,shl_load,[DLLIB=-ldld]) +fi +AC_SUBST(DLLIB) + + +# Darwin requires -no-cpp-precomp +case "${host}" in + *-*-darwin*) + CPPFLAGS="-no-cpp-precomp" + CFLAGS="-no-cpp-precomp" + ;; +esac + +# The -fPIC flag is used to tell the compiler to make position +# independent code. It is needed when making shared objects. + +AC_MSG_CHECKING("for flag to make position independent code") +PICFLAG=-fPIC +case "${host}" in + + *-*-cygwin*) + PICFLAG= + ;; + + *-*-hpux*) + PICFLAG=+z + ;; + +esac +AC_SUBST(PICFLAG) +AC_MSG_RESULT($PICFLAG) + +# The -rdynamic flag is used by iverilog when compiling the target, +# to know how to export symbols of the main program to loadable modules +# that are brought in by -ldl. VPI support requires this. +AC_MSG_CHECKING("for -rdynamic compiler flag") + +rdynamic=-rdynamic +case "${host}" in + + *-*-netbsd*) + rdynamic="-Wl,--export-dynamic" + ;; + + *-*-solaris*) + rdynamic="" + ;; + + *-*-cygwin*) + rdynamic="" + ;; + + *-*-hpux*) + rdynamic="-E" + ;; + + *-*-darwin*) + rdynamic="-Wl,-all_load" + ;; + +esac +AC_SUBST(rdynamic) +AC_MSG_RESULT($rdynamic) + +AC_MSG_CHECKING("for shared library link flag") +shared=-shared +case "${host}" in + + *-*-cygwin*) + shared="-shared -Wl,--enable-auto-image-base" + ;; + + *-*-hpux*) + shared="-b" + ;; + + *-*-darwin1.[0123]) + shared="-bundle -undefined suppress" + ;; + + *-*-darwin*) + shared="-bundle -undefined suppress -flat_namespace" + ;; +esac + +AC_SUBST(shared) +AC_MSG_RESULT($shared) + +AC_MSG_CHECKING("for extra libs needed") +EXTRALIBS= +case "${host}" in + *-*-cygwin*) + EXTRALIBS="-liberty" + ;; +esac +AC_SUBST(EXTRALIBS) +AC_MSG_RESULT($EXTRALIBS) + +####################### +## test for underscores. The vpi module loader in vvm needs to know this +## in order to know the name of the start symbol for the .vpi module. +####################### + +AC_CYGWIN +AC_EXEEXT +AC_MINGW32 + + +WIN32=no +AC_MSG_CHECKING("Checking for windows") +if test "$CYGWIN" = "yes" -o "$MINGW32" = "yes" +then + WIN32=yes +fi +AC_SUBST(WIN32) +AC_MSG_RESULT($WIN32) +AC_SUBST(EXEEXT) + + +AC_MSG_CHECKING("for leading and/or trailing underscores") +cat << EOF > underscore.c + void underscore(void){} +EOF +$CC -shared -c underscore.c > /dev/null 2>&1 + +CC_LEADING_UNDERSCORE=no +CC_TRAILING_UNDERSCORE=no + +output=`nm underscore.o|grep _underscore 2>&1` +if test ! -z "$output" -a "$CYGWIN" != "yes" -a "$MINGW32" != "yes"; then + CC_LEADING_UNDERSCORE=yes + AC_DEFINE(NEED_LU) +fi + + + +output=`nm underscore.o|grep underscore_ 2>&1` +if test ! -z "$output"; then + CC_TRAILING_UNDERSCORE=yes + AC_DEFINE(NEED_TU) +fi + +if test "$CC_LEADING_UNDERSCORE" = yes; then + AC_DEFINE(WLU) +fi +if test "$CC_TRAILING_UNDERSCORE" = yes; then + AC_DEFINE(WTU) +fi + +rm underscore.c underscore.o + +AC_MSG_RESULT("$CC_LEADING_UNDERSCORE $CC_TRAILING_UNDERSCORE") + +####################### +## end of test for underscores +####################### + + + +AC_MSG_CHECKING("for ident support in C compiler") +ident_support='-DHAVE_CVS_IDENT=1' +case "${host}" in + + *-*-cygwin*) + ident_support= + ;; + + *-*-darwin*) + ident_support= + ;; + + *-*-machten*) + ident_support= + ;; +esac + +AC_SUBST(ident_support) +AC_MSG_RESULT($ident_support) + +AC_OUTPUT(Makefile) diff --git a/configure.in b/configure.in index 79ac6834e..d31f8a62b 100644 --- a/configure.in +++ b/configure.in @@ -255,6 +255,6 @@ AC_SUBST(ident_support) AC_MSG_RESULT($ident_support) -AC_CONFIG_SUBDIRS(vvp tgt-vvp tgt-fpga libveriuser) +AC_CONFIG_SUBDIRS(vvp tgt-vvp tgt-fpga libveriuser cadpli) AC_OUTPUT(Makefile vpi/Makefile ivlpp/Makefile driver/Makefile driver-vpi/Makefile tgt-null/Makefile tgt-stub/Makefile tgt-verilog/Makefile tgt-pal/Makefile)