Makefile 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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: build_without_edgex
  22. .PHONY:pkg
  23. pkg: pkg_without_edgex
  24. .PHONY: build_prepare
  25. build_prepare:
  26. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/bin
  27. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/etc
  28. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/etc/sources
  29. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/etc/sinks
  30. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/data
  31. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/plugins
  32. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/plugins/sources
  33. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/plugins/sinks
  34. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/plugins/functions
  35. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/log
  36. @cp -r etc/* $(BUILD_PATH)/$(PACKAGE_NAME)/etc
  37. .PHONY: build_without_edgex
  38. build_without_edgex: build_prepare
  39. @if [ ! -z $(GOOS) ] && [ ! -z $(GOARCH) ] && [ $(CGO_ENABLED) == 0 ];then \
  40. GO111MODULE=on GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags="-s -w -X main.Version=$(VERSION)" -o cli xstream/cli/main.go; \
  41. GO111MODULE=on GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags="-s -w -X main.Version=$(VERSION)" -o server xstream/server/main.go; \
  42. else \
  43. GO111MODULE=on CGO_ENABLED=1 go build -ldflags="-s -w -X main.Version=$(VERSION)" -o cli xstream/cli/main.go; \
  44. GO111MODULE=on CGO_ENABLED=1 go build -ldflags="-s -w -X main.Version=$(VERSION)" -o server xstream/server/main.go; \
  45. fi
  46. @if [ ! -z $$(which upx) ]; then upx ./cli; upx ./server; fi
  47. @mv ./cli ./server $(BUILD_PATH)/$(PACKAGE_NAME)/bin
  48. @echo "Build successfully"
  49. .PHONY: pkg_without_edgex
  50. pkg_without_edgex: build_without_edgex
  51. @make real_pkg
  52. .PHONY: build_with_edgex
  53. build_with_edgex: build_prepare
  54. @if [ ! -z $(GOOS) ] && [ ! -z $(GOARCH) ] && [ $(CGO_ENABLED) == 0 ];then \
  55. GO111MODULE=on GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags="-s -w -X main.Version=$(VERSION)" -tags edgex -o cli xstream/cli/main.go; \
  56. GO111MODULE=on GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags="-s -w -X main.Version=$(VERSION)" -tags edgex -o server xstream/server/main.go; \
  57. else \
  58. GO111MODULE=on CGO_ENABLED=1 go build -ldflags="-s -w -X main.Version=$(VERSION)" -tags edgex -o cli xstream/cli/main.go; \
  59. GO111MODULE=on CGO_ENABLED=1 go build -ldflags="-s -w -X main.Version=$(VERSION)" -tags edgex -o server xstream/server/main.go; \
  60. fi
  61. @if [ ! -z $$(which upx) ]; then upx ./cli; upx ./server; fi
  62. @mv ./cli ./server $(BUILD_PATH)/$(PACKAGE_NAME)/bin
  63. @echo "Build successfully"
  64. .PHONY: pkg_whit_edgex
  65. pkg_whit_edgex: build_with_edgex
  66. @make real_pkg
  67. .PHONY: real_pkg
  68. real_pkg:
  69. @mkdir -p $(PACKAGES_PATH)
  70. @cd $(BUILD_PATH) && zip -rq $(PACKAGE_NAME).zip $(PACKAGE_NAME)
  71. @cd $(BUILD_PATH) && tar -czf $(PACKAGE_NAME).tar.gz $(PACKAGE_NAME)
  72. @mv $(BUILD_PATH)/$(PACKAGE_NAME).zip $(BUILD_PATH)/$(PACKAGE_NAME).tar.gz $(PACKAGES_PATH)
  73. @echo "Package build success"
  74. .PHONY:cross_prepare
  75. cross_prepare:
  76. @docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  77. .PHONY: cross_build
  78. cross_build: cross_prepare
  79. @docker buildx build --no-cache \
  80. --platform=linux/amd64,linux/arm64,linux/arm/v7,linux/386,linux/ppc64le \
  81. -t cross_build \
  82. --output type=tar,dest=cross_build.tar \
  83. -f ./Dockerfile .
  84. @mkdir -p $(PACKAGES_PATH)
  85. @tar -xvf cross_build.tar --wildcards linux_amd64/go/kuiper/_packages/* \
  86. && mv linux_amd64/go/kuiper/_packages/* $(PACKAGES_PATH)
  87. @tar -xvf cross_build.tar --wildcards linux_arm64/go/kuiper/_packages/* \
  88. && mv linux_arm64/go/kuiper/_packages/* $(PACKAGES_PATH)
  89. @tar -xvf cross_build.tar --wildcards linux_arm_v7/go/kuiper/_packages/* \
  90. && mv linux_arm_v7/go/kuiper/_packages/* $(PACKAGES_PATH)
  91. @tar -xvf cross_build.tar --wildcards linux_ppc64le/go/kuiper/_packages/* \
  92. && mv linux_ppc64le/go/kuiper/_packages/* $(PACKAGES_PATH)
  93. @tar -xvf cross_build.tar --wildcards linux_386/go/kuiper/_packages/* \
  94. && mv linux_386/go/kuiper/_packages/kuiper-$(VERSION)-$(OS)-x86_64.tar.gz $(PACKAGES_PATH)/kuiper-$(VERSION)-linux-386.tar.gz \
  95. && mv linux_386/go/kuiper/_packages/kuiper-$(VERSION)-$(OS)-x86_64.zip $(PACKAGES_PATH)/kuiper-$(VERSION)-linux-386.zip
  96. @echo "Cross build success"
  97. .PHONY: docker
  98. docker:
  99. docker build --no-cache -t $(TARGET):$(VERSION) -f deploy/docker/Dockerfile .
  100. .PHONY:cross_docker
  101. cross_docker: cross_prepare
  102. docker buildx build --no-cache \
  103. --platform=linux/amd64,linux/arm64,linux/arm/v7,linux/386,linux/ppc64le \
  104. -t $(TARGET):$(VERSION) \
  105. -f deploy/docker/Dockerfile . \
  106. --push
  107. .PHONY: clean
  108. clean:
  109. @rm -rf cross_build.tar linux_amd64 linux_arm64 linux_arm_v7 linux_ppc64le linux_386
  110. @rm -rf _build _packages