blob: dc60bedbecdc067b89b16c067874fa12a10b9271 [file] [log] [blame]
################################################################################
##
## Filename: Makefile
##
## Project: WB2AXIPSP: bus bridges and other odds and ends
##
## Purpose: To describe how to build the Verilator libraries from the
## RTL, for the purposes of trying to discover if they work.
## Any actual testing will be done from the code within the bench/cpp
## directory.
##
## Targets: The default target, all, builds the target test, which includes
## the libraries necessary for Verilator testing.
##
## Creator: Dan Gisselquist, Ph.D.
## Gisselquist Technology, LLC
##
################################################################################
##
## Copyright (C) 2016-2020, Gisselquist Technology, LLC
##
## This file is part of the WB2AXIP project.
##
## The WB2AXIP project contains free software and gateware, licensed under the
## Apache License, Version 2.0 (the "License"). You may not use this project,
## or this file, except in compliance with the License. You may obtain a copy
## of the License at
##
## http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
## WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
## License for the specific language governing permissions and limitations
## under the License.
##
################################################################################
##
##
all: test
YYMMDD=`date +%Y%m%d`
CXX := g++
IVCHECK := ivcheck
IVERILOG := iverilog
FBDIR := .
VDIRFB:= $(FBDIR)/obj_dir
VERILATOR := verilator
VFLAGS := -MMD -O3 -Wall -Wpedantic -cc
.DELETE_ON_ERROR:
.PHONY: test
test: testwb testaxi testaxil testapb
.PHONY: testwb testaxi testaxil testapb
.PHONY: axim2wbsp axim2wbsp wbm2axilite axilrd2wbsp axilwr2wbsp axlite2wbsp
.PHONY: axixbar axilxbar wbxbar axis2mm aximm2s axidma axim2wbsp aximrd2wbsp
.PHONY: aximwr2wbsp axixclk axiperf demoaxi demofull easyaxil sfifo skidbuffer
.PHONY: axilsafety axisafety wbsafety axivfifo axil2apb apbslave
axim2wbsp: $(VDIRFB)/Vwbm2axisp__ALL.a $(IVCHECK)/axim2wbsp
axim2wbsp: $(VDIRFB)/Vaxim2wbsp__ALL.a
wbm2axilite: $(VDIRFB)/Vwbm2axilite__ALL.a $(IVCHECK)/wbm2axilite
axilrd2wbsp: $(VDIRFB)/Vaxilrd2wbsp__ALL.a $(IVCHECK)/axilrd2wbsp
axilwr2wbsp: $(VDIRFB)/Vaxilwr2wbsp__ALL.a $(IVCHECK)/axilwr2wbsp
axlite2wbsp: $(VDIRFB)/Vaxlite2wbsp__ALL.a $(IVCHECK)/axlite2wbsp
axivfifo: $(VDIRFB)/Vaxivfifo__ALL.a $(IVCHECK)/axivfifo
axixbar: $(VDIRFB)/Vaxixbar__ALL.a $(IVCHECK)/axixbar
axilxbar: $(VDIRFB)/Vaxilxbar__ALL.a $(IVCHECK)/axilxbar
wbxbar: $(VDIRFB)/Vwbxbar__ALL.a $(IVCHECK)/wbxbar
axis2mm: $(VDIRFB)/Vaxis2mm__ALL.a $(IVCHECK)/axis2mm
aximm2s: $(VDIRFB)/Vaximm2s__ALL.a $(IVCHECK)/aximm2s
axidma: $(VDIRFB)/Vaxidma__ALL.a $(IVCHECK)/axidma
axim2wbsp: $(VDIRFB)/Vaxim2wbsp__ALL.a $(IVCHECK)/axim2wbsp
aximrd2wbsp: $(VDIRFB)/Vaximrd2wbsp__ALL.a $(IVCHECK)/aximrd2wbsp
aximwr2wbsp: $(VDIRFB)/Vaximwr2wbsp__ALL.a $(IVCHECK)/aximwr2wbsp
axiperf: $(VDIRFB)/Vaxiperf__ALL.a $(IVCHECK)/axiperf
axixclk: $(VDIRFB)/Vaxixclk__ALL.a $(IVCHECK)/axixclk
demoaxi: $(VDIRFB)/Vdemoaxi__ALL.a $(IVCHECK)/demoaxi
demofull: $(VDIRFB)/Vdemofull__ALL.a $(IVCHECK)/demofull
easyaxil: $(VDIRFB)/Veasyaxil__ALL.a $(IVCHECK)/easyaxil
sfifo: $(VDIRFB)/Vsfifo__ALL.a $(IVCHECK)/sfifo
skidbuffer: $(VDIRFB)/Vskidbuffer__ALL.a $(IVCHECK)/skidbuffer
axisafety: $(VDIRFB)/Vaxisafety__ALL.a $(IVCHECK)/axisafety
axilsafety: $(VDIRFB)/Vaxilsafety__ALL.a $(IVCHECK)/axilsafety
wbsafety: $(VDIRFB)/Vwbsafety__ALL.a $(IVCHECK)/wbsafety
axil2apb: $(VDIRFB)/Vaxil2apb__ALL.a $(IVCHECK)/axil2apb
apbslave: $(VDIRFB)/Vapbslave__ALL.a $(IVCHECK)/apbslave
testwb: wbsafety wbm2axilite wbxbar sfifo wbsafety wbxbar wbsafety
testaxi: axim2wbsp axixbar axixclk demofull
testaxi: aximrd2wbsp axim2wbsp aximwr2wbsp axisafety
testaxi: axis2mm aximm2s axidma axivfifo
testaxil: axilrd2wbsp axilwr2wbsp axlite2wbsp axilxbar demoaxi easyaxil
testaxil: skidbuffer axiperf
testapb: axil2apb apbslave
.PHONY: wbm2axisp
wbm2axisp: $(VDIRFB)/Vwbm2axisp__ALL.a
$(VDIRFB)/Vwbm2axisp__ALL.a: $(VDIRFB)/Vwbm2axisp.h $(VDIRFB)/Vwbm2axisp.cpp
$(VDIRFB)/Vwbm2axisp__ALL.a: $(VDIRFB)/Vwbm2axisp.mk
$(VDIRFB)/Vwbm2axisp.h $(VDIRFB)/Vwbm2axisp.cpp $(VDIRFB)/Vwbm2axisp.mk: wbm2axisp.v
.PHONY: wbm2axilite
wbm2axilite: $(VDIRFB)/Vwbm2axilite__ALL.a
$(VDIRFB)/Vwbm2axilite__ALL.a: $(VDIRFB)/Vwbm2axilite.h $(VDIRFB)/Vwbm2axilite.cpp
$(VDIRFB)/Vwbm2axilite__ALL.a: $(VDIRFB)/Vwbm2axilite.mk
$(VDIRFB)/Vwbm2axilite.h $(VDIRFB)/Vwbm2axilite.cpp $(VDIRFB)/Vwbm2axilite.mk: wbm2axilite.v
.PHONY: axilrd2wbsp
axilrd2wbsp: $(VDIRFB)/Vaxilrd2wbsp__ALL.a
$(VDIRFB)/Vaxilrd2wbsp__ALL.a: $(VDIRFB)/Vaxilrd2wbsp.h $(VDIRFB)/Vaxilrd2wbsp.cpp
$(VDIRFB)/Vaxilrd2wbsp__ALL.a: $(VDIRFB)/Vaxilrd2wbsp.mk
$(VDIRFB)/Vaxilrd2wbsp.h $(VDIRFB)/Vaxilrd2wbsp.cpp $(VDIRFB)/Vaxilrd2wbsp.mk: axilrd2wbsp.v
.PHONY: axilwr2wbsp
axilwr2wbsp: $(VDIRFB)/Vaxilwr2wbsp__ALL.a
$(VDIRFB)/Vaxilwr2wbsp__ALL.a: $(VDIRFB)/Vaxilwr2wbsp.h $(VDIRFB)/Vaxilwr2wbsp.cpp
$(VDIRFB)/Vaxilwr2wbsp__ALL.a: $(VDIRFB)/Vaxilwr2wbsp.mk
$(VDIRFB)/Vaxilwr2wbsp.h $(VDIRFB)/Vaxilwr2wbsp.cpp $(VDIRFB)/Vaxilwr2wbsp.mk: axilwr2wbsp.v
$(VDIRFB)/Vaxlite2wbsp__ALL.a: $(VDIRFB)/Vaxlite2wbsp.h $(VDIRFB)/Vaxlite2wbsp.cpp
$(VDIRFB)/Vaxlite2wbsp__ALL.a: $(VDIRFB)/Vaxlite2wbsp.mk
$(VDIRFB)/Vaxlite2wbsp.h $(VDIRFB)/Vaxlite2wbsp.cpp $(VDIRFB)/Vaxlite2wbsp.mk: axlite2wbsp.v
$(VDIRFB)/Vaxim2wbsp__ALL.a: $(VDIRFB)/Vaxim2wbsp.h $(VDIRFB)/Vaxim2wbsp.cpp
$(VDIRFB)/Vaxim2wbsp__ALL.a: $(VDIRFB)/Vaxim2wbsp.mk
$(VDIRFB)/Vaxim2wbsp.h $(VDIRFB)/Vaxim2wbsp.cpp $(VDIRFB)/Vaxim2wbsp.mk: \
axim2wbsp.v aximrd2wbsp.v aximwr2wbsp.v wbarbiter.v
$(VDIRFB)/Vaxivfifo__ALL.a: $(VDIRFB)/Vaxivfifo.h $(VDIRFB)/Vaxivfifo.cpp
$(VDIRFB)/Vaxivfifo__ALL.a: $(VDIRFB)/Vaxivfifo.mk
$(VDIRFB)/Vaxivfifo.h $(VDIRFB)/Vaxivfifo.cpp $(VDIRFB)/Vaxivfifo.mk: \
axivfifo.v aximrd2wbsp.v aximwr2wbsp.v wbarbiter.v
$(VDIRFB)/V%.cpp $(VDIRFB)/V%.h $(VDIRFB)/V%.mk: $(FBDIR)/%.v
$(VERILATOR) $(VFLAGS) $*.v
$(VDIRFB)/V%__ALL.a: $(VDIRFB)/V%.mk
cd $(VDIRFB); make -f V$*.mk
##
## Run Icarus Verilog (iverilog) on each of these cores for a lint check
##
$(IVCHECK)/axi2axilite: axi2axilite.v sfifo.v skidbuffer.v axi_addr.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/axil2axis: axil2axis.v sfifo.v skidbuffer.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/axildouble: axildouble.v sfifo.v skidbuffer.v addrdecode.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/axilrd2wbsp: axilrd2wbsp.v sfifo.v skidbuffer.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/axilsafety: axilsafety.v sfifo.v skidbuffer.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/axilsingle: axilsingle.v sfifo.v skidbuffer.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/axilwr2wbsp: axilwr2wbsp.v sfifo.v skidbuffer.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/axilxbar: axilxbar.v skidbuffer.v addrdecode.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/axidma: axidma.v sfifo.v skidbuffer.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/aximm2s: aximm2s.v sfifo.v skidbuffer.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/axim2wbsp: axim2wbsp.v sfifo.v skidbuffer.v aximrd2wbsp.v aximwr2wbsp.v axi_addr.v wbarbiter.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/aximrd2wbsp: aximrd2wbsp.v sfifo.v skidbuffer.v axi_addr.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/aximwr2wbsp: aximwr2wbsp.v sfifo.v skidbuffer.v axi_addr.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/axiperf: axiperf.v skidbuffer.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/axisafety: axisafety.v skidbuffer.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/axis2mm: axis2mm.v sfifo.v skidbuffer.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/axivfifo: axivfifo.v sfifo.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/axixbar: axixbar.v skidbuffer.v addrdecode.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/axixclk: axixclk.v afifo.v skidbuffer.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/axlite2wbsp: axlite2wbsp.v axilrd2wbsp.v axilwr2wbsp.v wbarbiter.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/demoaxi: demoaxi.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/demofull: demofull.v axi_addr.v skidbuffer.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/easyaxil: easyaxil.v skidbuffer.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/sfifo: sfifo.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/skidbuffer: skidbuffer.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/wbm2axilite: wbm2axilite.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/wbsafety: wbsafety.v skidbuffer.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/wbxbar: wbxbar.v skidbuffer.v addrdecode.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/axil2apb: axil2apb.v skidbuffer.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
$(IVCHECK)/apbslave: apbslave.v
$(mk-ivcheck)
$(IVERILOG) -g2012 $^ -o $@
define mk-ivcheck
@bash -c "if [ ! -e $(IVCHECK) ]; then mkdir -p $(IVCHECK); fi"
endef
.PHONY: clean
clean:
rm -rf $(VDIRFB)/*.mk
rm -rf $(VDIRFB)/*.cpp
rm -rf $(VDIRFB)/*.h
rm -rf $(VDIRFB)/
rm -rf $(IVCHECK)/