From 7f7741099bd30649adac92551912b97475b9c202 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Thu, 27 Aug 2015 03:28:05 +0900 Subject: [PATCH] make linux-static (#322) --- src/Dockerfile.ubuntu | 2 +- src/Makefile | 65 +++++++++++++++++++++++++++++-------------- 2 files changed, 45 insertions(+), 22 deletions(-) diff --git a/src/Dockerfile.ubuntu b/src/Dockerfile.ubuntu index 4778a6d..d9de120 100644 --- a/src/Dockerfile.ubuntu +++ b/src/Dockerfile.ubuntu @@ -3,7 +3,7 @@ MAINTAINER Junegunn Choi # apt-get RUN apt-get update && apt-get -y upgrade && \ - apt-get install -y --force-yes git curl build-essential libncurses-dev + apt-get install -y --force-yes git curl build-essential libncurses-dev libgpm-dev # Install Go 1.4 RUN cd / && curl \ diff --git a/src/Makefile b/src/Makefile index 2604c3b..33c23ab 100644 --- a/src/Makefile +++ b/src/Makefile @@ -5,8 +5,19 @@ endif UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Darwin) GOOS := darwin + LDFLAGS := +ifdef STATIC +$(error Static linking not possible on OS X) +endif else ifeq ($(UNAME_S),Linux) GOOS := linux +ifdef STATIC + SUFFIX := -static + LDFLAGS := --ldflags '-extldflags "-static -ltinfo -lgpm"' +else + SUFFIX := + LDFLAGS := +endif endif ifneq ($(shell uname -m),x86_64) @@ -16,21 +27,24 @@ endif SOURCES := $(wildcard *.go */*.go) BINDIR := ../bin -BINARY32 := fzf-$(GOOS)_386 -BINARY64 := fzf-$(GOOS)_amd64 +BINARY32 := fzf-$(GOOS)_386$(SUFFIX) +BINARY64 := fzf-$(GOOS)_amd64$(SUFFIX) VERSION = $(shell fzf/$(BINARY64) --version) -RELEASE32 = fzf-$(VERSION)-$(GOOS)_386 -RELEASE64 = fzf-$(VERSION)-$(GOOS)_amd64 +RELEASE32 = fzf-$(VERSION)-$(GOOS)_386$(SUFFIX) +RELEASE64 = fzf-$(VERSION)-$(GOOS)_amd64$(SUFFIX) all: release release: build - cd fzf && \ - cp $(BINARY32) $(RELEASE32) && tar -czf $(RELEASE32).tgz $(RELEASE32) && \ - cp $(BINARY64) $(RELEASE64) && tar -czf $(RELEASE64).tgz $(RELEASE64) && \ - rm $(RELEASE32) $(RELEASE64) + -cd fzf && cp $(BINARY32) $(RELEASE32) && tar -czf $(RELEASE32).tgz $(RELEASE32) + cd fzf && cp $(BINARY64) $(RELEASE64) && tar -czf $(RELEASE64).tgz $(RELEASE64) && \ + rm -f $(RELEASE32) $(RELEASE64) +ifndef STATIC build: test fzf/$(BINARY32) fzf/$(BINARY64) +else +build: test fzf/$(BINARY64) +endif test: go get @@ -42,13 +56,13 @@ uninstall: rm -f $(BINDIR)/fzf $(BINDIR)/$(BINARY64) clean: - cd fzf && rm -f $(BINARY32) $(BINARY64) $(RELEASE32).tgz $(RELEASE64).tgz + cd fzf && rm -f fzf-* fzf/$(BINARY32): $(SOURCES) cd fzf && GOARCH=386 CGO_ENABLED=1 go build -o $(BINARY32) fzf/$(BINARY64): $(SOURCES) - cd fzf && go build -o $(BINARY64) + cd fzf && go build $(LDFLAGS) -o $(BINARY64) $(BINDIR)/fzf: fzf/$(BINARY64) | $(BINDIR) cp -f fzf/$(BINARY64) $(BINDIR) @@ -57,18 +71,27 @@ $(BINDIR)/fzf: fzf/$(BINARY64) | $(BINDIR) $(BINDIR): mkdir -p $@ -# Linux distribution to build fzf on -DISTRO := arch +docker-arch: + docker build -t junegunn/arch-sandbox - < Dockerfile.arch -docker: - docker build -t junegunn/$(DISTRO)-sandbox - < Dockerfile.$(DISTRO) +docker-ubuntu: + docker build -t junegunn/arch-sandbox - < Dockerfile.ubuntu -linux: docker - docker run -i -t -v $(GOPATH):/go junegunn/$(DISTRO)-sandbox \ - /bin/bash -ci 'cd /go/src/github.com/junegunn/fzf/src; make' - -$(DISTRO): docker - docker run -i -t -v $(GOPATH):/go junegunn/$(DISTRO)-sandbox \ +arch: docker-arch + docker run -i -t -v $(GOPATH):/go junegunn/$@-sandbox \ sh -c 'cd /go/src/github.com/junegunn/fzf/src; /bin/bash' -.PHONY: all build release test install uninstall clean docker linux $(DISTRO) +ubuntu: docker-ubuntu + docker run -i -t -v $(GOPATH):/go junegunn/$@-sandbox \ + sh -c 'cd /go/src/github.com/junegunn/fzf/src; /bin/bash' + +linux: docker-arch + docker run -i -t -v $(GOPATH):/go junegunn/arch-sandbox \ + /bin/bash -ci 'cd /go/src/github.com/junegunn/fzf/src; make' + +linux-static: docker-ubuntu + docker run -i -t -v $(GOPATH):/go junegunn/ubuntu-sandbox \ + /bin/bash -ci 'cd /go/src/github.com/junegunn/fzf/src; make STATIC=1' + +.PHONY: all build release test install uninstall clean docker \ + linux linux-static arch ubuntu docker-arch docker-ubuntu