source: soft/giet_vm/Makefile

Last change on this file was 798, checked in by meunier, 11 years ago
  • Bug fixes in Rosenfeld
File size: 18.6 KB
Line 
1-include params.mk
2
3export # export all variable to applications sub-Makefile
4
5CC = mipsel-unknown-elf-gcc
6AS = mipsel-unknown-elf-as
7LD = mipsel-unknown-elf-ld
8DU = mipsel-unknown-elf-objdump
9AR = mipsel-unknown-elf-ar
10
11# Defaults values for hardware parameters and applications
12# These parameters should be defined in the params.mk file
13ARCH ?= pathname
14X_SIZE ?= 1
15Y_SIZE ?= 1
16NB_PROCS ?= 1
17NB_TTYS ?= 1
18FBF_WIDTH ?= 256
19IOC_TYPE ?= BDV
20MWR_TYPE ?= CPY
21APPLIS ?= shell
22
23# build the list of applications used as argument by genmap
24GENMAP_APPLIS := $(addprefix --,$(APPLIS))
25
26# build the list of application.py (used as dependencies by genmap)
27APPLIS_PY = applications/classif/classif.py \
28 applications/convol/convol.py \
29 applications/coproc/coproc.py \
30 applications/coremark/coremark.py \
31 applications/display/display.py \
32 applications/dhrystone/dhrystone.py \
33 applications/gameoflife/gameoflife.py \
34 applications/mjpeg/mjpeg.py \
35 applications/ocean/ocean.py \
36 applications/raycast/raycast.py \
37 applications/rosenfeld/rosenfeld.py \
38 applications/router/router.py \
39 applications/shell/shell.py \
40 applications/sort/sort.py \
41 applications/transpose/transpose.py
42
43
44# build the list of applications to be executed (used in the "compile" rule)
45APPLIS_ELF := $(addsuffix /appli.elf,$(addprefix applications/,$(APPLIS)))
46
47# Build PYTHONPATH
48PYTHONPATH := $(shell find . -name *.py | grep -o "\(.*\)/" | sort -u | tr '\n' :)
49
50# check hardware platform definition
51ifeq ($(wildcard $(ARCH)),)
52$(error please define in ARCH parameter the path to the platform)
53endif
54
55### Rules that don't build a target file
56.PHONY: compil \
57 dirs \
58 list \
59 extract \
60 clean \
61 clean-disk \
62 build/kernel/kernel.elf \
63 build/boot/boot.elf \
64 $(APPLIS_ELF)
65
66### Objects to be linked for the drivers library
67DRIVERS_OBJS = build/drivers/dma_driver.o \
68 build/drivers/cma_driver.o \
69 build/drivers/xcu_driver.o \
70 build/drivers/bdv_driver.o \
71 build/drivers/hba_driver.o \
72 build/drivers/sdc_driver.o \
73 build/drivers/spi_driver.o \
74 build/drivers/rdk_driver.o \
75 build/drivers/iob_driver.o \
76 build/drivers/mmc_driver.o \
77 build/drivers/mwr_driver.o \
78 build/drivers/nic_driver.o \
79 build/drivers/tim_driver.o \
80 build/drivers/tty_driver.o \
81 build/drivers/pic_driver.o
82
83### Objects to be linked for kernel.elf
84KERNEL_OBJS = build/common/utils.o \
85 build/common/kernel_locks.o \
86 build/common/kernel_barriers.o \
87 build/common/tty0.o \
88 build/common/vmem.o \
89 build/common/kernel_malloc.o \
90 build/fat32/fat32.o \
91 build/kernel/giet.o \
92 build/kernel/switch.o \
93 build/kernel/ctx_handler.o \
94 build/kernel/exc_handler.o \
95 build/kernel/sys_handler.o \
96 build/kernel/irq_handler.o \
97 build/kernel/kernel_init.o
98
99### Objects to be linked for boot.elf
100BOOT_OBJS = build/common/utils.o \
101 build/common/kernel_locks.o \
102 build/common/kernel_barriers.o \
103 build/common/tty0.o \
104 build/common/pmem.o \
105 build/common/vmem.o \
106 build/common/kernel_malloc.o \
107 build/fat32/fat32.o \
108 build/kernel/ctx_handler.o \
109 build/kernel/irq_handler.o \
110 build/kernel/sys_handler.o \
111 build/kernel/switch.o \
112 build/boot/boot.o \
113 build/boot/boot_entry.o
114
115### Objects to be linked for the user library
116USER_OBJS = build/libs/malloc.o \
117 build/libs/mwmr_channel.o \
118 build/libs/stdio.o \
119 build/libs/stdlib.o \
120 build/libs/string.o \
121 build/libs/user_barrier.o \
122 build/libs/user_lock.o
123
124### Objects to be linked for the math library
125MATH_OBJS = build/libs/math/e_pow.o \
126 build/libs/math/e_rem_pio2.o \
127 build/libs/math/k_cos.o \
128 build/libs/math/k_rem_pio2.o \
129 build/libs/math/k_sin.o \
130 build/libs/math/s_copysign.o \
131 build/libs/math/s_fabs.o \
132 build/libs/math/fmod.o \
133 build/libs/math/s_finite.o \
134 build/libs/math/s_floor.o \
135 build/libs/math/s_ceil.o \
136 build/libs/math/s_isnan.o \
137 build/libs/math/sqrt.o \
138 build/libs/math/s_rint.o \
139 build/libs/math/s_scalbn.o \
140 build/libs/math/s_sin.o \
141 build/libs/math/s_cos.o \
142 build/libs/math/e_sqrt.o
143
144
145CFLAGS = -Wall -ffreestanding -mno-gpopt -mips32 -g -O2 \
146 -fno-delete-null-pointer-checks
147
148GIET_INCLUDE = -Igiet_boot \
149 -Igiet_kernel \
150 -Igiet_xml \
151 -Igiet_fat32 \
152 -Igiet_drivers \
153 -Igiet_common \
154 -Igiet_libs \
155 -I.
156
157DISK_IMAGE := hdd/virt_hdd.dmg
158
159### The Mtools used to build the FAT32 disk image perform a few sanity checks,
160### to make sure that the disk is indeed an MS-DOS disk. However, the size
161### of the disk image used by the Giet-VM is not MS-DOS compliant.
162### Setting this variable prevents these checks.
163
164MTOOLS_SKIP_CHECK := 1
165
166##################################
167### first rule executed
168### compile boot.elf, kernel.elf, and selected appli.elf
169### update these .elf files on virtual disk
170compile: dirs \
171 hard_config.h \
172 build/kernel/kernel.elf \
173 build/boot/boot.elf \
174 $(APPLIS_ELF)
175 mdir -/ -b -i $(DISK_IMAGE) ::/
176
177########################################
178### create build directories for giet_vm
179dirs:
180 @mkdir -p build/boot
181 @mkdir -p build/common
182 @mkdir -p build/drivers
183 @mkdir -p build/fat32
184 @mkdir -p build/kernel
185 @mkdir -p build/libs/math
186 @mkdir -p hdd
187
188#####################################################
189### make a recursive list of the virtual disk content
190list:
191 mdir -/ -w -i $(DISK_IMAGE) ::/
192
193#####################################################
194### make a file system check for the the virtual disk
195fsck:
196 fsck_msdos $(DISK_IMAGE)
197
198########################################################
199### copy the files generated by the virtual prototype on
200### the virtual disk "home" directory to the current directory
201extract:
202 mcopy -o -i $(DISK_IMAGE) ::/home .
203
204####################################################
205### delete all binary files from Unix File System
206### but does NOT modify the virtual disk
207clean:
208 rm -f *.o *.elf *.bin *.txt core
209 rm -f hard_config.h giet_vsegs.ld map.bin map.xml
210 rm -rf build/
211 cd applications/classif && $(MAKE) clean && cd ../..
212 cd applications/convol && $(MAKE) clean && cd ../..
213 cd applications/coproc && $(MAKE) clean && cd ../..
214 cd applications/coremark && $(MAKE) clean && cd ../..
215 cd applications/display && $(MAKE) clean && cd ../..
216 cd applications/dhrystone && $(MAKE) clean && cd ../..
217 cd applications/gameoflife && $(MAKE) clean && cd ../..
218 cd applications/mjpeg && $(MAKE) clean && cd ../..
219 cd applications/ocean && $(MAKE) clean && cd ../..
220 cd applications/raycast && $(MAKE) clean && cd ../..
221 cd applications/rosenfeld && $(MAKE) clean && cd ../..
222 cd applications/router && $(MAKE) clean && cd ../..
223 cd applications/shell && $(MAKE) clean && cd ../..
224 cd applications/sort && $(MAKE) clean && cd ../..
225 cd applications/transpose && $(MAKE) clean && cd ../..
226
227#####################################################
228### build a new virtual disk :
229### - create the bin / misc / home directories
230### - create applications sub-directories
231### - store various files into misc
232### This requires the generic LINUX/MacOS script "create_dmg" script
233### written by C.Fuguet. (should be installed in GIET-VM root directory).
234clean-disk: clean
235 rm -f $(DISK_IMAGE)
236 ./create_dmg create $(basename $(DISK_IMAGE))
237 dd if=$(DISK_IMAGE) of=temp.dmg count=65536
238 mv temp.dmg $(DISK_IMAGE)
239 mmd -o -i $(DISK_IMAGE) ::/bin || true
240 mmd -o -i $(DISK_IMAGE) ::/bin/kernel || true
241 mmd -o -i $(DISK_IMAGE) ::/bin/classif || true
242 mmd -o -i $(DISK_IMAGE) ::/bin/convol || true
243 mmd -o -i $(DISK_IMAGE) ::/bin/coproc || true
244 mmd -o -i $(DISK_IMAGE) ::/bin/coremark || true
245 mmd -o -i $(DISK_IMAGE) ::/bin/dhrystone || true
246 mmd -o -i $(DISK_IMAGE) ::/bin/display || true
247 mmd -o -i $(DISK_IMAGE) ::/bin/gameoflife || true
248 mmd -o -i $(DISK_IMAGE) ::/bin/mjpeg || true
249 mmd -o -i $(DISK_IMAGE) ::/bin/ocean || true
250 mmd -o -i $(DISK_IMAGE) ::/bin/raycast || true
251 mmd -o -i $(DISK_IMAGE) ::/bin/rosenfeld || true
252 mmd -o -i $(DISK_IMAGE) ::/bin/router || true
253 mmd -o -i $(DISK_IMAGE) ::/bin/shell || true
254 mmd -o -i $(DISK_IMAGE) ::/bin/sort || true
255 mmd -o -i $(DISK_IMAGE) ::/bin/transpose || true
256 mmd -o -i $(DISK_IMAGE) ::/misc || true
257 mmd -o -i $(DISK_IMAGE) ::/home || true
258 mcopy -o -i $(DISK_IMAGE) images/lena_256.raw ::/misc
259 mcopy -o -i $(DISK_IMAGE) images/images_128.raw ::/misc
260 mcopy -o -i $(DISK_IMAGE) images/philips_1024.raw ::/misc
261 mcopy -o -i $(DISK_IMAGE) images/bridge_256.raw ::/misc
262 mcopy -o -i $(DISK_IMAGE) images/couple_512.raw ::/misc
263 mcopy -o -i $(DISK_IMAGE) images/door_32.raw ::/misc
264 mcopy -o -i $(DISK_IMAGE) images/handle_32.raw ::/misc
265 mcopy -o -i $(DISK_IMAGE) images/rock_32.raw ::/misc
266 mcopy -o -i $(DISK_IMAGE) images/wood_32.raw ::/misc
267 mcopy -o -i $(DISK_IMAGE) images/wood_32.raw ::/misc
268 mcopy -o -i $(DISK_IMAGE) images/plan_48.mjpg ::/misc
269 mcopy -o -i $(DISK_IMAGE) images/mandel_128.mjpg ::/misc
270 mcopy -o -i $(DISK_IMAGE) images/video_160_120.mjpg ::/misc
271 mcopy -o -i $(DISK_IMAGE) images/boulons.pgm ::/misc
272 mdir -/ -b -i $(DISK_IMAGE) ::/
273
274#########################################################################
275### mapping generation: map.bin / map.xml / hard_config.h / giet_vsegs.ld
276### update map.bin on virtual disk
277hard_config.h: $(ARCH)/arch.py $(APPLIS_PY)
278 giet_python/genmap --arch=$(ARCH) \
279 --x=$(X_SIZE) \
280 --y=$(Y_SIZE) \
281 --p=$(NB_PROCS) \
282 --tty=$(NB_TTYS) \
283 --fbf=$(FBF_WIDTH) \
284 --ioc=$(IOC_TYPE) \
285 --mwr=$(MWR_TYPE) \
286 --giet=. \
287 $(GENMAP_APPLIS) \
288 --xml=.
289 mcopy -o -i $(DISK_IMAGE) map.bin ::/ || true
290
291################################
292### drivers library compilation
293build/drivers/%.o: giet_drivers/%.c \
294 giet_drivers/%.h \
295 hard_config.h \
296 giet_config.h
297 $(CC) $(GIET_INCLUDE) $(CFLAGS) -c -o $@ $<
298
299build/drivers/libdrivers.a: $(DRIVERS_OBJS)
300 $(AR) -rcs $@ $(DRIVERS_OBJS)
301
302##########################
303### fat32 compilation
304build/fat32/fat32.o: giet_fat32/fat32.c \
305 giet_fat32/fat32.h \
306 hard_config.h \
307 giet_config.h
308 $(CC) $(GIET_INCLUDE) $(CFLAGS) -c -o $@ $<
309
310##########################
311### common compilation
312build/common/%.o: giet_common/%.c \
313 giet_common/%.h \
314 hard_config.h \
315 giet_config.h
316 $(CC) $(GIET_INCLUDE) $(CFLAGS) -c -o $@ $<
317
318##########################
319### boot compilation
320### Copy boot.elf into sector 2 of disk image
321build/boot/boot.elf: $(BOOT_OBJS) \
322 giet_boot/boot.ld \
323 build/drivers/libdrivers.a
324 $(LD) -o $@ -T giet_boot/boot.ld $(BOOT_OBJS) -Lbuild/drivers -ldrivers
325 $(DU) -D $@ > $@.txt
326 dd if=build/boot/boot.elf of=$(DISK_IMAGE) seek=2 conv=notrunc
327
328
329build/boot/boot.o: giet_boot/boot.c \
330 giet_common/utils.h \
331 giet_fat32/fat32.h \
332 giet_common/vmem.h \
333 hard_config.h \
334 giet_config.h
335 $(CC) $(GIET_INCLUDE) $(CFLAGS) -c -o $@ $<
336
337build/boot/boot_entry.o: giet_boot/boot_entry.S \
338 hard_config.h
339 $(CC) $(GIET_INCLUDE) $(CFLAGS) -c -o $@ $<
340
341##########################
342### kernel.elf compilation
343### update kernel.elf on virtual disk
344build/kernel/kernel.elf: $(KERNEL_OBJS) \
345 giet_kernel/kernel.ld \
346 build/drivers/libdrivers.a
347 $(LD) -o $@ -T giet_kernel/kernel.ld $(KERNEL_OBJS) -Lbuild/drivers -ldrivers
348 $(DU) -D $@ > $@.txt
349 mcopy -o -i $(DISK_IMAGE) build/kernel/kernel.elf ::/bin/kernel
350
351build/kernel/%.o: giet_kernel/%.c \
352 hard_config.h \
353 giet_config.h
354 $(CC) $(GIET_INCLUDE) $(CFLAGS) -c -o $@ $<
355
356build/kernel/%.o: giet_kernel/%.s \
357 hard_config.h \
358 giet_config.h
359 $(CC) $(GIET_INCLUDE) $(CFLAGS) -c -o $@ $<
360
361############################
362### user library compilation
363build/libs/%.o: giet_libs/%.c \
364 giet_libs/%.h \
365 hard_config.h \
366 giet_config.h
367 $(CC) $(CFLAGS) $(GIET_INCLUDE) -c -o $@ $<
368
369build/libs/libuser.a: $(USER_OBJS)
370 $(AR) -rcs $@ $^
371
372############################
373### math library compilation
374build/libs/math/%.o: giet_libs/math/%.c \
375 giet_libs/math/math_private.h \
376 giet_libs/math.h
377 $(CC) $(CFLAGS) $(GIET_INCLUDE) -c -o $@ $<
378
379build/libs/libmath.a: $(MATH_OBJS)
380 $(AR) -rcs $@ $^
381
382#####################################
383### classif application compilation
384### update classif/appli.elf on virtual disk
385applications/classif/appli.elf: build/libs/libuser.a
386 $(MAKE) -C applications/classif
387 mcopy -o -i $(DISK_IMAGE) applications/classif/appli.elf ::/bin/classif
388
389
390####################################
391### convol application compilation
392### update convol/appli.elf on virtual disk
393applications/convol/appli.elf: build/libs/libuser.a
394 $(MAKE) -C applications/convol
395 mcopy -o -i $(DISK_IMAGE) applications/convol/appli.elf ::/bin/convol
396
397########################################
398### coproc application compilation
399### update coproc/appli.elf on virtual disk
400applications/coproc/appli.elf: build/libs/libuser.a
401 $(MAKE) -C applications/coproc
402 mcopy -o -i $(DISK_IMAGE) applications/coproc/appli.elf ::/bin/coproc
403
404########################################
405### coremark compilation
406applications/coremark/appli.elf: build/libs/libuser.a
407 $(MAKE) -C applications/coremark
408 mcopy -o -i $(DISK_IMAGE) applications/coremark/appli.elf ::/bin/coremark
409
410
411########################################
412### dhrystone application compilation
413### update dhrystone/appli.elf on virtual disk
414applications/dhrystone/appli.elf: build/libs/libuser.a
415 $(MAKE) -C applications/dhrystone
416 mcopy -o -i $(DISK_IMAGE) applications/dhtystone/appli.elf ::/bin/dhrystone
417
418########################################
419### display application compilation
420### update display/appli.elf on virtual disk
421applications/display/appli.elf: build/libs/libuser.a
422 $(MAKE) -C applications/display
423 mcopy -o -i $(DISK_IMAGE) applications/display/appli.elf ::/bin/display
424
425########################################
426### gameoflife application compilation
427### update gameoflife/appli.elf on virtual disk
428applications/gameoflife/appli.elf: build/libs/libuser.a
429 $(MAKE) -C applications/gameoflife
430 mcopy -o -i $(DISK_IMAGE) applications/gameoflife/appli.elf ::/bin/gameoflife
431
432########################################
433### mjpeg application compilation
434### update mjpeg/appli.elf on virtual disk
435applications/mjpeg/appli.elf: build/libs/libuser.a
436 $(MAKE) -C applications/mjpeg
437 mcopy -o -i $(DISK_IMAGE) applications/mjpeg/appli.elf ::/bin/mjpeg
438
439########################################
440### ocean application compilation
441### update ocean/appli.elf on virtual disk
442applications/ocean/appli.elf: build/libs/libmath.a build/libs/libuser.a
443 cd applications/ocean && $(MAKE) && cd ../..
444 mcopy -o -i $(DISK_IMAGE) applications/ocean/appli.elf ::/bin/ocean
445
446########################################
447### raycast application compilation
448### update raycast/appli.elf on virtual disk
449applications/raycast/appli.elf: build/libs/libmath.a build/libs/libuser.a
450 $(MAKE) -C applications/raycast
451 mcopy -o -i $(DISK_IMAGE) applications/raycast/appli.elf ::/bin/raycast
452
453########################################
454### rosenfeld application compilation
455### update rosenfeld/appli.elf on virtual disk
456applications/rosenfeld/appli.elf: build/libs/libuser.a build/libs/libmath.a
457 TARGET=giet-vm $(MAKE) -C applications/rosenfeld
458 mcopy -o -i $(DISK_IMAGE) applications/rosenfeld/appli.elf ::/bin/rosenfeld
459
460########################################
461### router application compilation
462### update router/appli.elf on virtual disk
463applications/router/appli.elf: build/libs/libuser.a
464 $(MAKE) -C applications/router
465 mcopy -o -i $(DISK_IMAGE) applications/router/appli.elf ::/bin/router
466
467########################################
468### shell application compilation
469### update shell/appli.elf on virtual disk
470applications/shell/appli.elf: build/libs/libuser.a
471 $(MAKE) -C applications/shell
472 mcopy -o -i $(DISK_IMAGE) applications/shell/appli.elf ::/bin/shell
473
474########################################
475### sort application compilation
476### update sort/appli.elf on virtual disk
477applications/sort/appli.elf: build/libs/libuser.a
478 $(MAKE) -C applications/sort
479 mcopy -o -i $(DISK_IMAGE) applications/sort/appli.elf ::/bin/sort
480
481########################################
482### transpose compilation
483### update transpose/appli.elf on virtual disk
484applications/transpose/appli.elf: build/libs/libuser.a
485 $(MAKE) -C applications/transpose
486 mcopy -o -i $(DISK_IMAGE) applications/transpose/appli.elf ::/bin/transpose
487
Note: See TracBrowser for help on using the repository browser.