-
Notifications
You must be signed in to change notification settings - Fork 82
/
Makefile
150 lines (117 loc) · 4.23 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
SHELL := /usr/bin/env bash -o pipefail
PROJECT := govpp
VERSION ?= $(shell git describe --always --tags --dirty --match='v*')
COMMIT ?= $(shell git rev-parse HEAD)
BUILD_STAMP ?= $(shell git log -1 --format='%ct')
BUILD_BRANCH ?= $(shell git rev-parse --abbrev-ref HEAD)
BUILD_HOST ?= $(shell hostname)
BUILD_USER ?= $(shell id -un)
GOVPP_PKG := go.fd.io/govpp/internal
VPP_API_DIR ?= ${VPP_DIR}/build-root/install-vpp-native/vpp/share/vpp/api
VERSION_PKG := $(GOVPP_PKG)/version
LDFLAGS = \
-X $(VERSION_PKG).version=$(VERSION) \
-X $(VERSION_PKG).commit=$(COMMIT) \
-X $(VERSION_PKG).branch=$(BUILD_BRANCH) \
-X $(VERSION_PKG).buildStamp=$(BUILD_STAMP) \
-X $(VERSION_PKG).buildUser=$(BUILD_USER) \
-X $(VERSION_PKG).buildHost=$(BUILD_HOST)
ifeq ($(NOSTRIP),)
LDFLAGS += -w -s
endif
GO_BUILD_TAGS ?= novpp
GO_BUILD_ARGS = -ldflags "$(LDFLAGS)"
ifneq ($(GO_BUILD_TAGS),)
GO_BUILD_ARGS += -tags="${GO_BUILD_TAGS}"
endif
ifneq ($(GO_NOTRIM),0)
GO_BUILD_ARGS += -trimpath
endif
ifeq ($(V),1)
GO_BUILD_ARGS += -v
endif
# Package cloud repo for VPP.
VPP_REPO ?= release
# VPP Docker image to use for api generation (gen-binapi-docker)
VPP_IMG ?= ligato/vpp-base:24.06-release
# Local VPP directory used for binary api generation (gen-binapi-from-code)
VPP_DIR ?=
# Target directory for generated go api bindings
BINAPI_DIR ?= ./binapi
# Binapi generator path
BINAPI_GENERATOR = ./bin/binapi-generator
.DEFAULT_GOAL = help
export CGO_ENABLED=0
check-%:
@: $(if $(value $*),,$(error $* is undefined))
bin:
@mkdir -p bin
.PHONY: build
build: cmd examples ## Build all
.PHONY: cmd
cmd: bin ## Build commands
@go build ${GO_BUILD_ARGS} -o bin ./cmd/...
.PHONY: binapi-generator
binapi-generator: bin ## Build only the binapi generator
@go build ${GO_BUILD_ARGS} -o bin ./cmd/binapi-generator/
.PHONY: examples
examples: bin ## Build examples
@go build ${GO_BUILD_ARGS} -o bin ./examples/...
.PHONY: test
test: ## Run unit tests
@echo "# running tests"
go test -tags="${GO_BUILD_TAGS}" ./...
.PHONY: test-integration
test-integration: ## Run integration tests
@echo "# running integration tests"
VPP_REPO=$(VPP_REPO) ./test/run_integration.sh
.PHONY: lint ## Run code linter
lint:
@golangci-lint run
@echo "Done"
.PHONY: install
install: install-generator install-proxy ## Install all
.PHONY: install-generator
install-generator: ## Install binapi-generator
@echo "# installing binapi-generator ${VERSION}"
@go install ${GO_BUILD_ARGS} ./cmd/binapi-generator
.PHONY: install-proxy
install-proxy: ## Install vpp-proxy
@echo "# installing vpp-proxy ${VERSION}"
@go install ${GO_BUILD_ARGS} ./cmd/vpp-proxy
.PHONY: install-goreleaser
install-goreleaser: ## Install goreleaser
@echo "# installing goreleaser"
@go install github.com/goreleaser/goreleaser/v2@latest
.PHONY: release-snapshot
release-snapshot: ## Release snapshot
@goreleaser release --clean --snapshot
.PHONY: generate
generate: generate-binapi ## Generate all
.PHONY: generate-binapi
generate-binapi: install-generator ## Generate binapi code
@echo "# generating binapi"
@go generate -x "$(BINAPI_DIR)"
.PHONY: gen-binapi-local
gen-binapi-local: binapi-generator check-VPP_DIR ## Generate binapi code (using locally cloned VPP)
@make -C ${VPP_DIR} json-api-files
@find $(BINAPI_DIR)/*/*.ba.go -delete || true
@find $(BINAPI_DIR)/* -type d -delete
@./bin/binapi-generator -input-dir=$(VPP_API_DIR) -output-dir=$(BINAPI_DIR) -gen=rpc
@./bin/binapi-generator -input-dir=$(VPP_API_DIR) -input-file=$(VPP_API_DIR)/core/vpe.api.json -output-dir=$(BINAPI_DIR) -gen=http
@sed -i 's@$(VPP_API_DIR)@/usr/share/vpp/api@g' $(BINAPI_DIR)/*/*.ba.go
.PHONY: gen-binapi-docker
gen-binapi-docker: install-generator ## Generate binapi code (using Docker)
@echo "# generating binapi in docker image ${VPP_IMG}"
$(eval cmds := $(shell go generate -n $(BINAPI_DIR) 2>&1 | tr "\n" ";"))
docker run -t --rm \
-e DEBUG_GOVPP \
-v "$(shell which binapi-generator):/usr/local/bin/binapi-generator:ro" \
-v "$(shell pwd):/govpp" \
-w /govpp \
-u "$(shell id -u):$(shell id -g)" \
"${VPP_IMG}" \
sh -ec "cd $(BINAPI_DIR) && $(cmds)"
.PHONY: help
help:
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'