github.com/energicryptocurrency/go-energi@v1.1.7/Makefile.release (about) 1 2 # Thanks to https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63#file-go-os-arch-md 3 # https://github.com/golang/go/wiki/GoArm 4 5 MAKEFLAGS ?= -j4 6 7 TARGET_TOOLS = 8 TARGET_TOOLS += geth 9 TARGET_TOOLS += abigen 10 TARGET_TOOLS += bootnode 11 TARGET_TOOLS += clef 12 TARGET_TOOLS += evm 13 TARGET_TOOLS += rlpdump 14 15 RELEASE_GOFLAGS = -mod=mod -gcflags -dwarf=0 -ldflags "-s -w" 16 17 RELEASE_MAIN = energi3 18 RELEASE_RAW_VER = $(shell git describe HEAD || echo "v0.0.0") 19 RELEASE_VER = $(RELEASE_MAIN)-$(RELEASE_RAW_VER) 20 21 .PHONY: release release-tools 22 .PHONY: release-linux release-windows release-macos 23 24 release: release-linux release-windows 25 release-tools: 26 -sudo -n dpkg --add-architecture i386 27 -sudo -n apt-get update 28 -sudo -n apt-get -yq --no-install-suggests --no-install-recommends install \ 29 gcc-multilib-i686-linux-gnu gcc-i686-linux-gnu libc6-dev-i386-amd64-cross \ 30 g++-multilib-i686-linux-gnu g++-i686-linux-gnu \ 31 mingw-w64 binutils-mingw-w64 gcc-mingw-w64 \ 32 wine32-development wine64-development wine64-development-tools \ 33 nsis nsis-pluginapi \ 34 gcc-arm-linux-gnueabi gcc-arm-linux-gnueabi libc6-dev-armel-cross \ 35 g++-arm-linux-gnueabi g++-arm-linux-gnueabi \ 36 gcc-arm-linux-gnueabihf gcc-arm-linux-gnueabihf libc6-dev-armhf-cross \ 37 g++-arm-linux-gnueabihf g++-arm-linux-gnueabihf \ 38 gcc-aarch64-linux-gnu libc6-dev-arm64-cross \ 39 g++-aarch64-linux-gnu \ 40 zip dos2unix 41 42 43 .PHONY: release-linux-common 44 .PHONY: release-linux-amd64 release-linux-i686 45 .PHONY: release-linux-armv6 release-linux-armv7 release-linux-armv8 46 47 release-linux: release-linux-amd64 release-linux-i686 48 release-linux: release-linux-armv6 release-linux-armv7 release-linux-armv8 49 50 RELEASE_LINUX_COMMON := make -f Makefile.release release-linux-common --no-print-directory 51 release-linux-common: 52 @echo Building $(RELEASE_TARGET) 53 @rm -rf build/release/$(RELEASE_TARGET) 54 @mkdir -p build/release/$(RELEASE_TARGET) 55 @for t in $(TARGET_TOOLS); do \ 56 export GOCACHE=$(CURDIR)/build/release/$(RELEASE_TARGET)/cache; \ 57 export PKG_CONFIG_PATH=/usr/$(HOST)/lib/pkgconfig; \ 58 export CC=$(HOST)-gcc-11; \ 59 export CXX=$(HOST)-g++-11; \ 60 export CGO_ENABLED=1; \ 61 go build -o build/release/$(RELEASE_TARGET)/bin/$$t $(RELEASE_GOFLAGS) ./cmd/$$t; \ 62 done 63 @mv build/release/$(RELEASE_TARGET)/bin/geth build/release/$(RELEASE_TARGET)/bin/$(RELEASE_MAIN) 64 @cp COPYING build/release/$(RELEASE_TARGET)/ 65 @tar czf build/release/$(RELEASE_TARGET)/$(RELEASE_TARGET).tgz \ 66 -C build/release $(RELEASE_TARGET)/bin/$(RELEASE_MAIN) $(RELEASE_TARGET)/COPYING 67 @tar czf build/release/$(RELEASE_TARGET)/$(RELEASE_TARGET)-alltools.tgz \ 68 -C build/release $(RELEASE_TARGET)/bin/ $(RELEASE_TARGET)/COPYING 69 @ls build/release/$(RELEASE_TARGET)/$(RELEASE_TARGET)*.tgz 70 71 release-linux-amd64: 72 @RELEASE_TARGET=$(RELEASE_VER)-linux-amd64 \ 73 GOOS=linux GOARCH=amd64 HOST=x86_64-linux-gnu $(RELEASE_LINUX_COMMON) 74 release-linux-i686: 75 @RELEASE_TARGET=$(RELEASE_VER)-linux-i686 \ 76 GOOS=linux GOARCH=386 HOST=i686-linux-gnu $(RELEASE_LINUX_COMMON) 77 release-linux-armv5: 78 @RELEASE_TARGET=$(RELEASE_VER)-linux-armv5 \ 79 CFLAGS="-march=armv5" CXXFLAGS="-march=armv5" \ 80 CGO_CFLAGS="-march=armv5" CGO_CXXFLAGS="-march=armv5" \ 81 GOOS=linux GOARCH=arm GOARM=5 HOST=arm-linux-gnueabi $(RELEASE_LINUX_COMMON) 82 release-linux-armv6: 83 @RELEASE_TARGET=$(RELEASE_VER)-linux-armv6 \ 84 CFLAGS="-march=armv6" CXXFLAGS="-march=armv6" \ 85 CGO_CFLAGS="-march=armv6" CGO_CXXFLAGS="-march=armv6" \ 86 GOOS=linux GOARCH=arm GOARM=6 HOST=arm-linux-gnueabi $(RELEASE_LINUX_COMMON) 87 release-linux-armv7: 88 @RELEASE_TARGET=$(RELEASE_VER)-linux-armv7 \ 89 CFLAGS="-march=armv7-a -fPIC" CXXFLAGS="-march=armv7-a -fPIC" \ 90 CGO_CFLAGS="-march=armv7-a -fPIC" CGO_CXXFLAGS="-march=armv7-a -fPIC" \ 91 GOOS=linux GOARCH=arm GOARM=7 HOST=arm-linux-gnueabi $(RELEASE_LINUX_COMMON) 92 release-linux-armv8: 93 @RELEASE_TARGET=$(RELEASE_VER)-linux-armv8 \ 94 GOOS=linux GOARCH=arm64 HOST=aarch64-linux-gnu $(RELEASE_LINUX_COMMON) 95 96 97 .PHONY: release-windows-common 98 .PHONY: release-windows-amd64 release-windows-i686 99 100 release-windows: release-windows-amd64 release-windows-i686 101 102 RELEASE_WINDOWS_COMMON := make -f Makefile.release release-windows-common --no-print-directory 103 RELEASE_RENDER_NSIS := sed \ 104 -e 's,{{.License}},COPYING.txt,g' \ 105 -e 's,{{.EnergiCore}},bin/energi3.exe,g' \ 106 -e 's,{{.EnergiCoreIcon}},energi-icon.ico,g' 107 # -e 's,{{range .DevTools}}file {{.}},file bin/abigen.exe\n file bin/bootnode.exe\n file bin/clef.exe\n file bin/evm.exe\n file bin/rlpdump.exe,g' \ 108 # -e 's,{{range $$}}Delete $$INSTDIR\\{{.}},Delete \$$INSTDIR\abigen.exe\n Delete \$$INSTDIR\bootnode.exe\n Delete \$$INSTDIR\clef.exe\n Delete \$$INSTDIR\evm.exe\n Delete $$INSTDIR\rlpdump.exe,g' \ 109 # -e 's,{{end}},,g' 110 # The above could be done better... 111 112 release-windows-common: 113 @echo Building $(RELEASE_TARGET) 114 @rm -rf build/release/$(RELEASE_TARGET) 115 @mkdir -p build/release/$(RELEASE_TARGET) 116 @cp energi/common/energi-icon.ico build/release/$(RELEASE_TARGET)/ 117 @for t in $(TARGET_TOOLS); do \ 118 export GOCACHE=$(CURDIR)/build/release/$(RELEASE_TARGET)/cache; \ 119 export PREFIX=/usr/$(HOST); \ 120 export PKG_CONFIG_PATH=/usr/$(HOST)/lib/pkgconfig; \ 121 export CC=$(HOST)-gcc-10-posix; \ 122 export CXX=$(HOST)-g++-10-posix; \ 123 export CGO_CFLAGS="-D_WIN32_WINNT=0x0601"; \ 124 export CGO_CXXFLAGS="$$CGO_CXXFLAGS"; \ 125 export CGO_ENABLED=1; \ 126 go build -o build/release/$(RELEASE_TARGET)/bin/$$t.exe $(RELEASE_GOFLAGS) ./cmd/$$t; \ 127 done 128 @mv build/release/$(RELEASE_TARGET)/bin/geth.exe build/release/$(RELEASE_TARGET)/bin/$(RELEASE_MAIN).exe 129 @unix2dos -n COPYING build/release/$(RELEASE_TARGET)/COPYING.txt 130 @$(RELEASE_RENDER_NSIS) < build/nsis.geth.nsi > build/release/$(RELEASE_TARGET)/energi3.nsi 131 @$(RELEASE_RENDER_NSIS) < build/nsis.install.nsh > build/release/$(RELEASE_TARGET)/install.nsh 132 @$(RELEASE_RENDER_NSIS) < build/nsis.uninstall.nsh > build/release/$(RELEASE_TARGET)/uninstall.nsh 133 @$(RELEASE_RENDER_NSIS) < build/nsis.pathupdate.nsh > build/release/$(RELEASE_TARGET)/PathUpdate.nsh 134 @$(RELEASE_RENDER_NSIS) < build/nsis.envvarupdate.nsh > build/release/$(RELEASE_TARGET)/EnvVarUpdate.nsh 135 @cp build/nsis.simplefc.dll build/release/$(RELEASE_TARGET)/SimpleFC.dll 136 @makensis \ 137 -DOUTPUTFILE=$(RELEASE_TARGET)-setup.exe \ 138 -DMAJORVERSION=$(word 1,$(subst ., ,$(RELEASE_RAW_VER))) \ 139 -DMINORVERSION=$(word 2,$(subst ., ,$(RELEASE_RAW_VER))) \ 140 -DBUILDVERSION=$(word 3,$(subst ., ,$(RELEASE_RAW_VER))) \ 141 -DARCH=$(GOARCH) \ 142 build/release/$(RELEASE_TARGET)/energi3.nsi 143 @cd build/release && zip $(RELEASE_TARGET)/$(RELEASE_TARGET).zip \ 144 $(RELEASE_TARGET)/bin/$(RELEASE_MAIN).exe $(RELEASE_TARGET)/COPYING.txt $(RELEASE_TARGET)/energi-icon.ico 145 @cd build/release && zip $(RELEASE_TARGET)/$(RELEASE_TARGET)-alltools.zip \ 146 -r $(RELEASE_TARGET)/bin/ $(RELEASE_TARGET)/COPYING.txt 147 @ls build/release/$(RELEASE_TARGET)/$(RELEASE_TARGET)*.zip \ 148 build/release/$(RELEASE_TARGET)/$(RELEASE_TARGET)-setup.exe 149 150 release-windows-amd64: 151 @RELEASE_TARGET=$(RELEASE_VER)-windows-amd64 \ 152 GOOS=windows GOARCH=amd64 HOST=x86_64-w64-mingw32 $(RELEASE_WINDOWS_COMMON) 153 release-windows-i686: 154 @RELEASE_TARGET=$(RELEASE_VER)-windows-i686 \ 155 GOOS=windows GOARCH=386 HOST=i686-w64-mingw32 $(RELEASE_WINDOWS_COMMON) 156 157 158 159 .PHONY: release-macos-common 160 .PHONY: release-macos-amd64 161 162 release-macos: release-macos-amd64 163 164 RELEASE_MACOS_COMMON := make -f Makefile.release release-macos-common --no-print-directory 165 release-macos-common: 166 @echo Building $(RELEASE_TARGET) 167 @rm -rf build/release/$(RELEASE_TARGET) 168 @mkdir -p build/release/$(RELEASE_TARGET) 169 @for t in $(TARGET_TOOLS); do \ 170 export GOCACHE=$(CURDIR)/build/release/$(RELEASE_TARGET)/cache; \ 171 export CC=clang; \ 172 export CXX=clang++; \ 173 export CGO_CFLAGS="-mmacosx-version-min=10.15"; \ 174 export CGO_CXXFLAGS="$$CGO_CXXFLAGS"; \ 175 export CGO_ENABLED=1; \ 176 go build -o build/release/$(RELEASE_TARGET)/bin/$$t $(RELEASE_GOFLAGS) --ldflags="-s" ./cmd/$$t; \ 177 done 178 @mv build/release/$(RELEASE_TARGET)/bin/geth build/release/$(RELEASE_TARGET)/bin/$(RELEASE_MAIN) 179 @cp COPYING build/release/$(RELEASE_TARGET)/ 180 @tar czf build/release/$(RELEASE_TARGET)/$(RELEASE_TARGET).tgz \ 181 -C build/release $(RELEASE_TARGET)/bin/$(RELEASE_MAIN) $(RELEASE_TARGET)/COPYING 182 @tar czf build/release/$(RELEASE_TARGET)/$(RELEASE_TARGET)-alltools.tgz \ 183 -C build/release $(RELEASE_TARGET)/bin/ $(RELEASE_TARGET)/COPYING 184 @ls build/release/$(RELEASE_TARGET)/$(RELEASE_TARGET)*.tgz 185 186 release-macos-amd64: 187 @RELEASE_TARGET=$(RELEASE_VER)-macos-amd64 \ 188 GOOS=darwin GOARCH=amd64 HOST=x86_64-apple-darwin $(RELEASE_MACOS_COMMON) 189 190 191 RELEASE_REPO := s3://download.energi.software/releases/energi3 192 193 .PHONY: release-upload 194 release-upload: 195 @find build/release/ -name '*.tgz' -or -name '*.zip' -or -name '*-setup.exe' | while read fn; do \ 196 dst=$(RELEASE_REPO)/$(RELEASE_RAW_VER)/$$(basename $$fn); \ 197 aws s3 ls "$$dst" >/dev/null || aws s3 cp "$$fn" "$$dst" --acl public-read || exit $$?; \ 198 done 199 @find build/release/ -name '*.tgz' -or -name '*.zip' -or -name '*-setup.exe' | xargs sha256sum 200 201 .PHONY: release-sign release-sign-download release-sign-upload 202 release-sign-download: 203 @aws s3 sync $(RELEASE_REPO)/$(RELEASE_RAW_VER) build/release/sign 204 @cd build/release/sign && ls | xargs sha256sum 205 206 release-sign: release-sign-download 207 @for f in build/release/sign/*; do gpg --sign --detach $$f; done 208 209 release-sign-upload: 210 @aws s3 sync build/release/sign $(RELEASE_REPO)/$(RELEASE_RAW_VER) --acl public-read