Makefile 3.9 KB

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