Makefile 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. ARCH=$(shell uname -m)
  2. VERSION?=1.8.15
  3. GO_VERSION:=1.22.5
  4. SHELL:=/bin/bash
  5. GO_BASE_IMAGE=golang
  6. GO_IMAGE?=$(GO_BASE_IMAGE):$(GO_VERSION)-bookworm
  7. EPOCH?=
  8. REPO?=https://github.com/teddysun/xray-plugin.git
  9. REF?=v1.8.15
  10. CHOWN:=docker run --rm -v $(CURDIR):/v -w /v alpine chown
  11. ifdef BUILD_IMAGE
  12. BUILD_IMAGE_FLAG=--build-arg $(BUILD_IMAGE)
  13. endif
  14. COMMON_FILES=common
  15. BUILD?=DOCKER_BUILDKIT=1 \
  16. docker build \
  17. $(BUILD_IMAGE_FLAG) \
  18. --build-arg GO_IMAGE=$(GO_IMAGE) \
  19. --build-arg COMMON_FILES=$(COMMON_FILES) \
  20. -t debbuild-$@/$(ARCH) \
  21. -f $@/Dockerfile \
  22. .
  23. # Additional flags may be necessary at some point
  24. RUN_FLAGS=
  25. RUN?=docker run --rm -h buildbot \
  26. -e PLATFORM \
  27. -e EPOCH='$(EPOCH)' \
  28. -e DEB_VERSION=$(VERSION) \
  29. -e VERSION=$(VERSION) \
  30. -v $(CURDIR)/debbuild/$@:/build \
  31. $(RUN_FLAGS) \
  32. debbuild-$@/$(ARCH)
  33. DEBIAN_VERSIONS ?= debian-buster debian-bullseye debian-bookworm
  34. UBUNTU_VERSIONS ?= ubuntu-focal ubuntu-jammy ubuntu-noble
  35. DISTROS := $(DEBIAN_VERSIONS) $(UBUNTU_VERSIONS)
  36. # Taken from: https://www.cmcrossroads.com/article/printing-value-makefile-variable
  37. print-% : ; @echo $($*)
  38. .PHONY: help
  39. help: ## show make targets
  40. @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
  41. .PHONY: checkout-src
  42. checkout-src: src/github.com/teddysun/xray-plugin
  43. ./checkout.sh src/github.com/teddysun/xray-plugin "$(REF)"
  44. src/github.com/teddysun/xray-plugin:
  45. git init $@
  46. git -C $@ remote add origin "$(REPO)"
  47. .PHONY: checkout
  48. checkout: checkout-src ## checkout source at the given reference(s)
  49. .PHONY: clean
  50. clean: ## remove build artifacts
  51. [ ! -d debbuild ] || $(CHOWN) -R $(shell id -u):$(shell id -g) debbuild
  52. $(RM) -r debbuild
  53. [ ! -d sources ] || $(CHOWN) -R $(shell id -u):$(shell id -g) sources
  54. $(RM) -r sources
  55. -docker builder prune -f --filter until=24h
  56. .PHONY: deb
  57. deb: ubuntu debian ## build all deb packages
  58. .PHONY: ubuntu
  59. ubuntu: $(UBUNTU_VERSIONS) ## build all ubuntu deb packages
  60. .PHONY: debian
  61. debian: $(DEBIAN_VERSIONS) ## build all debian deb packages
  62. .PHONY: $(DISTROS)
  63. $(DISTROS): sources
  64. @echo "== Building packages for $@ =="
  65. mkdir -p "debbuild/$@"
  66. $(BUILD)
  67. $(RUN)
  68. $(CHOWN) -R $(shell id -u):$(shell id -g) "debbuild/$@"
  69. .PHONY: sources
  70. sources: sources/xray-plugin.tgz
  71. sources/xray-plugin.tgz:
  72. mkdir -p $(@D)
  73. docker run --rm -w /v \
  74. -v $(realpath $(CURDIR)/src/github.com/teddysun/xray-plugin):/xray-plugin \
  75. -v $(CURDIR)/$(@D):/v \
  76. alpine \
  77. tar -C / -c -z -f /v/xray-plugin.tgz --exclude .git xray-plugin
  78. # See ARCHES in common.mk. Could not figure out how to match both distro and arch.
  79. BUNDLES:=$(addsuffix .tar.gz,$(addprefix debbuild/bundles-%-,$(ARCHES)))
  80. $(BUNDLES): %
  81. tar czf $@ --transform="s|^debbuild/\(.*\)|bundles/$(VERSION)/build-deb/\1|" debbuild/$*