Makefile 7.8 KB

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