Makefile 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. # 统一的 Makefile - 支持 x86 和 ARM 架构
  2. # 使用方法:
  3. # make ARCH=x86 all - 构建 x86 版本
  4. # make ARCH=arm image - 构建并推送 ARM 镜像
  5. # make ARCH=arm only-build - 构建 ARM 版本
  6. arch ?= x86
  7. # 根据架构设置变量
  8. ifeq ($(arch),arm)
  9. DOCKER_CONTAINER = euspace-arm
  10. IMAGE_TAG_SUFFIX = arm64
  11. PLATFORM = linux/arm64
  12. DOCKERFILE = Dockerfile.arm64
  13. else
  14. DOCKER_CONTAINER = euspace
  15. IMAGE_TAG_SUFFIX = amd64
  16. PLATFORM = linux/amd64
  17. DOCKERFILE = Dockerfile
  18. endif
  19. VERSION=0.0.1
  20. FILTER=
  21. PARAMS=
  22. # Set debug
  23. ifeq ($(debug),1)
  24. PARAMS+=debug=1
  25. endif
  26. # Set filter pid
  27. ifdef pid
  28. ifneq ($(pid),0)
  29. PARAMS+=pid=$(pid)
  30. FILTER=FILTER_PID=${pid}
  31. endif
  32. endif
  33. # Set send data
  34. ifeq ($(send),1)
  35. FILTER+= SEND=1
  36. endif
  37. # Set eBPF build kernel
  38. ifdef kernel
  39. PARAMS+=kernel=${kernel}
  40. endif
  41. ifdef version
  42. VERSION=${version}
  43. PARAMS+=version=${version}
  44. endif
  45. GIT_COMMIT=$(shell git rev-parse --short HEAD)
  46. BUILD_DATE=$(shell date '+%Y-%m-%d-%H:%M:%S')
  47. INNER_ARCH=$(shell uname -m)
  48. # Set Version
  49. TARGET_FILE=dist/${INNER_ARCH}/package_dir/bin/euspace
  50. GO_LD_FLAGS_VERSION=-X github.com/coroot/coroot-node-agent/flags.AgentVersion=${VERSION}
  51. GO_LD_FLAGS_GIT_COMMIT=-X github.com/coroot/coroot-node-agent/flags.GitCommit=${GIT_COMMIT}
  52. GO_LD_FLAGS_BUILD_DATE=-X github.com/coroot/coroot-node-agent/flags.BuildDate=${BUILD_DATE}
  53. GO_LD_FLAGS=-ldflags="${GO_LD_FLAGS_VERSION} ${GO_LD_FLAGS_GIT_COMMIT} ${GO_LD_FLAGS_BUILD_DATE}"
  54. # 帮助信息
  55. help:
  56. @echo "Usage: make arch=<x86|arm> <target>"
  57. @echo ""
  58. @echo "Architecture options (case-insensitive):"
  59. @echo " arch=x86 - Build for x86_64 architecture (default)"
  60. @echo " arch=arm - Build for ARM64 architecture"
  61. @echo ""
  62. @echo "Build targets:"
  63. @echo " all - Build (ebpf-build + go-build)"
  64. @echo " ebpf-build - Build eBPF components"
  65. @echo " go-build - Build Go application"
  66. @echo " only-build - Build only (ebpf-build + go-build)"
  67. @echo " docker-build - Build in containerized environment (for CI/CD)"
  68. @echo ""
  69. @echo "eBPF kernel parameters (only for ebpf-build):"
  70. @echo " kernel=all - Build for all supported kernels (512, 506, 420, 416)"
  71. @echo " kernel=512 - Build for kernel 5.12 only"
  72. @echo " kernel=506 - Build for kernel 5.06 only"
  73. @echo " kernel=420 - Build for kernel 4.20 only"
  74. @echo " kernel=416 - Build for kernel 4.16 only"
  75. @echo ""
  76. @echo "Version parameters (only for go-build / image-build):"
  77. @echo " version=<ver> - Set version number for Go application"
  78. @echo " version=1.1.2, version=2.0.0, etc."
  79. @echo ""
  80. @echo "Docker targets:"
  81. @echo " image-build - Build Docker image"
  82. @echo " image-push - Push Docker image"
  83. @echo " image - Build and push image"
  84. @echo ""
  85. @echo "Examples:"
  86. @echo " make arch=x86 all - Build for x86"
  87. @echo " make arch=arm image - Build and push ARM image"
  88. @echo " make arch=arm only-build - Build ARM version only"
  89. @echo " make ebpf-build kernel=all - Build eBPF for all kernels"
  90. @echo " make ebpf-build kernel=512 - Build eBPF for kernel 5.12 only"
  91. @echo " make go-build version=1.1.2 - Build Go with version 1.1.2"
  92. @echo " make docker-build kernel=all version=1.0 - CI/CD build with all kernels"
  93. ebpf-build:
  94. docker exec $(DOCKER_CONTAINER) sh -c 'cd /opt/github/euspace/ebpftracer && make all ${PARAMS}'
  95. go-build:
  96. docker exec $(DOCKER_CONTAINER) bash -c 'cd /opt/github/euspace && source ~/.g/env && make build ${PARAMS}'
  97. only-build: ebpf-build go-build
  98. all: only-build
  99. build:
  100. CGO_ENABLED=1 go build -gcflags="all=-N -l" ${GO_LD_FLAGS} -buildvcs=false -o ${TARGET_FILE}
  101. ${TARGET_FILE} -v
  102. run:
  103. ssh [email protected] '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"'
  104. docker-build-c:
  105. cd /opt/github/euspace/ebpftracer && make all ${PARAMS}
  106. docker-build-go:
  107. source ~/.g/env; CGO_ENABLED=1 go build -a -gcflags="all=-N -l" ${GO_LD_FLAGS} -buildvcs=false -o ${TARGET_FILE}
  108. docker-build: docker-build-c docker-build-go
  109. @echo Target file: ${TARGET_FILE}
  110. @echo Euspaces build success!
  111. # Image configuration
  112. AGENT_IMAGE_NAME=euspace-agent
  113. IMAGE_TAG=${VERSION}-dev-$(IMAGE_TAG_SUFFIX)
  114. IMAGE_FULL=${AGENT_IMAGE_NAME}:${IMAGE_TAG}
  115. image-build:
  116. docker build --platform=$(PLATFORM) -t harbor.cloudwise.com/apm/${IMAGE_FULL} -f $(DOCKERFILE) .
  117. image-push:
  118. docker push harbor.cloudwise.com/apm/${IMAGE_FULL}
  119. image: only-build image-build image-push
  120. debug:
  121. exit
  122. .PHONY: help ebpf-build go-build only-build all docker-build image-build image-push image debug