-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
65 lines (47 loc) · 1.7 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
MAIN := github.com/kentik/libkflow
CLIB := $(MAIN)/cmd/libkflow
PKGS := ./ api chf cmd/libkflow
CFLAGS += -std=c99
OS := $(shell go env GOOS)
ARCH := $(shell go env GOARCH)
TARGET := $(OS)-$(ARCH)
VERSION ?= $(shell git describe --tags --always --dirty)
WORK := $(CURDIR)/out/$(TARGET)
ARCHIVE := libkflow-$(VERSION)-$(TARGET).tar.gz
ARTIFACTS := \
$(WORK)/libkflow.a \
$(WORK)/server \
$(WORK)/demo \
$(CURDIR)/kflow.h \
$(CURDIR)/c/demo.c
ifeq ($(OS), darwin)
LDFLAGS += -framework Security -framework CoreFoundation
else ifeq ($(OS), linux)
LDFLAGS += -lpthread -fPIC
endif
file-types = .GoFiles .CgoFiles .HFiles
find-files = $(foreach f,$(file-types),$(call list-files,$f,$1))
list-files = $(shell go list -f '{{range $$f := $1}}$2/{{$$f}} {{end}}' $(MAIN)/$2)
# for each package in $(PKGS) define a variable named SRC_$(pkg)
# containing all of the files in that package.
$(foreach pkg,$(PKGS),$(eval SRC_$(pkg) := $(call find-files,$(pkg))))
# define a variable named SRC containing all files in all packages.
$(foreach pkg,$(PKGS),$(eval SRC += $(SRC_$(pkg))))
$(ARCHIVE): $(ARTIFACTS)
$(info building $(ARCHIVE))
@tar czf $@ $(foreach f,$^,-C $(dir $f) $(notdir $f))
$(WORK)/libkflow.a: $(SRC)
go build -o $@ -buildmode=c-archive -ldflags="-X $(MAIN).Version=$(VERSION)" $(CLIB)
$(WORK)/server: $(SRC)
go build -o $@ -ldflags="-linkmode external" $(MAIN)/cmd/server
$(WORK)/demo: kflow.h $(CURDIR)/c/demo.c $(WORK)/libkflow.a
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ -I $(<D) $(filter-out $<,$^)
test:
@go test -v $(shell go list ./... | grep -v /vendor/)
clean:
rm -f *.tar.gz
rm -rf out/*
.PHONY: test
.PHONY: clean
.SUFFIXES:
VPATH = $(GOPATH)/src