mirror of
https://github.com/tendermint/tendermint.git
synced 2026-01-07 05:46:32 +00:00
The .PHONY targets in the Makefile are usually placed far away from the actual targets, and thus aren't always updated. Placing the .PHONY targets right next to the targets they cover make them more visible and thus more likely to be updated when necessary.
224 lines
7.9 KiB
Makefile
224 lines
7.9 KiB
Makefile
PACKAGES=$(shell go list ./...)
|
|
OUTPUT?=build/tendermint
|
|
|
|
BUILD_TAGS?='tendermint'
|
|
LD_FLAGS = -X github.com/tendermint/tendermint/version.GitCommit=`git rev-parse --short=8 HEAD` -s -w
|
|
BUILD_FLAGS = -mod=readonly -ldflags "$(LD_FLAGS)"
|
|
|
|
all: check build test install
|
|
.PHONY: all
|
|
|
|
# The below include contains the tools.
|
|
include tools.mk
|
|
include tests.mk
|
|
|
|
###############################################################################
|
|
### Build Tendermint ###
|
|
###############################################################################
|
|
|
|
build:
|
|
CGO_ENABLED=0 go build $(BUILD_FLAGS) -tags $(BUILD_TAGS) -o $(OUTPUT) ./cmd/tendermint/
|
|
.PHONY: build
|
|
|
|
build_c:
|
|
CGO_ENABLED=1 go build $(BUILD_FLAGS) -tags "$(BUILD_TAGS) cleveldb" -o $(OUTPUT) ./cmd/tendermint/
|
|
.PHONY: build_c
|
|
|
|
build_race:
|
|
CGO_ENABLED=1 go build -race $(BUILD_FLAGS) -tags $(BUILD_TAGS) -o $(OUTPUT) ./cmd/tendermint
|
|
.PHONY: build_race
|
|
|
|
install:
|
|
CGO_ENABLED=0 go install $(BUILD_FLAGS) -tags $(BUILD_TAGS) ./cmd/tendermint
|
|
.PHONY: install
|
|
|
|
install_c:
|
|
CGO_ENABLED=1 go install $(BUILD_FLAGS) -tags "$(BUILD_TAGS) cleveldb" ./cmd/tendermint
|
|
.PHONY: install_c
|
|
|
|
###############################################################################
|
|
### Protobuf ###
|
|
###############################################################################
|
|
|
|
proto-all: proto-gen proto-lint proto-check-breaking
|
|
.PHONY: proto-all
|
|
|
|
proto-gen:
|
|
## If you get the following error,
|
|
## "error while loading shared libraries: libprotobuf.so.14: cannot open shared object file: No such file or directory"
|
|
## See https://stackoverflow.com/a/25518702
|
|
## Note the $< here is substituted for the %.proto
|
|
## Note the $@ here is substituted for the %.pb.go
|
|
@sh scripts/protocgen.sh
|
|
.PHONY: proto-gen
|
|
|
|
proto-lint:
|
|
@buf check lint --error-format=json
|
|
.PHONY: proto-lint
|
|
|
|
proto-check-breaking:
|
|
@buf check breaking --against-input '.git#branch=master'
|
|
.PHONY: proto-check-breaking
|
|
|
|
###############################################################################
|
|
### Build ABCI ###
|
|
###############################################################################
|
|
|
|
build_abci:
|
|
@go build -mod=readonly -i ./abci/cmd/...
|
|
.PHONY: build_abci
|
|
|
|
install_abci:
|
|
@go install -mod=readonly ./abci/cmd/...
|
|
.PHONY: install_abci
|
|
|
|
###############################################################################
|
|
### Distribution ###
|
|
###############################################################################
|
|
|
|
# dist builds binaries for all platforms and packages them for distribution
|
|
# TODO add abci to these scripts
|
|
dist:
|
|
@BUILD_TAGS=$(BUILD_TAGS) sh -c "'$(CURDIR)/scripts/dist.sh'"
|
|
.PHONY: dist
|
|
|
|
go-mod-cache: go.sum
|
|
@echo "--> Download go modules to local cache"
|
|
@go mod download
|
|
.PHONY: go-mod-cache
|
|
|
|
go.sum: go.mod
|
|
@echo "--> Ensure dependencies have not been modified"
|
|
@go mod verify
|
|
@go mod tidy
|
|
|
|
draw_deps:
|
|
@# requires brew install graphviz or apt-get install graphviz
|
|
go get github.com/RobotsAndPencils/goviz
|
|
@goviz -i github.com/tendermint/tendermint/cmd/tendermint -d 3 | dot -Tpng -o dependency-graph.png
|
|
.PHONY: draw_deps
|
|
|
|
get_deps_bin_size:
|
|
@# Copy of build recipe with additional flags to perform binary size analysis
|
|
$(eval $(shell go build -work -a $(BUILD_FLAGS) -tags $(BUILD_TAGS) -o $(OUTPUT) ./cmd/tendermint/ 2>&1))
|
|
@find $(WORK) -type f -name "*.a" | xargs -I{} du -hxs "{}" | sort -rh | sed -e s:${WORK}/::g > deps_bin_size.log
|
|
@echo "Results can be found here: $(CURDIR)/deps_bin_size.log"
|
|
.PHONY: get_deps_bin_size
|
|
|
|
###############################################################################
|
|
### Libs ###
|
|
###############################################################################
|
|
|
|
# generates certificates for TLS testing in remotedb and RPC server
|
|
gen_certs: clean_certs
|
|
certstrap init --common-name "tendermint.com" --passphrase ""
|
|
certstrap request-cert --common-name "server" -ip "127.0.0.1" --passphrase ""
|
|
certstrap sign "server" --CA "tendermint.com" --passphrase ""
|
|
mv out/server.crt rpc/lib/server/test.crt
|
|
mv out/server.key rpc/lib/server/test.key
|
|
rm -rf out
|
|
.PHONY: gen_certs
|
|
|
|
# deletes generated certificates
|
|
clean_certs:
|
|
rm -f rpc/lib/server/test.crt
|
|
rm -f rpc/lib/server/test.key
|
|
.PHONY: clean_certs
|
|
|
|
###############################################################################
|
|
### Formatting, linting, and vetting ###
|
|
###############################################################################
|
|
|
|
fmt:
|
|
@go fmt ./...
|
|
.PHONY: fmt
|
|
|
|
lint:
|
|
@echo "--> Running linter"
|
|
@golangci-lint run
|
|
.PHONY: lint
|
|
|
|
DESTINATION = ./index.html.md
|
|
|
|
###############################################################################
|
|
### Documentation ###
|
|
###############################################################################
|
|
|
|
build-docs:
|
|
cd docs && \
|
|
while read p; do \
|
|
(git checkout $${p} && npm install && VUEPRESS_BASE="/$${p}/" npm run build) ; \
|
|
mkdir -p ~/output/$${p} ; \
|
|
cp -r .vuepress/dist/* ~/output/$${p}/ ; \
|
|
cp ~/output/$${p}/index.html ~/output ; \
|
|
done < versions ;
|
|
.PHONY: build-docs
|
|
|
|
sync-docs:
|
|
cd ~/output && \
|
|
echo "role_arn = ${DEPLOYMENT_ROLE_ARN}" >> /root/.aws/config ; \
|
|
echo "CI job = ${CIRCLE_BUILD_URL}" >> version.html ; \
|
|
aws s3 sync . s3://${WEBSITE_BUCKET} --profile terraform --delete ; \
|
|
aws cloudfront create-invalidation --distribution-id ${CF_DISTRIBUTION_ID} --profile terraform --path "/*" ;
|
|
.PHONY: sync-docs
|
|
|
|
###############################################################################
|
|
### Docker image ###
|
|
###############################################################################
|
|
|
|
build-docker:
|
|
cp $(OUTPUT) DOCKER/tendermint
|
|
docker build --label=tendermint --tag="tendermint/tendermint" DOCKER
|
|
rm -rf DOCKER/tendermint
|
|
.PHONY: build-docker
|
|
|
|
###############################################################################
|
|
### Local testnet using docker ###
|
|
###############################################################################
|
|
|
|
# Build linux binary on other platforms
|
|
build-linux: tools
|
|
GOOS=linux GOARCH=amd64 $(MAKE) build
|
|
.PHONY: build-linux
|
|
|
|
build-docker-localnode:
|
|
@cd networks/local && make
|
|
.PHONY: build-docker-localnode
|
|
|
|
# Runs `make build_c` from within an Amazon Linux (v2)-based Docker build
|
|
# container in order to build an Amazon Linux-compatible binary. Produces a
|
|
# compatible binary at ./build/tendermint
|
|
build_c-amazonlinux:
|
|
$(MAKE) -C ./DOCKER build_amazonlinux_buildimage
|
|
docker run --rm -it -v `pwd`:/tendermint tendermint/tendermint:build_c-amazonlinux
|
|
.PHONY: build_c-amazonlinux
|
|
|
|
# Run a 4-node testnet locally
|
|
localnet-start: localnet-stop build-docker-localnode
|
|
@if ! [ -f build/node0/config/genesis.json ]; then docker run --rm -v $(CURDIR)/build:/tendermint:Z tendermint/localnode testnet --config /etc/tendermint/config-template.toml --v 4 --o . --populate-persistent-peers --starting-ip-address 192.167.10.2; fi
|
|
docker-compose up
|
|
.PHONY: localnet-start
|
|
|
|
# Stop testnet
|
|
localnet-stop:
|
|
docker-compose down
|
|
.PHONY: localnet-stop
|
|
|
|
# Build hooks for dredd, to skip or add information on some steps
|
|
build-contract-tests-hooks:
|
|
ifeq ($(OS),Windows_NT)
|
|
go build -mod=readonly $(BUILD_FLAGS) -o build/contract_tests.exe ./cmd/contract_tests
|
|
else
|
|
go build -mod=readonly $(BUILD_FLAGS) -o build/contract_tests ./cmd/contract_tests
|
|
endif
|
|
.PHONY: build-contract-tests-hooks
|
|
|
|
# Run a nodejs tool to test endpoints against a localnet
|
|
# The command takes care of starting and stopping the network
|
|
# prerequisits: build-contract-tests-hooks build-linux
|
|
# the two build commands were not added to let this command run from generic containers or machines.
|
|
# The binaries should be built beforehand
|
|
contract-tests:
|
|
dredd
|
|
.PHONY: contract-tests
|