Makefile 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. BUILD_PATH ?= _build
  2. PACKAGES_PATH ?= _packages
  3. CGO_ENABLED ?= 1
  4. GOOS ?= ""
  5. GOARCH ?= ""
  6. VERSION := $(shell git describe --tags --always)
  7. OS := $(shell uname -s | tr "[A-Z]" "[a-z]")
  8. PACKAGE_NAME := kuiper-$(VERSION)
  9. ifeq ($(GOOS), "")
  10. PACKAGE_NAME := $(PACKAGE_NAME)-$(OS)
  11. else
  12. PACKAGE_NAME := $(PACKAGE_NAME)-$(GOOS)
  13. endif
  14. ifeq ($(GOARCH), "")
  15. PACKAGE_NAME := $(PACKAGE_NAME)-$(shell uname -m)
  16. else
  17. PACKAGE_NAME := $(PACKAGE_NAME)-$(GOARCH)
  18. endif
  19. TARGET ?= emqx/kuiper
  20. .PHONY: build
  21. build:
  22. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/bin
  23. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/etc
  24. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/etc/sources
  25. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/etc/sinks
  26. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/data
  27. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/plugins
  28. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/plugins/sources
  29. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/plugins/sinks
  30. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/plugins/functions
  31. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/log
  32. @cp -r etc/* $(BUILD_PATH)/$(PACKAGE_NAME)/etc
  33. @if [ ! -z $(GOOS) ] && [ ! -z $(GOARCH) ] && [ $(CGO_ENABLED) == 0 ];then \
  34. GO111MODULE=on GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags="-s -w -X main.Version=$(VERSION)" -o cli xstream/cli/main.go; \
  35. GO111MODULE=on GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags="-s -w -X main.Version=$(VERSION)" -o server xstream/server/main.go; \
  36. else \
  37. GO111MODULE=on CGO_ENABLED=1 go build -ldflags="-s -w -X main.Version=$(VERSION)" -o cli xstream/cli/main.go; \
  38. GO111MODULE=on CGO_ENABLED=1 go build -ldflags="-s -w -X main.Version=$(VERSION)" -o server xstream/server/main.go; \
  39. fi
  40. @if [ ! -z $$(which upx) ]; then upx ./cli; upx ./server; fi
  41. @mv ./cli ./server $(BUILD_PATH)/$(PACKAGE_NAME)/bin
  42. @echo "Build successfully"
  43. .PHONY: pkg
  44. pkg: build
  45. @mkdir -p $(PACKAGES_PATH)
  46. @cd $(BUILD_PATH) && zip -rq $(PACKAGE_NAME).zip $(PACKAGE_NAME)
  47. @cd $(BUILD_PATH) && tar -czf $(PACKAGE_NAME).tar.gz $(PACKAGE_NAME)
  48. @mv $(BUILD_PATH)/$(PACKAGE_NAME).zip $(BUILD_PATH)/$(PACKAGE_NAME).tar.gz $(PACKAGES_PATH)
  49. @echo "Package build success"
  50. .PHONY:cross_prepare
  51. cross_prepare:
  52. @docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  53. .PHONY: cross_build
  54. cross_build: cross_prepare
  55. @docker buildx build --no-cache \
  56. --platform=linux/amd64,linux/arm64,linux/arm/v7,linux/386,linux/ppc64le \
  57. -t cross_build \
  58. --output type=tar,dest=cross_build.tar \
  59. -f ./Dockerfile-by-corss-build .
  60. @mkdir -p $(PACKAGES_PATH)
  61. @tar -xvf cross_build.tar --wildcards linux_amd64/go/kuiper/_packages/* \
  62. && mv linux_amd64/go/kuiper/_packages/* $(PACKAGES_PATH)
  63. @tar -xvf cross_build.tar --wildcards linux_arm64/go/kuiper/_packages/* \
  64. && mv linux_arm64/go/kuiper/_packages/* $(PACKAGES_PATH)
  65. @tar -xvf cross_build.tar --wildcards linux_arm_v7/go/kuiper/_packages/* \
  66. && mv linux_arm_v7/go/kuiper/_packages/* $(PACKAGES_PATH)
  67. @tar -xvf cross_build.tar --wildcards linux_ppc64le/go/kuiper/_packages/* \
  68. && mv linux_ppc64le/go/kuiper/_packages/* $(PACKAGES_PATH)
  69. @tar -xvf cross_build.tar --wildcards linux_386/go/kuiper/_packages/* \
  70. && mv linux_386/go/kuiper/_packages/kuiper-$(VERSION)-$(OS)-x86_64.tar.gz $(PACKAGES_PATH)/kuiper-$(VERSION)-linux-386.tar.gz \
  71. && mv linux_386/go/kuiper/_packages/kuiper-$(VERSION)-$(OS)-x86_64.zip $(PACKAGES_PATH)/kuiper-$(VERSION)-linux-386.zip
  72. @echo "Cross build success"
  73. .PHONY: docker
  74. docker:
  75. docker build --no-cache -t $(TARGET):$(VERSION) -f deploy/docker/Dockerfile .
  76. .PHONY:cross_docker
  77. cross_docker: cross_prepare
  78. docker buildx build --no-cache \
  79. --platform=linux/amd64,linux/arm64,linux/arm/v7,linux/386,linux/ppc64le \
  80. -t $(TARGET):$(VERSION) \
  81. -f deploy/docker/Dockerfile . \
  82. --push
  83. .PHONY: clean
  84. clean:
  85. @rm -rf cross_build.tar linux_amd64 linux_arm64 linux_arm_v7 linux_ppc64le linux_386
  86. @rm -rf _build _packages