wownero-puddle/Makefile

249 lines
7.3 KiB
Makefile
Raw Normal View History

2020-02-02 05:24:51 +00:00
# Copyright (c) 2020, The Monero Project
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from this
# software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
2018-08-12 14:46:08 +01:00
TARGET = monero-pool
TYPE = debug
2019-02-24 19:07:16 +00:00
ifeq ($(MAKECMDGOALS),release)
TYPE = release
2019-02-24 19:07:16 +00:00
endif
2019-10-27 07:07:29 +00:00
ifeq ($(origin MONERO_BUILD_ROOT), undefined)
MONERO_BUILD_ROOT = \
${MONERO_ROOT}/build/$(shell echo `uname | \
sed -e 's|[:/\\ \(\)]|_|g'`/` \
git -C ${MONERO_ROOT} branch | \
grep '\* ' | cut -f2- -d' '| \
sed -e 's|[:/\\ \(\)]|_|g'`)/release
endif
MONERO_INC = \
${MONERO_ROOT}/src \
${MONERO_ROOT}/external \
${MONERO_ROOT}/external/easylogging++ \
${MONERO_ROOT}/contrib/epee/include
MONERO_LIBS = \
${MONERO_BUILD_ROOT}/src/cryptonote_basic/libcryptonote_basic.a \
${MONERO_BUILD_ROOT}/src/crypto/libcncrypto.a \
${MONERO_BUILD_ROOT}/src/common/libcommon.a \
${MONERO_BUILD_ROOT}/src/ringct/libringct_basic.a \
${MONERO_BUILD_ROOT}/src/device/libdevice.a \
${MONERO_BUILD_ROOT}/contrib/epee/src/libepee.a \
2019-11-23 06:32:56 +00:00
${MONERO_BUILD_ROOT}/external/easylogging++/libeasylogging.a \
${MONERO_BUILD_ROOT}/src/libversion.a
2019-08-22 00:35:30 +01:00
2020-04-11 15:46:05 +01:00
LIBRX = ${MONERO_BUILD_ROOT}/external/RandomWOW/librandomx.a
DIRS = src data rxi/log/src
2018-08-12 14:46:08 +01:00
OS := $(shell uname -s)
CPPDEFS = _GNU_SOURCE AUTO_INITIALIZE_EASYLOGGINGPP LOG_USE_COLOR
2019-08-22 00:35:30 +01:00
ifeq ($(wildcard ${LIBRX}),${LIBRX})
MONERO_LIBS += ${LIBRX}
CPPDEFS += HAVE_RX
else
ifneq ($(MAKECMDGOALS),clean)
$(warning Building without RandomX!)
endif
endif
W = -W -Wall -Wno-unused-parameter -Wuninitialized
OPT = -maes -fPIC
CFLAGS = $(W) -Wbad-function-cast $(OPT) -std=c99
CXXFLAGS = $(W) -Wno-reorder $(OPT) -std=c++11
LDPARAM = -fPIC -pie
2018-08-12 14:46:08 +01:00
ifeq ($(OS), Darwin)
CXXFLAGS += -stdlib=libc++
CPPDEFS += HAVE_MEMSET_S
LDPARAM =
2018-08-12 14:46:08 +01:00
endif
ifeq ($(TYPE),debug)
CFLAGS += -g
CXXFLAGS += -g
CPPDEFS += DEBUG
2018-08-12 14:46:08 +01:00
endif
ifeq ($(TYPE), release)
CFLAGS += -O3
CXXFLAGS += -O3
2018-08-12 14:46:08 +01:00
endif
LDPARAM += $(LDFLAGS)
LIBS := lmdb pthread unbound
2018-08-12 14:46:08 +01:00
ifeq ($(OS), Darwin)
LIBS += c++ \
boost_system-mt boost_date_time-mt boost_chrono-mt \
boost_filesystem-mt boost_thread-mt boost_regex-mt \
boost_serialization-mt boost_program_options-mt
2018-08-12 14:46:08 +01:00
else
LIBS += dl uuid \
boost_system boost_date_time boost_chrono \
boost_filesystem boost_thread boost_regex \
boost_serialization boost_program_options
2018-08-12 14:46:08 +01:00
endif
2019-11-12 16:33:28 +00:00
HID_FOUND := $(shell grep -qo HIDAPI_LIBRARY-NOTFOUND \
${MONERO_BUILD_ROOT}/CMakeCache.txt; echo $$?)
ifeq ($(HID_FOUND), 1)
LIBS += hidapi-libusb
endif
2018-08-12 14:46:08 +01:00
PKG_LIBS := $(shell pkg-config \
"libevent_core >= 2.1" \
"libevent_pthreads >= 2.1" \
"libevent_extra >= 2.1" \
json-c \
openssl \
libsodium \
--libs)
2018-08-12 14:46:08 +01:00
STATIC_LIBS =
DLIBS =
INCPATH := $(DIRS) ${MONERO_INC} /opt/local/include /usr/local/include
2018-08-12 14:46:08 +01:00
PKG_INC := $(shell pkg-config \
"libevent_core >= 2.1" \
"libevent_pthreads >= 2.1" \
"libevent_extra >= 2.1" \
json-c \
openssl \
libsodium \
--cflags)
2018-08-12 14:46:08 +01:00
LIBPATH := /opt/local/lib/ /usr/local/lib
C++ = g++
CC = gcc
2019-05-04 19:15:01 +01:00
XXD := $(shell command -v xxd 2> /dev/null)
2018-08-12 14:46:08 +01:00
STORE = build/$(TYPE)
SOURCE := $(foreach DIR,$(DIRS),$(wildcard $(DIR)/*.cpp))
CSOURCE := $(foreach DIR,$(DIRS),$(wildcard $(DIR)/*.c))
2019-02-24 16:30:51 +00:00
SSOURCE := $(foreach DIR,$(DIRS),$(wildcard $(DIR)/*.S))
2018-08-12 14:46:08 +01:00
HTMLSOURCE := $(foreach DIR,$(DIRS),$(wildcard $(DIR)/*.html))
HEADERS := $(foreach DIR,$(DIRS),$(wildcard $(DIR)/*.h))
OBJECTS := $(addprefix $(STORE)/, $(SOURCE:.cpp=.o))
COBJECTS := $(addprefix $(STORE)/, $(CSOURCE:.c=.o))
2019-02-24 16:30:51 +00:00
SOBJECTS := $(addprefix $(STORE)/, $(SSOURCE:.S=.o))
2018-08-12 14:46:08 +01:00
HTMLOBJECTS := $(addprefix $(STORE)/, $(HTMLSOURCE:.html=.o))
DFILES := $(addprefix $(STORE)/,$(SOURCE:.cpp=.d))
CDFILES := $(addprefix $(STORE)/,$(CSOURCE:.c=.d))
2019-02-24 16:30:51 +00:00
SDFILES := $(addprefix $(STORE)/,$(CSOURCE:.S=.d))
2018-08-12 14:46:08 +01:00
2019-05-07 06:12:30 +01:00
.PHONY: clean dirs debug release preflight
2018-08-12 14:46:08 +01:00
$(TARGET): preflight dirs $(OBJECTS) $(COBJECTS) $(SOBJECTS) $(HTMLOBJECTS)
2018-08-12 14:46:08 +01:00
@echo Linking $(OBJECTS)...
$(C++) -o $(STORE)/$(TARGET) \
$(OBJECTS) $(COBJECTS) $(SOBJECTS) $(HTMLOBJECTS) \
$(LDPARAM) $(MONERO_LIBS) \
$(foreach LIBRARY, $(LIBS),-l$(LIBRARY)) \
$(foreach LIB,$(LIBPATH),-L$(LIB)) \
$(PKG_LIBS) $(STATIC_LIBS)
2018-08-12 14:46:08 +01:00
@cp pool.conf $(STORE)/
2019-05-07 06:12:30 +01:00
@cp tools/* $(STORE)/
2018-08-12 14:46:08 +01:00
$(STORE)/%.o: %.cpp
@echo Creating object file for $*...
$(C++) -Wp,-MMD,$(STORE)/$*.dd $(CXXFLAGS) \
$(foreach INC,$(INCPATH),-I$(INC)) \
$(PKG_INC) \
$(foreach CPPDEF,$(CPPDEFS),-D$(CPPDEF)) \
-c $< -o $@
@sed -e '1s/^\(.*\)$$/$(subst /,\/,$(dir $@))\1/' \
$(STORE)/$*.dd > $(STORE)/$*.d
2018-08-12 14:46:08 +01:00
@rm -f $(STORE)/$*.dd
$(STORE)/%.o: %.c
@echo Creating object file for $*...
$(CC) -Wp,-MMD,$(STORE)/$*.dd $(CFLAGS) \
$(foreach INC,$(INCPATH),-I$(INC)) $(PKG_INC) \
$(foreach CPPDEF,$(CPPDEFS),-D$(CPPDEF)) -c $< -o $@
@sed -e '1s/^\(.*\)$$/$(subst /,\/,$(dir $@))\1/' \
$(STORE)/$*.dd > $(STORE)/$*.d
2018-08-12 14:46:08 +01:00
@rm -f $(STORE)/$*.dd
2019-02-24 16:30:51 +00:00
$(STORE)/%.o: %.S
@echo Creating object file for $*...
$(CC) -Wp,-MMD,$(STORE)/$*.dd $(CFLAGS) \
$(foreach INC,$(INCPATH),-I$(INC)) $(PKG_INC) \
$(foreach CPPDEF,$(CPPDEFS),-D$(CPPDEF)) -c $< -o $@
@sed -e '1s/^\(.*\)$$/$(subst /,\/,$(dir $@))\1/' \
$(STORE)/$*.dd > $(STORE)/$*.d
2019-02-24 16:30:51 +00:00
@rm -f $(STORE)/$*.dd
2018-08-12 14:46:08 +01:00
$(STORE)/%.o: %.html
@echo Creating object file for $*...
xxd -i $< | sed -e 's/src_//' -e 's/embed_//' > $(STORE)/$*.c
$(CC) $(CFLAGS) -c $(STORE)/$*.c -o $@
2018-08-12 14:46:08 +01:00
@rm -f $(STORE)/$*.c
# Empty rule to prevent problems when a header is deleted.
%.h: ;
debug release : $(TARGET)
2018-08-12 14:46:08 +01:00
clean:
@echo Making clean.
2019-02-24 19:07:16 +00:00
@find ./build -type f -name '*.o' -delete
@find ./build -type f -name '*.d' -delete
@find ./build -type f -name $(TARGET) -delete
2018-08-12 14:46:08 +01:00
dirs:
@-if [ ! -e $(STORE) ]; then mkdir -p $(STORE); fi;
@-$(foreach DIR,$(DIRS), \
if [ ! -e $(STORE)/$(DIR) ]; then mkdir -p $(STORE)/$(DIR); fi; )
2018-08-12 14:46:08 +01:00
preflight:
ifeq ($(origin MONERO_ROOT), undefined)
$(error You need to set an environment variable MONERO_ROOT \
to your monero repository root)
endif
2019-04-16 04:44:03 +01:00
ifndef PKG_LIBS
$(error Missing dependencies)
2019-04-16 04:44:03 +01:00
endif
2019-04-16 05:08:54 +01:00
ifndef XXD
$(error Command xxd not found)
2019-04-16 05:08:54 +01:00
endif
2018-08-12 14:46:08 +01:00
-include $(DFILES)
-include $(CDFILES)
2019-02-24 19:07:16 +00:00
-include $(SDFILES)
2018-08-12 14:46:08 +01:00