mirror of
https://github.com/status-im/nimbus-eth1.git
synced 2025-01-09 03:52:08 +00:00
6ca6bcd96f
* Cosmetics details: + Update doc generator + Fix key type representation in `hexary_desc` for debugging + Redefine `isImportOk()` as template for better `check()` line reporting * Fix fringe condition when interpolating Merkle-Patricia tries details: Small change with profound effect fixing some pathological condition that haunted the unit test set on large data sers. There is still one condition left which might well be due to an incomplete data set. * Unit test proof nodes for node range extractor * Unit tests to run on full extraction set why: Left over from troubleshooting, range length was only 5
258 lines
7.8 KiB
Makefile
258 lines
7.8 KiB
Makefile
#! /usr/bin/make -f
|
|
|
|
SAVED_PATH := $(PATH)
|
|
PWD := $(shell pwd)
|
|
|
|
ifeq ($(MSYSTEM),MINGW32)
|
|
# Under MinGW, the NIM doc compiler wants absolute pathname arguments
|
|
# looking like C:\\MinGW\\msys\\1.0\\home ...
|
|
DOC_ROOT := `pwd -W|sed 's|/|\\\\\\\\|g'`
|
|
else
|
|
DOC_ROOT := $(PWD)
|
|
endif
|
|
|
|
# Collect document names
|
|
SFX_FILTER := sed -e 's|^\./||;/\/\./d;/^docs\//d;s/\.[a-z]*$$//'
|
|
PNG_FILES := $(shell find -L . -name '*.png' -print|$(SFX_FILTER))
|
|
MD_FILES := $(shell find -L . -name '*.md' -print|$(SFX_FILTER))
|
|
EXE_FILES := $(shell find -L . -name '*.nim' -print|$(SFX_FILTER))
|
|
TXE_FILES := $(shell find -L ../tests -name '*.nim' -print|$(SFX_FILTER))
|
|
|
|
# Needed for the NIM compiler that comes with this repo
|
|
NIMBLE_DIR := $(dir $(PWD))/vendor/.nimble
|
|
NIM_PATH := $(dir $(PWD))/vendor/nimbus-build-system/vendor/Nim/bin
|
|
|
|
# Support for verbosity: V=1, V=2 etc.
|
|
ifneq ($(if $V,$V,0),0)
|
|
MUFFLE :=
|
|
else
|
|
MUFFLE := 2>/dev/null
|
|
endif
|
|
|
|
# Support for external NIM compiler unless X=0
|
|
ifneq ($(if $X,$X,0),0)
|
|
PATH := $(SAVED_PATH):$(NIM_PATH):$(NIMBLE_DIR)/bin
|
|
else
|
|
PATH := $(NIM_PATH):$(NIMBLE_DIR)/bin:$(SAVED_PATH)
|
|
endif
|
|
|
|
# Compat version is used with external NIM compiler
|
|
# NIM_COMPAT := --useVersion:1.2
|
|
|
|
# Name of NIMDOC compiler, test for newer version on host OS
|
|
NIM_CMD := nim
|
|
NIM_TEST := $(NIM_CMD) $(NIM_COMPAT) --help >/dev/null 2>&1
|
|
NIM_SELECT := $(NIM_TEST) && echo "$(NIM_CMD) $(NIM_COMPAT)"|| echo "$(NIM_CMD)"
|
|
# Note that the back ticks are needed in the following assignment
|
|
NIM_EXE := `$(NIM_SELECT)`
|
|
|
|
# Extra nimdoc flags
|
|
NIMDOC_FLAGS := --verbosity:0 --hints:off --warnings:off
|
|
NIMDOC_FLAGS += -d:debug -d:disable_libbacktrace
|
|
NIMDOC_FLAGS += $(NIMFLAGS)
|
|
|
|
# Nim check flags
|
|
NIMCHK_FLAGS := c -r --verbosity:0 --hints:off --warnings:off
|
|
|
|
# Markdown compiler (test for discount tool with tables support)
|
|
MD_CMD := markdown
|
|
MD_TEST := $(MD_CMD) -VV 2>/dev/null|grep -q TABLES
|
|
|
|
# Default target
|
|
default: help
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Help page
|
|
# ------------------------------------------------------------------------------
|
|
|
|
.SILENT: help
|
|
help::
|
|
echo "Usage: $(MAKE) <target> [<option> ..]"
|
|
echo
|
|
echo "<option>: V=1 -- verbose mode"
|
|
echo " X=1 -- preferring local nim compiler (this repo)"
|
|
echo " NIMFLAGS=.. -- additional flags for nim-docs generator"
|
|
echo
|
|
echo "<target>: docs -- build NIM docs"
|
|
echo " docs-update -- process missing doc pages"
|
|
echo " docs-index -- index collected docs"
|
|
echo
|
|
echo " check_vm -- run \"nim c -r ..\" on each native VM source file"
|
|
echo
|
|
echo " clean -- clean up generated and backup files (not docs)"
|
|
echo " clean-exe -- clean up generated executables"
|
|
echo " clean-docs -- clean up generated docs and extra files"
|
|
echo
|
|
echo " distclean -- purge unnecessary stuff including docs"
|
|
echo " clobber -- same as distclean"
|
|
echo
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Build indexed docs
|
|
# ------------------------------------------------------------------------------
|
|
|
|
# Automatic rule for updating single html/idx file
|
|
docs/%.html : %.nim
|
|
# use compat option if it works with the nim compiler
|
|
@mkdir -p docs
|
|
@nim=$(NIM_EXE); doc_root="$(DOC_ROOT)"; \
|
|
export NIMBLE_DIR=$(NIMBLE_DIR); \
|
|
(set -x; $$nim doc --outdir:docs --docRoot:"$$doc_root" --index:on \
|
|
--errorMax:0 $(NIMDOC_FLAGS) \
|
|
"$<" $(MUFFLE)) || true
|
|
|
|
# Automatic rule for updating markdown files
|
|
docs/ex/%.html : %.md
|
|
@mkdir -p $(dir $@)
|
|
@if $(MD_TEST); then \
|
|
(set -x; $(MD_CMD) "$<"); \
|
|
else \
|
|
(echo "<pre>";(set -x;cat "$<");echo "</pre>"); \
|
|
fi > "$@"
|
|
|
|
# Automatic rule for collecting raw files
|
|
docs/ex/%.png : %.png
|
|
@mkdir -p $(dir $@)
|
|
@set -x; cp "$<" "$@"
|
|
|
|
.PHONY: docs-index-helper
|
|
.SILENT: docs-index-helper
|
|
docs-index-helper:
|
|
nim=$(NIM_EXE); \
|
|
$$nim --version | sed q ; set -x ;\
|
|
$$nim --skipProjCfg buildIndex -o:docs/theindex.html \
|
|
--verbosity:0 --hints:off --warnings:off docs
|
|
|
|
.PHONY: docs-update-helper
|
|
.SILENT: docs-update-helper
|
|
docs-update-helper::
|
|
$(NIM_EXE) --version | sed q
|
|
|
|
docs-update-helper:: $(foreach f,$(EXE_FILES),docs/$f.html)
|
|
|
|
# Kludge: some docs would only compile with the local NIM compiler
|
|
ifneq ($(X),0)
|
|
docs-update-helper::
|
|
$(MAKE) docs-update-helper X=0 V=$(V)
|
|
endif
|
|
|
|
|
|
.PHONY: docs-extra-helper
|
|
.SILENT: docs-extra-helper
|
|
docs-extra-helper::
|
|
$(MD_TEST) || ( \
|
|
echo ;\
|
|
echo "*** Discount markdown command with table processing is unavailable." ;\
|
|
echo " On Debian/Ubuntu it is installed via \"apt install discount\".";\
|
|
echo " So \"make\" is going to fall back to text file wrapping which can" ;\
|
|
echo " be changed by passing \"MD_TEST=true\" to the \"make\" command line." ;\
|
|
echo ;\
|
|
)
|
|
|
|
docs-extra-helper:: $(foreach f,$(MD_FILES),docs/ex/$f.html)
|
|
docs-extra-helper:: $(foreach f,$(PNG_FILES),docs/ex/$f.png)
|
|
|
|
|
|
.PHONY: docs-update
|
|
.SILENT: docs-update
|
|
docs-update:: docs-update-helper
|
|
docs-update:: docs-extra-helper
|
|
|
|
.PHONY: docs-index
|
|
.SILENT: docs-index
|
|
docs-index:: docs-index-helper
|
|
|
|
.PHONY: docs
|
|
.SILENT: docs
|
|
docs:: docs-update
|
|
docs:: docs-index
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Run local compilation by source file
|
|
# ------------------------------------------------------------------------------
|
|
|
|
check_vm:
|
|
@vmexe=`echo $(EXE_FILES)|tr ' ' '\n'|sed '/vm2\//!d'`;\
|
|
nim=$(NIM_EXE); \
|
|
export NIMBLE_DIR=$(NIMBLE_DIR); \
|
|
$$nim --version | sed q; \
|
|
for path in `echo "$$vmexe"`; do ( \
|
|
dir=`dirname "$$path"`; \
|
|
src=`basename "$$path"`; \
|
|
cd "$$dir" ; \
|
|
(set -x;$$nim $(NIMCHK_FLAGS) "$$src.nim" $(MUFFLE)) || \
|
|
echo "*** FAIL $$path"; \
|
|
); done || true
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Clean up etc.
|
|
# ------------------------------------------------------------------------------
|
|
|
|
.PHONY: clobber distclean clean clean-exe clean-docs
|
|
|
|
.SILENT: clean-exe clean-test-exe
|
|
clean-exe:
|
|
for f in $(EXE_FILES); do \
|
|
if [ -f "$$f" ]; then (set -x; rm -f "$$f"); \
|
|
elif [ -f "$$f.out" ]; then (set -x; rm -f "$$f.out"); \
|
|
fi ; \
|
|
done
|
|
|
|
clean-test-exe:
|
|
for f in $(TXE_FILES); do \
|
|
if [ -f "$$f" ]; then (set -x; rm -f "$$f"); \
|
|
elif [ -f "$$f.out" ]; then (set -x; rm -f "$$f.out"); \
|
|
fi ; \
|
|
done
|
|
|
|
.SILENT: clean-docs
|
|
clean-docs:
|
|
for f in $(foreach f,$(EXE_FILES),docs/$f) \
|
|
$(foreach f,$(PNG_FILES),docs/ex/$f) \
|
|
$(foreach f,$(MD_FILES),docs/ex/$f) \
|
|
docs/theindex; \
|
|
do \
|
|
[ ! -f "$$f.html" ] || (set -x; rm -f "$$f.html"); \
|
|
[ ! -f "$$f.idx" ] || (set -x; rm -f "$$f.idx"); \
|
|
[ ! -f "$$f.png" ] || (set -x; rm -f "$$f.png"); \
|
|
done
|
|
for d in $(shell find docs -depth -type d -print $(MUFFLE)); do \
|
|
(set -x; rmdir "$$d" $(MUFFLE)) || true; \
|
|
done
|
|
|
|
.SILENT: clean-bakfiles clean-test-bakfiles
|
|
clean-bakfiles:
|
|
for f in $(shell find . -type f \
|
|
\( -name '*~' -o -name '*.bak' \) -print); do \
|
|
(set -x; rm -f "$$f"); \
|
|
done
|
|
|
|
clean-test-bakfiles:
|
|
for f in $(shell find . -type f \
|
|
\( -name '*~' -o -name '*.bak' \) -print); do \
|
|
(set -x; rm -f "$$f"); \
|
|
done
|
|
|
|
.SILENT: clean-nimcache clean-test-nimcache
|
|
clean-nimcache:
|
|
# |while.. is like "|xargs -rn1 rm -rf" but with nicer log message
|
|
find . -name 'nimcache' -type d -print 2>/dev/null | \
|
|
while read d; do (set -x; rm -rf "$$d"); done
|
|
|
|
clean-test-nimcache:
|
|
find ../tests -name 'nimcache' -type d -print 2>/dev/null | \
|
|
while read d; do (set -x; rm -rf "$$d"); done
|
|
|
|
clean:: clean-exe clean-test-exe
|
|
clean:: clean-bakfiles clean-test-bakfiles
|
|
clean:: clean-nimcache clean-test-nimcache
|
|
|
|
distclean:: clean
|
|
distclean:: clean-docs
|
|
|
|
clobber:: distclean
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# End
|
|
# ------------------------------------------------------------------------------
|