mirror of
https://github.com/verilator/verilator.git
synced 2025-01-01 04:07:34 +00:00
251 lines
7.2 KiB
Makefile
251 lines
7.2 KiB
Makefile
# -*- Makefile -*-
|
|
######################################################################
|
|
# DESCRIPTION: Makefile commands for all verilated target files
|
|
#
|
|
# Copyright 2003-2020 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.
|
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
|
######################################################################
|
|
|
|
PERL = @PERL@
|
|
CXX = @CXX@
|
|
LINK = @CXX@
|
|
AR = ar
|
|
RANLIB = ranlib
|
|
OBJCACHE ?= @OBJCACHE@
|
|
|
|
CFG_WITH_CCWARN = @CFG_WITH_CCWARN@
|
|
CFG_WITH_LONGTESTS = @CFG_WITH_LONGTESTS@
|
|
|
|
# Select newest language
|
|
CFG_CXXFLAGS_STD_NEWEST = @CFG_CXXFLAGS_STD_NEWEST@
|
|
# Select oldest language (for Verilator internal testing only)
|
|
CFG_CXXFLAGS_STD_OLDEST = @CFG_CXXFLAGS_STD_OLDEST@
|
|
# Compiler flags to use to turn off unused and generated code warnings, such as -Wno-div-by-zero
|
|
CFG_CXXFLAGS_NO_UNUSED = @CFG_CXXFLAGS_NO_UNUSED@
|
|
# Compiler flags that turn on extra warnings
|
|
CFG_CXXFLAGS_WEXTRA = @CFG_CXXFLAGS_WEXTRA@
|
|
# Linker libraries for multithreading
|
|
CFG_LDLIBS_THREADS = @CFG_LDLIBS_THREADS@
|
|
|
|
######################################################################
|
|
# Programs
|
|
|
|
VERILATOR_COVERAGE = $(PERL) $(VERILATOR_ROOT)/bin/verilator_coverage
|
|
VERILATOR_INCLUDER = $(PERL) $(VERILATOR_ROOT)/bin/verilator_includer
|
|
|
|
######################################################################
|
|
# Make checks
|
|
|
|
ifneq ($(words $(CURDIR)),1)
|
|
$(error Unsupported: GNU Make cannot build in directories containing spaces, build elsewhere: '$(CURDIR)')
|
|
endif
|
|
|
|
######################################################################
|
|
# C Preprocessor flags
|
|
|
|
# Add -MMD -MP if you're using a recent version of GCC.
|
|
VK_CPPFLAGS_ALWAYS += \
|
|
-MMD \
|
|
-I$(VERILATOR_ROOT)/include \
|
|
-I$(VERILATOR_ROOT)/include/vltstd \
|
|
-DVM_COVERAGE=$(VM_COVERAGE) \
|
|
-DVM_SC=$(VM_SC) \
|
|
-DVM_TRACE=$(VM_TRACE) \
|
|
$(CFG_CXXFLAGS_NO_UNUSED) \
|
|
|
|
ifeq ($(CFG_WITH_CCWARN),yes) # Local... Else don't burden users
|
|
VK_CPPFLAGS_WALL += -Wall $(CFG_CXXFLAGS_WEXTRA) -Werror
|
|
endif
|
|
|
|
CPPFLAGS += -I. $(VK_CPPFLAGS_WALL) $(VK_CPPFLAGS_ALWAYS)
|
|
|
|
VPATH += ..
|
|
VPATH += $(VERILATOR_ROOT)/include
|
|
VPATH += $(VERILATOR_ROOT)/include/vltstd
|
|
|
|
#OPT = -ggdb -DPRINTINITSTR -DDETECTCHANGE
|
|
#OPT = -ggdb -DPRINTINITSTR
|
|
CPPFLAGS += $(OPT)
|
|
|
|
CPPFLAGS += $(M32)
|
|
LDFLAGS += $(M32)
|
|
|
|
# Allow upper level user makefiles to specify flags they want.
|
|
# These aren't ever set by Verilator, so users are free to override them.
|
|
CPPFLAGS += $(USER_CPPFLAGS)
|
|
LDFLAGS += $(USER_LDFLAGS)
|
|
LDLIBS += $(USER_LDLIBS)
|
|
|
|
# Add flags from -CFLAGS and -LDFLAGS on Verilator command line
|
|
CPPFLAGS += $(VM_USER_CFLAGS)
|
|
LDFLAGS += $(VM_USER_LDFLAGS)
|
|
LDLIBS += $(VM_USER_LDLIBS)
|
|
|
|
# See the benchmarking section of bin/verilator.
|
|
# Support class optimizations. This includes the tracing and symbol table.
|
|
# SystemC takes minutes to optimize, thus it is off by default.
|
|
#OPT_SLOW =
|
|
# Fast path optimizations. Most time is spent in these classes.
|
|
#OPT_FAST = -Os -fstrict-aliasing
|
|
#OPT_FAST = -O
|
|
#OPT_FAST =
|
|
|
|
#######################################################################
|
|
##### Aggregates
|
|
|
|
VM_CLASSES += $(VM_CLASSES_FAST) $(VM_CLASSES_SLOW)
|
|
VM_SUPPORT += $(VM_SUPPORT_FAST) $(VM_SUPPORT_SLOW)
|
|
|
|
#######################################################################
|
|
##### SystemC builds
|
|
|
|
ifeq ($(VM_SC),1)
|
|
CPPFLAGS += $(SYSTEMC_CXX_FLAGS) -I$(SYSTEMC_INCLUDE)
|
|
LDFLAGS += $(SYSTEMC_CXX_FLAGS) -L$(SYSTEMC_LIBDIR)
|
|
SC_LIBS = -lsystemc
|
|
ifneq ($(wildcard $(SYSTEMC_LIBDIR)/*numeric_bit*),)
|
|
# Systemc 1.2.1beta
|
|
SC_LIBS += -lnumeric_bit -lqt
|
|
endif
|
|
endif
|
|
|
|
#######################################################################
|
|
##### Threaded builds
|
|
|
|
ifneq ($(VM_C11),0)
|
|
ifneq ($(VM_C11),)
|
|
VK_C11=1
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(VM_THREADS),0)
|
|
ifneq ($(VM_THREADS),)
|
|
CPPFLAGS += -DVL_THREADED
|
|
VK_C11=1
|
|
VK_LIBS_THREADED=1
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(VM_TRACE_THREADS),0)
|
|
ifneq ($(VM_TRACE_THREADS),)
|
|
ifeq ($(findstring -DVL_THREADED,$(CPPFLAGS)),)
|
|
$(error VM_TRACE_THREADS requires VM_THREADS)
|
|
endif
|
|
CPPFLAGS += -DVL_TRACE_THREADED
|
|
VK_C11=1
|
|
VK_LIBS_THREADED=1
|
|
endif
|
|
endif
|
|
|
|
|
|
ifneq ($(VM_TRACE_FST_WRITER_THREAD),0)
|
|
ifneq ($(VM_TRACE_FST_WRITER_THREAD),)
|
|
CPPFLAGS += -DVL_TRACE_FST_WRITER_THREAD
|
|
VK_C11=1
|
|
VK_LIBS_THREADED=1
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(VK_C11),0)
|
|
ifneq ($(VK_C11),)
|
|
# Need C++11 at least, so always default to newest
|
|
CPPFLAGS += $(CFG_CXXFLAGS_STD_NEWEST)
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(VK_LIBS_THREADED),0)
|
|
ifneq ($(VK_LIBS_THREADED),)
|
|
LDLIBS += $(CFG_LDLIBS_THREADS)
|
|
endif
|
|
endif
|
|
|
|
#######################################################################
|
|
##### Stub
|
|
|
|
preproc:
|
|
|
|
#######################################################################
|
|
# Overall Objects Linking
|
|
|
|
VK_CLASSES_FAST_CPP = $(addsuffix .cpp, $(VM_CLASSES_FAST))
|
|
VK_CLASSES_SLOW_CPP = $(addsuffix .cpp, $(VM_CLASSES_SLOW))
|
|
|
|
VK_SUPPORT_FAST_CPP = $(addsuffix .cpp, $(VM_SUPPORT_FAST))
|
|
VK_SUPPORT_SLOW_CPP = $(addsuffix .cpp, $(VM_SUPPORT_SLOW))
|
|
|
|
VK_USER_OBJS = $(addsuffix .o, $(VM_USER_CLASSES))
|
|
|
|
VK_GLOBAL_OBJS = $(addsuffix .o, $(VM_GLOBAL_FAST) $(VM_GLOBAL_SLOW))
|
|
|
|
ifneq ($(VM_PARALLEL_BUILDS),1)
|
|
# Fast building, all .cpp's in one fell swoop
|
|
# This saves about 5 sec per module, but can be slower if only a little changes
|
|
VK_OBJS += $(VM_PREFIX)__ALLfast.o $(VM_PREFIX)__ALLslow.o
|
|
all_cpp: $(VM_PREFIX)__ALLfast.cpp $(VM_PREFIX)__ALLslow.cpp
|
|
$(VM_PREFIX)__ALLfast.cpp: $(VK_CLASSES_FAST_CPP) $(VK_SUPPORT_FAST_CPP)
|
|
$(VERILATOR_INCLUDER) -DVL_INCLUDE_OPT=include $^ > $@
|
|
$(VM_PREFIX)__ALLslow.cpp: $(VK_CLASSES_SLOW_CPP) $(VK_SUPPORT_SLOW_CPP)
|
|
$(VERILATOR_INCLUDER) -DVL_INCLUDE_OPT=include $^ > $@
|
|
else
|
|
#Slow way of building... Each .cpp file by itself
|
|
VK_OBJS += $(addsuffix .o, $(VM_CLASSES) $(VM_SUPPORT))
|
|
endif
|
|
|
|
$(VM_PREFIX)__ALL.a: $(VK_OBJS)
|
|
$(AR) -cr $@ $^
|
|
$(RANLIB) $@
|
|
|
|
######################################################################
|
|
### Compile rules
|
|
|
|
ifneq ($(VM_DEFAULT_RULES),0)
|
|
$(VM_PREFIX)__ALLfast.o: $(VM_PREFIX)__ALLfast.cpp
|
|
$(OBJCACHE) $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(OPT_FAST) -c -o $@ $<
|
|
|
|
$(VM_PREFIX)__ALLslow.o: $(VM_PREFIX)__ALLslow.cpp
|
|
$(OBJCACHE) $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(OPT_SLOW) -c -o $@ $<
|
|
|
|
# VM_GLOBAL_FAST files including verilated.o use this rule
|
|
%.o: %.cpp
|
|
$(OBJCACHE) $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(OPT_FAST) -c -o $@ $<
|
|
|
|
%__Slow.o: %__Slow.cpp
|
|
$(OBJCACHE) $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(OPT_SLOW) -c -o $@ $<
|
|
|
|
endif
|
|
|
|
#Default rule embedded in make:
|
|
#.cpp.o:
|
|
# $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $<
|
|
|
|
######################################################################
|
|
### Debugging
|
|
|
|
debug-make::
|
|
@echo
|
|
@echo CXXFLAGS: $(CXXFLAGS)
|
|
@echo CPPFLAGS: $(CPPFLAGS)
|
|
@echo OPT_FAST: $(OPT_FAST)
|
|
@echo OPT_SLOW: $(OPT_SLOW)
|
|
@echo VM_PREFIX: $(VM_PREFIX)
|
|
@echo VM_PARALLEL_BUILDS: $(VM_PARALLEL_BUILDS)
|
|
@echo VM_CLASSES_FAST: $(VM_CLASSES_FAST)
|
|
@echo VM_CLASSES_SLOW: $(VM_CLASSES_SLOW)
|
|
@echo VM_SUPPORT_FAST: $(VM_SUPPORT_FAST)
|
|
@echo VM_SUPPORT_SLOW: $(VM_SUPPORT_SLOW)
|
|
@echo VM_GLOBAL_FAST: $(VM_GLOBAL_FAST)
|
|
@echo VM_GLOBAL_SLOW: $(VM_GLOBAL_SLOW)
|
|
@echo VK_OBJS: $(VK_OBJS)
|
|
@echo
|
|
|
|
######################################################################
|
|
### Detect out of date files and rebuild.
|
|
|
|
DEPS := $(wildcard *.d)
|
|
ifneq ($(DEPS),)
|
|
include $(DEPS)
|
|
endif
|