Skip to content

Commit 378d799

Browse files
committed
vvp: create libvvp as versioned library
MinGW requires an import library to link against DLLs. Install a libvvp import library so downstream projects can link against libvvp on Windows. Install also a libvvp.pc pkg-config file for the VVP runtime library. This allows downstream projects to discover the correct compiler and linker flags, improving cross-compilation and MinGW support.
1 parent ff2f4c6 commit 378d799

File tree

3 files changed

+51
-4
lines changed

3 files changed

+51
-4
lines changed

configure.ac

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -366,5 +366,5 @@ then
366366
AC_MSG_ERROR(cannot configure white space in libdir: $libdir)
367367
fi
368368
AC_MSG_RESULT(ok)
369-
AC_CONFIG_FILES([Makefile ivlpp/Makefile vhdlpp/Makefile vvp/Makefile vpi/Makefile driver/Makefile driver-vpi/Makefile cadpli/Makefile libveriuser/Makefile tgt-null/Makefile tgt-stub/Makefile tgt-vvp/Makefile tgt-vhdl/Makefile tgt-fpga/Makefile tgt-verilog/Makefile tgt-pal/Makefile tgt-vlog95/Makefile tgt-pcb/Makefile tgt-blif/Makefile tgt-sizer/Makefile])
369+
AC_CONFIG_FILES([Makefile ivlpp/Makefile vhdlpp/Makefile vvp/Makefile vpi/Makefile driver/Makefile driver-vpi/Makefile cadpli/Makefile libveriuser/Makefile tgt-null/Makefile tgt-stub/Makefile tgt-vvp/Makefile tgt-vhdl/Makefile tgt-fpga/Makefile tgt-verilog/Makefile tgt-pal/Makefile tgt-vlog95/Makefile tgt-pcb/Makefile tgt-blif/Makefile tgt-sizer/Makefile vvp/libvvp.pc])
370370
AC_OUTPUT

vvp/Makefile.in

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,17 @@ CXXFLAGS = @WARNING_FLAGS@ @WARNING_FLAGS_CXX@ @CXXFLAGS@
6262
LDFLAGS = @rdynamic@ @LDFLAGS@
6363
LIBS = @LIBS@ @EXTRALIBS@
6464

65+
LIBVVP_SOVERSION = 1
66+
LIBVVP_VERSION = 1.0.0
67+
6568
ifeq (@WIN32@,yes)
6669
SLDIR=$(bindir)
6770
SLEXT=dll
71+
ifeq (@MINGW32@,yes)
72+
IMPEXT=dll.a
73+
else
74+
IMPEXT=lib
75+
endif
6876
else
6977
SLDIR=$(libdir)
7078
SLEXT=so
@@ -144,8 +152,20 @@ CPPFLAGS+= -fpic
144152
vvp@EXEEXT@: main.o $(srcdir)/vvp.def libvvp$(suffix).$(SLEXT)
145153
$(CXX) $(LDFLAGS) -o vvp@EXEEXT@ main.o -L. $(LDFLAGS) -lvvp$(suffix) $(LIBS)
146154

155+
ifeq (@MINGW32@,yes)
156+
libvvp$(suffix).$(SLEXT): $O
157+
$(CXX) -shared $(LDFLAGS) -o libvvp$(suffix)-$(LIBVVP_SOVERSION).$(SLEXT) -Wl,--out-implib libvvp$(suffix).$(IMPEXT) $O $(LIBS) $(dllib)
158+
else
147159
libvvp$(suffix).$(SLEXT): $O
148-
$(CXX) -shared $(LDFLAGS) -o libvvp$(suffix).$(SLEXT) $O $(LIBS) $(dllib)
160+
$(CXX) -shared $(LDFLAGS) \
161+
-Wl,-soname,libvvp$(suffix).$(SLEXT).$(LIBVVP_SOVERSION) \
162+
-o libvvp$(suffix).$(SLEXT).$(LIBVVP_VERSION) \
163+
$O $(LIBS) $(dllib)
164+
ln -sf libvvp$(suffix).$(SLEXT).$(LIBVVP_VERSION) \
165+
libvvp$(suffix).$(SLEXT).$(LIBVVP_SOVERSION)
166+
ln -sf libvvp$(suffix).$(SLEXT).$(LIBVVP_SOVERSION) \
167+
libvvp$(suffix).$(SLEXT)
168+
endif
149169
else
150170
ifeq (@WIN32@,yes)
151171
# To support cocotb, we export the VPI functions directly. This allows
@@ -216,12 +236,14 @@ INSTALL_DOCDIR = $(mandir)/man1
216236
INSTALL_PDFDIR = $(prefix)
217237
endif
218238

239+
pkgconfigdir = $(libdir)/pkgconfig
240+
219241
stamp-config-h: $(srcdir)/config.h.in ../config.status
220242
@rm -f $@
221243
cd ..; ./config.status --header=vvp/config.h
222244
config.h: stamp-config-h
223245

224-
install: all installdirs installfiles
246+
install: all installdirs installfiles installpkgconfig
225247

226248
F = ./vvp@EXEEXT@ $(srcdir)/libvvp.h $(INSTALL_DOC)
227249

@@ -234,7 +256,20 @@ installpdf: vvp.pdf installdirs
234256
installfiles: $(F) | installdirs
235257
$(INSTALL_PROGRAM) ./vvp@EXEEXT@ "$(DESTDIR)$(bindir)/vvp$(suffix)@EXEEXT@"
236258
ifeq (@LIBVVP@,yes)
237-
$(INSTALL_PROGRAM) ./libvvp$(suffix).$(SLEXT) "$(DESTDIR)$(SLDIR)/libvvp$(suffix).$(SLEXT)"
259+
ifeq (@WIN32@,yes)
260+
$(INSTALL_PROGRAM) ./libvvp$(suffix)-$(LIBVVP_SOVERSION).$(SLEXT) "$(DESTDIR)$(bindir)/libvvp$(suffix)-$(LIBVVP_SOVERSION).$(SLEXT)"
261+
$(INSTALL_PROGRAM) ./libvvp$(suffix).$(IMPEXT) "$(DESTDIR)$(libdir)/libvvp$(suffix).$(IMPEXT)"
262+
else
263+
# Install real library
264+
$(INSTALL_PROGRAM) ./libvvp$(suffix).$(SLEXT).$(LIBVVP_VERSION) \
265+
"$(DESTDIR)$(SLDIR)/libvvp$(suffix).$(SLEXT).$(LIBVVP_VERSION)"
266+
# SONAME symlink (runtime)
267+
ln -sf libvvp$(suffix).$(SLEXT).$(LIBVVP_VERSION) \
268+
"$(DESTDIR)$(SLDIR)/libvvp$(suffix).$(SLEXT).$(LIBVVP_SOVERSION)"
269+
# Linker symlink (devel)
270+
ln -sf libvvp$(suffix).$(SLEXT).$(LIBVVP_SOVERSION) \
271+
"$(DESTDIR)$(SLDIR)/libvvp$(suffix).$(SLEXT)"
272+
endif
238273
$(INSTALL_DATA) $(srcdir)/libvvp.h "$(DESTDIR)$(includedir)/libvvp.h"
239274
endif
240275

@@ -244,6 +279,9 @@ installdirs: $(srcdir)/../mkinstalldirs
244279
"$(DESTDIR)$(INSTALL_DOCDIR)" \
245280
"$(DESTDIR)$(INSTALL_PDFDIR)"
246281

282+
installpkgconfig:
283+
$(INSTALL) -d $(DESTDIR)$(pkgconfigdir)
284+
$(INSTALL_DATA) libvvp.pc $(DESTDIR)$(pkgconfigdir)
247285

248286
uninstall: $(UNINSTALL32)
249287
rm -f "$(DESTDIR)$(bindir)/vvp$(suffix)@EXEEXT@"

vvp/libvvp.pc.in

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
prefix=@prefix@
2+
exec_prefix=@exec_prefix@
3+
libdir=@libdir@
4+
includedir=@includedir@
5+
6+
Name: libvvp
7+
Description: Icarus Verilog VVP runtime library
8+
Libs: -L${libdir} -lvvp
9+
Cflags: -I${includedir}/iverilog

0 commit comments

Comments
 (0)