Fixed bug in the Glossary Haskell source (don't close stdout!).
[barrelfish] / hake / symbolic_targets.mk
1 ##########################################################################
2 # Copyright (c) 2009, 2010, 2011 ETH Zurich.
3 # All rights reserved.
4 #
5 # This file is distributed under the terms in the attached LICENSE file.
6 # If you do not find this file, copies can be found by writing to:
7 # ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
8 #
9 # This file defines symbolic (i.e. non-file) targets for the Makefile
10 # generated by Hake.  Edit this to add your own symbolic targets.
11 #
12 ##########################################################################
13
14 # Disable built-in implicit rules. GNU make adds environment's MAKEFLAGS too.
15 MAKEFLAGS=r
16
17 # Set default architecture to the first specified by Hake in generated Makefile.
18 ARCH ?= $(word 1, $(HAKE_ARCHS))
19
20 # All binaries of the RCCE LU benchmark
21 BIN_RCCE_LU= \
22         sbin/rcce_lu_A1 \
23         sbin/rcce_lu_A2 \
24         sbin/rcce_lu_A4 \
25         sbin/rcce_lu_A8 \
26         sbin/rcce_lu_A16 \
27         sbin/rcce_lu_A32 \
28         sbin/rcce_lu_A64
29
30 # All binaries of the RCCE BT benchmark
31 BIN_RCCE_BT= \
32         sbin/rcce_bt_A1 \
33         sbin/rcce_bt_A4 \
34         sbin/rcce_bt_A9  \
35         sbin/rcce_bt_A16 \
36         sbin/rcce_bt_A25 \
37         sbin/rcce_bt_A36
38
39 # Default list of modules to build/install for all enabled architectures
40 MODULES_COMMON= \
41         sbin/cpu \
42         sbin/init_null \
43         sbin/init \
44         sbin/chips \
45         sbin/spawnd \
46         sbin/startd \
47         sbin/flounder_stubs_empty_bench \
48         sbin/flounder_stubs_buffer_bench \
49         sbin/flounder_stubs_payload_bench \
50         sbin/hellotest \
51         sbin/mem_serv \
52         sbin/idctest \
53         sbin/memtest \
54         sbin/fread_test \
55         sbin/fscanf_test \
56         sbin/monitor \
57         sbin/ramfsd \
58         sbin/routetest \
59         sbin/route_bench \
60         sbin/radix_route_bench \
61         sbin/channel_cost_bench \
62         sbin/schedtest \
63         sbin/testerror \
64         sbin/yield_test \
65         sbin/xcorecap \
66         sbin/xcorecapserv \
67         sbin/xcorecapbench \
68
69 # List of modules that are arch-independent and always built
70 MODULES_GENERIC= \
71         skb_ramfs.cpio.gz \
72
73 # x86_64-specific modules to build by default
74 # this should shrink as targets are ported and move into the generic list above
75 MODULES_x86_64= \
76         sbin/apicdrift_bench \
77         sbin/barrier_bench \
78         sbin/bench \
79         sbin/bfscope \
80         sbin/bomp_benchmark_cg \
81         sbin/bomp_benchmark_ft \
82         sbin/bomp_benchmark_is \
83         sbin/bomp_sync \
84         sbin/bomp_cpu_bound \
85         sbin/bomp_cpu_bound_progress \
86         sbin/bomp_sync_progress \
87         sbin/bomp_test \
88         sbin/boot_perfmon \
89         sbin/bulkbench \
90         sbin/datagatherer \
91         sbin/e1000n \
92         sbin/rtl8029 \
93         sbin/netd \
94         sbin/echoserver \
95         sbin/elver \
96         sbin/fbdemo \
97         sbin/fish \
98         sbin/fputest \
99         sbin/hpet \
100         sbin/lpc_kbd \
101         sbin/lpc_timer \
102         sbin/lrpc_bench \
103         sbin/mem_affinity \
104         sbin/mem_serv_dist \
105         sbin/pci \
106         sbin/placement_bench \
107         sbin/phases_bench \
108         sbin/phases_scale_bench \
109         sbin/phoenix_kmeans \
110         $(BIN_RCCE_BT) \
111         $(BIN_RCCE_LU) \
112         sbin/rcce_pingpong \
113         sbin/serial \
114         sbin/shared_mem_clock_bench \
115         sbin/sif \
116         sbin/slideshow \
117         sbin/skb \
118         sbin/spantest \
119         sbin/testconcurrent \
120         sbin/thc_v_flounder_empty \
121         sbin/thcidctest \
122         sbin/thcminitest \
123         sbin/thctest \
124         sbin/tsc_bench \
125         sbin/tweedtest \
126         sbin/ump_latency \
127         sbin/ump_exchange \
128         sbin/ump_latency_cache \
129         sbin/ump_throughput \
130         sbin/ump_send \
131         sbin/ump_receive \
132         sbin/vbe \
133         sbin/vmkitmon \
134         sbin/webserver \
135         sbin/tlstest \
136         sbin/timer_test \
137         sbin/net_openport_test \
138         sbin/examples/xmpl-perfmon \
139         $(BIN_CONSENSUS) \
140
141 # the following are broken in the newidc system
142 MODULES_x86_64_broken= \
143         sbin/barriers \
144         sbin/driver_msd \
145         sbin/ehci \
146         sbin/ipi_bench \
147         sbin/ring_barriers \
148         sbin/usb_manager \
149         sbin/ssf_bcast \
150         sbin/lamport_bcast \
151
152 # x86-32-specific module to build by default
153 MODULES_x86_32=\
154         sbin/lpc_kbd \
155         sbin/serial \
156         $(BIN_RCCE_BT) \
157         $(BIN_RCCE_LU) \
158         sbin/rcce_pingpong \
159         sbin/bench \
160         sbin/fbdemo \
161         sbin/fish \
162         sbin/fputest \
163         sbin/pci \
164         sbin/skb \
165         sbin/slideshow \
166         sbin/thc_v_flounder_empty \
167         sbin/thcidctest \
168         sbin/thcminitest \
169         sbin/thctest \
170         sbin/vbe \
171         sbin/mem_serv_dist \
172
173 # SCC-specific module to build by default
174 MODULES_scc=\
175         $(BIN_RCCE_BT) \
176         $(BIN_RCCE_LU) \
177         sbin/rcce_pingpong \
178         sbin/bench \
179         sbin/eMAC \
180         sbin/netd \
181         sbin/webserver \
182         sbin/ipirc_test \
183         sbin/thc_v_flounder_empty \
184         sbin/thcidctest \
185         sbin/thcminitest \
186         sbin/thctest \
187         sbin/mem_serv_dist \
188         sbin/net-test \
189
190 # ARM-specific modules to build by default
191 MODULES_arm=\
192         sbin/cpu.bin
193
194 # XScale-specific modules to build by default
195 MODULES_xscale=\
196         sbin/cpu.bin
197
198 # ARM11MP-specific modules to build by default
199 MODULES_arm11mp=\
200         sbin/cpu.bin
201
202 # Beehive-specific modules to build by default
203 MODULES_beehive=\
204         sbin/hyper \
205         sbin/bmp_bench \
206         sbin/bulkbench \
207         sbin/thc_v_flounder_empty \
208         sbin/thcidctest \
209         sbin/thcminitest \
210         sbin/thctest \
211
212 # construct list of all modules to be built (arch-specific and common for each arch)
213 MODULES=$(foreach a,$(HAKE_ARCHS),$(foreach m,$(MODULES_$(a)),$(a)/$(m)) \
214                                   $(foreach m,$(MODULES_COMMON),$(a)/$(m))) \
215         $(MODULES_GENERIC)
216
217 all: $(MODULES) menu.lst
218         @echo "You've just run the default ("all") target for Barrelfish"
219         @echo "using Hake.  The following modules have been built:"
220         @echo $(MODULES)
221         @echo "If you want to change this target, edit the file called"
222         @echo "'symbolic_targets.mk' in your build directory."
223 .PHONY: all
224
225 # XXX: this should be overridden in some local settings file?
226 INSTALL_PREFIX ?= /home/netos/tftpboot/$(USER)
227
228 # Only install a binary if it doesn't exist in INSTALL_PREFIX or the modification timestamp differs
229 install: $(MODULES)
230         for m in ${MODULES}; do \
231           if [ ! -f ${INSTALL_PREFIX}/$$m ] || \
232               [ $$(stat -c%Y $$m) -ne $$(stat -c%Y ${INSTALL_PREFIX}/$$m) ]; then \
233             echo Installing $$m; \
234             mkdir -p ${INSTALL_PREFIX}/$$(dirname $$m); \
235             install -p $$m ${INSTALL_PREFIX}/$$m; \
236           fi; \
237         done;
238 .PHONY : install
239
240 sim: simulate
241 .PHONY : sim
242
243 QEMU=unknown-arch-error
244 GDB=unknown-arch-error
245
246 ifeq ($(ARCH),x86_64)
247         QEMU_CMD=qemu-system-x86_64 -smp 2 -m 1024 -net nic,model=ne2k_pci -net user  -fda $(SRCDIR)/tools/grub-qemu.img -tftp $(PWD) -nographic
248         GDB=x86_64-pc-linux-gdb
249 else ifeq ($(ARCH),x86_32)
250         QEMU_CMD=qemu-system-i386 -smp 2 -m 1024 -net nic,model=ne2k_pci -net user -fda $(SRCDIR)/tools/grub-qemu.img -tftp $(PWD) -nographic
251         GDB=gdb
252 else ifeq ($(ARCH),scc)
253         QEMU_CMD=qemu-system-i386 -smp 2 -m 1024 -cpu pentium -net nic,model=ne2k_pci -net user -fda $(SRCDIR)/tools/grub-qemu.img -tftp $(PWD) -nographic
254         GDB=gdb
255 else ifeq ($(ARCH),arm)
256         ARM_QEMU_CMD=qemu-system-arm -kernel arm/sbin/cpu.bin -nographic -no-reboot -m 256 -initrd arm/romfs.cpio
257         GDB=xterm -e arm-none-linux-gnueabi-gdb
258 simulate: $(MODULES) arm/romfs.cpio
259         $(ARM_QEMU_CMD)     
260 .PHONY: simulate
261
262 arm/tools/debug.arm.gdb: $(SRCDIR)/tools/debug.arm.gdb
263         cp $< $@
264
265 debugsim: $(MODULES) arm/romfs.cpio arm/tools/debug.arm.gdb
266         $(SRCDIR)/tools/debug.sh "$(ARM_QEMU_CMD) -initrd arm/romfs.cpio" "$(GDB)" "-s $(ARCH)/sbin/cpu -x arm/tools/debug.arm.gdb $(GDB_ARGS)"
267 .PHONY : debugsim
268 else ifeq ($(ARCH),arm11mp)
269         QEMU_CMD=qemu-system-arm -cpu mpcore -M realview -kernel arm11mp/sbin/cpu.bin
270         GDB=arm-none-linux-gnueabi-gdb
271 else ifeq ($(ARCH),beehive)
272
273 simulate: ./beehive/sbin/spliced.img
274         Bsimimg -slave=$(SRCDIR)/kernel/arch/beehive/slavecode.mem -noaddrcheck -ncores=3 -ibase=1000 -datarota=2 ./beehive/sbin/spliced.img
275 .PHONY : simulate
276
277 trace: ./beehive/sbin/spliced.img
278         Bsimimg -slave=$(SRCDIR)/kernel/arch/beehive/slavecode.mem -noaddrcheck -ncores=3 -ibase=1000 -datarota=2 -instructions=instructions.txt -events=events.txt -cache=cache.txt ./beehive/sbin/spliced.img | tee sim.out
279
280 .PHONY : trace
281
282 ./beehive/sbin/spliced.img: ./menu.lst $(MODULES)
283         Bsplice -o ./beehive/sbin/spliced.img -s ./beehive/sbin/beehive.splice -i menu.lst
284
285 endif
286
287
288 ifdef QEMU_CMD
289
290 simulate: $(MODULES)
291         $(QEMU_CMD)
292 .PHONY : simulate
293
294 debugsim: $(MODULES) $(ARCH)/debug.gdb
295         $(SRCDIR)/tools/debug.sh "$(QEMU_CMD)" "$(GDB)" "-x $(ARCH)/debug.gdb $(GDB_ARGS)" "file:/dev/stdout"
296 .PHONY : debugsim
297
298 debugsimvga: $(MODULES)
299         $(QEMU_CMD) -s -S &
300         while [ ! `netstat -nlp 2>/dev/null | grep qemu` ]; do sleep 1; done
301         $(GDB) -x $(SRCDIR)/debug.gdb.in
302 .PHONY : debugsimvga
303
304 endif
305
306
307
308 $(ARCH)/menu.lst: $(SRCDIR)/hake/menu.lst.$(ARCH)
309         cp $< $@
310
311 $(ARCH)/romfs.cpio: $(SRCDIR)/tools/arm-mkbootcpio.sh $(MODULES) $(ARCH)/menu.lst
312         $(SRCDIR)/tools/arm-mkbootcpio.sh $(ARCH)/menu.lst $@
313
314 # Location of hardcoded size of romfs CPIO image
315 arm_romfs_cpio = "$(ARCH)/include/romfs_size.h"
316
317 # XXX: Horrid hack to hardcode size of romfs CPIO image into ARM kernel
318 # This works in several recursive make steps:
319 # 1. Create a dummy romfs_size.h header file
320 # 2. Compile everything
321 # 3. Create the romfs CPIO image
322 # 4. Determine its size and write to romfs_size.h
323 # 5. Re-compile kernel (but not the romfs) with correct size information
324 # 6. Install romfs to installation location
325 arm:
326         $(MAKE)
327         $(MAKE) $(ARCH)/romfs.cpio
328         echo "//Autogenerated size of romfs.cpio because the bootloader cannot calculate it" > $(arm_romfs_cpio)
329         echo "size_t romfs_cpio_archive_size = `ls -asl $(ARCH)/romfs.cpio | sed -e 's/ /\n/g' | head -6 | tail -1`;" >> $(arm_romfs_cpio)
330         $(MAKE)
331 .PHONY: arm
332
333 # Builds a dummy romfs_size.h
334 $(ARCH)/include/romfs_size.h:
335         echo "size_t romfs_cpio_archive_size = 0; //should not see this" > $@
336
337 arminstall:
338         $(MAKE) arm
339         $(MAKE) install
340         install -p $(ARCH)/romfs.cpio ${INSTALL_PREFIX}/$(ARCH)/romfs.cpio
341 .PHONY: arminstall
342
343 scc: all tools/bin/dite
344         strip -d scc/sbin/*
345         tools/bin/dite -32 -o bigimage.dat menu.lst.scc
346         cp $(SRCDIR)/tools/scc/bootvector.dat .
347         bin2obj -m $(SRCDIR)/tools/scc/bigimage.map -o barrelfish0.obj
348         @echo Taking the barrelfish.obj file to SCC host
349         scp barrelfish0.obj user@tomme1.in.barrelfish.org:
350
351 # M5 Simulation targets
352
353 menu.lst.m5: $(SRCDIR)/hake/menu.lst.m5
354         cp $< $@
355
356 m5script.py: $(SRCDIR)/tools/molly/m5script.py
357         cp $< $@
358
359 m5_kernel: $(MODULES) menu.lst.m5 tools/bin/molly m5script.py
360         $(SRCDIR)/tools/molly/build_data_files.sh menu.lst.m5 m5_tmp
361         tools/bin/molly menu.lst.m5 m5_kernel.c
362         cc -std=c99 -Wl,-N -pie -fno-builtin -nostdlib -Wl,--build-id=none -Wl,--fatal-warnings -m64 -fPIC -T$(SRCDIR)/tools/molly/molly_ld_script -I$(SRCDIR)/include -I$(SRCDIR)/include/arch/x86_64 -I./x86_64/include -imacros $(SRCDIR)/include/deputy/nodeputy.h $(SRCDIR)/tools/molly/molly_boot.S $(SRCDIR)/tools/molly/molly_init.c ./m5_kernel.c $(SRCDIR)/lib/elf/elf64.c ./m5_tmp/* -o m5_kernel    
363         @echo "Now invoke m5, e.g. as 'm5.fast m5script.py  --num_cpus=2 --kernel=m5_kernel'"
364
365 m5: m5_kernel m5script.py
366         @echo "** Starting M5.  Note that (i) the number of CPUs started"
367         @echo "** on the M5 command line should match the number passed"
368         @echo "** to spawnd, and (ii) the mmaps configured in menu.lst.m5"
369         @echo "** should match the physical memory configured in the"
370         @echo "** simulation script."
371         m5.fast m5script.py --num_cpus=2 --kernel=m5_kernel
372 .PHONY : m5
373
374 # Source indexing targets
375 cscope.files:
376         find $(abspath .) $(abspath $(SRCDIR)) -name '*.[ch]' -type f -print | sort | uniq > $@
377 .PHONY: cscope.files
378
379 cscope.out: cscope.files
380         cscope -k -b -i$<
381
382 TAGS: cscope.files
383         etags - < $<
384
385 # force rebuild of the Makefile
386 rehake: ./hake/hake
387         ./hake/hake --source-dir $(SRCDIR)
388 .PHONY: rehake
389
390 clean::
391         $(RM) -r tools $(HAKE_ARCHS)
392 .PHONY: clean
393
394 realclean:: clean
395         $(RM) hake/*.o hake/*.hi hake/hake Hakefiles.hs cscope.*
396 .PHONY: realclean
397
398 # Documentation
399 DOCS= \
400         ./docs/TN-000-Overview.pdf \
401         ./docs/TN-001-Glossary.pdf \
402         ./docs/TN-002-Mackerel.pdf \
403         ./docs/TN-003-Hake.pdf \
404         ./docs/TN-004-VirtualMemory.pdf \
405         ./docs/TN-005-SCC.pdf \
406         ./docs/TN-006-Routing.pdf \
407         ./docs/TN-007-Beehive.pdf \
408         ./docs/TN-008-Tracing.pdf \
409         ./docs/TN-009-Notifications.pdf \
410         ./docs/TN-010-Spec.pdf \
411         ./docs/TN-011-IDC.pdf \
412         ./docs/TN-012-Services.pdf \
413         ./docs/TN-013-CapabilityManagement.pdf \
414
415 docs doc: $(DOCS)
416 .PHONY: docs doc
417
418 clean::
419         $(RM) $(DOCS)
420 .PHONY: clean
421
422 doxygen: Doxyfile
423         doxygen $<
424 .PHONY: doxygen
425
426 # pretend to be CMake's CONFIGURE_FILE command
427 # TODO: clean this up
428 Doxyfile: $(SRCDIR)/doc/Doxyfile.cmake
429         sed -r 's#@CMAKE_SOURCE_DIR@#$(SRCDIR)#g' $< > $@
430
431 # Scheduler simulator test cases
432 RUNTIME = 1000
433 TESTS = $(addsuffix .txt,$(basename $(wildcard $(SRCDIR)/tools/schedsim/*.cfg)))
434
435 schedsim-regen: $(TESTS)
436
437 $(TESTS): %.txt: %.cfg tools/bin/simulator
438         tools/bin/simulator $< $(RUNTIME) > $@
439
440 schedsim-check: $(wildcard $(SRCDIR)/tools/schedsim/*.cfg)
441         for f in $^; do tools/bin/simulator $$f $(RUNTIME) | diff -q - `dirname $$f`/`basename $$f .cfg`.txt || exit 1; done