| CC := gcc | |
| CXX := g++ | |
| LD := $(CXX) | |
| MSG_PREFIX ?= | |
| ABCSRC = . | |
| $(info $(MSG_PREFIX)Using CC=$(CC)) | |
| $(info $(MSG_PREFIX)Using CXX=$(CXX)) | |
| $(info $(MSG_PREFIX)Using LD=$(LD)) | |
| PROG := abc | |
| OS := $(shell uname -s) | |
| MODULES := \ | |
| $(wildcard src/ext*) \ | |
| src/base/abc src/base/abci src/base/cmd src/base/io src/base/main src/base/exor \ | |
| src/base/ver src/base/wlc src/base/acb src/base/bac src/base/cba src/base/pla src/base/test \ | |
| src/map/mapper src/map/mio src/map/super src/map/if \ | |
| src/map/amap src/map/cov src/map/scl src/map/mpm \ | |
| src/misc/extra src/misc/mvc src/misc/st src/misc/util src/misc/nm \ | |
| src/misc/vec src/misc/hash src/misc/tim src/misc/bzlib src/misc/zlib \ | |
| src/misc/mem src/misc/bar src/misc/bbl src/misc/parse \ | |
| src/opt/cut src/opt/fxu src/opt/fxch src/opt/rwr src/opt/mfs src/opt/sim \ | |
| src/opt/ret src/opt/fret src/opt/res src/opt/lpk src/opt/nwk src/opt/rwt \ | |
| src/opt/cgt src/opt/csw src/opt/dar src/opt/dau src/opt/dsc src/opt/sfm src/opt/sbd \ | |
| src/sat/bsat src/sat/xsat src/sat/satoko src/sat/csat src/sat/msat src/sat/psat src/sat/cnf src/sat/bmc src/sat/glucose \ | |
| src/bool/bdc src/bool/deco src/bool/dec src/bool/kit src/bool/lucky \ | |
| src/bool/rsb src/bool/rpo \ | |
| src/proof/pdr src/proof/abs src/proof/live src/proof/ssc src/proof/int \ | |
| src/proof/cec src/proof/acec src/proof/dch src/proof/fraig src/proof/fra src/proof/ssw \ | |
| src/aig/aig src/aig/saig src/aig/gia src/aig/ioa src/aig/ivy src/aig/hop \ | |
| src/aig/miniaig | |
| all: $(PROG) | |
| default: $(PROG) | |
| ARCHFLAGS_EXE ?= ./arch_flags | |
| $(ARCHFLAGS_EXE) : arch_flags.c | |
| $(CC) arch_flags.c -o $(ARCHFLAGS_EXE) | |
| INCLUDES += -I$(ABCSRC)/src | |
| # Use C99 stdint.h header for platform-dependent types | |
| ifdef ABC_USE_STDINT_H | |
| ARCHFLAGS ?= -DABC_USE_STDINT_H=1 | |
| else | |
| ARCHFLAGS ?= $(shell $(CC) $(ABCSRC)/arch_flags.c -o $(ARCHFLAGS_EXE) && $(ARCHFLAGS_EXE)) | |
| endif | |
| ARCHFLAGS := $(ARCHFLAGS) | |
| OPTFLAGS ?= -g -O | |
| CFLAGS += -Wall -Wno-unused-function -Wno-write-strings -Wno-sign-compare $(ARCHFLAGS) | |
| ifneq ($(findstring arm,$(shell uname -m)),) | |
| CFLAGS += -DABC_MEMALIGN=4 | |
| endif | |
| # compile ABC using the C++ comipler and put everything in the namespace $(ABC_NAMESPACE) | |
| ifdef ABC_USE_NAMESPACE | |
| CFLAGS += -DABC_NAMESPACE=$(ABC_USE_NAMESPACE) -fpermissive | |
| CC := $(CXX) | |
| $(info $(MSG_PREFIX)Compiling in namespace $(ABC_NAMESPACE)) | |
| endif | |
| # compile CUDD with ABC | |
| ifndef ABC_USE_NO_CUDD | |
| CFLAGS += -DABC_USE_CUDD=1 | |
| MODULES += src/bdd/cudd src/bdd/extrab src/bdd/dsd src/bdd/epd src/bdd/mtr src/bdd/reo src/bdd/cas src/bdd/bbr src/bdd/llb | |
| $(info $(MSG_PREFIX)Compiling with CUDD) | |
| endif | |
| ABC_READLINE_INCLUDES ?= | |
| ABC_READLINE_LIBRARIES ?= -lreadline | |
| # whether to use libreadline | |
| ifndef ABC_USE_NO_READLINE | |
| CFLAGS += -DABC_USE_READLINE $(ABC_READLINE_INCLUDES) | |
| LIBS += $(ABC_READLINE_LIBRARIES) | |
| ifeq ($(OS), FreeBSD) | |
| CFLAGS += -I/usr/local/include | |
| LDFLAGS += -L/usr/local/lib | |
| endif | |
| $(info $(MSG_PREFIX)Using libreadline) | |
| endif | |
| # whether to compile with thread support | |
| ifndef ABC_USE_NO_PTHREADS | |
| CFLAGS += -DABC_USE_PTHREADS | |
| LIBS += -lpthread | |
| $(info $(MSG_PREFIX)Using pthreads) | |
| endif | |
| # whether to compile into position independent code | |
| ifdef ABC_USE_PIC | |
| CFLAGS += -fPIC | |
| LIBS += -fPIC | |
| $(info $(MSG_PREFIX)Compiling position independent code) | |
| endif | |
| # whether to echo commands while building | |
| ifdef ABC_MAKE_VERBOSE | |
| VERBOSE= | |
| else | |
| VERBOSE=@ | |
| endif | |
| # Set -Wno-unused-bug-set-variable for GCC 4.6.0 and greater only | |
| ifneq ($(or $(findstring gcc,$(CC)),$(findstring g++,$(CC))),) | |
| empty:= | |
| space:=$(empty) $(empty) | |
| GCC_VERSION=$(shell $(CC) -dumpversion) | |
| GCC_MAJOR=$(word 1,$(subst .,$(space),$(GCC_VERSION))) | |
| GCC_MINOR=$(word 2,$(subst .,$(space),$(GCC_VERSION))) | |
| $(info $(MSG_PREFIX)Found GCC_VERSION $(GCC_VERSION)) | |
| ifeq ($(findstring $(GCC_MAJOR),0 1 2 3),) | |
| $(info $(MSG_PREFIX)Found GCC_MAJOR>=4) | |
| ifeq ($(findstring $(GCC_MINOR),0 1 2 3 4 5),) | |
| $(info $(MSG_PREFIX)Found GCC_MINOR>=6) | |
| CFLAGS += -Wno-unused-but-set-variable | |
| endif | |
| endif | |
| endif | |
| # LIBS := -ldl -lrt | |
| LIBS += -lm | |
| ifneq ($(OS), FreeBSD) | |
| LIBS += -ldl | |
| endif | |
| ifneq ($(findstring Darwin, $(shell uname)), Darwin) | |
| LIBS += -lrt | |
| endif | |
| ifdef ABC_USE_LIBSTDCXX | |
| LIBS += -lstdc++ | |
| $(info $(MSG_PREFIX)Using explicit -lstdc++) | |
| endif | |
| $(info $(MSG_PREFIX)Using CFLAGS=$(CFLAGS)) | |
| CXXFLAGS += $(CFLAGS) | |
| SRC := | |
| GARBAGE := core core.* *.stackdump ./tags $(PROG) arch_flags | |
| .PHONY: all default tags clean docs cmake_info | |
| include $(patsubst %, $(ABCSRC)/%/module.make, $(MODULES)) | |
| OBJ := \ | |
| $(patsubst %.cc, %.o, $(filter %.cc, $(SRC))) \ | |
| $(patsubst %.cpp, %.o, $(filter %.cpp, $(SRC))) \ | |
| $(patsubst %.c, %.o, $(filter %.c, $(SRC))) \ | |
| $(patsubst %.y, %.o, $(filter %.y, $(SRC))) | |
| LIBOBJ := $(filter-out src/base/main/main.o,$(OBJ)) | |
| DEP := $(OBJ:.o=.d) | |
| # implicit rules | |
| %.o: %.c | |
| @echo "$(MSG_PREFIX)\`\` Compiling:" $(LOCAL_PATH)/$< | |
| $(VERBOSE)$(CC) -c $(OPTFLAGS) $(INCLUDES) $(CFLAGS) $< -o $@ | |
| %.o: %.cc | |
| @echo "$(MSG_PREFIX)\`\` Compiling:" $(LOCAL_PATH)/$< | |
| $(VERBOSE)$(CXX) -c $(OPTFLAGS) $(INCLUDES) $(CXXFLAGS) $< -o $@ | |
| %.o: %.cpp | |
| @echo "$(MSG_PREFIX)\`\` Compiling:" $(LOCAL_PATH)/$< | |
| $(VERBOSE)$(CXX) -c $(OPTFLAGS) $(INCLUDES) $(CXXFLAGS) $< -o $@ | |
| %.d: %.c | |
| @echo "$(MSG_PREFIX)\`\` Generating dependency:" $(LOCAL_PATH)/$< | |
| $(VERBOSE)$(ABCSRC)/depends.sh $(CC) `dirname $*.c` $(OPTFLAGS) $(INCLUDES) $(CFLAGS) $< > $@ | |
| %.d: %.cc | |
| @echo "$(MSG_PREFIX)\`\` Generating dependency:" $(LOCAL_PATH)/$< | |
| $(VERBOSE)$(ABCSRC)/depends.sh $(CXX) `dirname $*.cc` $(OPTFLAGS) $(INCLUDES) $(CXXFLAGS) $< > $@ | |
| %.d: %.cpp | |
| @echo "$(MSG_PREFIX)\`\` Generating dependency:" $(LOCAL_PATH)/$< | |
| $(VERBOSE)$(ABCSRC)/depends.sh $(CXX) `dirname $*.cpp` $(OPTFLAGS) $(INCLUDES) $(CXXFLAGS) $< > $@ | |
| ifndef ABC_MAKE_NO_DEPS | |
| -include $(DEP) | |
| endif | |
| # Actual targets | |
| depend: $(DEP) | |
| clean: | |
| @echo "$(MSG_PREFIX)\`\` Cleaning up..." | |
| $(VERBOSE)rm -rvf $(PROG) lib$(PROG).a $(OBJ) $(GARBAGE) $(OBJ:.o=.d) | |
| tags: | |
| etags `find . -type f -regex '.*\.\(c\|h\)'` | |
| $(PROG): $(OBJ) | |
| @echo "$(MSG_PREFIX)\`\` Building binary:" $(notdir $@) | |
| $(VERBOSE)$(LD) -o $@ $^ $(LDFLAGS) $(LIBS) | |
| lib$(PROG).a: $(LIBOBJ) | |
| @echo "$(MSG_PREFIX)\`\` Linking:" $(notdir $@) | |
| $(VERBOSE)ar rv $@ $? | |
| $(VERBOSE)ranlib $@ | |
| lib$(PROG).so: $(LIBOBJ) | |
| @echo "$(MSG_PREFIX)\`\` Linking:" $(notdir $@) | |
| $(VERBOSE)$(CXX) -shared -o $@ $^ $(LIBS) | |
| docs: | |
| @echo "$(MSG_PREFIX)\`\` Building documentation." $(notdir $@) | |
| $(VERBOSE)doxygen doxygen.conf | |
| cmake_info: | |
| @echo SEPARATOR_CFLAGS $(CFLAGS) SEPARATOR_CFLAGS | |
| @echo SEPARATOR_CXXFLAGS $(CXXFLAGS) SEPARATOR_CXXFLAGS | |
| @echo SEPARATOR_LIBS $(LIBS) SEPARATOR_LIBS | |
| @echo SEPARATOR_SRC $(SRC) SEPARATOR_SRC |