# -*- Makefile -*- #***************************************************************************** # # DESCRIPTION: Verilator: Makefile for verilog source # # Code available from: http://www.veripool.org/verilator # #***************************************************************************** # # Copyright 2003-2011 by Wilson Snyder. This program is free software; you can # redistribute it and/or modify it under the terms of either the GNU # Lesser General Public License Version 3 or the Perl Artistic License # Version 2.0. # # Verilator 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. # #****************************************************************************/ #### Start of system configuration section. #### # Unfortunately configure uses relative paths, and this makefile is called # from a level lower, so we need to move up if it's relative, not if absolute. config_srcdir = @srcdir@ ifeq ($(config_srcdir),.) srcdir = .. else # Run an experiment ifeq ($(shell -e $(config_srcdir)/../Makefile_obj.in),) srcdir = $(config_srcdir) else srcdir = $(config_srcdir)/.. endif endif incdir = $(srcdir)/../include # Bldsrc may differ from srcdir if configure wan't run from the kit top bldsrc = .. # Programs CC = @CC@ CXX = @CXX@ LINK = @CXX@ LEX = @LEX@ LFLAGS = -d PERL = @PERL@ YACC = @YACC@ prefix = @prefix@ # Directory in which to install data across multiple architectures datarootdir = @datarootdir@ # Directory in which to install package specific files # Generally ${prefix}/share/verilator pkgdatadir = @pkgdatadir@ # Compile options CFG_WITH_DEFENV = @CFG_WITH_DEFENV@ CPPFLAGSNOWALL += @CPPFLAGS@ LDFLAGS += @LDFLAGS@ #### End of system configuration section. #### VPATH += . $(bldsrc) $(srcdir) TGT = ../../verilator_bin ################# ifeq ($(VL_DEBUG),) # Optimize COPT = -O else # Debug COPT = -ggdb -DVL_DEBUG # Debug & Profile: #LDFLAGS += -pg -g #COPT = -ggdb -pg -g endif ################# #LIBS += -ldl #CCMALLOC = /usr/local/lib/ccmalloc-gcc.o -lccmalloc -ldl # -lfl not needed as Flex invoked with %nowrap option LIBS = -lm CPPFLAGSNOWALL += -MMD CPPFLAGSNOWALL += -I. -I$(bldsrc) -I$(srcdir) -I$(incdir) CPPFLAGSNOWALL += -DYYDEBUG # Required to get nice error messages #CPPFLAGSNOWALL += -DVL_LEAK_CHECKS # If running valgrind or other hunting tool CPPFLAGSNOWALL += $(COPT) CPPFLAGS = $(CPPFLAGSNOWALL) ifeq ($(VERILATOR_AUTHOR_SITE),1) # Local... Else don't burden users CPPFLAGSNOWALL += -MP # Only works on recent GCC versions CPPFLAGS += -W -Wall -Wno-unused-parameter -Wno-char-subscripts -Werror #CPPFLAGS += -pedantic-errors endif ifneq ($(SYSTEMPERL),) # Intuit SYSTEMPERL_INCLUDE as it's new SYSTEMPERL_INCLUDE ?= $(SYSTEMPERL)/src #else if set, leave as-is. #else if SYSTEMPERL="" don't set _INCLUDE so source will figure it out endif # Allow RPM builds to specify hardcoded data directories # To do this: ifeq ($(CFG_WITH_DEFENV),yes) CPPFLAGS += -DDEFENV_SYSTEMC=\"$(SYSTEMC)\" CPPFLAGS += -DDEFENV_SYSTEMC_ARCH=\"$(SYSTEMC_ARCH)\" CPPFLAGS += -DDEFENV_SYSTEMPERL=\"$(SYSTEMPERL)\" CPPFLAGS += -DDEFENV_SYSTEMPERL_INCLUDE=\"$(SYSTEMPERL_INCLUDE)\" ifeq ($(VERILATOR_ROOT),) # Use what we're given, or intuit CPPFLAGS += -DDEFENV_VERILATOR_ROOT=\"$(pkgdatadir)\" else CPPFLAGS += -DDEFENV_VERILATOR_ROOT=\"$(VERILATOR_ROOT)\" endif endif HEADERS = $(wildcard V*.h v*.h) ASTGEN = $(srcdir)/astgen BISONPRE = $(srcdir)/bisonpre FLEXFIX = $(srcdir)/flexfix ###################################################################### #### Top level all: make_info $(TGT) make_info: @echo " Compile flags: " $(CXX) ${CPPFLAGS} clean mostlyclean distclean maintainer-clean:: -rm -f *.o *.d perlxsi.c *_gen_* -rm -f *__gen* -rm -f obj_* .objcache* distclean maintainer-clean:: clean maintainer-clean:: maintainer-copy:: #### Top executable RAW_OBJS = \ Verilator.o \ V3Active.o \ V3ActiveTop.o \ V3Assert.o \ V3AssertPre.o \ V3Ast.o \ V3AstNodes.o \ V3Begin.o \ V3Branch.o \ V3Broken.o \ V3Case.o \ V3Cast.o \ V3Cdc.o \ V3Changed.o \ V3Clean.o \ V3ClkGater.o \ V3Clock.o \ V3Combine.o \ V3Config.o \ V3Const__gen.o \ V3Coverage.o \ V3CoverageJoin.o \ V3Dead.o \ V3Delayed.o \ V3Depth.o \ V3DepthBlock.o \ V3Descope.o \ V3EmitC.o \ V3EmitCInlines.o \ V3EmitCSyms.o \ V3EmitMk.o \ V3EmitV.o \ V3Error.o \ V3Expand.o \ V3File.o \ V3Gate.o \ V3GenClk.o \ V3Graph.o \ V3GraphAlg.o \ V3GraphAcyc.o \ V3GraphDfa.o \ V3GraphTest.o \ V3Hashed.o \ V3Inline.o \ V3Inst.o \ V3Life.o \ V3LifePost.o \ V3Link.o \ V3LinkCells.o \ V3LinkDot.o \ V3LinkJump.o \ V3LinkLValue.o \ V3LinkLevel.o \ V3LinkParse.o \ V3LinkResolve.o \ V3Localize.o \ V3Name.o \ V3Number.o \ V3Options.o \ V3Order.o \ V3Param.o \ V3PreShell.o \ V3Premit.o \ V3Scope.o \ V3Signed.o \ V3Slice.o \ V3Split.o \ V3SplitAs.o \ V3Stats.o \ V3StatsReport.o \ V3Subst.o \ V3Table.o \ V3Task.o \ V3Trace.o \ V3TraceDecl.o \ V3Tristate.o \ V3Undriven.o \ V3Unknown.o \ V3Unroll.o \ V3Width.o \ V3WidthSel.o \ # Non-concatable OBJS += \ V3ParseImp.o \ V3ParseGrammar.o \ V3ParseLex.o \ V3PreProc.o \ #### Linking ifeq ($(VL_DEBUG),) # Building with fewer objects to better optimize #OBJS += V3__CONCAT.o OBJS += $(RAW_OBJS) else OBJS += $(RAW_OBJS) endif V3__CONCAT.cpp: $(addsuffix .cpp, $(basename $(RAW_OBJS))) $(PERL) $(srcdir)/../bin/verilator_includer $^ > $@ $(TGT): V3Ast__gen_classes.h $(OBJS) @echo " Linking $@..." -rm -rf $@ $@.exe ${LINK} ${LDFLAGS} -o $@ $(OBJS) $(CCMALLOC) ${LIBS} @-(cp $@.exe $@ || true) # ok if cp failes on linux, it's there to insure executable works on NT V3Number_test: V3Number_test.o ${LINK} ${LDFLAGS} -o $@ $^ ${LIBS} #### Modules %__gen.cpp: %.cpp $(ASTGEN) V3Ast.h V3AstNodes.h $(PERL) $(ASTGEN) -I$(srcdir) $*.cpp %.o: %.cpp $(OBJCACHE) ${CXX} ${CPPFLAGS} -c $< %.o: %.c $(OBJCACHE) ${CC} ${CPPFLAGS} -c $< V3ParseLex.o: V3ParseLex.cpp V3Lexer.yy.cpp V3ParseBison.c $(OBJCACHE) ${CXX} ${CPPFLAGSNOWALL} -c $< V3ParseGrammar.o: V3ParseGrammar.cpp V3ParseBison.c $(OBJCACHE) ${CXX} ${CPPFLAGSNOWALL} -c $< V3ParseImp.o: V3ParseImp.cpp V3ParseBison.c $(OBJCACHE) ${CXX} ${CPPFLAGSNOWALL} -c $< V3PreProc.o: V3PreProc.cpp V3PreLex.yy.cpp $(OBJCACHE) ${CXX} ${CPPFLAGSNOWALL} -c $< #### Generated files # Target rule called before parallel build to make generated files serial:: V3Ast__gen_classes.h V3ParseBison.c V3Ast__gen_classes.h : $(ASTGEN) V3Ast.h V3AstNodes.h $(PERL) $(ASTGEN) -I$(srcdir) --classes V3ParseBison.h: V3ParseBison.c # Have only one output file in this rule to prevent parallel make issues V3ParseBison.c: verilog.y $(BISONPRE) @echo "If you get errors from verilog.y below, try upgrading bison to version 1.875 or newer." $(PERL) $(BISONPRE) --yacc ${YACC} -d -v -o V3ParseBison.c $< V3Lexer_pregen.yy.cpp: verilog.l V3ParseBison.h $(HEADERS) ${LEX} --version ${LEX} ${LFLAGS} -o$@ $< V3Lexer.yy.cpp: V3Lexer_pregen.yy.cpp $(FLEXFIX) $(PERL) $(FLEXFIX) V3Lexer <$< >$@ V3PreLex_pregen.yy.cpp: V3PreLex.l $(HEADERS) ${LEX} --version ${LEX} ${LFLAGS} -o$@ $< V3PreLex.yy.cpp: V3PreLex_pregen.yy.cpp $(FLEXFIX) $(PERL) $(FLEXFIX) V3PreLex <$< >$@ ###################################################################### ###################################################################### DEPS := $(wildcard *.d) ifneq ($(DEPS),) include $(DEPS) endif