huatuo/Makefile

79 lines
2.1 KiB
Makefile

GO ?= go
# the root directory
ROOT_DIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
# bpf source code files
BPF_DIR := $(ROOT_DIR)/bpf
# used for go generate to compile eBPF
BPF_COMPILE := $(ROOT_DIR)/build/clang.sh
BPF_INCLUDE := "-I$(BPF_DIR)/include"
APP_COMMIT ?= $(shell git describe --dirty --long --always)
APP_BUILD_TIME=$(shell date "+%Y%m%d%H%M%S")
APP_VERSION="1.0"
GO_BUILD_STATIC := CGO_ENABLED=1 $(GO) build -tags "netgo osusergo $(GO_TAGS)" -gcflags=all="-N -l" \
-ldflags "-extldflags -static
GO_BUILD_STATIC_WITH_VERSION := $(GO_BUILD_STATIC) \
-X main.AppVersion=$(APP_VERSION) \
-X main.AppGitCommit=$(APP_COMMIT) \
-X main.AppBuildTime=$(APP_BUILD_TIME)"
# export
export GO_BUILD_STATIC
all: gen-deps gen build tracer
gen-deps:
# maybe need to install libbpf-devel
gen:
@BPF_DIR=$(BPF_DIR) \
BPF_COMPILE=$(BPF_COMPILE) \
BPF_INCLUDE=$(BPF_INCLUDE) \
$(GO) generate -x ./...
build:
$(GO_BUILD_STATIC_WITH_VERSION) -o _output/bin/huatuo-bamai ./cmd/huatuo-bamai
TRACER_DIR := cmd
BIN_DIR := bin
SUBDIRS := $(shell find $(TRACER_DIR) -mindepth 1 -maxdepth 1 -type d -not -path "$(BIN_DIR)" | grep -v 'depend\|huatuo-bamai')
TARGETS := $(patsubst %,$(BIN_DIR)/%,$(notdir $(SUBDIRS)))
COMBINED := $(foreach dir,$(SUBDIRS),$(dir)/$(BIN_DIR)/*.bin)
tracer: $(TARGETS)
$(BIN_DIR)/%: $(TRACER_DIR)/%
cd $< && make
check: imports fmt golangci-lint
imports:
@echo "imports"
@goimports -w -local huatuo-bamai $(shell find . -type f -name '*.go' -not -path "./vendor/*")
fmt: fmt-rewrite-rules
@echo "gofumpt"
gofumpt -l -w $(shell find . -type f -name '*.go' -not -path "./vendor/*")
fmt-rewrite-rules:
@echo "fmt-rewrite-rules"
gofmt -w -r 'interface{} -> any' $(shell find . -type f -name '*.go' -not -path "./vendor/*")
golangci-lint:
@echo "golangci-lint"
golangci-lint run --build-tags=$(GO_TAGS) -v ./... --timeout=5m --config .golangci.yaml
vendor:
$(GO) mod tidy
$(GO) mod verify
$(GO) mod vendor
clean:
rm -rf _output $(shell find . -type f -name "*.o") $(COMBINED)
.PHONY: all gen-deps gen build tracer check imports golint fmt golangci-lint vendor clean