aboutsummaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile261
1 files changed, 197 insertions, 64 deletions
diff --git a/Makefile b/Makefile
index 697cf69fe..5a75320c3 100644
--- a/Makefile
+++ b/Makefile
@@ -1,13 +1,15 @@
-CONFIG := clang-debug
-# CONFIG := gcc-debug
-# CONFIG := release
+CONFIG := clang
+# CONFIG := gcc
+# CONFIG := gcc-4.6
+# CONFIG := emcc
# features (the more the better)
ENABLE_TCL := 1
-ENABLE_QT4 := 1
-ENABLE_MINISAT := 1
ENABLE_ABC := 1
+ENABLE_PLUGINS := 1
+ENABLE_READLINE := 1
+ENABLE_VERIFIC := 0
# other configuration flags
ENABLE_GPROF := 0
@@ -20,15 +22,30 @@ GENFILES =
EXTRA_TARGETS =
TARGETS = yosys yosys-config
+PRETTY = 1
+SMALL = 0
+
all: top-all
-CXXFLAGS = -Wall -Wextra -ggdb -I"$(shell pwd)" -MD -D_YOSYS_ -fPIC
-LDFLAGS = -rdynamic
-LDLIBS = -lstdc++ -lreadline -lm -ldl -lrt
+CXXFLAGS = -Wall -Wextra -ggdb -I"$(shell pwd)" -MD -DYOSYS_SRC='"$(shell pwd)"' -D_YOSYS_ -fPIC -I${DESTDIR}/include
+LDFLAGS = -L${DESTDIR}/lib
+LDLIBS = -lstdc++ -lm
QMAKE = qmake-qt4
+SED = sed
+
+ifeq (Darwin,$(findstring Darwin,$(shell uname)))
+ # add macports include and library path to search directories, don't use '-rdynamic' and '-lrt':
+ CXXFLAGS += -I/opt/local/include
+ LDFLAGS += -L/opt/local/lib
+ QMAKE = qmake
+ SED = gsed
+else
+ LDFLAGS += -rdynamic
+ LDLIBS += -lrt
+endif
-YOSYS_VER := 0.1.0+
-GIT_REV := $(shell git rev-parse --short HEAD || echo UNKOWN)
+YOSYS_VER := 0.3.0+$(shell test -d .git && { git log --author=clifford@clifford.at --oneline ca125bf41.. | wc -l; })
+GIT_REV := $(shell git rev-parse --short HEAD 2> /dev/null || echo UNKNOWN)
OBJS = kernel/version_$(GIT_REV).o
# set 'ABCREV = default' to use abc/ as it is
@@ -37,108 +54,214 @@ OBJS = kernel/version_$(GIT_REV).o
# is just a symlink to your actual ABC working directory, as 'make mrproper'
# will remove the 'abc' directory and you do not want to accidentally
# delete your work on ABC..
-ABCREV = 10cc13a2a0f1
+ABCREV = 4d547a5e065b
ABCPULL = 1
--include Makefile.conf
+define newline
+
+
+endef
+
+ifneq ($(wildcard Makefile.conf),)
+$(info $(subst $$--$$,$(newline),$(shell sed 's,^,[Makefile.conf] ,; s,$$,$$--$$,;' < Makefile.conf | tr -d '\n' | sed 's,\$$--\$$$$,,')))
+include Makefile.conf
+endif
-ifeq ($(CONFIG),clang-debug)
+ifeq ($(CONFIG),clang)
CXX = clang
CXXFLAGS += -std=c++11 -Os
-endif
-ifeq ($(CONFIG),gcc-debug)
+else ifeq ($(CONFIG),gcc)
CXX = gcc
CXXFLAGS += -std=gnu++0x -Os
+
+else ifeq ($(CONFIG),gcc-4.6)
+CXX = gcc-4.6
+CXXFLAGS += -std=gnu++0x -Os
+
+else ifeq ($(CONFIG),emcc)
+CXX = emcc
+CXXFLAGS += -std=c++11 -Os -Wno-warn-absolute-paths
+CXXFLAGS := $(filter-out -ggdb,$(CXXFLAGS))
+
+else ifneq ($(CONFIG),none)
+$(error Invalid CONFIG setting '$(CONFIG)'. Valid values: clang, gcc, gcc-4.6, emcc, none)
endif
-ifeq ($(CONFIG),release)
-CXX = gcc
-CXXFLAGS += -std=gnu++0x -march=native -O3 -DNDEBUG
+ifeq ($(ENABLE_READLINE),1)
+CXXFLAGS += -DYOSYS_ENABLE_READLINE
+LDLIBS += -lreadline
+endif
+
+ifeq ($(ENABLE_PLUGINS),1)
+CXXFLAGS += -DYOSYS_ENABLE_PLUGINS $(shell pkg-config --silence-errors --cflags libffi)
+LDLIBS += $(shell pkg-config --silence-errors --libs libffi || echo -lffi) -ldl
endif
ifeq ($(ENABLE_TCL),1)
-CXXFLAGS += -I/usr/include/tcl8.5 -DYOSYS_ENABLE_TCL
-LDLIBS += -ltcl8.5
+TCL_VERSION ?= tcl8.5
+TCL_INCLUDE ?= /usr/include/$(TCL_VERSION)
+CXXFLAGS += -I$(TCL_INCLUDE) -DYOSYS_ENABLE_TCL
+LDLIBS += -l$(TCL_VERSION)
endif
ifeq ($(ENABLE_GPROF),1)
-CXXFLAGS += -pg -fno-inline
+CXXFLAGS += -pg
LDFLAGS += -pg
endif
-ifeq ($(ENABLE_QT4),1)
-TARGETS += yosys-svgviewer
-endif
-
ifeq ($(ENABLE_ABC),1)
+CXXFLAGS += -DYOSYS_ENABLE_ABC
TARGETS += yosys-abc
endif
-OBJS += kernel/driver.o kernel/register.o kernel/rtlil.o kernel/log.o kernel/calc.o
+ifeq ($(ENABLE_VERIFIC),1)
+VERIFIC_DIR ?= /usr/local/src/verific_lib_eval
+VERIFIC_COMPONENTS ?= verilog vhdl database util containers
+CXXFLAGS += $(patsubst %,-I$(VERIFIC_DIR)/%,$(VERIFIC_COMPONENTS)) -DYOSYS_ENABLE_VERIFIC
+LDLIBS += $(patsubst %,$(VERIFIC_DIR)/%/*-linux.a,$(VERIFIC_COMPONENTS))
+endif
+
+ifeq ($(PRETTY), 1)
+P_STATUS = 0
+P_OFFSET = 0
+P_UPDATE = $(eval P_STATUS=$(shell echo $(OBJS) yosys | gawk 'BEGIN { RS = " "; I = $(P_STATUS)+0; } $$1 == "$@" && NR > I { I = NR; } END { print I; }'))
+P_SHOW = [$(shell gawk "BEGIN { N=$(words $(OBJS) yosys); printf \"%3d\", $(P_OFFSET)+90*$(P_STATUS)/N; exit; }")%]
+P = @echo "$(if $(findstring $@,$(TARGETS) $(EXTRA_TARGETS)),$(eval P_OFFSET = 10))$(call P_UPDATE)$(call P_SHOW) Building $@";
+Q = @
+S = -s
+else
+P_SHOW = ->
+P =
+Q =
+S =
+endif
+
+OBJS += kernel/driver.o kernel/register.o kernel/rtlil.o kernel/log.o kernel/calc.o kernel/yosys.o
OBJS += libs/bigint/BigIntegerAlgorithms.o libs/bigint/BigInteger.o libs/bigint/BigIntegerUtils.o
OBJS += libs/bigint/BigUnsigned.o libs/bigint/BigUnsignedInABase.o
OBJS += libs/sha1/sha1.o
+
+ifneq ($(SMALL),1)
+
OBJS += libs/subcircuit/subcircuit.o
-OBJS += libs/ezsat/ezsat.o
-ifeq ($(ENABLE_MINISAT),1)
-CXXFLAGS += -DYOSYS_ENABLE_MINISAT
+OBJS += libs/ezsat/ezsat.o
OBJS += libs/ezsat/ezminisat.o
-LDLIBS += -lminisat
-endif
+
+OBJS += libs/minisat/Options.o
+OBJS += libs/minisat/SimpSolver.o
+OBJS += libs/minisat/Solver.o
+OBJS += libs/minisat/System.o
include frontends/*/Makefile.inc
include passes/*/Makefile.inc
include backends/*/Makefile.inc
include techlibs/*/Makefile.inc
+else
+
+include frontends/verilog/Makefile.inc
+include frontends/ilang/Makefile.inc
+include frontends/ast/Makefile.inc
+
+OBJS += passes/hierarchy/hierarchy.o
+OBJS += passes/cmds/select.o
+OBJS += passes/cmds/show.o
+OBJS += passes/cmds/stat.o
+OBJS += passes/cmds/cover.o
+OBJS += passes/cmds/design.o
+OBJS += passes/cmds/plugin.o
+
+include passes/proc/Makefile.inc
+include passes/opt/Makefile.inc
+include passes/techmap/Makefile.inc
+include passes/abc/Makefile.inc
+
+include backends/verilog/Makefile.inc
+include backends/ilang/Makefile.inc
+
+include techlibs/common/Makefile.inc
+
+endif
+
top-all: $(TARGETS) $(EXTRA_TARGETS)
+ @echo ""
+ @echo " Build successful."
+ @echo ""
yosys: $(OBJS)
- $(CXX) -o yosys $(LDFLAGS) $(OBJS) $(LDLIBS)
+ $(P) $(CXX) -o yosys $(LDFLAGS) $(OBJS) $(LDLIBS)
+
+%.o: %.cc
+ $(P) $(CXX) -o $@ -c $(CXXFLAGS) $<
+
+%.o: %.cpp
+ $(P) $(CXX) -o $@ -c $(CXXFLAGS) $<
kernel/version_$(GIT_REV).cc: Makefile
- rm -f kernel/version_*.o kernel/version_*.d kernel/version_*.cc
- echo "extern const char *yosys_version_str; const char *yosys_version_str=\"Yosys $(YOSYS_VER) (git sha1 $(GIT_REV))\";" > kernel/version_$(GIT_REV).cc
+ $(P) rm -f kernel/version_*.o kernel/version_*.d kernel/version_*.cc
+ $(Q) echo "extern const char *yosys_version_str; const char *yosys_version_str=\"Yosys $(YOSYS_VER) (git sha1 $(GIT_REV), $(CXX) ` \
+ $(CXX) --version | tr ' ()' '\n' | grep '^[0-9]' | head -n1` $(filter -f% -m% -O% -DNDEBUG,$(CXXFLAGS)))\";" > kernel/version_$(GIT_REV).cc
yosys-config: yosys-config.in
- sed -e 's,@CXX@,$(CXX),;' -e 's,@CXXFLAGS@,$(CXXFLAGS),;' -e 's,@LDFLAGS@,$(LDFLAGS),;' -e 's,@LDLIBS@,$(LDLIBS),;' \
+ $(P) $(SED) -e 's,@CXX@,$(CXX),;' -e 's,@CXXFLAGS@,$(CXXFLAGS),;' -e 's,@LDFLAGS@,$(LDFLAGS),;' -e 's,@LDLIBS@,$(LDLIBS),;' \
-e 's,@BINDIR@,$(DESTDIR)/bin,;' -e 's,@DATDIR@,$(DESTDIR)/share/yosys,;' < yosys-config.in > yosys-config
- chmod +x yosys-config
-
-yosys-svgviewer: libs/svgviewer/*.h libs/svgviewer/*.cpp
- cd libs/svgviewer && $(QMAKE) && make
- cp libs/svgviewer/svgviewer yosys-svgviewer
+ $(Q) chmod +x yosys-config
abc/abc-$(ABCREV):
+ $(P)
ifneq ($(ABCREV),default)
- if ( cd abc && hg identify; ) | grep -q +; then \
+ $(Q) if ( cd abc 2> /dev/null && hg identify; ) | grep -q +; then \
echo 'REEBE: NOP pbagnvaf ybpny zbqvsvpngvbaf! Frg NOPERI=qrsnhyg va Lbflf Znxrsvyr!' | tr 'A-Za-z' 'N-ZA-Mn-za-m'; false; \
fi
- if test "`cd abc && hg identify | cut -f1 -d' '`" != "$(ABCREV)"; then \
+ $(Q) if test "`cd abc 2> /dev/null && hg identify | cut -f1 -d' '`" != "$(ABCREV)"; then \
test $(ABCPULL) -ne 0 || { echo 'REEBE: NOP abg hc gb qngr naq NOPCHYY frg gb 0 va Znxrsvyr!' | tr 'A-Za-z' 'N-ZA-Mn-za-m'; exit 1; }; \
+ echo "Pulling ABC from bitbucket.org:"; \
test -d abc || hg clone https://bitbucket.org/alanmi/abc abc; \
cd abc && hg pull && hg update -r $(ABCREV); \
fi
endif
- rm -f abc/abc-[0-9a-f]*
- cd abc && $(MAKE) PROG="abc-$(ABCREV)" MSG_PREFIX="YOSYS-ABC: "
+ $(Q) rm -f abc/abc-[0-9a-f]*
+ $(Q) cd abc && $(MAKE) $(S) PROG="abc-$(ABCREV)" MSG_PREFIX="$(eval P_OFFSET = 5)$(call P_SHOW)$(eval P_OFFSET = 10) ABC: "
ifeq ($(ABCREV),default)
.PHONY: abc/abc-$(ABCREV)
endif
yosys-abc: abc/abc-$(ABCREV)
- cp abc/abc-$(ABCREV) yosys-abc
-
-test: yosys
- cd tests/simple && bash run-test.sh
- cd tests/hana && bash run-test.sh
- cd tests/asicworld && bash run-test.sh
- cd tests/sat && bash run-test.sh
+ $(P) cp abc/abc-$(ABCREV) yosys-abc
+
+test: $(TARGETS) $(EXTRA_TARGETS)
+ +cd tests/simple && bash run-test.sh
+ +cd tests/hana && bash run-test.sh
+ +cd tests/asicworld && bash run-test.sh
+ +cd tests/realmath && bash run-test.sh
+ +cd tests/share && bash run-test.sh
+ +cd tests/fsm && bash run-test.sh
+ +cd tests/techmap && bash run-test.sh
+ +cd tests/memories && bash run-test.sh
+ +cd tests/various && bash run-test.sh
+ +cd tests/sat && bash run-test.sh
+ @echo ""
+ @echo " Passed \"make test\"."
+ @echo ""
+
+VALGRIND ?= valgrind --error-exitcode=1 --leak-check=full --show-reachable=yes --errors-for-leak-kinds=all
+
+vgtest: $(TARGETS) $(EXTRA_TARGETS)
+ $(VALGRIND) ./yosys -p 'setattr -mod -unset top; hierarchy; proc; opt; memory -nomap; opt -fine; techmap; opt' $$( ls tests/simple/*.v | grep -v repwhile.v )
+ @echo ""
+ @echo " Passed \"make vgtest\"."
+ @echo ""
+
+vloghtb: $(TARGETS) $(EXTRA_TARGETS)
+ +cd tests/vloghtb && bash run-test.sh
+ @echo ""
+ @echo " Passed \"make vloghtb\"."
+ @echo ""
install: $(TARGETS) $(EXTRA_TARGETS)
$(INSTALL_SUDO) mkdir -p $(DESTDIR)/bin
@@ -152,12 +275,15 @@ manual: $(TARGETS) $(EXTRA_TARGETS)
cd manual && bash manual.sh
clean:
- rm -rvf share
+ rm -rf share
cd manual && bash clean.sh
- rm -vf $(OBJS) $(GENFILES) $(TARGETS) $(EXTRA_TARGETS)
- rm -vf kernel/version_*.o kernel/version_*.cc abc/abc-[0-9a-f]*
- rm -vf libs/*/*.d frontends/*/*.d passes/*/*.d backends/*/*.d kernel/*.d techlibs/*/*.d
- test ! -f libs/svgviewer/Makefile || make -C libs/svgviewer distclean
+ rm -f $(OBJS) $(GENFILES) $(TARGETS) $(EXTRA_TARGETS)
+ rm -f kernel/version_*.o kernel/version_*.cc abc/abc-[0-9a-f]*
+ rm -f libs/*/*.d frontends/*/*.d passes/*/*.d backends/*/*.d kernel/*.d techlibs/*/*.d
+
+clean-abc:
+ make -C abc clean
+ rm -f yosys-abc abc/abc-[0-9a-f]*
mrproper: clean
git clean -xdf
@@ -172,17 +298,24 @@ qtcreator:
config-clean: clean
rm -f Makefile.conf
-config-clang-debug: clean
- echo 'CONFIG := clang-debug' > Makefile.conf
+config-clang: clean
+ echo 'CONFIG := clang' > Makefile.conf
+
+config-gcc: clean
+ echo 'CONFIG := gcc' > Makefile.conf
-config-gcc-debug: clean
- echo 'CONFIG := gcc-debug' > Makefile.conf
+config-gcc-4.6: clean
+ echo 'CONFIG := gcc-4.6' > Makefile.conf
-config-release: clean
- echo 'CONFIG := release' > Makefile.conf
+config-emcc: clean
+ echo 'CONFIG := emcc' > Makefile.conf
+ echo 'ENABLE_TCL := 0' >> Makefile.conf
+ echo 'ENABLE_ABC := 0' >> Makefile.conf
+ echo 'ENABLE_PLUGINS := 0' >> Makefile.conf
+ echo 'ENABLE_READLINE := 0' >> Makefile.conf
config-gprof: clean
- echo 'CONFIG := gcc-debug' > Makefile.conf
+ echo 'CONFIG := gcc' > Makefile.conf
echo 'ENABLE_GPROF := 1' >> Makefile.conf
config-sudo:
@@ -196,5 +329,5 @@ config-sudo:
-include techlibs/*/*.d
.PHONY: all top-all abc test install install-abc manual clean mrproper qtcreator
-.PHONY: config-clean config-clang-debug config-gcc-debug config-release
+.PHONY: config-clean config-clang config-gcc config-gcc-4.6 config-gprof config-sudo