Skip to content

Commit ba8f7de

Browse files
committed
more operating system releases
1 parent f079d3d commit ba8f7de

File tree

2 files changed

+152
-20
lines changed

2 files changed

+152
-20
lines changed

Makefile

Lines changed: 151 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,159 @@
1-
LAST_TAG := $(shell git describe --abbrev=0 --always --tags)
2-
BUILD := $(shell git rev-parse $(LAST_TAG))
1+
APPNAME?=ip-range-to-cidr
32

4-
BINARY := ip-range-to-cidr
5-
UNIXBINARY := $(BINARY)
6-
WINBINARY := $(UNIXBINARY).exe
7-
BUILDDIR := build
3+
# version from last tag
4+
VERSION := $(shell git describe --abbrev=0 --always --tags)
5+
BUILD := $(shell git rev-parse $(VERSION))
6+
BUILDDATE := $(shell git log -1 --format=%aI $(VERSION))
7+
BUILDFILES?=$$(find . -mindepth 1 -maxdepth 1 -type f \( -iname "*${APPNAME}-v*" -a ! -iname "*.shasums" \))
8+
LDFLAGS := -ldflags "-s -w -X=main.VERSION=$(VERSION) -X=main.BUILD=$(BUILD) -X=main.BUILDDATE=$(BUILDDATE)"
9+
RELEASETMPDIR := $(shell mktemp -d -t ${APPNAME}-rel-XXXXXX)
10+
APPANDVER := ${APPNAME}-$(VERSION)
11+
RELEASETMPAPPDIR := $(RELEASETMPDIR)/$(APPANDVER)
812

9-
LINUXRELEASE := $(BINARY)-$(LAST_TAG)-linux-x64.tar.gz
10-
WINRELEASE := $(BINARY)-$(LAST_TAG)-windows-x64.zip
13+
UPXFLAGS := -v -9
14+
XZCOMPRESSFLAGS := --verbose --keep --compress --threads 0 --extreme -9
1115

12-
LDFLAGS := -ldflags "-s -w -X=main.VERSION=$(LAST_TAG) -X=main.BUILD=$(BUILD)"
16+
# https://golang.org/doc/install/source#environment
17+
LINUX_ARCHS := amd64 arm arm64 ppc64 ppc64le
18+
WINDOWS_ARCHS := amd64
19+
DARWIN_ARCHS := amd64
20+
FREEBSD_ARCHS := amd64 arm
21+
NETBSD_ARCHS := amd64 arm
22+
OPENBSD_ARCHS := amd64 arm arm64
1323

14-
bin:
15-
GOOS=linux GOARCH=amd64 go build $(LDFLAGS) -v -o $(BUILDDIR)/$(UNIXBINARY)
16-
upx -v -9 $(BUILDDIR)/$(UNIXBINARY)
24+
default: build
1725

18-
bin-windows:
19-
GOOS=windows GOARCH=amd64 go build $(LDFLAGS) -v -o $(BUILDDIR)/$(WINBINARY)
20-
upx -v -9 $(BUILDDIR)/$(WINBINARY)
26+
build:
27+
@echo "GO BUILD..."
28+
@CGO_ENABLED=0 go build $(LDFLAGS) -v -o ./bin/${APPNAME} .
2129

22-
release:
23-
cd $(BUILDDIR); tar cvzf $(LINUXRELEASE) $(UNIXBINARY)
30+
linux-build:
31+
@for arch in $(LINUX_ARCHS); do \
32+
echo "GNU/Linux build... $$arch"; \
33+
CGO_ENABLED=0 GOOS=linux GOARCH=$$arch go build $(LDFLAGS) -v -o ./bin/linux-$$arch/${APPNAME} . 2>/dev/null; \
34+
done
2435

25-
release-windows:
26-
cd $(BUILDDIR); zip -v -9 $(WINRELEASE) $(WINBINARY)
36+
darwin-build:
37+
@for arch in $(DARWIN_ARCHS); do \
38+
echo "Darwin build... $$arch"; \
39+
CGO_ENABLED=0 GOOS=darwin GOARCH=$$arch go build $(LDFLAGS) -v -o ./bin/darwin-$$arch/${APPNAME} . ; \
40+
done
2741

28-
.PHONY: all clean test
42+
freebsd-build:
43+
@for arch in $(FREEBSD_ARCHS); do \
44+
echo "FreeBSD build... $$arch"; \
45+
CGO_ENABLED=0 GOOS=freebsd GOARCH=$$arch go build $(LDFLAGS) -v -o ./bin/freebsd-$$arch/${APPNAME} . 2>/dev/null; \
46+
done
47+
48+
netbsd-build:
49+
@for arch in $(NETBSD_ARCHS); do \
50+
echo "NetBSD build... $$arch"; \
51+
CGO_ENABLED=0 GOOS=netbsd GOARCH=$$arch go build $(LDFLAGS) -v -o ./bin/netbsd-$$arch/${APPNAME} . 2>/dev/null; \
52+
done
53+
54+
openbsd-build:
55+
@for arch in $(OPENBSD_ARCHS); do \
56+
echo "OpenBSD build... $$arch"; \
57+
CGO_ENABLED=0 GOOS=openbsd GOARCH=$$arch go build $(LDFLAGS) -v -o ./bin/openbsd-$$arch/${APPNAME} . 2>/dev/null; \
58+
done
59+
60+
windows-build:
61+
@for arch in $(WINDOWS_ARCHS); do \
62+
echo "MS Windows build... $$arch"; \
63+
CGO_ENABLED=0 GOOS=windows GOARCH=$$arch go build $(LDFLAGS) -v -o ./bin/windows-$$arch/${APPNAME}.exe . 2>/dev/null; \
64+
done
65+
66+
# Compress executables
67+
upx-pack:
68+
@upx $(UPXFLAGS) ./bin/linux-amd64/${APPNAME}
69+
@upx $(UPXFLAGS) ./bin/linux-arm/${APPNAME}
70+
@upx $(UPXFLAGS) ./bin/windows-amd64/${APPNAME}.exe
71+
72+
release: linux-build darwin-build freebsd-build openbsd-build netbsd-build windows-build upx-pack compress-everything shasums
73+
@echo "release done..."
74+
75+
shasums:
76+
@echo "Checksumming..."
77+
@pushd "release/${VERSION}" && shasum -a 256 $(BUILDFILES) > $(APPANDVER).shasums
78+
79+
# Copy common files to release directory
80+
# Creates $(APPNAME)-$(VERSION) directory prefix where everything will be copied by compress-$OS targets
81+
copycommon:
82+
@echo "Copying common files to temporary release directory '$(RELEASETMPAPPDIR)'.."
83+
@mkdir -p "$(RELEASETMPAPPDIR)/bin"
84+
@cp -v "./LICENSE" "$(RELEASETMPAPPDIR)"
85+
@cp -v "./README.md" "$(RELEASETMPAPPDIR)"
86+
@mkdir --parents "$(PWD)/release/${VERSION}"
87+
88+
# Compress files: FreeBSD
89+
compress-freebsd:
90+
@for arch in $(FREEBSD_ARCHS); do \
91+
echo "FreeBSD xz... $$arch"; \
92+
cp -v "$(PWD)/bin/freebsd-$$arch/${APPNAME}" "$(RELEASETMPAPPDIR)/bin"; \
93+
cd "$(RELEASETMPDIR)"; \
94+
tar --numeric-owner --owner=0 --group=0 -cf - . | xz $(XZCOMPRESSFLAGS) - > "$(PWD)/release/${VERSION}/$(APPANDVER)-freebsd-$$arch.tar.xz" ; \
95+
rm "$(RELEASETMPAPPDIR)/bin/${APPNAME}"; \
96+
done
97+
98+
# Compress files: OpenBSD
99+
compress-openbsd:
100+
@for arch in $(OPENBSD_ARCHS); do \
101+
echo "OpenBSD xz... $$arch"; \
102+
cp -v "$(PWD)/bin/openbsd-$$arch/${APPNAME}" "$(RELEASETMPAPPDIR)/bin"; \
103+
cd "$(RELEASETMPDIR)"; \
104+
tar --numeric-owner --owner=0 --group=0 -cf - . | xz $(XZCOMPRESSFLAGS) - > "$(PWD)/release/${VERSION}/$(APPANDVER)-openbsd-$$arch.tar.xz" ; \
105+
rm "$(RELEASETMPAPPDIR)/bin/${APPNAME}"; \
106+
done
107+
108+
# Compress files: NetBSD
109+
compress-netbsd:
110+
@for arch in $(NETBSD_ARCHS); do \
111+
echo "NetBSD xz... $$arch"; \
112+
cp -v "$(PWD)/bin/netbsd-$$arch/${APPNAME}" "$(RELEASETMPAPPDIR)/bin"; \
113+
cd "$(RELEASETMPDIR)"; \
114+
tar --numeric-owner --owner=0 --group=0 -cf - . | xz $(XZCOMPRESSFLAGS) - > "$(PWD)/release/${VERSION}/$(APPANDVER)-netbsd-$$arch.tar.xz" ; \
115+
rm "$(RELEASETMPAPPDIR)/bin/${APPNAME}"; \
116+
done
117+
118+
# Compress files: GNU/Linux
119+
compress-linux:
120+
@for arch in $(LINUX_ARCHS); do \
121+
echo "GNU/Linux tar... $$arch"; \
122+
cp -v "$(PWD)/bin/linux-$$arch/${APPNAME}" "$(RELEASETMPAPPDIR)/bin"; \
123+
cd "$(RELEASETMPDIR)"; \
124+
tar --numeric-owner --owner=0 --group=0 -zcvf "$(PWD)/release/${VERSION}/$(APPANDVER)-linux-$$arch.tar.gz" . ; \
125+
rm "$(RELEASETMPAPPDIR)/bin/${APPNAME}"; \
126+
done
127+
128+
# Compress files: Darwin
129+
compress-darwin:
130+
@for arch in $(DARWIN_ARCHS); do \
131+
echo "Darwin tar... $$arch"; \
132+
cp -v "$(PWD)/bin/darwin-$$arch/${APPNAME}" "$(RELEASETMPAPPDIR)/bin"; \
133+
cd "$(RELEASETMPDIR)"; \
134+
tar --owner=0 --group=0 -zcvf "$(PWD)/release/${VERSION}/$(APPANDVER)-darwin-$$arch.tar.gz" . ; \
135+
rm "$(RELEASETMPAPPDIR)/bin/${APPNAME}"; \
136+
done
137+
138+
# Compress files: Microsoft Windows
139+
compress-windows:
140+
@for arch in $(WINDOWS_ARCHS); do \
141+
echo "MS Windows zip... $$arch"; \
142+
cp -v "$(PWD)/bin/windows-$$arch/${APPNAME}.exe" "$(RELEASETMPAPPDIR)/bin"; \
143+
cd "$(RELEASETMPAPPDIR)"; \
144+
mv "LICENSE" "LICENSE.txt" && \
145+
pandoc --standalone --to rtf --output LICENSE.rtf LICENSE.txt && \
146+
rm "LICENSE.txt" ; \
147+
cd "$(RELEASETMPDIR)" ; \
148+
zip -v -9 -r -o -9 "$(PWD)/release/${VERSION}/$(APPANDVER)-windows-$$arch.zip" . ; \
149+
rm "$(RELEASETMPAPPDIR)/LICENSE.rtf"; \
150+
cp -v "$(PWD)/LICENSE" "$(RELEASETMPAPPDIR)" ; \
151+
rm "$(RELEASETMPAPPDIR)/bin/${APPNAME}.exe"; \
152+
done
153+
154+
# Move all to temporary directory and compress with common files
155+
compress-everything: copycommon compress-linux compress-windows compress-freebsd compress-netbsd compress-openbsd
156+
@echo "$@ ..."
157+
rm -rf "$(RELEASETMPDIR)/*"
158+
159+
.PHONY: all clean test default

main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
var VERSION = `0.0.0`
1212
var BUILD = `dev`
13+
var BUILDDATE = `0000-00-00T00:00:00+00:00`
1314

1415
const AUTHOR = `Pekka Järvinen`
1516

0 commit comments

Comments
 (0)