Makefile 12.2 KB
Newer Older
1
MAKEFILENAME := $(lastword $(MAKEFILE_LIST))
Michael Ott's avatar
Michael Ott committed
2

3
SUB_DIRS = lib CollectAgent tools scripts
4

5
CASSANDRA_VERSION = 2.2.6
6
MOSQUITTO_VERSION = 1.3.5
7
BOOST_VERSION     = 1.58.0
Michael Ott's avatar
Michael Ott committed
8
OPENSSL_VERSION   = 1.0.1u
Axel Auweter's avatar
Axel Auweter committed
9
CPPDRV_VERSION    = 2.0.1
10
LIBUV_VERSION     = 0.10.36
11
SOURCEFORGE_MROR  = netcologne
12
CPPNET_VERSION 	  = 0.12.0-final
13

14
BOOST_VERSION_U   = $(subst .,_,$(BOOST_VERSION))
15
DISTFILES =	apache-cassandra-$(CASSANDRA_VERSION).tar.gz;http://archive.apache.org/dist/cassandra/$(CASSANDRA_VERSION)/apache-cassandra-$(CASSANDRA_VERSION)-bin.tar.gz \
16
		mosquitto-$(MOSQUITTO_VERSION).tar.gz;http://mosquitto.org/files/source/mosquitto-$(MOSQUITTO_VERSION).tar.gz \
17
		boost_$(BOOST_VERSION_U).tar.gz;http://$(SOURCEFORGE_MROR).dl.sourceforge.net/project/boost/boost/$(BOOST_VERSION)/boost_$(BOOST_VERSION_U).tar.gz \
Axel Auweter's avatar
Axel Auweter committed
18
		openssl-$(OPENSSL_VERSION).tar.gz;ftp://ftp.pca.dfn.de/pub/tools/net/openssl/source/openssl-$(OPENSSL_VERSION).tar.gz \
19
		libuv-v$(LIBUV_VERSION).tar.gz;http://dist.libuv.org/dist/v$(LIBUV_VERSION)/libuv-v$(LIBUV_VERSION).tar.gz \
20
		cpp-driver-$(CPPDRV_VERSION).tar.gz;https://github.com/datastax/cpp-driver/archive/$(CPPDRV_VERSION).tar.gz \
21
		cpp-netlib-$(CPPNET_VERSION).tar.gz;http://downloads.cpp-netlib.org/0.12.0/cpp-netlib-$(CPPNET_VERSION).tar.gz 
22

23
DISTFILES_HASHES = apache-cassandra-2.2.6.tar.gz|8e2a8696ced6c4f9db06c40b2f5a7936;mosquitto-1.3.5.tar.gz|55094ad4dc7c7985377f43d4fc3d09da;boost_1_58_0.tar.gz|5a5d5614d9a07672e1ab2a250b5defc5;openssl-1.0.1u.tar.gz|130bb19745db2a5a09f22ccbbf7e69d0;cpp-driver-2.0.1.tar.gz|70bf83e1cbd0d35b7e5ed66fc4dccbb1;libuv-v0.10.36.tar.gz|8eb77b4fee4f311c114a9fee06f5a2ab;cpp-netlib-0.12.0-final.tar.gz|29b87c0e8c1a9e7fbdea5afcec947d53
24

25
include common.mk
26
27
28
29
30
31
32
33

CASSANDRA_CLUSTER_NAME                 = Datacenter Monitor Database
CASSANDRA_FLUSH_LARGEST_MEMTABLES_AT   = 0.5
CASSANDRA_REDUCE_CACHE_SIZES_AT        = 0.6
CASSANDRA_REDUCE_CACHE_CAPACITY_TO     = 0.4
CASSANDRA_PARTITIONER                  = org.apache.cassandra.dht.ByteOrderedPartitioner
CASSANDRA_COMMITLOG_TOTAL_SPACE_IN_MB  = 256
CASSANDRA_COMMITLOG_SEGMENT_SIZE_IN_MB = 16
Axel Auweter's avatar
Axel Auweter committed
34
35
CASSANDRA_TOMBSTONE_WARN_THRESHOLD     = 100000
CASSANDRA_TOMBSTONE_FAILURE_THRESHOLD  = 10000000
36

37
38
HTTPD_PORT = 8080

39
40
# If cross-compiling for ARM, adjust the build settings
ifeq ("$(ARCH)", "arm")
41
OPENSSL_TARGET = "linux-generic32"
42
else
43
OPENSSL_TARGET = $(if $(findstring $(shell uname),Darwin),"darwin64-x86_64-cc","linux-x86_64")
44
45
endif

46
PUBHEADERS = pusherpqueue.h dcdbdaemon.h
47

48
.PHONY : info all clean cleanall distclean check-cross-compile deps depsinstall $(SUB_DIRS)
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72

info:
	@echo ""
	@echo "DCDB - Data Center Database"
	@echo "Buildsystem description"
	@echo ""
	@echo "Use the DCDBDEPSPATH environment variable to specify a build path for the"
	@echo "dependencies. Currently, the project dependenceis will be built to:"
	@echo "$(DCDBDEPSPATH)"
	@echo ""
	@echo "Use the DCDBDEPLOYPATH environment variable to specifiy the path for deployment"
	@echo "of all tools. Currently, the directory for deployment/staging is:"
	@echo "$(DCDBDEPLOYPATH)"
	@echo ""
	@echo "There should only be a few requirements to build DCDB."
	@echo "On Ubuntu, these are: build-essential, cmake, libssl-dev"
	@echo "To run Cassandra, you should also have a JAVA runtime installed."
	@echo ""
	@echo "To modify the number of parallel build threads, you may set the MAKETHREADS"
	@echo "environment variable. Currently, your system is configured to execute a"
	@echo "parallel build with $(MAKETHREADS) threads."
	@echo ""
	@echo "To start, please type:"
	@echo "     make all"
73
74
75
76
	@echo ""
	@echo "For ARM cross compilation, please type:"
	@echo "     make ARCH=arm CROSS_COMPILE=<X> all"
	@echo "where <X> is your cross copmlier prefix ( e.g. arm-linux-gnueabihf- )"
77

78
clean:
79
	@$(foreach s,$(SUB_DIRS),echo "Cleaning $(s)..." && make -C $(s) clean && echo;)
80
81
82

cleanall: clean
	@$(foreach f,$(DISTFILESPATHS),echo "Cleaning $(f)..." && rm -rf $(DCDBDEPSPATH)/$(f) && echo;)
83
	@$(foreach f,mosquitto cpp-driver cpp-netlib,echo "Cleaning $(f)..." && rm -rf $(DCDBDEPSPATH)/$(f)_build && echo;)
84
85
86
87
88
89
90
91
92
93
94
95

distclean: clean
	@echo "Wiping dependencies..."
	@rm -rf $(DCDBDEPSPATH)

mrproper: distclean
	$(eval U := $(shell whoami))
	@if [ "$(U)" = "root" ]; then echo "Sorry, I won't allow you to use mrproper as root."; exit 1; fi
	@echo ""
	@echo "Wiping installation directory..."
	@rm -rf $(DCDBDEPLOYPATH)

96
97
98
99
100
101
update-distfile-hashes: .md5sums
	$(eval X := $(shell cat .md5sums | tr \\\n \; ))
	@echo "Updating $(MAKEFILENAME)..."
	@sed -i -e 's/^DISTFILES_HASHES\ =.*/DISTFILES_HASHES\ =\ $(X)/' $(MAKEFILENAME) ;
	@rm -f .md5sums

102
103
104
105
all: check-cross-compile depsinstall $(foreach s,$(SUB_DIRS),$(s)-build) 

install: depsinstall $(SUB_DIRS)
	@cd include && install $(PUBHEADERS) $(DCDBDEPLOYPATH)/include/dcdb && cd ..
106
	@echo DONE
107

108
109
110
111
112
113
check-cross-compile:
	@if [ "$(ARCH)" = "arm" ]; then \
		echo "Info: Cross-compiling for ARM using compiler prefix: $(CROSS_COMPILE_STRP)"; \
		echo; \
	fi;

114
115
116
117
118
deps: $(foreach f,$(DISTFILESPATHS),$(DCDBDEPSPATH)/$(f)/.built)

depsinstall: $(foreach f,$(DISTFILESPATHS),$(DCDBDEPSPATH)/$(f)/.installed)

$(DCDBDEPSPATH)/openssl-$(OPENSSL_VERSION)/.built: $(DCDBDEPSPATH)/openssl-$(OPENSSL_VERSION)/.patched
119
120
	@echo "Building OpenSSL library..."
	cd $(@D) && ./Configure shared --prefix=$(DCDBDEPLOYPATH) $(OPENSSL_TARGET) 
121
	cd $(@D) && make && touch $(@)
122

123
$(DCDBDEPSPATH)/openssl-$(OPENSSL_VERSION)/.installed: $(DCDBDEPSPATH)/openssl-$(OPENSSL_VERSION)/.built | $(DCDBDEPLOYPATH)
124
125
126
127
	@echo "Installing OpenSSL library..."
	cd $(@D) && make install && touch $(@)

$(DCDBDEPSPATH)/mosquitto-$(MOSQUITTO_VERSION)/.built: $(DCDBDEPSPATH)/mosquitto-$(MOSQUITTO_VERSION)/.patched
128
129
130
	@echo "Building Mosquitto library...";
	mkdir -p $(DCDBDEPSPATH)/mosquitto_build; 
	cd $(DCDBDEPSPATH)/mosquitto_build && \
Michael Ott's avatar
Michael Ott committed
131
132
133
134
135
136
		cmake $(CMAKE_CROSS_FLAGS) \
		-DOPENSSL_ROOT_DIR=$(DCDBDEPLOYPATH)/ \
		-DWITH_SRV=no \
		-DWITH_TLS=yes \
		-DWITH_TLS_PSK=yes \
		-DCMAKE_INSTALL_PREFIX:PATH=$(DCDBDEPLOYPATH)/ \
137
		$(@D) && \
138
		make -j $(MAKETHREADS) && \
139
		touch $(@)
140

141
$(DCDBDEPSPATH)/mosquitto-$(MOSQUITTO_VERSION)/.installed: $(DCDBDEPSPATH)/mosquitto-$(MOSQUITTO_VERSION)/.built | $(DCDBDEPLOYPATH)
142
143
144
145
	@echo "Installing Mosquitto library..."
	cd $(DCDBDEPSPATH)/mosquitto_build && make install && touch $(@)

$(DCDBDEPSPATH)/boost_$(BOOST_VERSION_U)/.built: $(DCDBDEPSPATH)/boost_$(BOOST_VERSION_U)/.patched
146
	@echo "Building Boost..."
147
	@ if [ "$(ARCH)" = "arm" ]; then \
148
		echo " using gcc : arm : $(CROSS_COMPILE)g++ ; " > $(@D)/tools/build/src/user-config.jam; \
149
	fi
150
151
152
153
	cd $(@D) && ./bootstrap.sh --prefix=$(DCDBDEPLOYPATH) --with-libraries=atomic,chrono,date_time,exception,filesystem,program_options,random,regex,system,thread,timer && touch $(@)
		

$(DCDBDEPSPATH)/boost_$(BOOST_VERSION_U)/.installed: $(DCDBDEPSPATH)/boost_$(BOOST_VERSION_U)/.built
Michael Ott's avatar
Michael Ott committed
154
	cd $(@D) && ./b2 -j $(MAKETHREADS) cxxflags="$(CXX11FLAGS)" install && touch $(@)
155

156
$(DCDBDEPSPATH)/libuv-v$(LIBUV_VERSION)/.built: $(DCDBDEPSPATH)/libuv-v$(LIBUV_VERSION)/.patched
157
	@echo "Building libuv..."
158
159
	cd $(@D) && env CC="$(CC)" CFLAGS="$(CFLAGS)" make -j $(MAKETHREADS) && touch $(@)

160
$(DCDBDEPSPATH)/libuv-v$(LIBUV_VERSION)/.installed: $(DCDBDEPSPATH)/libuv-v$(LIBUV_VERSION)/.built | $(DCDBDEPLOYPATH)
161
162
163
164
165
	@echo "Installing libuv..."
	mkdir -p $(DCDBDEPLOYPATH)/include/uv-private
	cd $(@D) && install -c include/uv.h $(DCDBDEPLOYPATH)/include/
	cd $(@D) && install -c include/uv-private/* $(DCDBDEPLOYPATH)/include/uv-private/
	if [ -e $(@D)/libuv.a ]; then cd $(@D) && install -c libuv.a $(DCDBDEPLOYPATH)/lib/; fi
Michael Ott's avatar
Michael Ott committed
166
167
168
	if [ -e $(@D)/libuv.so ]; then cd $(@D) && install -c libuv.so $(DCDBDEPLOYPATH)/lib/; \
	   if [ ! -e $(DCDBDEPLOYPATH)/lib/libuv.so.0.10 ]; then ln -s $(DCDBDEPLOYPATH)/lib/libuv.so $(DCDBDEPLOYPATH)/lib/libuv.so.0.10; fi; \
        fi
169
	if [ -e $(@D)/libuv.dylib ]; then cd $(@D) && install -c libuv.dylib $(DCDBDEPLOYPATH)/lib/; fi
170
	touch $(@)
171

172
$(DCDBDEPSPATH)/cpp-driver-$(CPPDRV_VERSION)/.built: $(DCDBDEPSPATH)/cpp-driver-$(CPPDRV_VERSION)/.patched $(DCDBDEPSPATH)/openssl-$(OPENSSL_VERSION)/.built $(DCDBDEPSPATH)/libuv-v$(LIBUV_VERSION)/.built
173
174
175
176
177
	@echo "Building cpp-driver..."
	mkdir -p $(DCDBDEPSPATH)/cpp-driver_build
	cd $(DCDBDEPSPATH)/cpp-driver_build && \
	cmake $(CMAKE_CROSS_FLAGS) \
		-DCMAKE_CXX_FLAGS="$(CXX11FLAGS) -Wno-unused-command-line-argument -L$(DCDBDEPLOYPATH)/lib " \
178
179
		-DOPENSSL_ROOT_DIR=$(DCDBDEPSPATH)/openssl-$(OPENSSL_VERSION) \
		-DLIBUV_ROOT_DIR=$(DCDBDEPSPATH)/libuv-v$(LIBUV_VERSION) \
180
181
182
		-DCASS_BUILD_EXAMPLES=NO \
		-DCMAKE_INSTALL_LIBDIR=lib \
		-DCMAKE_INSTALL_PREFIX=$(DCDBDEPLOYPATH)/ \
183
184
		-DCMAKE_EXE_LINKER_FLAGS="-L$(DCDBDEPSPATH)/boost_$(BOOST_VERSION_U)/stage/lib -lboost_random" \
		-DCMAKE_SHARED_LINKER_FLAGS="-L$(DCDBDEPSPATH)/boost_$(BOOST_VERSION_U)/stage/lib -lboost_random" \
185
		$(@D) && \
186
187
		make -j $(MAKETHREADS) && touch $(@)

188
$(DCDBDEPSPATH)/cpp-driver-$(CPPDRV_VERSION)/.installed: $(DCDBDEPSPATH)/cpp-driver-$(CPPDRV_VERSION)/.built | $(DCDBDEPLOYPATH)
189
190
	@echo "Installing cpp-driver..."
	cd $(DCDBDEPSPATH)/cpp-driver_build && make install && touch $(@)
191
	
192
$(DCDBDEPSPATH)/cpp-netlib-$(CPPNET_VERSION)/.built: $(DCDBDEPSPATH)/cpp-netlib-$(CPPNET_VERSION)/.patched
193
194
195
196
197
198
199
200
201
202
	@echo "Building cpp-netlib..."
	mkdir -p $(DCDBDEPSPATH)/cpp-netlib_build
	cd $(DCDBDEPSPATH)/cpp-netlib_build && \
	cmake $(CMAKE_CROSS_FLAGS) \
		-DCMAKE_CXX_FLAGS="$(CXX11FLAGS) -Wno-unused-command-line-argument -L$(DCDBDEPLOYPATH)/lib " \
		-DCPP-NETLIB_ENABLE_HTTPS=off \
		-DCPP-NETLIB_BUILD_TESTS=OFF \
		-DCPP-NETLIB_BUILD_EXAMPLES=OFF \
		-DCMAKE_INSTALL_LIBDIR=lib \
		-DCMAKE_INSTALL_PREFIX=$(DCDBDEPLOYPATH)/ \
203
		-DBOOST_ROOT=$(DCDBDEPSPATH)/boost_$(BOOST_VERSION_U)/ \
204
		$(@D) && \
205
206
		make -j $(MAKETHREADS) && touch $(@)
	
207
$(DCDBDEPSPATH)/cpp-netlib-$(CPPNET_VERSION)/.installed: $(DCDBDEPSPATH)/cpp-netlib-$(CPPNET_VERSION)/.built | $(DCDBDEPLOYPATH)
208
209
210
211
212
213
	@echo "Installing cpp-netlib..."
	cd $(DCDBDEPSPATH)/cpp-netlib_build && make install && touch $(@)
	
$(DCDBDEPSPATH)/apache-cassandra-$(CASSANDRA_VERSION)/.built: $(DCDBDEPSPATH)/apache-cassandra-$(CASSANDRA_VERSION)/.patched
	@touch $(DCDBDEPSPATH)/apache-cassandra-$(CASSANDRA_VERSION)/.built

214
$(DCDBDEPSPATH)/apache-cassandra-$(CASSANDRA_VERSION)/.installed: $(DCDBDEPSPATH)/apache-cassandra-$(CASSANDRA_VERSION)/.built | $(DCDBDEPLOYPATH)
215
216
	@echo ""
	@echo "Staging and configuring Cassandra..."
217
	@rsync -rlptD $(@D)/ $(DCDBDEPLOYPATH)/cassandra
218
219
220
221
222
223
224
225
226
	@$(eval P := $(shell echo "$(DCDBDEPLOYPATH)" | sed 's/\//\\\//g'))
	@sed -i.original -e 's/\/var\/lib\/cassandra/$(P)\/var\/lib\/cassandra/g' $(DCDBDEPLOYPATH)/cassandra/conf/cassandra.yaml
	@sed -i -e 's/.*cluster_name:.*/cluster_name:\ '\''$(CASSANDRA_CLUSTER_NAME)'\''/' $(DCDBDEPLOYPATH)/cassandra/conf/cassandra.yaml
	@sed -i -e 's/.*flush_largest_memtables_at:.*/flush_largest_memtables_at:\ $(CASSANDRA_FLUSH_LARGEST_MEMTABLES_AT)/' $(DCDBDEPLOYPATH)/cassandra/conf/cassandra.yaml
	@sed -i -e 's/.*reduce_cache_sizes_at:.*/reduce_cache_sizes_at:\ $(CASSANDRA_REDUCE_CACHE_SIZES_AT)/' $(DCDBDEPLOYPATH)/cassandra/conf/cassandra.yaml
	@sed -i -e 's/.*reduce_cache_capacity_to:.*/reduce_cache_capacity_to:\ $(CASSANDRA_REDUCE_CACHE_CAPACITY_TO)/' $(DCDBDEPLOYPATH)/cassandra/conf/cassandra.yaml
	@sed -i -e 's/.*partitioner:.*/partitioner:\ $(CASSANDRA_PARTITIONER)/' $(DCDBDEPLOYPATH)/cassandra/conf/cassandra.yaml
	@sed -i -e 's/.*commitlog_total_space_in_mb:.*/commitlog_total_space_in_mb: $(CASSANDRA_COMMITLOG_TOTAL_SPACE_IN_MB)/' $(DCDBDEPLOYPATH)/cassandra/conf/cassandra.yaml
	@sed -i -e 's/.*commitlog_segment_size_in_mb:.*/commitlog_segment_size_in_mb: $(CASSANDRA_COMMITLOG_SEGMENT_SIZE_IN_MB)/' $(DCDBDEPLOYPATH)/cassandra/conf/cassandra.yaml
Axel Auweter's avatar
Axel Auweter committed
227
228
	@sed -i -e 's/.*tombstone_warn_threshold:.*/tombstone_warn_threshold: $(CASSANDRA_TOMBSTONE_WARN_THRESHOLD)/' $(DCDBDEPLOYPATH)/cassandra/conf/cassandra.yaml
	@sed -i -e 's/.*tombstone_failure_threshold:.*/tombstone_failure_threshold: $(CASSANDRA_TOMBSTONE_FAILURE_THRESHOLD)/' $(DCDBDEPLOYPATH)/cassandra/conf/cassandra.yaml
229
	@touch $@
230
	
231
232
233
234
235
236
%-build: deps depsinstall 
	@echo "Building $*"
	@$(MAKE) -j $(MAKETHREADS) CC=$(CC) CXX=$(CXX) -C $*

$(SUB_DIRS): $(foreach s,$(SUB_DIRS),$(s)-build) 
	@echo "Installing $@"
237
	@$(MAKE) CC=$(CC) CXX=$(CXX) -C $@ install
238

239
$(PROJECTS): deps depsinstall
240
	$(eval X := $(shell echo "$(SKIP_PROJECTS)" | grep "$@"))
241
	@if [ "$(X)" = "" ]; then \
242
243
244
245
246
247
248
249
250
		echo ""; \
		echo "Building $@..."; \
		$(MAKE) -j $(MAKETHREADS) CC=$(CC) CXX=$(CXX) -C $@ ; \
		echo "Installing $@..."; \
		$(MAKE) CC=$(CC) CXX=$(CXX) -C $@ install ; \
	else \
		echo ""; \
		echo "Skipping $@..."; \
	fi