2024-05-21 19:29:33 +03:00
|
|
|
# Copyright (c) 2014-2024, The Monero Project
|
2016-08-29 13:13:55 +03:00
|
|
|
#
|
2015-05-31 14:40:18 +03:00
|
|
|
# All rights reserved.
|
2016-08-29 13:13:55 +03:00
|
|
|
#
|
2015-05-31 14:40:18 +03:00
|
|
|
# Redistribution and use in source and binary forms, with or without modification, are
|
|
|
|
# permitted provided that the following conditions are met:
|
2016-08-29 13:13:55 +03:00
|
|
|
#
|
2015-05-31 14:40:18 +03:00
|
|
|
# 1. Redistributions of source code must retain the above copyright notice, this list of
|
|
|
|
# conditions and the following disclaimer.
|
2016-08-29 13:13:55 +03:00
|
|
|
#
|
2015-05-31 14:40:18 +03:00
|
|
|
# 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.
|
2016-08-29 13:13:55 +03:00
|
|
|
#
|
2015-05-31 14:40:18 +03:00
|
|
|
# 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.
|
2016-08-29 13:13:55 +03:00
|
|
|
#
|
2015-05-31 14:40:18 +03:00
|
|
|
# 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-22 02:25:14 +03:00
|
|
|
ANDROID_STANDALONE_TOOLCHAIN_PATH ?= /usr/local/toolchain
|
|
|
|
|
2018-10-24 17:43:31 +03:00
|
|
|
dotgit=$(shell ls -d .git/config)
|
|
|
|
ifneq ($(dotgit), .git/config)
|
|
|
|
USE_SINGLE_BUILDDIR=1
|
|
|
|
endif
|
|
|
|
|
2018-08-20 18:24:26 +03:00
|
|
|
subbuilddir:=$(shell echo `uname | sed -e 's|[:/\\ \(\)]|_|g'`/`git branch | grep '\* ' | cut -f2- -d' '| sed -e 's|[:/\\ \(\)]|_|g'`)
|
|
|
|
ifeq ($(USE_SINGLE_BUILDDIR),)
|
|
|
|
builddir := build/"$(subbuilddir)"
|
|
|
|
topdir := ../../../..
|
|
|
|
deldirs := $(builddir)
|
|
|
|
else
|
|
|
|
builddir := build
|
|
|
|
topdir := ../..
|
|
|
|
deldirs := $(builddir)/debug $(builddir)/release $(builddir)/fuzz
|
|
|
|
endif
|
|
|
|
|
2015-01-27 09:43:15 +02:00
|
|
|
all: release-all
|
2014-03-04 00:07:58 +02:00
|
|
|
|
2018-10-16 04:39:17 +03:00
|
|
|
depends:
|
|
|
|
cd contrib/depends && $(MAKE) HOST=$(target) && cd ../.. && mkdir -p build/$(target)/release
|
2024-02-23 11:56:37 +02:00
|
|
|
cd build/$(target)/release && USE_DEVICE_TREZOR_MANDATORY=1 cmake -DCMAKE_TOOLCHAIN_FILE=$(CURDIR)/contrib/depends/$(target)/share/toolchain.cmake ../../.. && $(MAKE)
|
2018-10-16 04:39:17 +03:00
|
|
|
|
2014-03-04 00:07:58 +02:00
|
|
|
cmake-debug:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/debug
|
|
|
|
cd $(builddir)/debug && cmake -D CMAKE_BUILD_TYPE=Debug $(topdir)
|
2014-03-04 00:07:58 +02:00
|
|
|
|
2015-01-27 09:43:15 +02:00
|
|
|
debug: cmake-debug
|
2018-08-20 18:24:26 +03:00
|
|
|
cd $(builddir)/debug && $(MAKE)
|
2014-03-04 00:07:58 +02:00
|
|
|
|
2017-10-09 02:06:37 +03:00
|
|
|
# Temporarily disable some tests:
|
|
|
|
# * libwallet_api_tests fail (Issue #895)
|
2016-08-23 02:43:43 +03:00
|
|
|
debug-test:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/debug
|
|
|
|
cd $(builddir)/debug && cmake -D BUILD_TESTS=ON -D CMAKE_BUILD_TYPE=Debug $(topdir) && $(MAKE) && $(MAKE) ARGS="-E libwallet_api_tests" test
|
2014-03-04 00:07:58 +02:00
|
|
|
|
2019-09-03 13:27:22 +03:00
|
|
|
debug-test-asan:
|
|
|
|
mkdir -p $(builddir)/debug
|
|
|
|
cd $(builddir)/debug && cmake -D BUILD_TESTS=ON -D SANITIZE=ON -D CMAKE_BUILD_TYPE=Debug $(topdir) && $(MAKE) && $(MAKE) ARGS="-E libwallet_api_tests" test
|
|
|
|
|
2018-11-20 15:40:51 +02:00
|
|
|
debug-test-trezor:
|
|
|
|
mkdir -p $(builddir)/debug
|
|
|
|
cd $(builddir)/debug && cmake -D BUILD_TESTS=ON -D TREZOR_DEBUG=ON -D CMAKE_BUILD_TYPE=Debug $(topdir) && $(MAKE) && $(MAKE) ARGS="-E libwallet_api_tests" test
|
|
|
|
|
2015-01-27 09:43:15 +02:00
|
|
|
debug-all:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/debug
|
|
|
|
cd $(builddir)/debug && cmake -D BUILD_TESTS=ON -D BUILD_SHARED_LIBS=OFF -D CMAKE_BUILD_TYPE=Debug $(topdir) && $(MAKE)
|
2017-07-02 11:12:10 +03:00
|
|
|
|
|
|
|
debug-static-all:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/debug
|
|
|
|
cd $(builddir)/debug && cmake -D BUILD_TESTS=ON -D STATIC=ON -D CMAKE_BUILD_TYPE=Debug $(topdir) && $(MAKE)
|
2014-03-04 00:07:58 +02:00
|
|
|
|
2018-05-31 12:40:00 +03:00
|
|
|
debug-static-win64:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/debug
|
2019-12-30 11:47:16 +02:00
|
|
|
cd $(builddir)/debug && cmake -G "MSYS Makefiles" -D STATIC=ON -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Debug -D BUILD_TAG="win-x64" -D CMAKE_TOOLCHAIN_FILE=$(topdir)/cmake/64-bit-toolchain.cmake -D MSYS2_FOLDER=$(shell cd ${MINGW_PREFIX}/.. && pwd -W) $(topdir) && $(MAKE)
|
2018-05-31 12:40:00 +03:00
|
|
|
|
|
|
|
debug-static-win32:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/debug
|
2019-12-30 11:47:16 +02:00
|
|
|
cd $(builddir)/debug && cmake -G "MSYS Makefiles" -D STATIC=ON -D ARCH="i686" -D BUILD_64=OFF -D CMAKE_BUILD_TYPE=Debug -D BUILD_TAG="win-x32" -D CMAKE_TOOLCHAIN_FILE=$(topdir)/cmake/32-bit-toolchain.cmake -D MSYS2_FOLDER=$(shell cd ${MINGW_PREFIX}/.. && pwd -W) $(topdir) && $(MAKE)
|
2018-05-31 12:40:00 +03:00
|
|
|
|
2014-03-04 00:07:58 +02:00
|
|
|
cmake-release:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/release
|
|
|
|
cd $(builddir)/release && cmake -D CMAKE_BUILD_TYPE=Release $(topdir)
|
2014-03-04 00:07:58 +02:00
|
|
|
|
2015-01-27 09:43:15 +02:00
|
|
|
release: cmake-release
|
2018-08-20 18:24:26 +03:00
|
|
|
cd $(builddir)/release && $(MAKE)
|
2014-03-04 00:07:58 +02:00
|
|
|
|
2016-08-26 22:50:03 +03:00
|
|
|
release-test:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/release
|
2022-04-08 19:22:48 +03:00
|
|
|
cd $(builddir)/release && cmake -D BUILD_TESTS=ON -D CMAKE_BUILD_TYPE=Release $(topdir) && $(MAKE) && $(MAKE) test
|
2014-03-04 00:07:58 +02:00
|
|
|
|
2015-01-27 09:43:15 +02:00
|
|
|
release-all:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/release
|
2022-04-08 19:22:48 +03:00
|
|
|
cd $(builddir)/release && cmake -D BUILD_TESTS=ON -D CMAKE_BUILD_TYPE=Release $(topdir) && $(MAKE)
|
2014-03-04 00:07:58 +02:00
|
|
|
|
2017-02-18 18:30:29 +02:00
|
|
|
release-static:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/release
|
2024-01-06 21:15:08 +02:00
|
|
|
cd $(builddir)/release && cmake -D STATIC=ON -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release $(topdir) && $(MAKE)
|
2017-02-18 18:30:29 +02:00
|
|
|
|
2016-08-29 21:23:57 +03:00
|
|
|
coverage:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/debug
|
|
|
|
cd $(builddir)/debug && cmake -D BUILD_TESTS=ON -D CMAKE_BUILD_TYPE=Debug -D COVERAGE=ON $(topdir) && $(MAKE) && $(MAKE) test
|
2016-08-29 21:23:57 +03:00
|
|
|
|
2017-02-18 18:30:29 +02:00
|
|
|
# Targets for specific prebuilt builds which will be advertised for updates by their build tag
|
|
|
|
|
|
|
|
release-static-linux-armv6:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/release
|
2022-04-08 19:22:48 +03:00
|
|
|
cd $(builddir)/release && cmake -D BUILD_TESTS=OFF -D ARCH="armv6zk" -D STATIC=ON -D BUILD_64=OFF -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG="linux-armv6" $(topdir) && $(MAKE)
|
2016-08-28 08:44:33 +03:00
|
|
|
|
2017-02-18 18:30:29 +02:00
|
|
|
release-static-linux-armv7:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/release
|
2022-04-08 19:22:48 +03:00
|
|
|
cd $(builddir)/release && cmake -D BUILD_TESTS=OFF -D ARCH="armv7-a" -D STATIC=ON -D BUILD_64=OFF -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG="linux-armv7" $(topdir) && $(MAKE)
|
2016-08-29 13:13:55 +03:00
|
|
|
|
2018-10-07 20:05:13 +03:00
|
|
|
release-static-android-armv7:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/release/translations
|
|
|
|
cd $(builddir)/release/translations && cmake ../../../translations && $(MAKE)
|
2022-04-08 19:22:48 +03:00
|
|
|
cd $(builddir)/release && CC=arm-linux-androideabi-clang CXX=arm-linux-androideabi-clang++ cmake -D BUILD_TESTS=OFF -D ARCH="armv7-a" -D STATIC=ON -D BUILD_64=OFF -D CMAKE_BUILD_TYPE=Release -D ANDROID=true -D BUILD_TAG="android-armv7" -D CMAKE_SYSTEM_NAME="Android" -D CMAKE_ANDROID_STANDALONE_TOOLCHAIN="${ANDROID_STANDALONE_TOOLCHAIN_PATH}" -D CMAKE_ANDROID_ARM_MODE=ON -D CMAKE_ANDROID_ARCH_ABI="armeabi-v7a" ../.. && $(MAKE)
|
2018-10-07 20:05:13 +03:00
|
|
|
|
|
|
|
release-static-android-armv8:
|
|
|
|
mkdir -p $(builddir)/release/translations
|
|
|
|
cd $(builddir)/release/translations && cmake ../../../translations && $(MAKE)
|
2022-04-08 19:22:48 +03:00
|
|
|
cd $(builddir)/release && CC=aarch64-linux-android-clang CXX=aarch64-linux-android-clang++ cmake -D BUILD_TESTS=OFF -D ARCH="armv8-a" -D STATIC=ON -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release -D ANDROID=true -D BUILD_TAG="android-armv8" -D CMAKE_SYSTEM_NAME="Android" -D CMAKE_ANDROID_STANDALONE_TOOLCHAIN="${ANDROID_STANDALONE_TOOLCHAIN_PATH}" -D CMAKE_ANDROID_ARCH_ABI="arm64-v8a" ../.. && $(MAKE)
|
2017-01-05 03:11:05 +02:00
|
|
|
|
2017-02-18 18:30:29 +02:00
|
|
|
release-static-linux-armv8:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/release
|
2022-04-08 19:22:48 +03:00
|
|
|
cd $(builddir)/release && cmake -D BUILD_TESTS=OFF -D ARCH="armv8-a" -D STATIC=ON -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG="linux-armv8" $(topdir) && $(MAKE)
|
2016-08-29 13:13:55 +03:00
|
|
|
|
2017-02-18 18:30:29 +02:00
|
|
|
release-static-linux-x86_64:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/release
|
2022-04-08 19:22:48 +03:00
|
|
|
cd $(builddir)/release && cmake -D STATIC=ON -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG="linux-x64" $(topdir) && $(MAKE)
|
2015-04-06 14:05:30 +03:00
|
|
|
|
2017-02-18 18:30:29 +02:00
|
|
|
release-static-freebsd-x86_64:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/release
|
2022-04-08 19:22:48 +03:00
|
|
|
cd $(builddir)/release && cmake -D STATIC=ON -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG="freebsd-x64" $(topdir) && $(MAKE)
|
2017-02-18 18:30:29 +02:00
|
|
|
|
2017-02-21 12:25:58 +02:00
|
|
|
release-static-mac-x86_64:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/release
|
2022-04-08 19:22:48 +03:00
|
|
|
cd $(builddir)/release && cmake -D STATIC=ON -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG="mac-x64" $(topdir) && $(MAKE)
|
2015-04-06 14:05:30 +03:00
|
|
|
|
2017-02-18 18:30:29 +02:00
|
|
|
release-static-linux-i686:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/release
|
2022-04-08 19:22:48 +03:00
|
|
|
cd $(builddir)/release && cmake -D STATIC=ON -D ARCH="i686" -D BUILD_64=OFF -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG="linux-x86" $(topdir) && $(MAKE)
|
2015-04-06 14:05:30 +03:00
|
|
|
|
|
|
|
release-static-win64:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/release
|
2019-12-30 11:47:16 +02:00
|
|
|
cd $(builddir)/release && cmake -G "MSYS Makefiles" -D STATIC=ON -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG="win-x64" -D CMAKE_TOOLCHAIN_FILE=$(topdir)/cmake/64-bit-toolchain.cmake -D MSYS2_FOLDER=$(shell cd ${MINGW_PREFIX}/.. && pwd -W) $(topdir) && $(MAKE)
|
2015-04-06 14:05:30 +03:00
|
|
|
|
|
|
|
release-static-win32:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/release
|
2019-12-30 11:47:16 +02:00
|
|
|
cd $(builddir)/release && cmake -G "MSYS Makefiles" -D STATIC=ON -D ARCH="i686" -D BUILD_64=OFF -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG="win-x32" -D CMAKE_TOOLCHAIN_FILE=$(topdir)/cmake/32-bit-toolchain.cmake -D MSYS2_FOLDER=$(shell cd ${MINGW_PREFIX}/.. && pwd -W) $(topdir) && $(MAKE)
|
2014-09-15 09:13:26 +03:00
|
|
|
|
Add fuzz testing using american fuzzy lop
Existing tests: block, transaction, signature, cold outputs,
cold transaction.
Data for these is in tests/data/fuzz.
A convenience shell script is in contrib/fuzz_testing/fuzz.sh, eg:
contrib/fuzz_testing/fuzz.sh signature
The fuzzer will run indefinitely, ^C to stop.
Fuzzing is currently supported for GCC only. I can't get CLANG
to build Monero here as it dies on some system headers, so if
someone wants to make it work on both, that'd be great.
In particular, the __AFL_LOOP construct should be made to work
so that a given run can fuzz multiple inputs, as the C++ load
time is substantial.
2017-06-24 14:38:41 +03:00
|
|
|
fuzz:
|
2018-08-20 18:24:26 +03:00
|
|
|
mkdir -p $(builddir)/fuzz
|
|
|
|
cd $(builddir)/fuzz && cmake -D STATIC=ON -D SANITIZE=ON -D BUILD_TESTS=ON -D USE_LTO=OFF -D CMAKE_C_COMPILER=afl-gcc -D CMAKE_CXX_COMPILER=afl-g++ -D ARCH="x86-64" -D CMAKE_BUILD_TYPE=fuzz -D BUILD_TAG="linux-x64" $(topdir) && $(MAKE)
|
Add fuzz testing using american fuzzy lop
Existing tests: block, transaction, signature, cold outputs,
cold transaction.
Data for these is in tests/data/fuzz.
A convenience shell script is in contrib/fuzz_testing/fuzz.sh, eg:
contrib/fuzz_testing/fuzz.sh signature
The fuzzer will run indefinitely, ^C to stop.
Fuzzing is currently supported for GCC only. I can't get CLANG
to build Monero here as it dies on some system headers, so if
someone wants to make it work on both, that'd be great.
In particular, the __AFL_LOOP construct should be made to work
so that a given run can fuzz multiple inputs, as the C++ load
time is substantial.
2017-06-24 14:38:41 +03:00
|
|
|
|
2014-03-04 00:07:58 +02:00
|
|
|
clean:
|
2018-08-20 18:24:26 +03:00
|
|
|
@echo "WARNING: Back-up your wallet if it exists within ./"$(deldirs)"!" ; \
|
|
|
|
read -r -p "This will destroy the build directory, continue (y/N)?: " CONTINUE; \
|
|
|
|
[ $$CONTINUE = "y" ] || [ $$CONTINUE = "Y" ] || (echo "Exiting."; exit 1;)
|
|
|
|
rm -rf $(deldirs)
|
|
|
|
|
|
|
|
clean-all:
|
2014-04-30 20:07:00 +03:00
|
|
|
@echo "WARNING: Back-up your wallet if it exists within ./build!" ; \
|
2018-08-20 18:24:26 +03:00
|
|
|
read -r -p "This will destroy all build directories, continue (y/N)?: " CONTINUE; \
|
2014-04-30 20:07:00 +03:00
|
|
|
[ $$CONTINUE = "y" ] || [ $$CONTINUE = "Y" ] || (echo "Exiting."; exit 1;)
|
2018-08-20 18:24:26 +03:00
|
|
|
rm -rf ./build
|
2014-03-04 00:07:58 +02:00
|
|
|
|
|
|
|
tags:
|
|
|
|
ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ src contrib tests/gtest
|
|
|
|
|
2015-01-27 09:43:15 +02:00
|
|
|
.PHONY: all cmake-debug debug debug-test debug-all cmake-release release release-test release-all clean tags
|