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