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 ./...