mirror of
https://github.com/status-im/nim-codex.git
synced 2025-02-15 20:27:56 +00:00
DEBUG -> enables DebugCodexNodes, DebugTestHarness, and ShowContinuousStatusUpdates DEBUG_HARDHAT -> enables DebugHardhat PARALLEL -> enables EnableParallelTests Additionally, when DEBUG is enabled, all integration tests debug configs are enabled for Codex nodes, the Codex node output is printed with the test output (not interleaved), and the Codex node output is logged to file in `tests/integrations/logs/<starttime>__IntegrationTests/<integration_test_name>/<suite_name>/<testname>/<role>_<idx>.log`. When DEBUG_HARDHAT is enabled, all hardhat output is printed with the test output (not interleaved), and the output is also written to a log file in `tests/integrations/logs/<starttime>__IntegrationTests/<integration_test_name>/hardhat.log
258 lines
7.5 KiB
Makefile
258 lines
7.5 KiB
Makefile
# Copyright (c) 2020 Status Research & Development GmbH. Licensed under
|
|
# either of:
|
|
# - Apache License, version 2.0
|
|
# - MIT license
|
|
# at your option. This file may not be copied, modified, or distributed except
|
|
# according to those terms.
|
|
|
|
# This is the Nim version used locally and in regular CI builds.
|
|
# Can be a specific version tag, a branch name, or a commit hash.
|
|
# Can be overridden by setting the NIM_COMMIT environment variable
|
|
# before calling make.
|
|
#
|
|
# For readability in CI, if NIM_COMMIT is set to "pinned",
|
|
# this will also default to the version pinned here.
|
|
#
|
|
# If NIM_COMMIT is set to "nimbusbuild", this will use the
|
|
# version pinned by nimbus-build-system.
|
|
#PINNED_NIM_VERSION := 38640664088251bbc88917b4bacfd86ec53014b8 # 1.6.21
|
|
PINNED_NIM_VERSION := v2.0.14
|
|
|
|
ifeq ($(NIM_COMMIT),)
|
|
NIM_COMMIT := $(PINNED_NIM_VERSION)
|
|
else ifeq ($(NIM_COMMIT),pinned)
|
|
NIM_COMMIT := $(PINNED_NIM_VERSION)
|
|
endif
|
|
|
|
ifeq ($(NIM_COMMIT),nimbusbuild)
|
|
undefine NIM_COMMIT
|
|
else
|
|
export NIM_COMMIT
|
|
endif
|
|
|
|
SHELL := bash # the shell used internally by Make
|
|
|
|
# used inside the included makefiles
|
|
BUILD_SYSTEM_DIR := vendor/nimbus-build-system
|
|
|
|
# -d:insecure - Necessary to enable Prometheus HTTP endpoint for metrics
|
|
# -d:chronicles_colors:none - Necessary to disable colors in logs for Docker
|
|
DOCKER_IMAGE_NIM_PARAMS ?= -d:chronicles_colors:none -d:insecure
|
|
|
|
LINK_PCRE := 0
|
|
|
|
ifeq ($(OS),Windows_NT)
|
|
ifeq ($(PROCESSOR_ARCHITECTURE), AMD64)
|
|
ARCH = x86_64
|
|
endif
|
|
ifeq ($(PROCESSOR_ARCHITECTURE), ARM64)
|
|
ARCH = arm64
|
|
endif
|
|
else
|
|
UNAME_P := $(shell uname -m)
|
|
ifneq ($(filter $(UNAME_P), i686 i386 x86_64),)
|
|
ARCH = x86_64
|
|
endif
|
|
ifneq ($(filter $(UNAME_P), aarch64 arm),)
|
|
ARCH = arm64
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(ARCH), x86_64)
|
|
CXXFLAGS ?= -std=c++17 -mssse3
|
|
else
|
|
CXXFLAGS ?= -std=c++17
|
|
endif
|
|
export CXXFLAGS
|
|
|
|
# we don't want an error here, so we can handle things later, in the ".DEFAULT" target
|
|
-include $(BUILD_SYSTEM_DIR)/makefiles/variables.mk
|
|
|
|
.PHONY: \
|
|
all \
|
|
clean \
|
|
coverage \
|
|
deps \
|
|
libbacktrace \
|
|
test \
|
|
update
|
|
|
|
ifeq ($(NIM_PARAMS),)
|
|
# "variables.mk" was not included, so we update the submodules.
|
|
GIT_SUBMODULE_UPDATE := git submodule update --init --recursive
|
|
.DEFAULT:
|
|
+@ echo -e "Git submodules not found. Running '$(GIT_SUBMODULE_UPDATE)'.\n"; \
|
|
$(GIT_SUBMODULE_UPDATE); \
|
|
echo
|
|
# Now that the included *.mk files appeared, and are newer than this file, Make will restart itself:
|
|
# https://www.gnu.org/software/make/manual/make.html#Remaking-Makefiles
|
|
#
|
|
# After restarting, it will execute its original goal, so we don't have to start a child Make here
|
|
# with "$(MAKE) $(MAKECMDGOALS)". Isn't hidden control flow great?
|
|
|
|
else # "variables.mk" was included. Business as usual until the end of this file.
|
|
|
|
# default target, because it's the first one that doesn't start with '.'
|
|
|
|
# Builds the codex binary
|
|
all: | build deps
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(ENV_SCRIPT) nim codex $(NIM_PARAMS) build.nims
|
|
|
|
# Build tools/cirdl
|
|
cirdl: | deps
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(ENV_SCRIPT) nim toolsCirdl $(NIM_PARAMS) build.nims
|
|
|
|
# must be included after the default target
|
|
-include $(BUILD_SYSTEM_DIR)/makefiles/targets.mk
|
|
|
|
# "-d:release" implies "--stacktrace:off" and it cannot be added to config.nims
|
|
ifeq ($(USE_LIBBACKTRACE), 0)
|
|
NIM_PARAMS := $(NIM_PARAMS) -d:debug -d:disable_libbacktrace
|
|
else
|
|
NIM_PARAMS := $(NIM_PARAMS) -d:release
|
|
endif
|
|
|
|
deps: | deps-common nat-libs
|
|
ifneq ($(USE_LIBBACKTRACE), 0)
|
|
deps: | libbacktrace
|
|
endif
|
|
|
|
update: | update-common
|
|
|
|
# detecting the os
|
|
ifeq ($(OS),Windows_NT) # is Windows_NT on XP, 2000, 7, Vista, 10...
|
|
detected_OS := Windows
|
|
else ifeq ($(strip $(shell uname)),Darwin)
|
|
detected_OS := macOS
|
|
else
|
|
# e.g. Linux
|
|
detected_OS := $(strip $(shell uname))
|
|
endif
|
|
|
|
# Builds and run a part of the test suite
|
|
test: | build deps
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(ENV_SCRIPT) nim test $(NIM_PARAMS) build.nims
|
|
|
|
# Builds and runs the smart contract tests
|
|
testContracts: | build deps
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(ENV_SCRIPT) nim testContracts $(NIM_PARAMS) build.nims
|
|
|
|
TEST_PARAMS :=
|
|
ifdef DEBUG
|
|
TEST_PARAMS := $(TEST_PARAMS) -d:DebugTestHarness=$(DEBUG)
|
|
TEST_PARAMS := $(TEST_PARAMS) -d:DebugCodexNodes=$(DEBUG)
|
|
TEST_PARAMS := $(TEST_PARAMS) -d:ShowContinuousStatusUpdates=$(DEBUG)
|
|
endif
|
|
ifdef DEBUG_HARDHAT
|
|
TEST_PARAMS := $(TEST_PARAMS) -d:DebugHardhat=$(DEBUG_HARDHAT)
|
|
endif
|
|
ifdef TEST_TIMEOUT
|
|
TEST_PARAMS := $(TEST_PARAMS) -d:TestTimeout=$(TEST_TIMEOUT)
|
|
endif
|
|
ifdef PARALLEL
|
|
TEST_PARAMS := $(TEST_PARAMS) -d:EnableParallelTests=$(PARALLEL)
|
|
endif
|
|
|
|
# Builds and runs the integration tests
|
|
testIntegration: | build deps
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(ENV_SCRIPT) nim testIntegration $(TEST_PARAMS) $(NIM_PARAMS) build.nims
|
|
|
|
# Builds and runs all tests (except for Taiko L2 tests)
|
|
testAll: | build deps
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(ENV_SCRIPT) nim testAll $(NIM_PARAMS) build.nims
|
|
|
|
# Builds and runs Taiko L2 tests
|
|
testTaiko: | build deps
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(ENV_SCRIPT) nim testTaiko $(NIM_PARAMS) build.nims
|
|
|
|
# Builds and runs tool tests
|
|
testTools: | cirdl
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(ENV_SCRIPT) nim testTools $(NIM_PARAMS) build.nims
|
|
|
|
# nim-libbacktrace
|
|
LIBBACKTRACE_MAKE_FLAGS := -C vendor/nim-libbacktrace --no-print-directory BUILD_CXX_LIB=0
|
|
libbacktrace:
|
|
ifeq ($(detected_OS), Windows)
|
|
# MSYS2 detection
|
|
ifneq ($(MSYSTEM),)
|
|
+ $(MAKE) $(LIBBACKTRACE_MAKE_FLAGS) CMAKE_ARGS="-G'MSYS Makefiles'"
|
|
else
|
|
+ $(MAKE) $(LIBBACKTRACE_MAKE_FLAGS)
|
|
endif
|
|
else
|
|
+ $(MAKE) $(LIBBACKTRACE_MAKE_FLAGS)
|
|
endif
|
|
|
|
coverage:
|
|
$(MAKE) NIMFLAGS="$(NIMFLAGS) --lineDir:on --passC:-fprofile-arcs --passC:-ftest-coverage --passL:-fprofile-arcs --passL:-ftest-coverage" test
|
|
cd nimcache/release/testCodex && rm -f *.c
|
|
mkdir -p coverage
|
|
lcov --capture --directory nimcache/release/testCodex --output-file coverage/coverage.info
|
|
shopt -s globstar && ls $$(pwd)/codex/{*,**/*}.nim
|
|
shopt -s globstar && lcov --extract coverage/coverage.info $$(pwd)/codex/{*,**/*}.nim --output-file coverage/coverage.f.info
|
|
echo -e $(BUILD_MSG) "coverage/report/index.html"
|
|
genhtml coverage/coverage.f.info --output-directory coverage/report
|
|
|
|
show-coverage:
|
|
if which open >/dev/null; then (echo -e "\e[92mOpening\e[39m HTML coverage report in browser..." && open coverage/report/index.html) || true; fi
|
|
|
|
coverage-script: build deps
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(ENV_SCRIPT) nim coverage $(NIM_PARAMS) build.nims
|
|
echo "Run `make show-coverage` to view coverage results"
|
|
|
|
# usual cleaning
|
|
clean: | clean-common
|
|
rm -rf build
|
|
ifneq ($(USE_LIBBACKTRACE), 0)
|
|
+ $(MAKE) -C vendor/nim-libbacktrace clean $(HANDLE_OUTPUT)
|
|
endif
|
|
|
|
############
|
|
## Format ##
|
|
############
|
|
.PHONY: build-nph install-nph-hook clean-nph print-nph-path
|
|
|
|
# Default location for nph binary shall be next to nim binary to make it available on the path.
|
|
NPH:=$(shell dirname $(NIM_BINARY))/nph
|
|
|
|
build-nph:
|
|
ifeq ("$(wildcard $(NPH))","")
|
|
$(ENV_SCRIPT) nim c vendor/nph/src/nph.nim && \
|
|
mv vendor/nph/src/nph $(shell dirname $(NPH))
|
|
echo "nph utility is available at " $(NPH)
|
|
endif
|
|
|
|
GIT_PRE_COMMIT_HOOK := .git/hooks/pre-commit
|
|
|
|
install-nph-hook: build-nph
|
|
ifeq ("$(wildcard $(GIT_PRE_COMMIT_HOOK))","")
|
|
cp ./tools/scripts/git_pre_commit_format.sh $(GIT_PRE_COMMIT_HOOK)
|
|
else
|
|
echo "$(GIT_PRE_COMMIT_HOOK) already present, will NOT override"
|
|
exit 1
|
|
endif
|
|
|
|
nph/%: build-nph
|
|
echo -e $(FORMAT_MSG) "nph/$*" && \
|
|
$(NPH) $*
|
|
|
|
clean-nph:
|
|
rm -f $(NPH)
|
|
|
|
# To avoid hardcoding nph binary location in several places
|
|
print-nph-path:
|
|
echo "$(NPH)"
|
|
|
|
clean: | clean-nph
|
|
|
|
endif # "variables.mk" was not included
|