Makefile 7.7 KB

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