# # 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 # SHELL = /bin/sh # This version string is only used in the version message printed # by the compiler. It reflects the assigned version number for the # product as a whole. Most components also print the CVS Name: token # in order to get a more automatic version stamp as well. VERSION = 0.9.devel prefix = @prefix@ exec_prefix = @exec_prefix@ srcdir = @srcdir@ datarootdir = @datarootdir@ SUBDIRS = @subdirs@ VPATH = $(srcdir) bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ mandir = @mandir@ dllib=@DLLIB@ CC = @CC@ CXX = @CXX@ INSTALL = @INSTALL@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ LEX = @LEX@ YACC = @YACC@ MAN = @MAN@ PS2PDF = @PS2PDF@ GIT = @GIT@ CPPFLAGS = @ident_support@ @DEFS@ -I. -I$(srcdir) @CPPFLAGS@ CXXFLAGS = -Wall @CXXFLAGS@ PICFLAGS = @PICFLAG@ LDFLAGS = @rdynamic@ @LDFLAGS@ all: dep version.h ivl@EXEEXT@ for dir in $(SUBDIRS); do (cd $$dir ; $(MAKE) $@); done for dir in ivlpp ; \ do (cd $$dir ; $(MAKE) $@); done cd driver ; $(MAKE) VERSION=$(VERSION) $@ # In the windows world, the installer will need a dosify program to # dosify text files. ifeq (@MINGW32@,yes) all: dep dosify.exe dosify.exe: dosify.c $(CC) -o dosify.exe dosify.c endif # This rule rules the compiler in the trivial hello.vl program to make # sure the basics were compiled properly. check: all for dir in $(SUBDIRS); do (cd $$dir ; $(MAKE) check); done test -r check.conf || cp $(srcdir)/check.conf . driver/iverilog -B. -BPivlpp -tcheck -ocheck.vvp $(srcdir)/examples/hello.vl vvp/vvp -M- -M./vpi ./check.vvp | grep 'Hello, World' clean: for dir in $(SUBDIRS); do (cd $$dir ; $(MAKE) $@); done for dir in vpi ivlpp tgt-verilog tgt-pal driver driver-vpi; \ do (cd $$dir ; $(MAKE) $@); done rm -f *.o parse.cc parse.cc.output parse.h lexor.cc rm -f ivl.exp iverilog-vpi.pdf iverilog-vpi.ps parse.output rm -f syn-rules.output dosify.exe ivl@EXEEXT@ check.vvp rm -f lexor_keyword.cc libivl.a libvpi.a iverilog-vpi syn-rules.cc* rm -rf dep distclean: clean for dir in $(SUBDIRS); do (cd $$dir ; $(MAKE) $@); done for dir in vpi ivlpp tgt-verilog tgt-pal driver driver-vpi; \ do (cd $$dir ; $(MAKE) $@); done rm -f Makefile config.status config.log config.cache config.h rm -f _pli_types.h TT = t-dll.o t-dll-api.o t-dll-expr.o t-dll-proc.o FF = cprop.o nodangle.o synth.o synth2.o syn-rules.o O = main.o async.o design_dump.o discipline.o dup_expr.o elaborate.o elab_expr.o \ elab_lval.o elab_net.o elab_pexpr.o elab_scope.o \ elab_sig.o emit.o eval.o eval_attrib.o \ eval_tree.o expr_synth.o functor.o lexor.o lexor_keyword.o link_const.o \ load_module.o netlist.o netmisc.o net_assign.o \ net_design.o net_event.o net_expr.o net_force.o net_func.o \ net_link.o net_modulo.o net_nex_input.o net_nex_output.o \ net_proc.o net_scope.o net_tran.o net_udp.o pad_to_width.o \ parse.o parse_misc.o pform.o pform_disciplines.o pform_dump.o pform_types.o \ set_width.o symbol_search.o sync.o sys_funcs.o \ verinum.o verireal.o target.o targets.o \ Attrib.o HName.o LineInfo.o Module.o PDelays.o PEvent.o \ PExpr.o PGate.o PGenerate.o PScope.o PSpec.o \ PTask.o PUdp.o PFunction.o PWire.o Statement.o StringHeap.o \ $(FF) $(TT) Makefile: Makefile.in config.h.in config.status ./config.status ifeq (@WIN32@,yes) # Under Windows (mingw) I need to make the ivl.exe in two steps. # The first step makes an ivl.exe that dlltool can use to make an # export and import library, and the last link makes a, ivl.exe # that really exports the things that the import library imports. ivl@EXEEXT@: $O $(srcdir)/ivl.def $(CXX) -o ivl@EXEEXT@ $O $(dllib) @EXTRALIBS@ dlltool --dllname ivl@EXEEXT@ --def $(srcdir)/ivl.def \ --output-lib libivl.a --output-exp ivl.exp $(CXX) $(LDFLAGS) -o ivl@EXEEXT@ ivl.exp $O $(dllib) @EXTRALIBS@ else ivl@EXEEXT@: $O $(CXX) $(LDFLAGS) -o ivl@EXEEXT@ $O $(dllib) endif ifeq (@MINGW32@,yes) SUBDIRS += driver-vpi else all: dep iverilog-vpi iverilog-vpi: iverilog-vpi.sh sed -e 's;@SHARED@;@shared@;' -e 's;@PIC@;@PICFLAG@;' \ -e 's;@IVCC@;$(CC);' \ -e 's;@IVCXX@;$(CXX);' \ -e 's;@IVCFLAGS@;$(CXXFLAGS);' \ -e 's;@INCLUDEDIR@;@includedir@;' \ -e 's;@LIBDIR@;@libdir@;' $< > $@ chmod +x $@ endif dep: mkdir dep %.o: %.cc $(CXX) $(CPPFLAGS) $(CXXFLAGS) -MD -c $< -o $*.o mv $*.d dep/$*.d lexor.o: lexor.cc parse.h parse.o: parse.cc parse.cc parse.h: $(srcdir)/parse.y $(YACC) --verbose -t -p VL -d -o parse.cc $(srcdir)/parse.y mv parse.cc.h parse.h 2>/dev/null || mv parse.hh parse.h syn-rules.cc: $(srcdir)/syn-rules.y $(YACC) --verbose -p syn_ -o syn-rules.cc $(srcdir)/syn-rules.y lexor.cc: $(srcdir)/lexor.lex $(LEX) -PVL -s -olexor.cc $(srcdir)/lexor.lex lexor_keyword.o: lexor_keyword.cc parse.h lexor_keyword.cc: lexor_keyword.gperf gperf -o -i 7 -C -k 1-4,$$ -L ANSI-C -H keyword_hash -N check_identifier -t $(srcdir)/lexor_keyword.gperf > lexor_keyword.cc || (rm -f lexor_keyword.cc ; false) iverilog-vpi.ps: $(srcdir)/iverilog-vpi.man $(MAN) -t $(srcdir)/iverilog-vpi.man > iverilog-vpi.ps iverilog-vpi.pdf: iverilog-vpi.ps $(PS2PDF) iverilog-vpi.ps iverilog-vpi.pdf # For VERSION_TAG in driver/main.c, first try git-describe, then look for a # version.h file in the source tree (included in snapshots and releases), and # finally use nothing. .PHONY: version.h # "true" and "false" in the next few lines are Unix shell command names ifeq ($(GIT),none) GIT_PRESENT = false else GIT_PRESENT = true endif version.h: @if $(GIT_PRESENT) && test -d $(srcdir)/.git; then \ echo "Using git-describe for VERSION_TAG"; \ tmp=`$(GIT) --git-dir $(srcdir)/.git describe \ | sed -e 's;\(.*\);#define VERSION_TAG "\1";'`; \ echo "$$tmp" | diff - $@ > /dev/null 2>&1 || echo "$$tmp" > $@ || exit 1; \ elif test -r $(srcdir)/$@; then \ echo "Using $(srcdir)/$@ for VERSION_TAG"; \ diff $(srcdir)/$@ $@ > /dev/null 2>&1 || cp $(srcdir)/$@ $@; \ else \ echo "Using empty VERSION_TAG"; \ echo '#define VERSION_TAG ""' > $@; \ fi ifeq (@MINGW32@,yes) ifeq ($(MAN),none) INSTALL_DOC = $(mandir)/man1/iverilog-vpi.1 else ifeq ($(PS2PDF),none) INSTALL_DOC = $(mandir)/man1/iverilog-vpi.1 else INSTALL_DOC = $(prefix)/iverilog-vpi.pdf $(mandir)/man1/iverilog-vpi.1 all: dep iverilog-vpi.pdf endif endif INSTALL_DOCDIR = $(mandir)/man1 else INSTALL_DOC = $(mandir)/man1/iverilog-vpi.1 INSTALL_DOCDIR = $(mandir)/man1 endif ifeq (@MINGW32@,yes) WIN32_INSTALL = $(prefix)/hello.vl $(prefix)/sqrt.vl $(prefix)/sqrt-virtex.v $(prefix)/QUICK_START.txt else WIN32_INSTALL = $(bindir)/iverilog-vpi endif XNF_INSTALL = $(libdir)/ivl/xnf.conf $(libdir)/ivl/xnf-s.conf install: all installdirs $(libdir)/ivl/ivl@EXEEXT@ $(libdir)/ivl/include/constants.vams $(libdir)/ivl/include/disciplines.vams $(includedir)/ivl_target.h $(includedir)/_pli_types.h $(includedir)/vpi_user.h $(includedir)/acc_user.h $(includedir)/veriuser.h $(WIN32_INSTALL) $(INSTALL_DOC) for dir in $(SUBDIRS); do (cd $$dir ; $(MAKE) $@); done for dir in vpi ivlpp driver; \ do (cd $$dir ; $(MAKE) $@); done $(bindir)/iverilog-vpi: ./iverilog-vpi $(INSTALL_SCRIPT) ./iverilog-vpi $(DESTDIR)$(bindir)/iverilog-vpi $(libdir)/ivl/ivl@EXEEXT@: ./ivl@EXEEXT@ $(INSTALL_PROGRAM) ./ivl@EXEEXT@ $(DESTDIR)$(libdir)/ivl/ivl@EXEEXT@ $(libdir)/ivl/include/constants.vams: $(srcdir)/constants.vams $(INSTALL_DATA) $(srcdir)/constants.vams $@ $(libdir)/ivl/include/disciplines.vams: $(srcdir)/disciplines.vams $(INSTALL_DATA) $(srcdir)/disciplines.vams $@ $(libdir)/ivl/xnf-s.conf: $(srcdir)/xnf-s.conf $(INSTALL_DATA) $(srcdir)/xnf-s.conf $(DESTDIR)$(libdir)/ivl/xnf-s.conf $(libdir)/ivl/xnf.conf: $(srcdir)/xnf.conf $(INSTALL_DATA) $(srcdir)/xnf.conf $(DESTDIR)$(libdir)/ivl/xnf.conf $(includedir)/ivl_target.h: $(srcdir)/ivl_target.h $(INSTALL_DATA) $(srcdir)/ivl_target.h $(DESTDIR)$(includedir)/ivl_target.h $(includedir)/_pli_types.h: _pli_types.h $(INSTALL_DATA) $< $(DESTDIR)$(includedir)/_pli_types.h $(includedir)/vpi_user.h: $(srcdir)/vpi_user.h $(INSTALL_DATA) $(srcdir)/vpi_user.h $(DESTDIR)$(includedir)/vpi_user.h $(includedir)/acc_user.h: $(srcdir)/acc_user.h $(INSTALL_DATA) $(srcdir)/acc_user.h $(DESTDIR)$(includedir)/acc_user.h $(includedir)/veriuser.h: $(srcdir)/veriuser.h $(INSTALL_DATA) $(srcdir)/veriuser.h $(DESTDIR)$(includedir)/veriuser.h $(mandir)/man1/iverilog-vpi.1: $(srcdir)/iverilog-vpi.man $(INSTALL_DATA) $(srcdir)/iverilog-vpi.man $(DESTDIR)$(mandir)/man1/iverilog-vpi.1 $(prefix)/iverilog-vpi.pdf: iverilog-vpi.pdf $(INSTALL_DATA) iverilog-vpi.pdf $(DESTDIR)$(prefix)/iverilog-vpi.pdf # In windows installations, put a few examples and the quick_start # into the destination directory. ifeq (@MINGW32@,yes) $(prefix)/hello.vl: $(srcdir)/examples/hello.vl ./dosify.exe $(srcdir)/examples/hello.vl tmp.vl mv tmp.vl $(prefix)/hello.vl $(prefix)/sqrt.vl: $(srcdir)/examples/sqrt.vl ./dosify.exe $(srcdir)/examples/sqrt.vl tmp.vl mv tmp.vl $(prefix)/sqrt.vl $(prefix)/sqrt-virtex.v: $(srcdir)/examples/sqrt-virtex.v ./dosify.exe $(srcdir)/examples/sqrt-virtex.v tmp.vl mv tmp.vl $(prefix)/sqrt-virtex.v $(prefix)/QUICK_START.txt: $(srcdir)/QUICK_START.txt ./dosify.exe $(srcdir)/QUICK_START.txt tmp.txt mv tmp.txt $(prefix)/QUICK_START.txt endif installdirs: mkinstalldirs $(srcdir)/mkinstalldirs $(DESTDIR)$(bindir) $(DESTDIR)$(includedir) $(DESTDIR)$(libdir)/ivl \ $(DESTDIR)$(libdir)/ivl/include $(DESTDIR)$(mandir) $(DESTDIR)$(mandir)/man1 uninstall: for dir in $(SUBDIRS); do (cd $$dir ; $(MAKE) $@); done for dir in vpi ivlpp driver; \ do (cd $$dir ; $(MAKE) $@); done for f in xnf.conf xnf-s.conf ivl@EXEEXT@ include/constants.vams include/disciplines.vams; \ do rm -f $(DESTDIR)$(libdir)/ivl/$$f; done -rmdir $(DESTDIR)$(libdir)/ivl/include -rmdir $(DESTDIR)$(libdir)/ivl for f in verilog iverilog-vpi gverilog@EXEEXT@; \ do rm -f $(DESTDIR)$(bindir)/$$f; done for f in ivl_target.h vpi_user.h _pli_types.h acc_user.h veriuser.h; \ do rm -f $(DESTDIR)$(includedir)/$$f; done rm -f $(DESTDIR)$(mandir)/man1/iverilog-vpi.1 $(DESTDIR)$(prefix)/iverilog-vpi.pdf -include $(patsubst %.o, dep/%.d, $O) -include $(patsubst %.o, dep/%.d, vpithunk.o)