Makefile 4.33 KB
Newer Older
Jordan Sissel's avatar
Jordan Sissel committed
1
VERSION=0.0.5
Jordan Sissel's avatar
Jordan Sissel committed
2

3 4 5 6 7 8 9 10 11
# By default, all dependencies (zeromq, etc) will be downloaded and installed
# locally. You can change this if you are deploying your own.
VENDOR?=zeromq jemalloc openssl zlib

# Where to install to.
PREFIX?=/opt/lumberjack

FETCH=sh fetch.sh

Jordan Sissel's avatar
Jordan Sissel committed
12 13
CFLAGS+=-D_POSIX_C_SOURCE=199309 -std=c99 -Wall -Wextra -Werror -pipe
CFLAGS+=-g
Jordan Sissel's avatar
Jordan Sissel committed
14
CFLAGS+=-Wno-unused-function
15
LDFLAGS+=-pthread
Jordan Sissel's avatar
Jordan Sissel committed
16
LIBS=-lzmq -ljemalloc -lssl -lcrypto -luuid -lz
Jordan Sissel's avatar
Jordan Sissel committed
17

18 19
CFLAGS+=-Ibuild/include 
LDFLAGS+=-Lbuild/lib -Wl,-rpath,'$$ORIGIN/../lib'
Jordan Sissel's avatar
Jordan Sissel committed
20

21 22
default: build-all
build-all: build/bin/lumberjack build/bin/lumberjack.sh
23 24
include Makefile.ext

Jordan Sissel's avatar
Jordan Sissel committed
25 26 27 28 29
ifeq ($(UNAME),Linux)
# clock_gettime is in librt on linux.
LIBS+=-lrt
endif

Jordan Sissel's avatar
Jordan Sissel committed
30
clean:
Jordan Sissel's avatar
Jordan Sissel committed
31
	-@rm -fr lumberjack unixsock *.o build
Jordan Sissel's avatar
Jordan Sissel committed
32 33 34 35 36 37 38

vendor-clean:
	-make -C vendor/msgpack/ clean
	-make -C vendor/jansson/ clean
	-make -C vendor/jemalloc/ clean
	-make -C vendor/libuuid/ clean
	-make -C vendor/zeromq/ clean
Jordan Sissel's avatar
Jordan Sissel committed
39
	-make -C vendor/zlib/ clean
Jordan Sissel's avatar
Jordan Sissel committed
40

41
rpm deb: | build-all
Jordan Sissel's avatar
Jordan Sissel committed
42
	fpm -s dir -t $@ -n lumberjack -v $(VERSION) --prefix /opt/lumberjack \
Jordan Sissel's avatar
Jordan Sissel committed
43 44 45 46
		--exclude '*.a' --exclude 'lib/pkgconfig/zlib.pc' -C build \
		--description "a log shipping tool" \
		--url "https://github.com/jordansissel/lumberjack" \
		bin/lumberjack lib
47

Jordan Sissel's avatar
Jordan Sissel committed
48 49 50 51
#install: build/bin/lumberjack build/lib/libzmq.$(LIBEXT)
# install -d -m 755 build/bin/* $(PREFIX)/bin/lumberjack
# install -d build/lib/* $(PREFIX)/lib

Jordan Sissel's avatar
Jordan Sissel committed
52
backoff.c: backoff.h
Jordan Sissel's avatar
Jordan Sissel committed
53
harvester.c: harvester.h proto.h str.h
54
emitter.c: emitter.h ring.h
55
lumberjack.c: backoff.h harvester.h emitter.h
Jordan Sissel's avatar
Jordan Sissel committed
56
str.c: str.h
Jordan Sissel's avatar
Jordan Sissel committed
57
proto.c: proto.h str.h 
Jordan Sissel's avatar
Jordan Sissel committed
58
ring.c: ring.h
59 60
harvester.c: build/include/insist.h 
lumberjack.c: build/include/insist.h 
Jordan Sissel's avatar
Jordan Sissel committed
61

Jordan Sissel's avatar
Jordan Sissel committed
62
# Vendor'd dependencies
63 64 65 66 67 68 69 70 71
# If VENDOR contains 'zeromq' download and build it.
ifeq ($(filter zeromq,$(VENDOR)),zeromq)
emitter.c: build/include/zmq.h 
harvester.c: build/include/zmq.h
lumberjack.c:  build/include/zmq.h 
build/bin/lumberjack: | build/bin build/lib/libzmq.$(LIBEXT)
endif # zeromq

ifeq ($(filter jemalloc,$(VENDOR)),jemalloc)
Jordan Sissel's avatar
Jordan Sissel committed
72
harvester.c lumberjack.c ring.c str.c: build/include/jemalloc/jemalloc.h
73 74 75 76
build/bin/lumberjack: | build/lib/libjemalloc.$(LIBEXT)
endif # jemalloc

ifeq ($(filter openssl,$(VENDOR)),openssl)
Jordan Sissel's avatar
Jordan Sissel committed
77
proto.c: build/include/openssl/ssl.h
78
lumberjack.c:  build/include/openssl/ssl.h
79 80 81
build/bin/lumberjack: | build/lib/libssl.$(LIBEXT)
build/bin/lumberjack: | build/lib/libcrypto.$(LIBEXT)
endif # openssl
Jordan Sissel's avatar
Jordan Sissel committed
82

83 84 85 86
ifeq ($(filter zlib,$(VENDOR)),zlib)
proto.c: build/include/zlib.h
build/bin/lumberjack: | build/lib/libz.$(LIBEXT)
endif # zlib
Jordan Sissel's avatar
Jordan Sissel committed
87

Jordan Sissel's avatar
Jordan Sissel committed
88 89 90 91
.PHONY: test
test: | build/test/test_ring
	build/test/test_ring

Jordan Sissel's avatar
Jordan Sissel committed
92 93 94 95 96
# Tests
test_ring.c: ring.h build/include/jemalloc/jemalloc.h build/include/insist.h
build/test/test_ring: test_ring.o ring.o  | build/test
	$(CC) $(LDFLAGS) -o $@ $^ -ljemalloc

97 98 99
proto.o: proto.c
	$(CC) $(CFLAGS) -c -o $@ $^

100 101 102
build/bin/lumberjack.sh: lumberjack.sh | build/bin
	install -m 755 $^ $@

103
build/bin/lumberjack: | build/bin
Jordan Sissel's avatar
Jordan Sissel committed
104
build/bin/lumberjack: lumberjack.o backoff.o harvester.o emitter.o str.o proto.o ring.o
105
	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
Jordan Sissel's avatar
Jordan Sissel committed
106 107
	@echo " => Build complete: $@"
	@echo " => Run 'make rpm' to build an rpm (or deb or tarball)"
108

109
build/include/insist.h: | build/include
110
	PATH=$$PWD:$$PATH fetch.sh -o $@ https://raw.github.com/jordansissel/experiments/master/c/better-assert/insist.h
111

112
build/include/zmq.h build/lib/libzmq.$(LIBEXT): | build
Jordan Sissel's avatar
Jordan Sissel committed
113
	@echo " => Building zeromq"
Jordan Sissel's avatar
Jordan Sissel committed
114
	PATH=$$PWD:$$PATH $(MAKE) -C vendor/zeromq/ install PREFIX=$$PWD/build DEBUG=$(DEBUG)
115

Jordan Sissel's avatar
Jordan Sissel committed
116
build/include/msgpack.h build/lib/libmsgpack.$(LIBEXT): | build
Jordan Sissel's avatar
Jordan Sissel committed
117
	@echo " => Building msgpack"
Jordan Sissel's avatar
Jordan Sissel committed
118
	PATH=$$PWD:$$PATH $(MAKE) -C vendor/msgpack/ install PREFIX=$$PWD/build DEBUG=$(DEBUG)
119

Jordan Sissel's avatar
Jordan Sissel committed
120
build/include/jemalloc/jemalloc.h build/lib/libjemalloc.$(LIBEXT): | build
Jordan Sissel's avatar
Jordan Sissel committed
121
	@echo " => Building jemalloc"
Jordan Sissel's avatar
Jordan Sissel committed
122
	PATH=$$PWD:$$PATH $(MAKE) -C vendor/jemalloc/ install PREFIX=$$PWD/build DEBUG=$(DEBUG)
Jordan Sissel's avatar
Jordan Sissel committed
123

Jordan Sissel's avatar
Jordan Sissel committed
124
build/include/lz4.h build/lib/liblz4.$(LIBEXT): | build
Jordan Sissel's avatar
Jordan Sissel committed
125
	@echo " => Building lz4"
Jordan Sissel's avatar
Jordan Sissel committed
126
	PATH=$$PWD:$$PATH $(MAKE) -C vendor/lz4/ install PREFIX=$$PWD/build DEBUG=$(DEBUG)
Jordan Sissel's avatar
Jordan Sissel committed
127 128

build/include/zlib.h build/lib/libz.$(LIBEXT): | build
Jordan Sissel's avatar
Jordan Sissel committed
129
	@echo " => Building zlib"
Jordan Sissel's avatar
Jordan Sissel committed
130
	PATH=$$PWD:$$PATH $(MAKE) -C vendor/zlib/ install PREFIX=$$PWD/build DEBUG=$(DEBUG)
Jordan Sissel's avatar
Jordan Sissel committed
131

Jordan Sissel's avatar
Jordan Sissel committed
132 133
build/include/openssl/ssl.h build/lib/libssl.$(LIBEXT) build/lib/libcrypto.$(LIBEXT): | build
	@echo " => Building openssl"
Jordan Sissel's avatar
Jordan Sissel committed
134
	PATH=$$PWD:$$PATH $(MAKE) -C vendor/openssl install PREFIX=$$PWD/build DEBUG=$(DEBUG)
Jordan Sissel's avatar
Jordan Sissel committed
135

136 137 138
build:
	mkdir $@

Jordan Sissel's avatar
Jordan Sissel committed
139
build/include build/bin build/test: | build
Jordan Sissel's avatar
Jordan Sissel committed
140
	mkdir $@