Makefile 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. NAME=mihomo
  2. BINDIR=bin
  3. BRANCH=$(shell git branch --show-current)
  4. ifeq ($(BRANCH),Alpha)
  5. VERSION=alpha-$(shell git rev-parse --short HEAD)
  6. else ifeq ($(BRANCH),Beta)
  7. VERSION=beta-$(shell git rev-parse --short HEAD)
  8. else ifeq ($(BRANCH),)
  9. VERSION=$(shell git describe --tags)
  10. else
  11. VERSION=$(shell git rev-parse --short HEAD)
  12. endif
  13. BUILDTIME=$(shell date -u)
  14. GOBUILD=CGO_ENABLED=0 go build -tags with_gvisor -trimpath -ldflags '-X "github.com/metacubex/mihomo/constant.Version=$(VERSION)" \
  15. -X "github.com/metacubex/mihomo/constant.BuildTime=$(BUILDTIME)" \
  16. -w -s -buildid='
  17. PLATFORM_LIST = \
  18. darwin-amd64-compatible \
  19. darwin-amd64 \
  20. darwin-arm64 \
  21. linux-amd64-compatible \
  22. linux-amd64 \
  23. linux-armv5 \
  24. linux-armv6 \
  25. linux-armv7 \
  26. linux-arm64 \
  27. linux-mips64 \
  28. linux-mips64le \
  29. linux-mips-softfloat \
  30. linux-mips-hardfloat \
  31. linux-mipsle-softfloat \
  32. linux-mipsle-hardfloat \
  33. linux-riscv64 \
  34. linux-loong64 \
  35. android-arm64 \
  36. freebsd-386 \
  37. freebsd-amd64 \
  38. freebsd-arm64
  39. WINDOWS_ARCH_LIST = \
  40. windows-386 \
  41. windows-amd64-compatible \
  42. windows-amd64 \
  43. windows-arm64 \
  44. windows-arm32v7
  45. all:linux-amd64 linux-arm64\
  46. darwin-amd64 darwin-arm64\
  47. windows-amd64 windows-arm64\
  48. darwin-all: darwin-amd64 darwin-arm64
  49. docker:
  50. GOAMD64=v1 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  51. darwin-amd64:
  52. GOARCH=amd64 GOOS=darwin GOAMD64=v3 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  53. darwin-amd64-compatible:
  54. GOARCH=amd64 GOOS=darwin GOAMD64=v1 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  55. darwin-arm64:
  56. GOARCH=arm64 GOOS=darwin $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  57. linux-386:
  58. GOARCH=386 GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  59. linux-amd64:
  60. GOARCH=amd64 GOOS=linux GOAMD64=v3 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  61. linux-amd64-compatible:
  62. GOARCH=amd64 GOOS=linux GOAMD64=v1 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  63. linux-arm64:
  64. GOARCH=arm64 GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  65. linux-armv5:
  66. GOARCH=arm GOOS=linux GOARM=5 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  67. linux-armv6:
  68. GOARCH=arm GOOS=linux GOARM=6 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  69. linux-armv7:
  70. GOARCH=arm GOOS=linux GOARM=7 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  71. linux-mips-softfloat:
  72. GOARCH=mips GOMIPS=softfloat GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  73. linux-mips-hardfloat:
  74. GOARCH=mips GOMIPS=hardfloat GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  75. linux-mipsle-softfloat:
  76. GOARCH=mipsle GOMIPS=softfloat GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  77. linux-mipsle-hardfloat:
  78. GOARCH=mipsle GOMIPS=hardfloat GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  79. linux-mips64:
  80. GOARCH=mips64 GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  81. linux-mips64le:
  82. GOARCH=mips64le GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  83. linux-riscv64:
  84. GOARCH=riscv64 GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  85. linux-loong64:
  86. GOARCH=loong64 GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  87. android-arm64:
  88. GOARCH=arm64 GOOS=android $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  89. freebsd-386:
  90. GOARCH=386 GOOS=freebsd $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  91. freebsd-amd64:
  92. GOARCH=amd64 GOOS=freebsd GOAMD64=v3 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  93. freebsd-arm64:
  94. GOARCH=arm64 GOOS=freebsd $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
  95. windows-386:
  96. GOARCH=386 GOOS=windows $(GOBUILD) -o $(BINDIR)/$(NAME)-$@.exe
  97. windows-amd64:
  98. GOARCH=amd64 GOOS=windows GOAMD64=v3 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@.exe
  99. windows-amd64-compatible:
  100. GOARCH=amd64 GOOS=windows GOAMD64=v1 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@.exe
  101. windows-arm64:
  102. GOARCH=arm64 GOOS=windows $(GOBUILD) -o $(BINDIR)/$(NAME)-$@.exe
  103. windows-arm32v7:
  104. GOARCH=arm GOOS=windows GOARM=7 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@.exe
  105. gz_releases=$(addsuffix .gz, $(PLATFORM_LIST))
  106. zip_releases=$(addsuffix .zip, $(WINDOWS_ARCH_LIST))
  107. $(gz_releases): %.gz : %
  108. chmod +x $(BINDIR)/$(NAME)-$(basename $@)
  109. gzip -f -S -$(VERSION).gz $(BINDIR)/$(NAME)-$(basename $@)
  110. $(zip_releases): %.zip : %
  111. zip -m -j $(BINDIR)/$(NAME)-$(basename $@)-$(VERSION).zip $(BINDIR)/$(NAME)-$(basename $@).exe
  112. all-arch: $(PLATFORM_LIST) $(WINDOWS_ARCH_LIST)
  113. releases: $(gz_releases) $(zip_releases)
  114. vet:
  115. go test ./...
  116. lint:
  117. golangci-lint run ./...
  118. clean:
  119. rm $(BINDIR)/*
  120. CLANG ?= clang-14
  121. CFLAGS := -O2 -g -Wall -Werror $(CFLAGS)
  122. ebpf: export BPF_CLANG := $(CLANG)
  123. ebpf: export BPF_CFLAGS := $(CFLAGS)
  124. ebpf:
  125. cd component/ebpf/ && go generate ./...