github.com/castai/kvisor@v1.7.1-0.20240516114728-b3572a2607b5/Makefile (about) 1 # Generate api contracts from protobuf. 2 .PHONY: gen-proto 3 gen-proto: 4 protoc api/v1/runtime/common.proto --go_out=paths=source_relative:. 5 protoc api/v1/runtime/runtime_agent_api.proto --go_out=paths=source_relative:. --go-grpc_out=require_unimplemented_servers=false:. --go-grpc_opt=paths=source_relative 6 protoc api/v1/kube/kube_api.proto --go_out=paths=source_relative:. --go-grpc_out=require_unimplemented_servers=false:. --go-grpc_opt=paths=source_relative 7 8 UNAME_M ?= $(shell uname -m) 9 10 ifeq ($(UNAME_M),x86_64) 11 ARCH = x86_64 12 LINUX_ARCH = x86 13 GO_ARCH = amd64 14 endif 15 16 ifeq ($(UNAME_M),aarch64) 17 ARCH = arm64 18 LINUX_ARCH = arm64 19 GO_ARCH = arm64 20 endif 21 22 ifeq ($(UNAME_M),arm64) 23 ARCH = arm64 24 LINUX_ARCH = arm64 25 GO_ARCH = arm64 26 endif 27 28 LAST_GIT_TAG ?= $(shell $(CMD_GIT) describe --tags --match 'v*' 2>/dev/null) 29 VERSION ?= $(if $(RELEASE_TAG),$(RELEASE_TAG),$(LAST_GIT_TAG)) 30 ifeq ($(VERSION),) 31 VERSION = local-$(shell date +%s) 32 endif 33 34 CMD_TR ?= tr 35 CMD_CUT ?= cut 36 CMD_CP ?= cp 37 CMD_AWK ?= awk 38 CMD_SED ?= sed 39 CMD_GIT ?= git 40 CMD_CLANG ?= clang 41 CMD_LLC ?= llc 42 CMD_STRIP ?= llvm-strip 43 CMD_RM ?= rm 44 CMD_INSTALL ?= install 45 CMD_MKDIR ?= mkdir 46 CMD_TOUCH ?= touch 47 CMD_PKGCONFIG ?= pkg-config 48 BPF_VCPU ?= v2 49 CMD_GO ?= go 50 51 KVISOR_EBPF_OBJ_CORE_HEADERS = $(shell find cmd/agent/ebpf/c -name *.h) 52 KVISOR_EBPF_OBJ_SRC = ./cmd/agent/ebpf/c/tracee.bpf.c 53 54 OUTPUT_DIR_BPF = ./dist 55 OUTPUT_DIR_BIN = ./bin 56 57 $(OUTPUT_DIR_BIN): 58 @$(CMD_MKDIR) -p $@ 59 60 $(OUTPUT_DIR_BPF): 61 @$(CMD_MKDIR) -p $@ 62 63 STATIC ?= 1 64 GO_TAGS_EBPF = core,ebpf 65 CGO_EXT_LDFLAGS_EBPF = 66 67 ifeq ($(STATIC), 1) 68 CGO_EXT_LDFLAGS_EBPF += -static 69 GO_TAGS_EBPF := $(GO_TAGS_EBPF),netgo 70 endif 71 72 .PHONY: builder-image 73 builder-image: $(OUTPUT_DIR_BPF)/builder-image.txt 74 75 76 $(OUTPUT_DIR_BPF)/builder-image.txt: $(OUTPUT_DIR_BPF) 77 echo $(GO_ARCH) 78 docker build -t ghcr.io/castai/kvisor/kvisor-builder:latest --build-arg TARGETARCH=$(GO_ARCH) . -f Dockerfile.builder 79 touch $(OUTPUT_DIR_BPF)/builder-image.txt 80 81 CMD_DOCKER_BUILDER=docker run --rm \ 82 -v $$(pwd)/.cache/go-build:/home/.cache/go-build \ 83 -v $$(pwd)/.cache/go-mod:/home/go/pkg/mod \ 84 -v $$(pwd):/app \ 85 -w /app ghcr.io/castai/kvisor/kvisor-builder:latest 86 87 CMD_DOCKER_BUILDER_LOCAL=docker run --rm -it --privileged --cap-add SYS_ADMIN --pid host --net host --name kvisor-builder \ 88 -v $$(pwd)/.cache/go-build:/home/.cache/go-build \ 89 -v $$(pwd)/.cache/go-mod:/home/go/pkg/mod \ 90 -v $$(pwd):/app \ 91 -v /sys/kernel/debug:/sys/kernel/debug \ 92 -w /app ghcr.io/castai/kvisor/kvisor-builder:latest 93 94 .PHONY: gen-args-types 95 gen-args-types: 96 go generate ./pkg/ebpftracer/decoder 97 98 .PHONY: gen-bpf 99 gen-bpf: 100 go generate ./pkg/ebpftracer 101 102 .PHONY: gen-bpf-docker 103 gen-bpf-docker: builder-image 104 $(CMD_DOCKER_BUILDER) make gen-bpf 105 106 GO_ENV_EBPF = 107 GO_ENV_EBPF += GOOS=linux 108 GO_ENV_EBPF += CC=$(CMD_CLANG) 109 GO_ENV_EBPF += GOARCH=$(GO_ARCH) 110 GO_ENV_EBPF += CGO_ENABLED=0 111 GO_DEBUG_FLAG = -s -w 112 113 # Build kvisor binary and docker image. 114 .PHONY: git-config 115 git-config: 116 git config --global --add safe.directory /app 117 118 .PHONY: kvisor-agent 119 kvisor-agent: $(OUTPUT_DIR_BIN)/kvisor-agent-$(GO_ARCH) 120 121 $(OUTPUT_DIR_BIN)/kvisor-agent-$(GO_ARCH): \ 122 # 123 $(GO_ENV_EBPF) $(CMD_GO) build \ 124 -tags $(GO_TAGS_EBPF) \ 125 -ldflags="$(GO_DEBUG_FLAG) \ 126 -extldflags \"$(CGO_EXT_LDFLAGS_EBPF)\" \ 127 -X main.Version=\"$(VERSION)\" \ 128 " \ 129 -v -o $@ \ 130 ./cmd/agent/daemon/ 131 132 .PHONY: clean-kvisor-agent 133 clean-kvisor-agent: 134 # 135 $(CMD_RM) -rf $(OUTPUT_DIR_BIN)/kvisor-agent-$(GO_ARCH) 136 137 .PHONY: kvisor-image-scanner 138 kvisor-image-scanner: $(OUTPUT_DIR_BIN)/kvisor-image-scanner-$(GO_ARCH) 139 140 $(OUTPUT_DIR_BIN)/kvisor-image-scanner-$(GO_ARCH): \ 141 # 142 $(GO_ENV_EBPF) $(CMD_GO) build \ 143 -tags $(GO_TAGS_EBPF) \ 144 -ldflags="$(GO_DEBUG_FLAG) \ 145 -extldflags \"$(CGO_EXT_LDFLAGS_EBPF)\" \ 146 -X main.Version=\"$(VERSION)\" \ 147 " \ 148 -v -o $@ \ 149 ./cmd/imagescan/ 150 151 .PHONY: clean-kvisor-image-scanner 152 clean-kvisor-image-scanner: 153 # 154 $(CMD_RM) -rf $(OUTPUT_DIR_BIN)/kvisor-image-scanner-$(GO_ARCH) 155 156 .PHONY: kvisor-linter 157 kvisor-linter: $(OUTPUT_DIR_BIN)/kvisor-linter-$(GO_ARCH) 158 159 $(OUTPUT_DIR_BIN)/kvisor-linter-$(GO_ARCH): \ 160 # 161 $(GO_ENV_EBPF) $(CMD_GO) build \ 162 -tags $(GO_TAGS_EBPF) \ 163 -ldflags="$(GO_DEBUG_FLAG) \ 164 -extldflags \"$(CGO_EXT_LDFLAGS_EBPF)\" \ 165 -X main.Version=\"$(VERSION)\" \ 166 " \ 167 -v -o $@ \ 168 ./cmd/linter/ 169 170 .PHONY: clean-kvisor-linter 171 clean-kvisor-linter: 172 # 173 $(CMD_RM) -rf $(OUTPUT_DIR_BIN)/kvisor-linter-$(GO_ARCH) 174 175 GO_ENV_SERVER = 176 GO_ENV_SERVER += GOOS=linux 177 GO_ENV_SERVER += GOARCH=$(GO_ARCH) 178 GO_ENV_SERVER += CGO_ENABLED=0 179 180 IMAGE_TAG ?= local 181 IMAGE_REPO ?= ghcr.io/castai/kvisor/kvisor 182 183 # Agent build. 184 .PHONY: kvisor-agent-docker 185 kvisor-agent-docker: 186 make kvisor-agent 187 188 .PHONY: kvisor-agent-docker-image 189 kvisor-agent-docker-image: clean-kvisor-agent kvisor-agent-docker 190 docker build -t $(IMAGE_REPO)-agent:$(IMAGE_TAG) . -f Dockerfile.agent 191 192 .PHONY: kvisor-agent-push-deploy 193 kvisor-agent-push-deploy: kvisor-agent-docker-image 194 docker push $(IMAGE_REPO)-agent:$(IMAGE_TAG) 195 196 # Controller build. 197 .PHONY: clean-kvisor-controller 198 clean-kvisor-controller: 199 $(CMD_RM) -rf $(OUTPUT_DIR_BIN)/kvisor-controller-$(GO_ARCH) 200 201 .PHONY: kvisor-controller 202 kvisor-controller: $(OUTPUT_DIR_BIN)/kvisor-controller-$(GO_ARCH) 203 204 $(OUTPUT_DIR_BIN)/kvisor-controller-$(GO_ARCH): 205 $(GO_ENV_SERVER) $(CMD_GO) build \ 206 -ldflags="$(GO_DEBUG_FLAG) \ 207 -X main.Version=\"$(VERSION)\" \ 208 " \ 209 -v -o $@ \ 210 ./cmd/controller 211 212 .PHONY: kvisor-controller-docker-image 213 kvisor-controller-docker-image: clean-kvisor-controller kvisor-controller 214 docker build -t $(IMAGE_REPO)-controller:$(IMAGE_TAG) . -f Dockerfile.controller 215 216 .PHONY: kvisor-controller-push-deploy 217 kvisor-controller-push-deploy: kvisor-controller-docker-image 218 docker push $(IMAGE_REPO)-controller:$(IMAGE_TAG) 219 220 # Scanners build. 221 .PHONY: kvisor-scanners-docker 222 kvisor-scanners-docker: 223 make kvisor-agent 224 225 .PHONY: kvisor-scanners-docker-image 226 kvisor-scanners-docker-image: clean-kvisor-image-scanner kvisor-image-scanner clean-kvisor-linter kivsor-linter 227 docker build -t $(IMAGE_REPO)-scanners:$(IMAGE_TAG) . -f Dockerfile.scanners 228 229 .PHONY: kvisor-scanners-push-deploy 230 kvisor-scanners-push-deploy: kvisor-scanners-docker-image 231 docker push $(IMAGE_REPO)-scanners:$(IMAGE_TAG) 232 233 # Event generator build. 234 .PHONY: clean-kvisor-event-generator 235 clean-kvisor-event-generator: 236 $(CMD_RM) -rf $(OUTPUT_DIR_BIN)/kvisor-event-generator 237 238 .PHONY: kvisor-event-generator 239 kvisor-event-generator: $(OUTPUT_DIR_BIN)/kvisor-event-generator 240 241 $(OUTPUT_DIR_BIN)/kvisor-event-generator: 242 $(GO_ENV_SERVER) $(CMD_GO) build \ 243 -ldflags="$(GO_DEBUG_FLAG) \ 244 -X main.Version=\"$(VERSION)\" \ 245 " \ 246 -v -o $@ \ 247 ./cmd/event-generator 248 249 .PHONY: kvisor-event-generator-docker-image 250 kvisor-event-generator-docker-image: clean-kvisor-event-generator kvisor-event-generator 251 docker build -t $(IMAGE_REPO)-event-generator:$(IMAGE_TAG) . -f Dockerfile.event-generator 252 253 .PHONY: kvisor-event-generator-push-deploy 254 kvisor-event-generator-push-deploy: kvisor-event-generator-docker-image 255 docker push $(IMAGE_REPO)-event-generator:$(IMAGE_TAG) 256 257 258 .PHONY: builder-image-enter 259 builder-image-enter: builder-image 260 $(CMD_DOCKER_BUILDER_LOCAL) 261 262 test: 263 go test `go list ./... | grep -v /e2e` -short ./...