302 lines
10 KiB
Makefile
302 lines
10 KiB
Makefile
#
|
|
# 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.181 2007/05/24 04:07:11 steve Exp $"
|
|
#
|
|
#
|
|
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@
|
|
|
|
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 (@MING32@,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 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_udp.o pad_to_width.o \
|
|
parse.o parse_misc.o pform.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-3,$$ -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
|
|
version.h:
|
|
@if 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 (@MING32@,yes)
|
|
INSTALL_DOC = $(prefix)/iverilog-vpi.pdf $(mandir)/man1/iverilog-vpi.1
|
|
INSTALL_DOCDIR = $(mandir)/man1
|
|
all: dep iverilog-vpi.pdf
|
|
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 $(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/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; \
|
|
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)
|