GNUmakefile.in 9.71 KB
Newer Older
1
#
2
# EMULAB-COPYRIGHT
3
# Copyright (c) 2000-2009 University of Utah and the Flux Group.
4 5
# All rights reserved.
#
6 7
# Testbed Makefile
#
8 9 10 11 12
SRCDIR		= @srcdir@
OBJDIR		= .
SUBDIR		= 
TESTBED_SRCDIR  = @top_srcdir@
DISTCLEAN_FILES = @DISTCLEAN_FILES@ 
13
EVENTSYS	= @EVENTSYS@
14
PELABSUPPORT	= @PELABSUPPORT@
Christopher Alfeld's avatar
Christopher Alfeld committed
15

16 17
SYSTEM	       := $(shell uname -s)

18 19
include Makeconf

20 21 22
#
# Ordering here matters!
# Things with no dependencies go first: 
23
#   assign db lib www
24 25
# Things that may have dependencies go next:
#   @optional_subdirs@ (has event)
26
#   ipod os security sensors 
27
# Then things that only depend on stuff we've done:
28
#   pxe tbsetup tmcd utils backend www tip capture vis
29 30
# Then things that depend on stuff we just did:
#
31
SUBDIRS = lib db assign www @optional_subdirs@ ipod security sensors \
32
		pxe tbsetup account tmcd utils backend tip capture ipod vis \
33
		sensors os xmlrpc install/newnode_sshkeys mote tools/whol \
34
		tools/svn wiki bugdb collab tools/rmanage protogeni node_usage
Christopher Alfeld's avatar
Christopher Alfeld committed
35

36
all:		all-subdirs 
37

38 39 40 41 42 43 44
#
# We used to statically link our event agents.  We no longer do this, but
# if you want "old style" agents, use this target.
#
all-static:
	@LDSTATIC=-static $(MAKE) all

45
install:	
46 47
	@echo "Choose either boss-install, ops-install or fs-install"
	@echo "Choose opsfs-install instead of ops-install for a combined ops/fs machine"
48
	@echo "Choose tipserv-install for dedicated tip server machines."
49 50

#
51
# For installation on boss node
52
# 
53
boss-install:	install-schemacheck install-sitevarscheck install-dbfillcheck \
54 55
		install-genischemacheck install-subdirs install-mkdirs \
		install-setbuildinfo
56
	@echo "Boss node installed!"
57 58 59 60

#
# Same target, with the install-schemacheck dependency omitted
# 
61
boss-install-force:	install-subdirs install-mkdirs install-setbuildinfo
62
	@echo "Boss node installed!"
63

64
post-install:
65
	@$(MAKE) -C db post-install
Mike Hibler's avatar
Mike Hibler committed
66
	@$(MAKE) -C ipod post-install
67
	@$(MAKE) -C tbsetup post-install
68
	@$(MAKE) -C account post-install
69
	@$(MAKE) -C security post-install
70 71
	@$(MAKE) -C vis post-install
	@$(MAKE) -C www post-install
72
ifeq ($(EVENTSYS),1)
73
	@$(MAKE) -C event post-install
74
endif
75
	@$(MAKE) -C mote post-install
76
	@$(MAKE) -C tools post-install
77
	@$(MAKE) -C wiki post-install
78
	@$(MAKE) -C bugdb post-install
79
	@$(MAKE) -C collab post-install
80
	@$(MAKE) -C utils post-install
81 82 83
ifeq ($(NODE_USAGE_SUPPORT),1)
	@$(MAKE) -C node_usage post-install
endif
84

85
#
86
# For installation on the 'ops' or 'users' node (okay, plastic)
87
# 
88
ops-install:
89 90 91
	-mkdir -p $(INSTALL_TOPDIR)/log
	-mkdir -p $(INSTALL_TOPDIR)/log/mysql
	-chmod 770 $(INSTALL_TOPDIR)/log/mysql
92 93
	-chown mysql $(INSTALL_TOPDIR)/log/mysql
	-chgrp mysql $(INSTALL_TOPDIR)/log/mysql
94 95
	@$(MAKE) -C tbsetup control-install
	@$(MAKE) -C security control-install
96
	@$(MAKE) -C tip control-install
Leigh B. Stoller's avatar
Leigh B. Stoller committed
97
#	@$(MAKE) -C os control-install
98 99
	@$(MAKE) -C db control-install
	@$(MAKE) -C tbsetup control-install
Mac Newbold's avatar
Mac Newbold committed
100
	@$(MAKE) -C utils control-install
101
	@$(MAKE) -C lib control-install
102
ifeq ($(EVENTSYS),1)
103
	@$(MAKE) -C event control-install
104
endif
105
	@$(MAKE) -C sensors control-install
106
	@$(MAKE) -C xmlrpc control-install
107
	@$(MAKE) -C tmcd control-install
Leigh B. Stoller's avatar
Leigh B. Stoller committed
108
	@$(MAKE) -C account control-install
109 110 111
ifeq ($(PELABSUPPORT),1)
	@$(MAKE) -C pelab control-install
endif
112

113 114
fs-install:
	@$(MAKE) -C tbsetup fs-install
Timothy Stack's avatar
 
Timothy Stack committed
115
	@$(MAKE) -C sensors fs-install
116 117 118 119

opsfs-install: ops-install fs-install
	@echo "Combined ops/fs install done."

120
install-mkdirs:
121
	-mkdir -p $(INSTALL_TOPDIR)/opsdir
122 123
	-mkdir -p $(INSTALL_TOPDIR)/locks
	-mkdir -p $(INSTALL_TOPDIR)/log
124 125
	-mkdir -p $(INSTALL_TOPDIR)/log/mysql
	-mkdir -p $(INSTALL_TOPDIR)/log/exports
126
	-mkdir -p $(INSTALL_TOPDIR)/lists
127
	-mkdir -p $(INSTALL_TOPDIR)/backup
128
	-mkdir -p $(INSTALL_TOPDIR)/etc
129
	-mkdir -p $(INSTALL_TOPDIR)/expwork
130 131
	-mkdir -p $(INSTALL_TOPDIR)/batch
	-chmod 777 $(INSTALL_TOPDIR)/batch
132 133
	-mkdir -p $(INSTALL_TOPDIR)/expinfo
	-chmod 777 $(INSTALL_TOPDIR)/expinfo
134 135
	-mkdir -p $(INSTALL_TOPDIR)/exparchive
	-chmod 777 $(INSTALL_TOPDIR)/exparchive
136 137
	-mkdir -p $(INSTALL_TOPDIR)/exparchive/Archive
	-chmod 777 $(INSTALL_TOPDIR)/exparchive/Archive
138 139
	-mkdir -p $(INSTALL_TOPDIR)/images
	-chmod 775 $(INSTALL_TOPDIR)/images
140
	-ln -s /usr/testbed/bin/nse $(INSTALL_TOPDIR)/bin
141 142
	-mkdir -p $(INSTALL_TOPDIR)/ssl
	-chmod 770 $(INSTALL_TOPDIR)/ssl
143

144 145
tipserv-install:
	-mkdir -p $(INSTALL_TOPDIR)/log/tiplogs
146
	-mkdir -p $(INSTALL_TOPDIR)/etc
147 148 149 150
	@$(MAKE) -C tip tipserv-install
	@$(MAKE) -C capture tipserv-install
	@$(MAKE) -C tbsetup tipserv-install

151 152
client-mkdirs:
	-mkdir -p $(DESTDIR)$(CLIENT_BINDIR)
153
	-mkdir -p $(DESTDIR)$(CLIENT_MANDIR)
154 155

client:
156
	@$(MAKE) -C lib/libtb client
157
ifeq ($(EVENTSYS),1)
158
	@$(MAKE) -C event client
159
endif
160
	@$(MAKE) -C os client
161
ifneq ($(SYSTEM),CYGWIN_NT-5.1)
Timothy Stack's avatar
 
Timothy Stack committed
162 163
	@$(MAKE) -C capture client
	@$(MAKE) -C tip client
164
	@$(MAKE) -C tools client
165
endif
166 167 168 169
	@$(MAKE) -C sensors client
	@$(MAKE) -C tmcd client

client-install: client client-mkdirs
170
ifeq ($(EVENTSYS),1)
171
	@$(MAKE) -C event client-install
172
endif
173
	@$(MAKE) -C os client-install
174
ifneq ($(SYSTEM),CYGWIN_NT-5.1)
Timothy Stack's avatar
 
Timothy Stack committed
175 176
	@$(MAKE) -C capture client-install
	@$(MAKE) -C tip client-install
177
	@$(MAKE) -C tools client-install
178
endif
179
	@$(MAKE) -C sensors client-install
180 181
	@$(MAKE) -C tmcd client-install

182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
TARBALLDESTDIR = /var/tmp/emulab-client

client-tarball:
	@if [ `id -u` -ne 0 ]; then \
	    echo '*** Must run as root!'; \
	    false; \
	fi
	@if [ -d "$(TARBALLDESTDIR)" ]; then \
	    echo "$(TARBALLDESTDIR) already exists."; \
	    echo "Remove it and try again."; \
	    false; \
	fi
	echo "Building and installing client-side in $(TARBALLDESTDIR)..."
	DESTDIR=$(TARBALLDESTDIR) $(MAKE) client-install
	echo "Creating tarball..."
	tar czf emulab-client.tar.gz -C $(TARBALLDESTDIR) .

199 200 201 202
destdircheck:
	@if [ -z "$(DESTDIR)" ]; then \
	    echo "You must define DESTDIR for this target!"; \
	    false; \
203 204 205 206
	fi
	@if [ "$(DESTDIR)" = "/" ]; then \
	    echo "DESTDIR is '/', really really bad idea!"; \
	    false; \
207 208
	fi

209 210
mfsoscheck:
	@if [ `uname -s` != "FreeBSD" ]; then \
Mike Hibler's avatar
Mike Hibler committed
211
	    echo "Must build CDROM/MFS files on a FreeBSD system!"; \
212 213 214 215
	    false; \
	fi

mfs: mfsoscheck
216 217 218 219
	@$(MAKE) -C os mfs
	@$(MAKE) -C sensors mfs
	@$(MAKE) -C tmcd mfs

Mike Hibler's avatar
Mike Hibler committed
220 221 222 223 224
mfs-nostatic: mfsoscheck
	@NOSTATIC=1 $(MAKE) -C os mfs
	@NOSTATIC=1 $(MAKE) -C sensors mfs
	@NOSTATIC=1 $(MAKE) -C tmcd mfs

225
mfs-install: destdircheck mfs client-mkdirs
226 227 228 229
	@$(MAKE) -C os mfs-install
	@$(MAKE) -C sensors mfs-install
	@$(MAKE) -C tmcd mfs-install

Mike Hibler's avatar
Mike Hibler committed
230 231 232 233 234
mfs-nostatic-install: destdircheck mfs-nostatic client-mkdirs
	@$(MAKE) -C os mfs-install
	@$(MAKE) -C sensors mfs-install
	@$(MAKE) -C tmcd mfs-install

235 236 237 238 239
frisbee-mfs: mfsoscheck
	@$(MAKE) -C cdrom/groklilo client
	@$(MAKE) -C os frisbee-mfs
	@$(MAKE) -C tmcd frisbee-mfs

Mike Hibler's avatar
Mike Hibler committed
240 241 242 243 244
frisbee-mfs-nostatic: mfsoscheck
	@NOSTATIC=1 $(MAKE) -C cdrom/groklilo client
	@NOSTATIC=1 $(MAKE) -C os frisbee-mfs
	@NOSTATIC=1 $(MAKE) -C tmcd frisbee-mfs

245 246 247 248 249
frisbee-mfs-install: destdircheck frisbee-mfs
	@CLIENT_BINDIR=/etc/testbed $(MAKE) -e -C cdrom/groklilo client-install
	@$(MAKE) -C os frisbee-mfs-install
	@$(MAKE) -C tmcd frisbee-mfs-install

Mike Hibler's avatar
Mike Hibler committed
250 251 252 253 254
frisbee-mfs-nostatic-install: destdircheck frisbee-mfs-nostatic
	@CLIENT_BINDIR=/etc/testbed $(MAKE) -e -C cdrom/groklilo client-install
	@$(MAKE) -C os frisbee-mfs-install
	@$(MAKE) -C tmcd frisbee-mfs-install

Mike Hibler's avatar
Mike Hibler committed
255 256 257 258 259 260 261
cdboot: mfsoscheck client
	@echo "CD/Dongle files built"

cdboot-install: destdircheck cdboot
	@$(MAKE) -C cdrom client-install
	@$(MAKE) -C tmcd/freebsd6 cdboot-install

262 263 264 265 266 267 268 269
flashboot: mfsoscheck client
	@echo "Flash dongle files built"

flashboot-install: destdircheck flashboot
	@$(MAKE) -C tmcd/freebsd6 cdboot-install
	@$(MAKE) -C os frisbee-mfs-install
	@$(MAKE) -C flash client-install

270 271 272 273 274
#
# A check to see if this is a 'real' install. Kinda hacky, but as far as I can
# tell, you can't put ifeq()'s inside of targets
#
ifeq ($(TBROOT),/usr/testbed)
275
SCHEMACHECK= cd $(OBJDIR)/db && perl schemacheck
276 277 278 279 280 281 282
else
SCHEMACHECK= @echo "Skipping schema check, since prefix isn't /usr/testbed"
endif
install-schemacheck:
	@echo "Checking DB schema..."
	$(SCHEMACHECK)

Chad Barb's avatar
 
Chad Barb committed
283 284 285 286 287 288 289 290 291
ifeq ($(TBROOT),/usr/testbed)
SITEVARSCHECK= cd $(OBJDIR)/db && perl sitevarscheck
else
SITEVARSCHECK= @echo "Skipping sitevars check, since prefix isn't /usr/testbed"
endif
install-sitevarscheck:
	@echo "Checking Site variables..."
	$(SITEVARSCHECK)

292 293 294 295 296 297 298 299 300
ifeq ($(TBROOT),/usr/testbed)
DBFILLCHECK= cd $(OBJDIR)/db && perl dbfillcheck
else
DBFILLCHECK= @echo "Skipping DB fill check, since prefix isn't /usr/testbed"
endif
install-dbfillcheck:
	@echo "Checking Initial DB Fill ..."
	$(DBFILLCHECK)

301 302 303 304 305 306 307 308 309
ifeq ($(TBROOT),/usr/testbed)
SETBUILDINFO= cd $(OBJDIR)/utils && perl setbuildinfo
else
SETBUILDINFO= @echo "Skipping setbuildinfo, since prefix isn't /usr/testbed"
endif
install-setbuildinfo:
	@echo "Setting the Build and Version info"
	$(SETBUILDINFO)

310 311 312
install-genischemacheck:
	@$(MAKE) -C protogeni install-genischemacheck

313 314 315
# We use separate src and obj trees in Emulab, so the traditional distclean to
# clean "made" files from a mingled source-and-obj tree is unnecessary.
# However, this may be useful if you mistakenly configure and make a src tree.
316 317
clean:		clean-subdirs
distclean:	distclean-subdirs
Mike Hibler's avatar
Mike Hibler committed
318
	rm -f Makeconf GNUmakefile config.h config.status config.cache config.log
319
	rm -f $(DISTCLEAN_FILES)
320 321 322 323
#
# Here's a different approch to recover from just configure problems.  It cleans
# all files from an obj tree that have a corresponding .in file in the src tree.
undo-configure:
324
	find $SRCDIR -name '*.in' -a -not -name configure.in | \
325
	    sed -e "s;$SRCDIR;$OBJDIR;" -e 's;[.]in$;;' | xargs rm -f
326

327 328 329 330 331
elabinelab:
	-mkdir -p $(INSTALL_TOPDIR)/src
	rm -f $(INSTALL_TOPDIR)/src/emulab-src.tar.gz
	tar czf $(INSTALL_TOPDIR)/src/emulab-src.tar.gz -C $(SRCDIR) .

332 333 334 335 336
# How to recursively descend into subdirectories to make general
# targets such as `all'.
%.MAKE:
	@$(MAKE) -C $(dir $@) $(basename $(notdir $@))
%-subdirs: $(addsuffix /%.MAKE,$(SUBDIRS)) ;
337

338 339
# By default, make any target by descending into subdirectories.
%: %-subdirs ;
340

341
.PHONY: post-install install-mkdirs
342 343 344

# Get rid of a bunch of nasty built-in implicit rules.
.SUFFIXES: