# Copyright (c) 2009-2010 Satoshi Nakamoto # Copyright (c) 2013 Primecoind developers # Distributed under conditional MIT/X11 software license, # see the accompanying file COPYING # :=0 --> UPnP support turned off by default at runtime # :=1 --> UPnP support turned on by default at runtime # :=- --> No UPnP support - miniupnp not required USE_UPNP:=- # :=1 --> Enable IPv6 support # :=0 --> Disable IPv6 support USE_IPV6:=1 LINK:=$(CXX) DEFS=-DBOOST_SPIRIT_THREADSAFE -D_FILE_OFFSET_BITS=64 DEFS += $(addprefix -I,$(CURDIR) $(CURDIR)/obj $(BOOST_INCLUDE_PATH) $(BDB_INCLUDE_PATH) $(OPENSSL_INCLUDE_PATH)) LIBS = $(addprefix -L,$(BOOST_LIB_PATH) $(BDB_LIB_PATH) $(OPENSSL_LIB_PATH)) ifdef TOM DEFS += -L/home/bc/ROOT/lib LIBS += -I/home/bc/ROOT/include endif TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data) LMODE = dynamic LMODE2 = dynamic ifdef STATIC LMODE = static ifeq (${STATIC}, all) LMODE2 = static endif else TESTDEFS += -DBOOST_TEST_DYN_LINK endif # for boost 1.37, add -mt to the boost libraries LIBS += \ -Wl,-B$(LMODE) \ -l boost_system$(BOOST_LIB_SUFFIX) \ -l boost_filesystem$(BOOST_LIB_SUFFIX) \ -l boost_program_options$(BOOST_LIB_SUFFIX) \ -l boost_thread$(BOOST_LIB_SUFFIX) \ -l boost_chrono$(BOOST_LIB_SUFFIX) \ -l db_cxx$(BDB_LIB_SUFFIX) \ -l ssl \ -l crypto \ -Wl,-Bdynamic \ -l gmp \ -Wl,-B$(LMODE) TESTLIBS += \ -Wl,-B$(LMODE) \ -l boost_unit_test_framework$(BOOST_LIB_SUFFIX) ifndef USE_UPNP override USE_UPNP = - endif ifneq (${USE_UPNP}, -) LIBS += -l miniupnpc DEFS += -DUSE_UPNP=$(USE_UPNP) endif ifneq (${USE_IPV6}, -) DEFS += -DUSE_IPV6=$(USE_IPV6) endif ifeq ($(RELEASE), 1) # Linux: Enable bundling libgmp.so with the binary LIBS += -Wl,-rpath,\$$ORIGIN endif LIBS+= \ -Wl,-B$(LMODE2) \ -l z \ -l dl \ -l pthread #DEBUGFLAGS=-g3 -fno-inline -O0 DEBUGFLAGS= # CXXFLAGS can be specified on the make command line, so we use xCXXFLAGS that only # adds some defaults in front. Unfortunately, CXXFLAGS=... $(CXXFLAGS) does not work. xCXXFLAGS=-O2 -pthread -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter \ $(DEBUGFLAGS) $(DEFS) $(CXXFLAGS) -march=native # LDFLAGS can be specified on the make command line, so we use xLDFLAGS that only # adds some defaults in front. Unfortunately, LDFLAGS=... $(LDFLAGS) does not work. xLDFLAGS=$(LDHARDENING) $(LDFLAGS) OBJS= \ obj/version.o \ obj/netbase.o \ obj/util.o \ obj/prime.o \ obj/bitcoinminer.o all: primeminer test check: test_primecoin FORCE ./test_primecoin # # LevelDB support # MAKEOVERRIDES = #LIBS += $(CURDIR)/leveldb/libleveldb.a $(CURDIR)/leveldb/libmemenv.a #DEFS += $(addprefix -I,$(CURDIR)/leveldb/include) #DEFS += $(addprefix -I,$(CURDIR)/leveldb/helpers) #leveldb/libleveldb.a: # @echo "Building LevelDB ..." && cd leveldb && $(MAKE) CC=$(CC) CXX=$(CXX) OPT="$(xCXXFLAGS)" libleveldb.a libmemenv.a && cd .. # auto-generated dependencies: -include obj/*.P -include obj-test/*.P obj/build.h: FORCE /bin/sh ../share/genbuild.sh obj/build.h version.cpp: obj/build.h DEFS += -DHAVE_BUILD_INFO obj/%.o: %.cpp $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< @cp $(@:%.o=%.d) $(@:%.o=%.P); \ sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ rm -f $(@:%.o=%.d) primeminer: $(OBJS:obj/%=obj/%) obj/main_poolminer.o $(LINK) $(xCXXFLAGS) -o $@ $^ $(xLDFLAGS) $(LIBS) primecoind: $(OBJS:obj/%=obj/%) obj/init.o $(LINK) $(xCXXFLAGS) -o $@ $^ $(xLDFLAGS) $(LIBS) TESTOBJS := $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp)) obj-test/%.o: test/%.cpp $(CXX) -c $(TESTDEFS) $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< @cp $(@:%.o=%.d) $(@:%.o=%.P); \ sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ rm -f $(@:%.o=%.d) test_primecoin: $(TESTOBJS) $(filter-out obj/init.o,$(OBJS:obj/%=obj/%)) $(LINK) $(xCXXFLAGS) -o $@ $(LIBPATHS) $^ $(TESTLIBS) $(xLDFLAGS) $(LIBS) clean: -rm -f primecoind test_primecoin -rm -f obj/*.o -rm -f obj-test/*.o -rm -f obj/*.P -rm -f obj-test/*.P -rm -f obj/build.h -cd leveldb && $(MAKE) clean || true FORCE: