add make target to build static binary
This is useful to generate a binary that can be dropped onto any arbitrary distro, such as CoreOS, without having to worry about glibc or other dependencies. Specifically: CoreOS uses glibc, but it does not have a package manager. It also has a read-only OS (`/usr/`). Thus I'd like to compile a binary that can be dropped into CoreOS and have zero dependencies. * `make build` builds the same as it did before this commit. * `make all` builds both dynamic and static bins, as expected. I struggled with a way to DRY this up _and_ avoid diff churn. In the end, I went with simplicity even though it's not DRY.
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -6,4 +6,5 @@ old/
|
|||||||
tmp/
|
tmp/
|
||||||
*_stringer.go
|
*_stringer.go
|
||||||
mgmt
|
mgmt
|
||||||
|
mgmt.static
|
||||||
rpmbuild/
|
rpmbuild/
|
||||||
|
|||||||
12
Makefile
12
Makefile
@@ -38,7 +38,7 @@ USERNAME := $(shell cat ~/.config/copr 2>/dev/null | grep username | awk -F '='
|
|||||||
SERVER = 'dl.fedoraproject.org'
|
SERVER = 'dl.fedoraproject.org'
|
||||||
REMOTE_PATH = 'pub/alt/$(USERNAME)/$(PROGRAM)'
|
REMOTE_PATH = 'pub/alt/$(USERNAME)/$(PROGRAM)'
|
||||||
|
|
||||||
all: docs
|
all: docs $(PROGRAM).static
|
||||||
|
|
||||||
# show the current version
|
# show the current version
|
||||||
version:
|
version:
|
||||||
@@ -72,6 +72,16 @@ else
|
|||||||
go build -ldflags "-X main.program=$(PROGRAM) -X main.version=$(SVERSION)" -o $(PROGRAM);
|
go build -ldflags "-X main.program=$(PROGRAM) -X main.version=$(SVERSION)" -o $(PROGRAM);
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
$(PROGRAM).static: main.go
|
||||||
|
@echo "Building: $(PROGRAM).static, version: $(SVERSION)..."
|
||||||
|
go generate
|
||||||
|
ifneq ($(OLDGOLANG),)
|
||||||
|
@# avoid equals sign in old golang versions eg in: -X foo=bar
|
||||||
|
go build -a -installsuffix cgo -tags netgo -ldflags '-extldflags "-static" -X main.program $(PROGRAM) -X main.version $(SVERSION)' -o $(PROGRAM).static;
|
||||||
|
else
|
||||||
|
go build -a -installsuffix cgo -tags netgo -ldflags '-extldflags "-static" -X main.program=$(PROGRAM) -X main.version=$(SVERSION)' -o $(PROGRAM).static;
|
||||||
|
endif
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
[ ! -e $(PROGRAM) ] || rm $(PROGRAM)
|
[ ! -e $(PROGRAM) ] || rm $(PROGRAM)
|
||||||
rm -f *_stringer.go # generated by `go generate`
|
rm -f *_stringer.go # generated by `go generate`
|
||||||
|
|||||||
Reference in New Issue
Block a user