# 统一的 Makefile - 支持 x86 和 ARM 架构 # 使用方法: # make ARCH=x86 all - 构建 x86 版本 # make ARCH=arm image - 构建并推送 ARM 镜像 # make ARCH=arm only-build - 构建 ARM 版本 arch ?= x86 # 根据架构设置变量 ifeq ($(arch),arm) DOCKER_CONTAINER = euspace-arm IMAGE_TAG_SUFFIX = arm64 PLATFORM = linux/arm64 DOCKERFILE = Dockerfile.arm64 else DOCKER_CONTAINER = euspace IMAGE_TAG_SUFFIX = amd64 PLATFORM = linux/amd64 DOCKERFILE = Dockerfile endif VERSION=0.0.1 FILTER= PARAMS= # Set debug ifeq ($(debug),1) PARAMS+=debug=1 endif # Set filter pid ifdef pid ifneq ($(pid),0) PARAMS+=pid=$(pid) FILTER=FILTER_PID=${pid} endif endif # Set send data ifeq ($(send),1) FILTER+= SEND=1 endif # Set eBPF build kernel ifdef kernel PARAMS+=kernel=${kernel} endif ifdef version VERSION=${version} PARAMS+=version=${version} endif GIT_COMMIT=$(shell git rev-parse --short HEAD) BUILD_DATE=$(shell date '+%Y-%m-%d-%H:%M:%S') INNER_ARCH=$(shell uname -m) # Set Version TARGET_FILE=dist/${INNER_ARCH}/package_dir/bin/euspace GO_LD_FLAGS_VERSION=-X github.com/coroot/coroot-node-agent/flags.AgentVersion=${VERSION} GO_LD_FLAGS_GIT_COMMIT=-X github.com/coroot/coroot-node-agent/flags.GitCommit=${GIT_COMMIT} GO_LD_FLAGS_BUILD_DATE=-X github.com/coroot/coroot-node-agent/flags.BuildDate=${BUILD_DATE} GO_LD_FLAGS=-ldflags="${GO_LD_FLAGS_VERSION} ${GO_LD_FLAGS_GIT_COMMIT} ${GO_LD_FLAGS_BUILD_DATE}" # 帮助信息 help: @echo "Usage: make arch= " @echo "" @echo "Architecture options (case-insensitive):" @echo " arch=x86 - Build for x86_64 architecture (default)" @echo " arch=arm - Build for ARM64 architecture" @echo "" @echo "Build targets:" @echo " all - Build (ebpf-build + go-build)" @echo " ebpf-build - Build eBPF components" @echo " go-build - Build Go application" @echo " only-build - Build only (ebpf-build + go-build)" @echo " docker-build - Build in containerized environment (for CI/CD)" @echo "" @echo "eBPF kernel parameters (only for ebpf-build):" @echo " kernel=all - Build for all supported kernels (512, 506, 420, 416)" @echo " kernel=512 - Build for kernel 5.12 only" @echo " kernel=506 - Build for kernel 5.06 only" @echo " kernel=420 - Build for kernel 4.20 only" @echo " kernel=416 - Build for kernel 4.16 only" @echo "" @echo "Version parameters (only for go-build / image-build):" @echo " version= - Set version number for Go application" @echo " version=1.1.2, version=2.0.0, etc." @echo "" @echo "Docker targets:" @echo " image-build - Build Docker image" @echo " image-push - Push Docker image" @echo " image - Build and push image" @echo "" @echo "Examples:" @echo " make arch=x86 all - Build for x86" @echo " make arch=arm image - Build and push ARM image" @echo " make arch=arm only-build - Build ARM version only" @echo " make ebpf-build kernel=all - Build eBPF for all kernels" @echo " make ebpf-build kernel=512 - Build eBPF for kernel 5.12 only" @echo " make go-build version=1.1.2 - Build Go with version 1.1.2" @echo " make docker-build kernel=all version=1.0 - CI/CD build with all kernels" ebpf-build: docker exec $(DOCKER_CONTAINER) sh -c 'cd /opt/github/euspace/ebpftracer && make all ${PARAMS}' go-build: docker exec $(DOCKER_CONTAINER) bash -c 'cd /opt/github/euspace && source ~/.g/env && make build ${PARAMS}' only-build: ebpf-build go-build all: only-build build: CGO_ENABLED=1 go build -gcflags="all=-N -l" ${GO_LD_FLAGS} -buildvcs=false -o ${TARGET_FILE} ${TARGET_FILE} -v run: ssh root@10.211.55.27 'cd /opt/github/euspace && CONFIG_ENDPOINT=10.0.16.250:18080 && TRACES_ENDPOINT=http://10.0.16.250:18080/docp/api/v2/data/receive ${FILTER} ./euspace --listen="0.0.0.0:8123"' docker-build-c: cd /opt/github/euspace/ebpftracer && make all ${PARAMS} docker-build-go: source ~/.g/env; CGO_ENABLED=1 go build -a -gcflags="all=-N -l" ${GO_LD_FLAGS} -buildvcs=false -o ${TARGET_FILE} docker-build: docker-build-c docker-build-go @echo Target file: ${TARGET_FILE} @echo Euspaces build success! # Image configuration AGENT_IMAGE_NAME=euspace-agent IMAGE_TAG=${VERSION}-dev-$(IMAGE_TAG_SUFFIX) IMAGE_FULL=${AGENT_IMAGE_NAME}:${IMAGE_TAG} image-build: docker build --platform=$(PLATFORM) -t harbor.cloudwise.com/apm/${IMAGE_FULL} -f $(DOCKERFILE) . image-push: docker push harbor.cloudwise.com/apm/${IMAGE_FULL} image: only-build image-build image-push debug: exit .PHONY: help ebpf-build go-build only-build all docker-build image-build image-push image debug