Makefile 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  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. export KUIPER_SOURCE := $(shell pwd)
  21. .PHONY: build
  22. build: build_without_edgex
  23. .PHONY:pkg
  24. pkg: pkg_without_edgex
  25. @if [ "$$(uname -s)" = "Linux" ]; then make -C deploy/packages; fi
  26. .PHONY: build_prepare
  27. build_prepare:
  28. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/bin
  29. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/etc
  30. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/etc/sources
  31. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/etc/sinks
  32. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/data
  33. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/plugins
  34. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/plugins/sources
  35. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/plugins/sinks
  36. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/plugins/functions
  37. @mkdir -p $(BUILD_PATH)/$(PACKAGE_NAME)/log
  38. @cp -r etc/* $(BUILD_PATH)/$(PACKAGE_NAME)/etc
  39. .PHONY: build_without_edgex
  40. build_without_edgex: build_prepare
  41. @if [ ! -z $(GOOS) ] && [ ! -z $(GOARCH) ] && [ $(CGO_ENABLED) == 0 ];then \
  42. GO111MODULE=on GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags="-s -w -X main.Version=$(VERSION) -X main.LoadFileType=relative" -o kuiper xstream/cli/main.go; \
  43. GO111MODULE=on GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags="-s -w -X main.Version=$(VERSION) -X main.LoadFileType=relative" -o kuiperd xstream/server/main.go; \
  44. else \
  45. GO111MODULE=on CGO_ENABLED=1 go build -ldflags="-s -w -X main.Version=$(VERSION) -X main.LoadFileType=relative" -o kuiper xstream/cli/main.go; \
  46. GO111MODULE=on CGO_ENABLED=1 go build -ldflags="-s -w -X main.Version=$(VERSION) -X main.LoadFileType=relative" -o kuiperd xstream/server/main.go; \
  47. fi
  48. @if [ ! -z $$(which upx) ] && [ "$$(uname -m)" != "aarch64" ]; then upx ./kuiper; upx ./kuiperd; fi
  49. @mv ./kuiper ./kuiperd $(BUILD_PATH)/$(PACKAGE_NAME)/bin
  50. @echo "Build successfully"
  51. .PHONY: pkg_without_edgex
  52. pkg_without_edgex: build_without_edgex
  53. @make real_pkg
  54. .PHONY: build_with_edgex
  55. build_with_edgex: build_prepare
  56. @if [ ! -z $(GOOS) ] && [ ! -z $(GOARCH) ] && [ $(CGO_ENABLED) == 0 ];then \
  57. GO111MODULE=on GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags="-s -w -X main.Version=$(VERSION) -X main.LoadFileType=relative" -tags edgex -o kuiper xstream/cli/main.go; \
  58. GO111MODULE=on GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags="-s -w -X main.Version=$(VERSION) -X main.LoadFileType=relative" -tags edgex -o kuiperd xstream/server/main.go; \
  59. else \
  60. GO111MODULE=on CGO_ENABLED=1 go build -ldflags="-s -w -X main.Version=$(VERSION) -X main.LoadFileType=relative" -tags edgex -o kuiper xstream/cli/main.go; \
  61. GO111MODULE=on CGO_ENABLED=1 go build -ldflags="-s -w -X main.Version=$(VERSION) -X main.LoadFileType=relative" -tags edgex -o kuiperd xstream/server/main.go; \
  62. fi
  63. @if [ ! -z $$(which upx) ] && [ "$$(uname -m)" != "aarch64" ]; then upx ./kuiper; upx ./kuiperd; fi
  64. @mv ./kuiper ./kuiperd $(BUILD_PATH)/$(PACKAGE_NAME)/bin
  65. @echo "Build successfully"
  66. .PHONY: pkg_with_edgex
  67. pkg_with_edgex: build_with_edgex
  68. @make real_pkg
  69. .PHONY: real_pkg
  70. real_pkg:
  71. @mkdir -p $(PACKAGES_PATH)
  72. @cd $(BUILD_PATH) && zip -rq $(PACKAGE_NAME).zip $(PACKAGE_NAME)
  73. @cd $(BUILD_PATH) && tar -czf $(PACKAGE_NAME).tar.gz $(PACKAGE_NAME)
  74. @mv $(BUILD_PATH)/$(PACKAGE_NAME).zip $(BUILD_PATH)/$(PACKAGE_NAME).tar.gz $(PACKAGES_PATH)
  75. @echo "Package build success"
  76. .PHONY:cross_prepare
  77. cross_prepare:
  78. @docker run --rm --privileged tonistiigi/binfmt --install all
  79. .PHONY: cross_build
  80. cross_build: cross_prepare
  81. @docker buildx build --no-cache \
  82. --platform=linux/amd64,linux/arm64,linux/arm/v7,linux/386,linux/ppc64le \
  83. -t cross_build \
  84. --output type=tar,dest=cross_build.tar \
  85. -f .ci/Dockerfile .
  86. @mkdir -p $(PACKAGES_PATH)
  87. @tar -xvf cross_build.tar --wildcards linux_amd64/go/kuiper/_packages/ \
  88. && mv linux_amd64/go/kuiper/_packages/* $(PACKAGES_PATH)
  89. @tar -xvf cross_build.tar --wildcards linux_arm64/go/kuiper/_packages/ \
  90. && mv linux_arm64/go/kuiper/_packages/* $(PACKAGES_PATH)
  91. @tar -xvf cross_build.tar --wildcards linux_arm_v7/go/kuiper/_packages/ \
  92. && mv linux_arm_v7/go/kuiper/_packages/* $(PACKAGES_PATH)
  93. @tar -xvf cross_build.tar --wildcards linux_ppc64le/go/kuiper/_packages/ \
  94. && mv linux_ppc64le/go/kuiper/_packages/* $(PACKAGES_PATH)
  95. @tar -xvf cross_build.tar --wildcards linux_386/go/kuiper/_packages/ \
  96. && mv linux_386/go/kuiper/_packages/kuiper-$(VERSION)-$(OS)-x86_64.tar.gz $(PACKAGES_PATH)/kuiper-$(VERSION)-linux-386.tar.gz \
  97. && mv linux_386/go/kuiper/_packages/kuiper-$(VERSION)-$(OS)-x86_64.zip $(PACKAGES_PATH)/kuiper-$(VERSION)-linux-386.zip \
  98. && mv linux_386/go/kuiper/_packages/kuiper-$(VERSION)-$(OS)-x86_64.deb $(PACKAGES_PATH)/kuiper-$(VERSION)-linux-386.deb
  99. @rm -f cross_build.tar
  100. @echo "Cross build success"
  101. .PHONY: cross_build_for_rpm
  102. cross_build_for_rpm: cross_prepare
  103. @docker buildx build --no-cache \
  104. --platform=linux/amd64,linux/arm64,linux/386,linux/ppc64le \
  105. -t cross_build \
  106. --output type=tar,dest=cross_build_for_rpm.tar \
  107. -f .ci/Dockerfile-centos .
  108. @mkdir -p $(PACKAGES_PATH)
  109. @tar -xvf cross_build_for_rpm.tar --wildcards linux_amd64/go/kuiper/_packages/ \
  110. && mv linux_amd64/go/kuiper/_packages/*.rpm $(PACKAGES_PATH)
  111. @tar -xvf cross_build_for_rpm.tar --wildcards linux_arm64/go/kuiper/_packages/ \
  112. && mv linux_arm64/go/kuiper/_packages/*.rpm $(PACKAGES_PATH)
  113. @tar -xvf cross_build_for_rpm.tar --wildcards linux_ppc64le/go/kuiper/_packages/ \
  114. && mv linux_ppc64le/go/kuiper/_packages/*.rpm $(PACKAGES_PATH)
  115. @tar -xvf cross_build_for_rpm.tar --wildcards linux_386/go/kuiper/_packages/ \
  116. && source_pkg=$$(basename linux_386/go/kuiper/_packages/*.rpm |head -1) \
  117. && target_pkg=$$(echo $$source_pkg | sed 's/x86_64/386/g' ) \
  118. && mv linux_386/go/kuiper/_packages/$$source_pkg $(PACKAGES_PATH)/$$target_pkg
  119. @rm -f cross_build_for_rpm.tar
  120. @echo "Cross build rpm packages success"
  121. .PHONE: all_pkgs
  122. all_pkgs: cross_build cross_build_for_rpm
  123. .PHONY: docker
  124. docker:
  125. docker buildx build --no-cache --platform=linux/amd64 -t $(TARGET):$(VERSION) -f deploy/docker/Dockerfile . --load
  126. docker buildx build --no-cache --platform=linux/amd64 -t $(TARGET):$(VERSION)-slim -f deploy/docker/Dockerfile-slim . --load
  127. docker buildx build --no-cache --platform=linux/amd64 -t $(TARGET):$(VERSION)-alpine -f deploy/docker/Dockerfile-alpine . --load
  128. .PHONY:cross_docker
  129. cross_docker: cross_prepare
  130. docker buildx build --no-cache \
  131. --platform=linux/amd64,linux/arm64,linux/arm/v7,linux/386,linux/ppc64le \
  132. -t $(TARGET):$(VERSION) \
  133. -f deploy/docker/Dockerfile . \
  134. --push
  135. docker buildx build --no-cache \
  136. --platform=linux/amd64,linux/arm64,linux/arm/v7,linux/386,linux/ppc64le \
  137. -t $(TARGET):$(VERSION)-slim \
  138. -f deploy/docker/Dockerfile-slim . \
  139. --push
  140. docker buildx build --no-cache \
  141. --platform=linux/amd64,linux/arm64,linux/arm/v7,linux/386,linux/ppc64le \
  142. -t $(TARGET):$(VERSION)-alpine \
  143. -f deploy/docker/Dockerfile-alpine . \
  144. --push
  145. PLUGINS := sinks/file \
  146. sinks/influx \
  147. sinks/zmq \
  148. sinks/image \
  149. sources/random \
  150. sources/zmq \
  151. functions/accumulateWordCount \
  152. functions/countPlusOne \
  153. functions/echo
  154. .PHONY: plugins sinks/tdengine $(PLUGINS)
  155. plugins: cross_prepare sinks/tdengine $(PLUGINS)
  156. sinks/tdengine:
  157. @docker buildx build --no-cache \
  158. --platform=linux/amd64,linux/arm64 \
  159. -t cross_build \
  160. --build-arg VERSION=$(VERSION) \
  161. --build-arg PLUGIN_TYPE=sinks \
  162. --build-arg PLUGIN_NAME=tdengine \
  163. --output type=tar,dest=/tmp/cross_build_plugins_sinks_tdengine.tar \
  164. -f .ci/Dockerfile-plugins .
  165. @mkdir -p _plugins/debian/sinks
  166. @for arch in amd64 arm64; do \
  167. tar -xvf /tmp/cross_build_plugins_sinks_tdengine.tar --wildcards "linux_$${arch}/go/kuiper/plugins/sinks/tdengine/tdengine_$$(echo $${arch%%_*}).zip" \
  168. && mv $$(ls linux_$${arch}/go/kuiper/plugins/sinks/tdengine/tdengine_$$(echo $${arch%%_*}).zip) _plugins/debian/sinks; \
  169. done
  170. @rm -f /tmp/cross_build_plugins_sinks_tdengine.tar
  171. $(PLUGINS): PLUGIN_TYPE = $(word 1, $(subst /, , $@))
  172. $(PLUGINS): PLUGIN_NAME = $(word 2, $(subst /, , $@))
  173. $(PLUGINS):
  174. @docker buildx build --no-cache \
  175. --platform=linux/amd64,linux/arm64,linux/arm/v7,linux/386,linux/ppc64le \
  176. -t cross_build \
  177. --build-arg VERSION=$(VERSION) \
  178. --build-arg PLUGIN_TYPE=$(PLUGIN_TYPE)\
  179. --build-arg PLUGIN_NAME=$(PLUGIN_NAME)\
  180. --output type=tar,dest=/tmp/cross_build_plugins_$(PLUGIN_TYPE)_$(PLUGIN_NAME).tar \
  181. -f .ci/Dockerfile-plugins .
  182. @mkdir -p _plugins/debian/$(PLUGIN_TYPE)
  183. @for arch in amd64 arm64 arm_v7 386 ppc64le; do \
  184. tar -xvf /tmp/cross_build_plugins_$(PLUGIN_TYPE)_$(PLUGIN_NAME).tar --wildcards "linux_$${arch}/go/kuiper/plugins/$(PLUGIN_TYPE)/$(PLUGIN_NAME)/$(PLUGIN_NAME)_$$(echo $${arch%%_*}).zip" \
  185. && mv $$(ls linux_$${arch}/go/kuiper/plugins/$(PLUGIN_TYPE)/$(PLUGIN_NAME)/$(PLUGIN_NAME)_$$(echo $${arch%%_*}).zip) _plugins/debian/$(PLUGIN_TYPE); \
  186. done
  187. @rm -f /tmp/cross_build_plugins_$(PLUGIN_TYPE)_$(PLUGIN_NAME).tar
  188. .PHONY: clean
  189. clean:
  190. @rm -rf cross_build.tar linux_amd64 linux_arm64 linux_arm_v7 linux_ppc64le linux_386
  191. @rm -rf _build _packages _plugins