Makefile 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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 cli 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 server 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 cli xstream/cli/main.go; \
  46. GO111MODULE=on CGO_ENABLED=1 go build -ldflags="-s -w -X main.Version=$(VERSION) -X main.LoadFileType=relative" -o server xstream/server/main.go; \
  47. fi
  48. @if [ ! -z $$(which upx) ] && [ "$$(uname -m)" != "aarch64" ]; then upx ./cli; upx ./server; fi
  49. @mv ./cli ./server $(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 cli 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 server 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 cli 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 server xstream/server/main.go; \
  62. fi
  63. @if [ ! -z $$(which upx) ] && [ "$$(uname -m)" != "aarch64" ]; then upx ./cli; upx ./server; fi
  64. @mv ./cli ./server $(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 multiarch/qemu-user-static --reset -p yes
  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/*.deb $(PACKAGES_PATH)
  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 build --no-cache -t $(TARGET):$(VERSION) -f deploy/docker/Dockerfile .
  126. docker build --no-cache -t $(TARGET):$(VERSION)-slim -f deploy/docker/Dockerfile-slim .
  127. docker build --no-cache -t $(TARGET):$(VERSION)-alpine -f deploy/docker/Dockerfile-alpine .
  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. .PHONY: clean
  146. clean:
  147. @rm -rf cross_build.tar linux_amd64 linux_arm64 linux_arm_v7 linux_ppc64le linux_386
  148. @rm -rf _build _packages