2008-06-09 21:25:10 -04:00
|
|
|
# -*- Makefile -*-
|
2006-08-26 11:35:28 +00:00
|
|
|
#*****************************************************************************
|
|
|
|
|
#
|
|
|
|
|
# DESCRIPTION: Verilator: Makefile for verilog source
|
|
|
|
|
#
|
2019-11-07 22:33:59 -05:00
|
|
|
# Code available from: https://verilator.org
|
2006-08-26 11:35:28 +00:00
|
|
|
#
|
|
|
|
|
#*****************************************************************************
|
|
|
|
|
#
|
2026-01-26 20:24:34 -05:00
|
|
|
# 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.
|
|
|
|
|
# SPDX-FileCopyrightText: 2025-2026 Wilson Snyder
|
2020-03-21 11:24:24 -04:00
|
|
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
2006-08-26 11:35:28 +00:00
|
|
|
#
|
|
|
|
|
#****************************************************************************/
|
|
|
|
|
|
|
|
|
|
#### Start of system configuration section. ####
|
|
|
|
|
|
2009-11-25 17:20:28 -05:00
|
|
|
# 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),.)
|
2025-06-24 17:58:55 -04:00
|
|
|
srcdir = ..
|
2009-11-25 17:20:28 -05:00
|
|
|
else # Run an experiment
|
2025-06-24 17:58:55 -04:00
|
|
|
ifeq ($(wildcard $(config_srcdir)/../Makefile_obj.in),)
|
|
|
|
|
srcdir = $(config_srcdir)
|
|
|
|
|
else
|
|
|
|
|
srcdir = $(config_srcdir)/..
|
|
|
|
|
endif
|
2009-11-25 17:20:28 -05:00
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
incdir = $(srcdir)/../include
|
|
|
|
|
# Bldsrc may differ from srcdir if configure wan't run from the kit top
|
|
|
|
|
bldsrc = ..
|
2006-08-26 11:35:28 +00:00
|
|
|
|
2008-06-24 14:50:34 -04:00
|
|
|
# Programs
|
2025-10-07 18:37:42 +02:00
|
|
|
CC = false # Everything is built as C++ via CXX
|
2006-08-26 11:35:28 +00:00
|
|
|
CXX = @CXX@
|
|
|
|
|
LINK = @CXX@
|
2008-06-24 14:50:34 -04:00
|
|
|
LEX = @LEX@
|
|
|
|
|
LFLAGS = -d
|
2020-12-23 15:41:14 -05:00
|
|
|
PYTHON3 = @PYTHON3@
|
2008-06-24 14:50:34 -04:00
|
|
|
YACC = @YACC@
|
2020-04-05 16:10:33 -04:00
|
|
|
OBJCACHE ?= @OBJCACHE@
|
2008-03-18 20:26:37 +00:00
|
|
|
|
|
|
|
|
prefix = @prefix@
|
|
|
|
|
|
2008-04-29 14:14:20 +00:00
|
|
|
# Directory in which to install data across multiple architectures
|
|
|
|
|
datarootdir = @datarootdir@
|
|
|
|
|
|
2024-09-10 19:04:55 -04:00
|
|
|
# Directory in which to install package-specific files
|
2008-03-18 20:26:37 +00:00
|
|
|
# Generally ${prefix}/share/verilator
|
|
|
|
|
pkgdatadir = @pkgdatadir@
|
|
|
|
|
|
2008-06-24 14:50:34 -04:00
|
|
|
# Compile options
|
2011-10-07 06:48:40 -04:00
|
|
|
CFG_WITH_CCWARN = @CFG_WITH_CCWARN@
|
2008-06-24 14:50:34 -04:00
|
|
|
CFG_WITH_DEFENV = @CFG_WITH_DEFENV@
|
2025-10-03 18:18:24 +02:00
|
|
|
CFG_WITH_DEV_GCOV = @CFG_WITH_DEV_GCOV@
|
2024-05-17 16:38:34 +02:00
|
|
|
CFG_WITH_SOLVER = @CFG_WITH_SOLVER@
|
2011-08-22 21:02:09 -04:00
|
|
|
CPPFLAGS += @CPPFLAGS@
|
2019-07-06 13:02:36 -04:00
|
|
|
CFLAGS += @CFLAGS@
|
|
|
|
|
CXXFLAGS += @CXXFLAGS@
|
2008-06-24 14:50:34 -04:00
|
|
|
LDFLAGS += @LDFLAGS@
|
2011-10-05 17:07:10 -04:00
|
|
|
EXEEXT = @EXEEXT@
|
2015-02-10 22:38:05 -05:00
|
|
|
CFG_CXXFLAGS_SRC = @CFG_CXXFLAGS_SRC@
|
|
|
|
|
CFG_CXXFLAGS_PARSER = @CFG_CXXFLAGS_PARSER@
|
2017-09-14 23:28:02 -04:00
|
|
|
# Compiler flags that turn on extra warnings
|
|
|
|
|
CFG_CXXFLAGS_WEXTRA = @CFG_CXXFLAGS_WEXTRA@
|
2020-01-31 19:13:55 -05:00
|
|
|
CFG_LDFLAGS_SRC = @CFG_LDFLAGS_SRC@
|
2020-01-23 17:32:19 -05:00
|
|
|
CFG_LIBS = @CFG_LIBS@
|
2023-10-17 22:49:28 -04:00
|
|
|
CFG_CXXFLAGS_PCH = -x c++-header
|
|
|
|
|
# Compiler option to put in front of filename to read precompiled header
|
|
|
|
|
CFG_CXXFLAGS_PCH_I = @CFG_CXXFLAGS_PCH_I@
|
|
|
|
|
# Compiler's filename prefix for precompiled headers, .gch if clang, empty if GCC
|
|
|
|
|
CFG_GCH_IF_CLANG = @CFG_GCH_IF_CLANG@
|
2008-06-24 14:50:34 -04:00
|
|
|
|
2006-08-26 11:35:28 +00:00
|
|
|
#### End of system configuration section. ####
|
|
|
|
|
|
2009-11-25 17:20:28 -05:00
|
|
|
VPATH += . $(bldsrc) $(srcdir)
|
2021-06-04 18:04:55 +02:00
|
|
|
TGT = ../../verilator_bin$(EXEEXT)
|
2006-08-26 11:35:28 +00:00
|
|
|
|
|
|
|
|
#################
|
2022-01-08 11:18:23 -05:00
|
|
|
ifeq ($(VL_NOOPT),1)
|
2025-06-24 17:58:55 -04:00
|
|
|
CPPFLAGS += -O0
|
2022-01-08 11:18:23 -05:00
|
|
|
else ifeq ($(VL_DEBUG),)
|
2025-06-24 17:58:55 -04:00
|
|
|
# Optimize
|
2025-10-03 18:18:24 +02:00
|
|
|
CPPFLAGS += @CFG_CXXFLAGS_OPT@
|
2006-08-26 11:35:28 +00:00
|
|
|
else
|
2025-06-24 17:58:55 -04:00
|
|
|
# Debug
|
2025-10-03 18:18:24 +02:00
|
|
|
CPPFLAGS += @CFG_CXXFLAGS_DBG@ -DVL_DEBUG -D_GLIBCXX_DEBUG
|
|
|
|
|
LDFLAGS += @CFG_LDFLAGS_DBG@
|
2006-08-26 11:35:28 +00:00
|
|
|
endif
|
|
|
|
|
#################
|
|
|
|
|
|
|
|
|
|
#LIBS += -ldl
|
|
|
|
|
#CCMALLOC = /usr/local/lib/ccmalloc-gcc.o -lccmalloc -ldl
|
|
|
|
|
|
2010-02-01 06:37:39 -05:00
|
|
|
# -lfl not needed as Flex invoked with %nowrap option
|
2020-01-31 19:13:55 -05:00
|
|
|
LIBS = $(CFG_LIBS) -lm
|
2006-08-26 11:35:28 +00:00
|
|
|
|
2023-04-11 13:23:24 +02:00
|
|
|
CPPFLAGS += -DVERILATOR_INTERNAL_
|
2011-08-22 21:02:09 -04:00
|
|
|
CPPFLAGS += -MMD
|
2018-08-25 07:55:48 -04:00
|
|
|
CPPFLAGS += -I. -I$(bldsrc) -I$(srcdir) -I$(incdir) -I../../include
|
2026-02-28 18:21:51 -05:00
|
|
|
#CPPFLAGS += -DVL_ALLOC_RANDOM_CHECKS # To allow --debug-new-random
|
2023-01-29 19:39:22 -08:00
|
|
|
#CPPFLAGS += -DVL_LEAK_CHECKS # If running valgrind or other hunting tool
|
2011-08-22 21:02:09 -04:00
|
|
|
CPPFLAGS += -MP # Only works on recent GCC versions
|
2026-08-26 20:09:21 -04:00
|
|
|
# Replaces VNUser's union with a std::variant to validate int vs void* usage
|
|
|
|
|
# Ignored unless the build is C++17 or newer
|
|
|
|
|
#CPPFLAGS += -DVL_USER_TYPE_CHECKS
|
2023-01-29 19:39:22 -08:00
|
|
|
ifeq ($(CFG_WITH_CCWARN),yes) # Local... Else don't burden users
|
2025-06-24 17:58:55 -04:00
|
|
|
CPPFLAGS += -W -Wall $(CFG_CXXFLAGS_WEXTRA) $(CFG_CXXFLAGS_SRC) -Werror
|
|
|
|
|
#CPPFLAGS += -pedantic-errors
|
2016-05-16 21:40:49 -04:00
|
|
|
else
|
2025-06-24 17:58:55 -04:00
|
|
|
CPPFLAGS += $(CFG_CXXFLAGS_SRC)
|
2006-08-26 11:35:28 +00:00
|
|
|
endif
|
2020-01-31 19:13:55 -05:00
|
|
|
LDFLAGS += $(CFG_LDFLAGS_SRC)
|
2017-11-02 18:02:11 -04:00
|
|
|
|
2025-06-24 17:58:55 -04:00
|
|
|
CPPFLAGSWALL = $(CPPFLAGS)
|
2015-02-10 22:38:05 -05:00
|
|
|
CPPFLAGSPARSER = $(CPPFLAGS) $(CFG_CXXFLAGS_PARSER)
|
2006-08-26 11:35:28 +00:00
|
|
|
|
2008-03-18 20:26:37 +00:00
|
|
|
# Allow RPM builds to specify hardcoded data directories
|
|
|
|
|
# To do this:
|
2008-03-28 19:42:14 +00:00
|
|
|
ifeq ($(CFG_WITH_DEFENV),yes)
|
2025-06-24 17:58:55 -04:00
|
|
|
CPPFLAGS += -DDEFENV_SYSTEMC=\"$(SYSTEMC)\"
|
|
|
|
|
CPPFLAGS += -DDEFENV_SYSTEMC_ARCH=\"$(SYSTEMC_ARCH)\"
|
|
|
|
|
CPPFLAGS += -DDEFENV_SYSTEMC_INCLUDE=\"$(SYSTEMC_INCLUDE)\"
|
|
|
|
|
CPPFLAGS += -DDEFENV_SYSTEMC_LIBDIR=\"$(SYSTEMC_LIBDIR)\"
|
|
|
|
|
ifeq ($(VERILATOR_ROOT),) # Use what we're given, or intuit
|
|
|
|
|
CPPFLAGS += -DDEFENV_VERILATOR_ROOT=\"$(pkgdatadir)\"
|
|
|
|
|
else
|
|
|
|
|
CPPFLAGS += -DDEFENV_VERILATOR_ROOT=\"$(VERILATOR_ROOT)\"
|
|
|
|
|
endif
|
|
|
|
|
ifneq ($(CFG_WITH_SOLVER),no)
|
|
|
|
|
CPPFLAGS += -DDEFENV_VERILATOR_SOLVER='"$(CFG_WITH_SOLVER)"'
|
|
|
|
|
else
|
|
|
|
|
ifneq ($(VERILATOR_SOLVER),)
|
|
|
|
|
CPPFLAGS += -DDEFENV_VERILATOR_SOLVER='"$(VERILATOR_SOLVER)"'
|
|
|
|
|
endif
|
2024-05-17 16:38:34 +02:00
|
|
|
endif
|
2008-03-18 20:26:37 +00:00
|
|
|
endif
|
|
|
|
|
|
2025-10-03 18:18:24 +02:00
|
|
|
# Object file specific options
|
|
|
|
|
CXXFLAGSOBJ =
|
|
|
|
|
ifeq ($(CFG_WITH_DEV_GCOV),yes)
|
|
|
|
|
# Adding '-fkeep-inline-functions' to all files slows down coverage collection
|
|
|
|
|
# during 'make test' by ~3x. This option is only useful to make sure that
|
|
|
|
|
# 'inline' functions defined in headers are actually emitted so they show up as
|
|
|
|
|
# uncovered if they are never called, so instead of adding it everywhere, use
|
|
|
|
|
# only on a few files that together pull in most of the headers.
|
|
|
|
|
Verilator.o V3Dfg.o: CXXFLAGSOBJ += -fkeep-inline-functions
|
|
|
|
|
endif
|
|
|
|
|
|
2006-08-26 11:35:28 +00:00
|
|
|
HEADERS = $(wildcard V*.h v*.h)
|
|
|
|
|
|
|
|
|
|
ASTGEN = $(srcdir)/astgen
|
2008-08-06 12:35:34 -04:00
|
|
|
BISONPRE = $(srcdir)/bisonpre
|
2010-02-26 19:50:44 -05:00
|
|
|
FLEXFIX = $(srcdir)/flexfix
|
2014-11-23 21:06:10 -05:00
|
|
|
VLCOVGEN = $(srcdir)/vlcovgen
|
2006-08-26 11:35:28 +00:00
|
|
|
|
2024-12-01 11:35:00 -05:00
|
|
|
# BISON_DEBUG = -Wcounterexamples
|
|
|
|
|
|
2023-10-17 22:49:28 -04:00
|
|
|
######################################################################
|
|
|
|
|
# CCACHE flags (via environment as no command line option available)
|
|
|
|
|
CCACHE_SLOPPINESS ?= pch_defines,time_macros
|
|
|
|
|
export CCACHE_SLOPPINESS
|
|
|
|
|
|
2006-08-26 11:35:28 +00:00
|
|
|
######################################################################
|
|
|
|
|
#### Top level
|
|
|
|
|
|
|
|
|
|
all: make_info $(TGT)
|
|
|
|
|
|
|
|
|
|
make_info:
|
2019-07-06 13:02:36 -04:00
|
|
|
@echo " Compile flags: " $(CXX) ${CFLAGS} ${CXXFLAGS} ${CPPFLAGS}
|
2006-08-26 11:35:28 +00:00
|
|
|
|
|
|
|
|
clean mostlyclean distclean maintainer-clean::
|
2020-12-23 15:41:14 -05:00
|
|
|
-rm -f *.o *.d *_gen_*
|
2006-08-26 11:35:28 +00:00
|
|
|
-rm -f *__gen*
|
|
|
|
|
-rm -f obj_* .objcache*
|
|
|
|
|
|
|
|
|
|
distclean maintainer-clean:: clean
|
|
|
|
|
|
|
|
|
|
maintainer-clean::
|
|
|
|
|
|
|
|
|
|
maintainer-copy::
|
|
|
|
|
|
|
|
|
|
#### Top executable
|
|
|
|
|
|
|
|
|
|
RAW_OBJS = \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3Const__gen.o \
|
|
|
|
|
V3Error.o \
|
|
|
|
|
V3FileLine.o \
|
|
|
|
|
V3Graph.o \
|
|
|
|
|
V3GraphAcyc.o \
|
|
|
|
|
V3GraphAlg.o \
|
|
|
|
|
V3GraphPathChecker.o \
|
|
|
|
|
V3GraphTest.o \
|
|
|
|
|
V3Hash.o \
|
2026-09-08 23:21:13 +01:00
|
|
|
V3HashTable.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3OptionParser.o \
|
|
|
|
|
V3Os.o \
|
|
|
|
|
V3ParseGrammar.o \
|
|
|
|
|
V3ParseImp.o \
|
|
|
|
|
V3ParseLex.o \
|
|
|
|
|
V3PreProc.o \
|
|
|
|
|
V3PreShell.o \
|
|
|
|
|
V3String.o \
|
|
|
|
|
V3ThreadPool.o \
|
|
|
|
|
V3Waiver.o \
|
|
|
|
|
Verilator.o \
|
2023-10-17 22:49:28 -04:00
|
|
|
|
|
|
|
|
RAW_OBJS_PCH_ASTMT = \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3Ast.o \
|
|
|
|
|
V3AstNodes.o \
|
|
|
|
|
V3Broken.o \
|
2025-06-27 20:38:01 -04:00
|
|
|
V3Control.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3EmitCBase.o \
|
|
|
|
|
V3EmitCConstPool.o \
|
|
|
|
|
V3EmitCFunc.o \
|
|
|
|
|
V3EmitCHeaders.o \
|
|
|
|
|
V3EmitCImp.o \
|
|
|
|
|
V3EmitCInlines.o \
|
|
|
|
|
V3EmitCPch.o \
|
|
|
|
|
V3EmitV.o \
|
|
|
|
|
V3File.o \
|
|
|
|
|
V3FuncOpt.o \
|
|
|
|
|
V3Global.o \
|
|
|
|
|
V3Hasher.o \
|
|
|
|
|
V3Number.o \
|
|
|
|
|
V3Options.o \
|
|
|
|
|
V3Stats.o \
|
|
|
|
|
V3StatsReport.o \
|
|
|
|
|
V3VariableOrder.o \
|
2023-10-17 22:49:28 -04:00
|
|
|
|
|
|
|
|
RAW_OBJS_PCH_ASTNOMT = \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3Active.o \
|
|
|
|
|
V3ActiveTop.o \
|
|
|
|
|
V3Assert.o \
|
2026-04-20 07:43:18 +02:00
|
|
|
V3AssertNfa.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3AssertPre.o \
|
|
|
|
|
V3Begin.o \
|
|
|
|
|
V3Branch.o \
|
|
|
|
|
V3CCtors.o \
|
|
|
|
|
V3CUse.o \
|
|
|
|
|
V3Case.o \
|
|
|
|
|
V3Cast.o \
|
2025-08-19 15:06:38 +01:00
|
|
|
V3Cfg.o \
|
|
|
|
|
V3CfgBuilder.o \
|
|
|
|
|
V3CfgLiveVariables.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3Class.o \
|
2026-08-27 14:33:49 +02:00
|
|
|
V3ClassGraph.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3Clean.o \
|
|
|
|
|
V3Clock.o \
|
|
|
|
|
V3Combine.o \
|
|
|
|
|
V3Common.o \
|
|
|
|
|
V3Coverage.o \
|
2026-06-05 06:35:01 -07:00
|
|
|
V3Covergroup.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3CoverageJoin.o \
|
|
|
|
|
V3Dead.o \
|
|
|
|
|
V3Delayed.o \
|
|
|
|
|
V3Depth.o \
|
|
|
|
|
V3DepthBlock.o \
|
|
|
|
|
V3Descope.o \
|
|
|
|
|
V3Dfg.o \
|
|
|
|
|
V3DfgAstToDfg.o \
|
2025-07-10 18:46:45 +01:00
|
|
|
V3DfgBreakCycles.o \
|
2025-08-05 13:03:30 +01:00
|
|
|
V3DfgColorSCCs.o \
|
2025-09-03 17:34:55 +01:00
|
|
|
V3DfgCse.o \
|
2025-09-07 20:38:50 +01:00
|
|
|
V3DfgDataType.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3DfgDecomposition.o \
|
|
|
|
|
V3DfgDfgToAst.o \
|
|
|
|
|
V3DfgOptimizer.o \
|
|
|
|
|
V3DfgPasses.o \
|
|
|
|
|
V3DfgPeephole.o \
|
2026-02-07 18:06:12 +00:00
|
|
|
V3DfgPushDownSels.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3DfgRegularize.o \
|
2025-08-19 15:06:38 +01:00
|
|
|
V3DfgSynthesize.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3DiagSarif.o \
|
|
|
|
|
V3DupFinder.o \
|
|
|
|
|
V3EmitCMain.o \
|
|
|
|
|
V3EmitCModel.o \
|
|
|
|
|
V3EmitCSyms.o \
|
|
|
|
|
V3EmitMk.o \
|
|
|
|
|
V3EmitMkJson.o \
|
|
|
|
|
V3ExecGraph.o \
|
|
|
|
|
V3Expand.o \
|
|
|
|
|
V3Force.o \
|
2026-04-22 20:18:59 +01:00
|
|
|
V3FsmDetect.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3Fork.o \
|
|
|
|
|
V3Gate.o \
|
|
|
|
|
V3HierBlock.o \
|
|
|
|
|
V3Inline.o \
|
2025-12-21 13:14:50 -05:00
|
|
|
V3InlineCFuncs.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3Inst.o \
|
|
|
|
|
V3InstrCount.o \
|
|
|
|
|
V3Interface.o \
|
2025-12-16 08:21:46 -08:00
|
|
|
V3LibMap.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3Life.o \
|
|
|
|
|
V3LifePost.o \
|
2026-02-28 22:20:09 +00:00
|
|
|
V3LiftExpr.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3LinkCells.o \
|
|
|
|
|
V3LinkDot.o \
|
2025-12-06 08:42:59 -06:00
|
|
|
V3LinkDotIfaceCapture.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3LinkInc.o \
|
|
|
|
|
V3LinkJump.o \
|
|
|
|
|
V3LinkLValue.o \
|
|
|
|
|
V3LinkLevel.o \
|
|
|
|
|
V3LinkParse.o \
|
|
|
|
|
V3LinkResolve.o \
|
2026-04-04 21:03:44 -04:00
|
|
|
V3LinkWith.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3Localize.o \
|
|
|
|
|
V3MergeCond.o \
|
|
|
|
|
V3Name.o \
|
|
|
|
|
V3Order.o \
|
|
|
|
|
V3OrderGraphBuilder.o \
|
|
|
|
|
V3OrderMoveGraph.o \
|
2026-07-31 15:03:26 +01:00
|
|
|
V3OrderMTaskContraction.o \
|
|
|
|
|
V3OrderMTaskFixHazards.o \
|
|
|
|
|
V3OrderMTaskGraph.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3OrderParallel.o \
|
|
|
|
|
V3OrderProcessDomains.o \
|
|
|
|
|
V3OrderSerial.o \
|
|
|
|
|
V3Param.o \
|
2026-06-21 22:17:36 +01:00
|
|
|
V3PatternStats.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3Premit.o \
|
|
|
|
|
V3ProtectLib.o \
|
2025-11-30 09:04:42 -05:00
|
|
|
V3RandSequence.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3Randomize.o \
|
|
|
|
|
V3Reloop.o \
|
2026-02-01 05:09:40 +00:00
|
|
|
V3Reorder.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3Sampled.o \
|
|
|
|
|
V3Sched.o \
|
|
|
|
|
V3SchedAcyclic.o \
|
2026-09-05 11:08:03 -07:00
|
|
|
V3SchedCovergroup.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3SchedPartition.o \
|
|
|
|
|
V3SchedReplicate.o \
|
|
|
|
|
V3SchedTiming.o \
|
2025-10-27 15:16:28 +00:00
|
|
|
V3SchedTrigger.o \
|
|
|
|
|
V3SchedUtil.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3SchedVirtIface.o \
|
|
|
|
|
V3Scope.o \
|
|
|
|
|
V3Slice.o \
|
|
|
|
|
V3Split.o \
|
|
|
|
|
V3SplitVar.o \
|
|
|
|
|
V3StackCount.o \
|
|
|
|
|
V3Subst.o \
|
|
|
|
|
V3Table.o \
|
|
|
|
|
V3Task.o \
|
|
|
|
|
V3Timing.o \
|
|
|
|
|
V3Trace.o \
|
|
|
|
|
V3TraceDecl.o \
|
|
|
|
|
V3Tristate.o \
|
|
|
|
|
V3Udp.o \
|
|
|
|
|
V3Undriven.o \
|
2026-01-01 10:20:21 -05:00
|
|
|
V3UndrivenCapture.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3Unknown.o \
|
|
|
|
|
V3Unroll.o \
|
2025-09-29 16:25:25 +02:00
|
|
|
V3UnrollGen.o \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3Width.o \
|
|
|
|
|
V3WidthCommit.o \
|
|
|
|
|
V3WidthSel.o \
|
2006-08-26 11:35:28 +00:00
|
|
|
|
2014-11-23 21:06:10 -05:00
|
|
|
# verilator_coverage
|
|
|
|
|
VLCOV_OBJS = \
|
2025-06-24 17:58:55 -04:00
|
|
|
VlcMain.o \
|
2014-11-23 21:06:10 -05:00
|
|
|
|
2022-01-08 11:18:23 -05:00
|
|
|
NON_STANDALONE_HEADERS = \
|
2025-09-27 08:19:57 -04:00
|
|
|
V3AstAttr.h \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3AstInlines.h \
|
|
|
|
|
V3AstNodeDType.h \
|
|
|
|
|
V3AstNodeExpr.h \
|
|
|
|
|
V3AstNodeOther.h \
|
2025-08-16 09:46:18 +01:00
|
|
|
V3AstNodeStmt.h \
|
2026-03-21 10:13:27 +00:00
|
|
|
V3DebugBisect.h \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3DfgVertices.h \
|
|
|
|
|
V3ThreadPool.h \
|
|
|
|
|
V3WidthRemove.h \
|
2022-01-08 11:18:23 -05:00
|
|
|
|
2022-09-15 13:10:39 +01:00
|
|
|
AST_DEFS := \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3AstNodeDType.h \
|
|
|
|
|
V3AstNodeExpr.h \
|
|
|
|
|
V3AstNodeOther.h \
|
2025-08-16 09:46:18 +01:00
|
|
|
V3AstNodeStmt.h \
|
2022-09-15 13:10:39 +01:00
|
|
|
|
2022-10-04 11:03:41 +01:00
|
|
|
DFG_DEFS := \
|
2025-06-24 17:58:55 -04:00
|
|
|
V3DfgVertices.h
|
2022-10-04 11:03:41 +01:00
|
|
|
|
|
|
|
|
#### astgen common flags
|
|
|
|
|
|
|
|
|
|
ASTGENFLAGS = -I $(srcdir)
|
|
|
|
|
ASTGENFLAGS += $(foreach f,$(AST_DEFS),--astdef $f)
|
|
|
|
|
ASTGENFLAGS += $(foreach f,$(DFG_DEFS),--dfgdef $f)
|
|
|
|
|
|
2006-08-26 11:35:28 +00:00
|
|
|
#### Linking
|
|
|
|
|
|
2014-11-23 21:06:10 -05:00
|
|
|
ifeq ($(VL_VLCOV),)
|
2025-06-24 17:58:55 -04:00
|
|
|
PREDEP_H = V3Ast__gen_forward_class_decls.h
|
|
|
|
|
OBJS += $(RAW_OBJS) $(RAW_OBJS_PCH_ASTMT) $(RAW_OBJS_PCH_ASTNOMT)
|
2006-08-26 11:35:28 +00:00
|
|
|
else
|
2025-06-24 17:58:55 -04:00
|
|
|
PREDEP_H =
|
|
|
|
|
OBJS += $(VLCOV_OBJS)
|
2006-08-26 11:35:28 +00:00
|
|
|
endif
|
|
|
|
|
|
2014-11-23 21:06:10 -05:00
|
|
|
$(TGT): $(PREDEP_H) $(OBJS)
|
2006-08-26 11:35:28 +00:00
|
|
|
@echo " Linking $@..."
|
|
|
|
|
${LINK} ${LDFLAGS} -o $@ $(OBJS) $(CCMALLOC) ${LIBS}
|
|
|
|
|
|
|
|
|
|
#### Modules
|
|
|
|
|
|
2023-01-29 19:39:22 -08:00
|
|
|
%__gen.cpp: %.cpp $(ASTGEN) $(AST_DEFS) $(DFG_DEFS)
|
2022-10-04 11:03:41 +01:00
|
|
|
$(PYTHON3) $(ASTGEN) $(ASTGENFLAGS) $*.cpp
|
2006-08-26 11:35:28 +00:00
|
|
|
|
2022-12-15 19:53:51 -05:00
|
|
|
.SECONDARY:
|
2022-12-15 19:26:54 -05:00
|
|
|
|
2023-10-17 22:49:28 -04:00
|
|
|
%.gch: %
|
2025-10-03 18:18:24 +02:00
|
|
|
$(OBJCACHE) ${CXX} ${CXXFLAGS} ${CXXFLAGSOBJ} ${CPPFLAGSWALL} ${CFG_CXXFLAGS_PCH} -c $< -o $@
|
2023-01-29 19:39:22 -08:00
|
|
|
%.o: %.cpp
|
2025-10-03 18:18:24 +02:00
|
|
|
$(OBJCACHE) ${CXX} ${CXXFLAGS} ${CXXFLAGSOBJ} ${CPPFLAGSWALL} -c $< -o $@
|
2006-08-26 11:35:28 +00:00
|
|
|
|
2023-01-29 19:39:22 -08:00
|
|
|
V3ParseLex.o: V3ParseLex.cpp V3Lexer.yy.cpp V3ParseBison.c
|
2025-10-03 18:18:24 +02:00
|
|
|
$(OBJCACHE) ${CXX} ${CXXFLAGS} ${CXXFLAGSOBJ} ${CPPFLAGSPARSER} -c $< -o $@
|
2006-08-26 11:35:28 +00:00
|
|
|
|
2023-01-29 19:39:22 -08:00
|
|
|
V3ParseGrammar.o: V3ParseGrammar.cpp V3ParseBison.c
|
2025-10-03 18:18:24 +02:00
|
|
|
$(OBJCACHE) ${CXX} ${CXXFLAGS} ${CXXFLAGSOBJ} ${CPPFLAGSPARSER} -c $< -o $@
|
2009-10-31 10:08:38 -04:00
|
|
|
|
2023-01-29 19:39:22 -08:00
|
|
|
V3ParseImp.o: V3ParseImp.cpp V3ParseBison.c
|
2025-10-03 18:18:24 +02:00
|
|
|
$(OBJCACHE) ${CXX} ${CXXFLAGS} ${CXXFLAGSOBJ} ${CPPFLAGSPARSER} -c $< -o $@
|
2006-08-26 11:35:28 +00:00
|
|
|
|
2023-01-29 19:39:22 -08:00
|
|
|
V3PreProc.o: V3PreProc.cpp V3PreLex.yy.cpp
|
2025-10-03 18:18:24 +02:00
|
|
|
$(OBJCACHE) ${CXX} ${CXXFLAGS} ${CXXFLAGSOBJ} ${CPPFLAGSPARSER} -c $< -o $@
|
2006-08-26 11:35:28 +00:00
|
|
|
|
2023-10-17 22:49:28 -04:00
|
|
|
define CXX_ASTMT_template
|
|
|
|
|
$(1): $(basename $(1)).cpp V3PchAstMT.h.gch
|
2025-10-03 18:18:24 +02:00
|
|
|
$(OBJCACHE) ${CXX} ${CXXFLAGS} ${CXXFLAGSOBJ} ${CPPFLAGSWALL} ${CFG_CXXFLAGS_PCH_I} V3PchAstMT.h${CFG_GCH_IF_CLANG} -c $(srcdir)/$(basename $(1)).cpp -o $(1)
|
2023-10-17 22:49:28 -04:00
|
|
|
|
|
|
|
|
endef
|
|
|
|
|
|
|
|
|
|
$(foreach obj,$(RAW_OBJS_PCH_ASTMT),$(eval $(call CXX_ASTMT_template,$(obj))))
|
|
|
|
|
|
|
|
|
|
define CXX_ASTNOMT_template
|
|
|
|
|
$(1): $(basename $(1)).cpp V3PchAstNoMT.h.gch
|
2025-10-03 18:18:24 +02:00
|
|
|
$(OBJCACHE) ${CXX} ${CXXFLAGS} ${CXXFLAGSOBJ} ${CPPFLAGSWALL} ${CFG_CXXFLAGS_PCH_I} V3PchAstNoMT.h${CFG_GCH_IF_CLANG} -c $(srcdir)/$(basename $(1)).cpp -o $(1)
|
2023-10-17 22:49:28 -04:00
|
|
|
|
|
|
|
|
endef
|
|
|
|
|
|
|
|
|
|
$(foreach obj,$(RAW_OBJS_PCH_ASTNOMT),$(eval $(call CXX_ASTNOMT_template,$(obj))))
|
|
|
|
|
|
2006-08-26 11:35:28 +00:00
|
|
|
#### Generated files
|
|
|
|
|
|
|
|
|
|
# Target rule called before parallel build to make generated files
|
2022-10-04 11:03:41 +01:00
|
|
|
serial:: V3Ast__gen_forward_class_decls.h V3ParseBison.c
|
2006-08-26 11:35:28 +00:00
|
|
|
|
2014-11-23 21:06:10 -05:00
|
|
|
serial_vlcov:: vlcovgen.d
|
|
|
|
|
|
2016-11-18 21:13:56 -05:00
|
|
|
vlcovgen.d: $(VLCOVGEN) $(srcdir)/../include/verilated_cov_key.h
|
2021-01-28 21:01:33 +01:00
|
|
|
$(PYTHON3) $(VLCOVGEN) --srcdir $(srcdir)
|
2014-11-23 21:06:10 -05:00
|
|
|
touch $@
|
|
|
|
|
|
2022-10-04 11:03:41 +01:00
|
|
|
V3Ast__gen_forward_class_decls.h: $(ASTGEN) $(AST_DEFS) $(DFG_DEFS)
|
|
|
|
|
$(PYTHON3) $(ASTGEN) $(ASTGENFLAGS) --classes
|
2006-08-26 11:35:28 +00:00
|
|
|
|
2009-05-04 21:54:44 -04:00
|
|
|
V3ParseBison.h: V3ParseBison.c
|
2008-05-06 15:45:41 +00:00
|
|
|
|
|
|
|
|
# Have only one output file in this rule to prevent parallel make issues
|
2009-05-07 18:28:05 -04:00
|
|
|
V3ParseBison.c: verilog.y $(BISONPRE)
|
2006-08-26 11:35:28 +00:00
|
|
|
@echo "If you get errors from verilog.y below, try upgrading bison to version 1.875 or newer."
|
2024-12-01 11:35:00 -05:00
|
|
|
$(PYTHON3) $(BISONPRE) --yacc ${YACC} -d -v -o V3ParseBison.c $(BISON_DEBUG) $<
|
2006-08-26 11:35:28 +00:00
|
|
|
|
2023-01-29 19:39:22 -08:00
|
|
|
V3Lexer_pregen.yy.cpp: verilog.l V3ParseBison.h $(HEADERS)
|
2009-04-08 21:47:48 -04:00
|
|
|
${LEX} --version
|
2006-08-26 11:35:28 +00:00
|
|
|
${LEX} ${LFLAGS} -o$@ $<
|
|
|
|
|
|
2023-01-29 19:39:22 -08:00
|
|
|
V3Lexer.yy.cpp: V3Lexer_pregen.yy.cpp $(FLEXFIX)
|
2020-12-23 15:41:14 -05:00
|
|
|
$(PYTHON3) $(FLEXFIX) V3Lexer <$< >$@
|
2006-08-26 11:35:28 +00:00
|
|
|
|
2023-01-29 19:39:22 -08:00
|
|
|
V3PreLex_pregen.yy.cpp: V3PreLex.l $(HEADERS)
|
2009-04-08 21:47:48 -04:00
|
|
|
${LEX} --version
|
2006-08-26 11:35:28 +00:00
|
|
|
${LEX} ${LFLAGS} -o$@ $<
|
|
|
|
|
|
2010-02-26 19:50:44 -05:00
|
|
|
V3PreLex.yy.cpp: V3PreLex_pregen.yy.cpp $(FLEXFIX)
|
2021-02-25 21:19:37 -05:00
|
|
|
$(PYTHON3) $(FLEXFIX) V3PreLex <$< >$@
|
2006-08-26 11:35:28 +00:00
|
|
|
|
2022-01-08 11:18:23 -05:00
|
|
|
# For t_dist_header_cc
|
|
|
|
|
HEADER_CC_H := $(filter-out $(NON_STANDALONE_HEADERS), $(notdir $(wildcard $(srcdir)/*.h)))
|
|
|
|
|
|
|
|
|
|
.PHONY: header_cc
|
|
|
|
|
header_cc: $(addsuffix __header_cc.o, $(basename $(HEADER_CC_H)))
|
|
|
|
|
|
|
|
|
|
%__header_cc.cpp: %.h
|
2023-09-25 04:12:23 +02:00
|
|
|
$(PYTHON3) $(srcdir)/../bin/verilator_includer -DVL_MT_DISABLED_CODE_UNIT=1 $^ > $@
|
2022-01-08 11:18:23 -05:00
|
|
|
|
2015-11-28 17:33:01 -05:00
|
|
|
.SUFFIXES:
|
|
|
|
|
|
2006-08-26 11:35:28 +00:00
|
|
|
######################################################################
|
|
|
|
|
######################################################################
|
|
|
|
|
|
|
|
|
|
DEPS := $(wildcard *.d)
|
|
|
|
|
ifneq ($(DEPS),)
|
2025-06-24 17:58:55 -04:00
|
|
|
include $(DEPS)
|
2006-08-26 11:35:28 +00:00
|
|
|
endif
|