Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
138 changes: 71 additions & 67 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
SHELL=/usr/bin/env bash

all: build
all: build ## Build all main binaries (default target)

.PHONY: all

unexport GOFLAGS
Expand Down Expand Up @@ -46,13 +47,13 @@ MODULES+=$(FFI_PATH)
BUILD_DEPS+=build/.filecoin-install
CLEAN+=build/.filecoin-install

ffi-version-check:
ffi-version-check: ## Check FFI version compatibility
@[[ "$$(awk '/const Version/{print $$5}' extern/filecoin-ffi/version.go)" -eq 3 ]] || (echo "FFI version mismatch, update submodules"; exit 1)
BUILD_DEPS+=ffi-version-check

.PHONY: ffi-version-check

$(MODULES): build/.update-modules ;
$(MODULES): build/.update-modules ; ## Update git submodules
# dummy file that marks the last time modules were updated
build/.update-modules:
git submodule update --init --recursive
Expand All @@ -64,169 +65,169 @@ build/.update-modules:

CLEAN+=build/.update-modules

deps: $(BUILD_DEPS)
deps: $(BUILD_DEPS) ## Install build dependencies
.PHONY: deps

build-devnets: build lotus-seed lotus-shed
build-devnets: build lotus-seed lotus-shed ## Build binaries for development networks
.PHONY: build-devnets

debug: GOFLAGS+=-tags=debug
debug: build-devnets
debug: build-devnets ## Build with debug tags

2k: GOFLAGS+=-tags=2k
2k: build-devnets
2k: build-devnets ## Build for 2k network

calibnet: GOFLAGS+=-tags=calibnet
calibnet: build-devnets
calibnet: build-devnets ## Build for calibnet network

butterflynet: GOFLAGS+=-tags=butterflynet
butterflynet: build-devnets
butterflynet: build-devnets ## Build for butterflynet network

interopnet: GOFLAGS+=-tags=interopnet
interopnet: build-devnets
interopnet: build-devnets ## Build for interopnet network

lotus: $(BUILD_DEPS)
lotus: $(BUILD_DEPS) ## Build the main Lotus binary
rm -f lotus
$(GOCC) build $(GOFLAGS) -o lotus ./cmd/lotus

.PHONY: lotus
BINS+=lotus

lotus-miner: $(BUILD_DEPS)
lotus-miner: $(BUILD_DEPS) ## Build the Lotus miner binary
rm -f lotus-miner
$(GOCC) build $(GOFLAGS) -o lotus-miner ./cmd/lotus-miner
.PHONY: lotus-miner
BINS+=lotus-miner

lotus-worker: $(BUILD_DEPS)
lotus-worker: $(BUILD_DEPS) ## Build the Lotus worker binary
rm -f lotus-worker
$(GOCC) build $(GOFLAGS) -o lotus-worker ./cmd/lotus-worker
.PHONY: lotus-worker
BINS+=lotus-worker

lotus-shed: $(BUILD_DEPS)
lotus-shed: $(BUILD_DEPS) ## Build the Lotus shed tool
rm -f lotus-shed
$(GOCC) build $(GOFLAGS) -o lotus-shed ./cmd/lotus-shed
.PHONY: lotus-shed
BINS+=lotus-shed

lotus-gateway: $(BUILD_DEPS)
lotus-gateway: $(BUILD_DEPS) ## Build the Lotus gateway
rm -f lotus-gateway
$(GOCC) build $(GOFLAGS) -o lotus-gateway ./cmd/lotus-gateway
.PHONY: lotus-gateway
BINS+=lotus-gateway

build: lotus lotus-miner lotus-worker
build: lotus lotus-miner lotus-worker ## Build all main binaries
@[[ $$(type -P "lotus") ]] && echo "Caution: you have \
an existing lotus binary in your PATH. This may cause problems if you don't run 'sudo make install'" || true

.PHONY: build

install: install-daemon install-miner install-worker
install: install-daemon install-miner install-worker ## Install all binaries

install-daemon:
install-daemon: ## Install the Lotus daemon
install -C ./lotus /usr/local/bin/lotus

install-miner:
install-miner: ## Install the Lotus miner
install -C ./lotus-miner /usr/local/bin/lotus-miner

install-worker:
install-worker: ## Install the Lotus worker
install -C ./lotus-worker /usr/local/bin/lotus-worker

install-app:
install-app: ## Install a specified app
install -C ./$(APP) /usr/local/bin/$(APP)

uninstall: uninstall-daemon uninstall-miner uninstall-worker
uninstall: uninstall-daemon uninstall-miner uninstall-worker ## Uninstall all binaries
.PHONY: uninstall

uninstall-daemon:
uninstall-daemon: ## Uninstall the Lotus daemon
rm -f /usr/local/bin/lotus

uninstall-miner:
uninstall-miner: ## Uninstall the Lotus miner
rm -f /usr/local/bin/lotus-miner

uninstall-worker:
uninstall-worker: ## Uninstall the Lotus worker
rm -f /usr/local/bin/lotus-worker

# TOOLS

lotus-seed: $(BUILD_DEPS)
lotus-seed: $(BUILD_DEPS) ## Build the Lotus seed tool
rm -f lotus-seed
$(GOCC) build $(GOFLAGS) -o lotus-seed ./cmd/lotus-seed

.PHONY: lotus-seed
BINS+=lotus-seed

benchmarks:
benchmarks: ## Run benchmarks and submit results
$(GOCC) run github.com/whyrusleeping/bencher ./... > bench.json
@echo Submitting results
@curl -X POST 'http://benchmark.kittyhawk.wtf/benchmark' -d '@bench.json' -u "${benchmark_http_cred}"
.PHONY: benchmarks

lotus-fountain:
lotus-fountain: ## Build the Lotus fountain tool
rm -f lotus-fountain
$(GOCC) build $(GOFLAGS) -o lotus-fountain ./cmd/lotus-fountain
$(GOCC) run github.com/GeertJohan/go.rice/rice append --exec lotus-fountain -i ./cmd/lotus-fountain -i ./build
.PHONY: lotus-fountain
BINS+=lotus-fountain

lotus-bench:
lotus-bench: ## Build the Lotus bench tool
rm -f lotus-bench
$(GOCC) build $(GOFLAGS) -o lotus-bench ./cmd/lotus-bench
.PHONY: lotus-bench
BINS+=lotus-bench

lotus-stats:
lotus-stats: ## Build the Lotus stats tool
rm -f lotus-stats
$(GOCC) build $(GOFLAGS) -o lotus-stats ./cmd/lotus-stats
.PHONY: lotus-stats
BINS+=lotus-stats

lotus-pcr:
lotus-pcr: ## Build the Lotus PCR tool
rm -f lotus-pcr
$(GOCC) build $(GOFLAGS) -o lotus-pcr ./cmd/lotus-pcr
.PHONY: lotus-pcr
BINS+=lotus-pcr

lotus-health:
lotus-health: ## Build the Lotus health tool
rm -f lotus-health
$(GOCC) build -o lotus-health ./cmd/lotus-health
.PHONY: lotus-health
BINS+=lotus-health

lotus-wallet: $(BUILD_DEPS)
lotus-wallet: $(BUILD_DEPS) ## Build the Lotus wallet tool
rm -f lotus-wallet
$(GOCC) build $(GOFLAGS) -o lotus-wallet ./cmd/lotus-wallet
.PHONY: lotus-wallet
BINS+=lotus-wallet

lotus-keygen:
lotus-keygen: ## Build the Lotus keygen tool
rm -f lotus-keygen
$(GOCC) build -o lotus-keygen ./cmd/lotus-keygen
.PHONY: lotus-keygen
BINS+=lotus-keygen

testground:
testground: ## Build for testground
$(GOCC) build -tags testground -o /dev/null ./cmd/lotus
.PHONY: testground
BINS+=testground


tvx:
tvx: ## Build the TVX tool
rm -f tvx
$(GOCC) build -o tvx ./cmd/tvx
.PHONY: tvx
BINS+=tvx

lotus-sim: $(BUILD_DEPS)
lotus-sim: $(BUILD_DEPS) ## Build the Lotus simulator
rm -f lotus-sim
$(GOCC) build $(GOFLAGS) -o lotus-sim ./cmd/lotus-sim
.PHONY: lotus-sim
BINS+=lotus-sim

# SYSTEMD

install-daemon-service: install-daemon
install-daemon-service: install-daemon ## Install systemd service for Lotus daemon
mkdir -p /etc/systemd/system
mkdir -p /var/log/lotus
install -C -m 0644 ./scripts/lotus-daemon.service /etc/systemd/system/lotus-daemon.service
Expand All @@ -236,7 +237,7 @@ install-daemon-service: install-daemon
@echo "To start the service, run: 'sudo systemctl start lotus-daemon'"
@echo "To enable the service on startup, run: 'sudo systemctl enable lotus-daemon'"

install-miner-service: install-miner install-daemon-service
install-miner-service: install-miner install-daemon-service ## Install systemd service for Lotus miner
mkdir -p /etc/systemd/system
mkdir -p /var/log/lotus
install -C -m 0644 ./scripts/lotus-miner.service /etc/systemd/system/lotus-miner.service
Expand All @@ -246,81 +247,80 @@ install-miner-service: install-miner install-daemon-service
@echo "To start the service, run: 'sudo systemctl start lotus-miner'"
@echo "To enable the service on startup, run: 'sudo systemctl enable lotus-miner'"

install-main-services: install-miner-service
install-main-services: install-miner-service ## Install main systemd services

install-all-services: install-main-services
install-all-services: install-main-services ## Install all systemd services

install-services: install-main-services
install-services: install-main-services ## Alias for installing main services

clean-daemon-service: clean-miner-service
clean-daemon-service: clean-miner-service ## Clean systemd service for Lotus daemon
-systemctl stop lotus-daemon
-systemctl disable lotus-daemon
rm -f /etc/systemd/system/lotus-daemon.service
systemctl daemon-reload

clean-miner-service:
clean-miner-service: ## Clean systemd service for Lotus miner
-systemctl stop lotus-miner
-systemctl disable lotus-miner
rm -f /etc/systemd/system/lotus-miner.service
systemctl daemon-reload

clean-main-services: clean-daemon-service
clean-main-services: clean-daemon-service ## Clean main systemd services

clean-all-services: clean-main-services
clean-all-services: clean-main-services ## Clean all systemd services

clean-services: clean-all-services
clean-services: clean-all-services ## Alias for cleaning all services

# MISC
buildall: $(BINS) ## Build all binaries

buildall: $(BINS)

install-completions:
install-completions: ## Install shell completions
mkdir -p /usr/share/bash-completion/completions /usr/local/share/zsh/site-functions/
install -C ./scripts/bash-completion/lotus /usr/share/bash-completion/completions/lotus
install -C ./scripts/zsh-completion/lotus /usr/local/share/zsh/site-functions/_lotus

unittests:
unittests: ## Run unit tests
@$(GOCC) test $(shell go list ./... | grep -v /lotus/itests)
.PHONY: unittests

clean:
clean: ## Clean build artifacts
rm -rf $(CLEAN) $(BINS)
-$(MAKE) -C $(FFI_PATH) clean
.PHONY: clean

dist-clean:
dist-clean: ## Thoroughly clean, including git submodules
git clean -xdff
git submodule deinit --all -f
.PHONY: dist-clean

type-gen: api-gen
type-gen: api-gen ## Generate type information
$(GOCC) run ./gen/main.go
$(GOCC) generate -x ./...
$(FIX_IMPORTS)

actors-code-gen:
actors-code-gen: ## Generate actor code
$(GOCC) run ./gen/inline-gen . gen/inlinegen-data.json
$(GOCC) run ./chain/actors/agen
$(GOCC) fmt ./...

actors-gen: actors-code-gen
actors-gen: actors-code-gen ## Generate actors
$(GOCC) run ./scripts/fiximports
.PHONY: actors-gen

bundle-gen:
bundle-gen: ## Generate bundle
$(GOCC) run ./gen/bundle $(VERSION) $(RELEASE) $(RELEASE_OVERRIDES)
$(GOCC) fmt ./build/...
.PHONY: bundle-gen

api-gen:
api-gen: ## Generate API
$(GOCC) run ./gen/api
$(FIX_IMPORTS)
.PHONY: api-gen

cfgdoc-gen:
cfgdoc-gen: ## Generate configuration documentation
$(GOCC) run ./node/config/cfgdocgen > ./node/config/doc_gen.go

appimage: lotus
appimage: lotus ## Build AppImage
rm -rf appimage-builder-cache || true
rm AppDir/io.filecoin.lotus.desktop || true
rm AppDir/icon.svg || true
Expand All @@ -329,29 +329,33 @@ appimage: lotus
cp ./lotus AppDir/usr/bin/
appimage-builder

docsgen: fiximports
docsgen: fiximports ## Generate documentation
$(GOCC) run ./gen/docs
.PHONY: docsgen

fiximports:
fiximports: ## Fix imports
$(FIX_IMPORTS)
.PHONY: fiximports

gen: actors-code-gen type-gen cfgdoc-gen docsgen api-gen
gen: actors-code-gen type-gen cfgdoc-gen docsgen api-gen ## Run all generation tasks
$(GOCC) run ./scripts/fiximports
@echo ">>> IF YOU'VE MODIFIED THE CLI OR CONFIG, REMEMBER TO ALSO RUN 'make docsgen-cli'"
.PHONY: gen

jen: gen
jen: gen ## Alias for gen

snap: lotus lotus-miner lotus-worker
snap: lotus lotus-miner lotus-worker ## Build snap package
snapcraft
# snapcraft upload ./lotus_*.snap

docsgen-cli:
# separate from gen because it needs binaries
docsgen-cli: lotus lotus-miner lotus-worker ## Generate CLI documentation
$(GOCC) run ./scripts/docsgen-cli
.PHONY: docsgen-cli

print-%:
print-%: ## Print variable value
@echo $*=$($*)

help: ## Display this help message
@echo "Available targets:"
@awk 'BEGIN {FS = ":.*?## "}; /^[a-zA-Z_-]+:.*?## / {printf " \033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) | sort