source: soft/giet_vm/Makefile @ 776

Last change on this file since 776 was 776, checked in by alain, 10 years ago

Modify Makefile to avoid to rebuild the disk image each time an executable is compiled,
because we want to use the virtual disk as a non volatile external storage.

  • use "make clean-disk" to delete all binary files AND delete the disk image.
  • Use "make clean" to delete all binary files WITHOUT deleting the existing disk-image.
  • use "make" to regenerate all executables whose source code has been modified AND update the disk-image.
File size: 19.3 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/s_finite.o     \
133                build/libs/math/s_floor.o      \
134                build/libs/math/s_isnan.o      \
135                build/libs/math/sqrt.o         \
136                build/libs/math/s_rint.o       \
137                build/libs/math/s_scalbn.o     \
138                build/libs/math/s_sin.o        \
139                build/libs/math/s_cos.o        \
140                build/libs/math/e_sqrt.o       
141
142
143CFLAGS = -Wall -ffreestanding -mno-gpopt -mips32 -g -O2 \
144                 -fno-delete-null-pointer-checks
145
146GIET_INCLUDE = -Igiet_boot    \
147               -Igiet_kernel  \
148               -Igiet_xml     \
149               -Igiet_fat32   \
150               -Igiet_drivers \
151               -Igiet_common  \
152               -Igiet_libs    \
153               -I.
154
155DISK_IMAGE  := hdd/virt_hdd.dmg
156
157### The Mtools used to build the FAT32 disk image perform a few sanity checks,
158### to make sure that the disk is indeed an MS-DOS disk. However, the size
159### of the disk image used by the Giet-VM is not MS-DOS compliant.
160### Setting this variable prevents these checks.
161
162MTOOLS_SKIP_CHECK := 1
163
164##################################
165### first rule executed
166### compile boot.elf, kernel.elf, and selected appli.elf
167### update these .elf files on virtual disk
168compile: dirs                    \
169         hard_config.h           \
170         build/kernel/kernel.elf \
171         build/boot/boot.elf     \
172         $(APPLIS_ELF)         
173        mdir -/ -b -i $(DISK_IMAGE) ::/
174
175########################################
176### create build directories for giet_vm
177dirs:
178        @mkdir -p build/boot
179        @mkdir -p build/common
180        @mkdir -p build/drivers
181        @mkdir -p build/fat32
182        @mkdir -p build/kernel
183        @mkdir -p build/libs/math
184        @mkdir -p hdd
185
186#####################################################
187### make a recursive list of the virtual disk content
188list:
189         mdir -/ -w -i $(DISK_IMAGE) ::/
190
191#####################################################
192### make a file system check for the the virtual disk
193fsck:
194         fsck_msdos $(DISK_IMAGE) 
195
196########################################################
197### copy the files generated by the virtual prototype on
198### the virtual disk "home" directory to the current directory
199extract:
200        mcopy -o -i $(DISK_IMAGE) ::/home .
201
202####################################################
203### delete all binary files from Unix File System
204### but does NOT modify the virtual disk
205clean:
206        rm -f *.o *.elf *.bin *.txt core
207        rm -f hard_config.h giet_vsegs.ld map.bin map.xml
208        rm -rf build/
209        cd applications/classif      && $(MAKE) clean && cd ../..
210        cd applications/convol       && $(MAKE) clean && cd ../..
211        cd applications/coproc       && $(MAKE) clean && cd ../..
212        cd applications/coremark     && $(MAKE) clean && cd ../..
213        cd applications/display      && $(MAKE) clean && cd ../..
214        cd applications/dhrystone    && $(MAKE) clean && cd ../..
215        cd applications/gameoflife   && $(MAKE) clean && cd ../..
216        cd applications/mjpeg        && $(MAKE) clean && cd ../..
217        cd applications/ocean        && $(MAKE) clean && cd ../..
218        cd applications/raycast      && $(MAKE) clean && cd ../..
219        cd applications/rosenfeld    && $(MAKE) clean && cd ../..
220        cd applications/router       && $(MAKE) clean && cd ../..
221        cd applications/shell        && $(MAKE) clean && cd ../..
222        cd applications/sort         && $(MAKE) clean && cd ../..
223        cd applications/transpose    && $(MAKE) clean && cd ../..
224
225#####################################################
226### delete all binary files from Unix File System
227### and build a new virtual disk :
228### - create the bin / misc / home directories
229### - create applications sub-directories
230### - store various files into misc
231### This requires the generic LINUX/MacOS script "create_dmg" script
232### written by C.Fuguet. (should be installed in GIET-VM root directory).
233clean-disk: clean
234        rm -f $(DISK_IMAGE)
235        ./create_dmg create $(basename $(DISK_IMAGE))
236        dd if=$(DISK_IMAGE) of=temp.dmg count=65536
237        mv temp.dmg $(DISK_IMAGE)
238        mmd -o -i $(DISK_IMAGE) ::/bin               || true
239        mmd -o -i $(DISK_IMAGE) ::/bin/kernel        || true
240        mmd -o -i $(DISK_IMAGE) ::/bin/classif       || true
241        mmd -o -i $(DISK_IMAGE) ::/bin/convol        || true
242        mmd -o -i $(DISK_IMAGE) ::/bin/coproc        || true
243        mmd -o -i $(DISK_IMAGE) ::/bin/coremark      || true
244        mmd -o -i $(DISK_IMAGE) ::/bin/dhrystone     || true
245        mmd -o -i $(DISK_IMAGE) ::/bin/display       || true
246        mmd -o -i $(DISK_IMAGE) ::/bin/gameoflife    || true
247        mmd -o -i $(DISK_IMAGE) ::/bin/mjpeg         || true
248        mmd -o -i $(DISK_IMAGE) ::/bin/ocean         || true
249        mmd -o -i $(DISK_IMAGE) ::/bin/raycast       || true
250        mmd -o -i $(DISK_IMAGE) ::/bin/rosenfeld     || true
251        mmd -o -i $(DISK_IMAGE) ::/bin/router        || true
252        mmd -o -i $(DISK_IMAGE) ::/bin/shell         || true
253        mmd -o -i $(DISK_IMAGE) ::/bin/sort          || true
254        mmd -o -i $(DISK_IMAGE) ::/bin/transpose     || true
255        mmd -o -i $(DISK_IMAGE) ::/misc              || true
256        mmd -o -i $(DISK_IMAGE) ::/home              || true
257        mcopy -o -i $(DISK_IMAGE) images/images_128.raw ::/misc
258        mcopy -o -i $(DISK_IMAGE) images/philips_1024.raw ::/misc
259        mcopy -o -i $(DISK_IMAGE) images/lena_256.raw ::/misc
260        mcopy -o -i $(DISK_IMAGE) images/bridge_256.raw ::/misc
261        mcopy -o -i $(DISK_IMAGE) images/couple_512.raw ::/misc
262        mcopy -o -i $(DISK_IMAGE) images/door_32.raw ::/misc
263        mcopy -o -i $(DISK_IMAGE) images/handle_32.raw ::/misc
264        mcopy -o -i $(DISK_IMAGE) images/rock_32.raw ::/misc
265        mcopy -o -i $(DISK_IMAGE) images/wood_32.raw ::/misc
266        mcopy -o -i $(DISK_IMAGE) images/wood_32.raw ::/misc
267        mcopy -o -i $(DISK_IMAGE) images/plan_48.mjpg ::/misc
268        mcopy -o -i $(DISK_IMAGE) images/mandel_128.mjpg ::/misc
269        mcopy -o -i $(DISK_IMAGE) images/video_160_120.mjpg ::/misc
270        mdir -/ -b -i $(DISK_IMAGE) ::/
271
272#########################################################################
273### mapping generation: map.bin / map.xml / hard_config.h / giet_vsegs.ld
274### update map.bin on virtual disk
275hard_config.h: $(ARCH)/arch.py $(APPLIS_PY)
276        giet_python/genmap --arch=$(ARCH)     \
277                       --x=$(X_SIZE)      \
278                       --y=$(Y_SIZE)      \
279                       --p=$(NB_PROCS)    \
280                       --tty=$(NB_TTYS)   \
281                       --fbf=$(FBF_WIDTH) \
282                       --ioc=$(IOC_TYPE)  \
283                       --mwr=$(MWR_TYPE)  \
284                       --giet=.           \
285                       $(GENMAP_APPLIS)   \
286                       --xml=.
287        mcopy -o -i $(DISK_IMAGE) map.bin ::/      || true
288
289################################
290### drivers library compilation
291build/drivers/%.o: giet_drivers/%.c \
292                   giet_drivers/%.h \
293                   hard_config.h    \
294                   giet_config.h
295        $(CC) $(GIET_INCLUDE) $(CFLAGS)  -c -o $@ $<
296
297build/drivers/libdrivers.a: $(DRIVERS_OBJS)
298        $(AR) -rcs $@ $(DRIVERS_OBJS)
299
300##########################
301### fat32 compilation
302build/fat32/fat32.o: giet_fat32/fat32.c \
303                     giet_fat32/fat32.h \
304                     hard_config.h      \
305                     giet_config.h
306        $(CC) $(GIET_INCLUDE) $(CFLAGS)  -c -o $@ $<
307
308##########################
309### common compilation
310build/common/%.o: giet_common/%.c   \
311                  giet_common/%.h   \
312                  hard_config.h     \
313                  giet_config.h
314        $(CC) $(GIET_INCLUDE) $(CFLAGS)  -c -o $@ $<
315
316##########################
317### boot compilation
318### Copy boot.elf into sector 2 of disk image
319build/boot/boot.elf: $(BOOT_OBJS)            \
320                     giet_boot/boot.ld       \
321                     build/drivers/libdrivers.a
322        $(LD) -o $@ -T giet_boot/boot.ld $(BOOT_OBJS) -Lbuild/drivers -ldrivers
323        $(DU) -D $@ > $@.txt
324        dd if=build/boot/boot.elf of=$(DISK_IMAGE) seek=2 conv=notrunc
325   
326
327build/boot/boot.o: giet_boot/boot.c          \
328                   giet_common/utils.h       \
329                   giet_fat32/fat32.h        \
330                   giet_common/vmem.h        \
331                   hard_config.h             \
332                   giet_config.h
333        $(CC) $(GIET_INCLUDE) $(CFLAGS)  -c -o $@ $<
334
335build/boot/boot_entry.o: giet_boot/boot_entry.S \
336                         hard_config.h
337        $(CC) $(GIET_INCLUDE) $(CFLAGS)  -c -o $@ $<
338
339##########################
340### kernel.elf compilation
341### update kernel.elf on virtual disk
342build/kernel/kernel.elf: $(KERNEL_OBJS)        \
343                         giet_kernel/kernel.ld \
344                         build/drivers/libdrivers.a
345        $(LD) -o $@ -T giet_kernel/kernel.ld $(KERNEL_OBJS) -Lbuild/drivers -ldrivers
346        $(DU) -D $@ > $@.txt
347        mdel -i $(DISK_IMAGE) ::/bin/kernel/kernel.elf   || true
348        mcopy -i $(DISK_IMAGE) build/kernel/kernel.elf ::/bin/kernel
349
350build/kernel/%.o: giet_kernel/%.c    \
351                  hard_config.h      \
352                  giet_config.h
353        $(CC) $(GIET_INCLUDE) $(CFLAGS)  -c -o $@ $<
354
355build/kernel/%.o: giet_kernel/%.s    \
356                  hard_config.h      \
357                  giet_config.h
358        $(CC) $(GIET_INCLUDE) $(CFLAGS)  -c -o $@ $<
359
360############################
361### user library compilation
362build/libs/%.o: giet_libs/%.c        \
363                     giet_libs/%.h   \
364                     hard_config.h   \
365                     giet_config.h
366        $(CC) $(CFLAGS) $(GIET_INCLUDE) -c -o $@ $<
367
368build/libs/libuser.a: $(USER_OBJS)
369        $(AR) -rcs $@ $^
370
371############################
372### math library compilation
373build/libs/math/%.o: giet_libs/math/%.c             \
374                     giet_libs/math/math_private.h  \
375                     giet_libs/math.h
376        $(CC) $(CFLAGS) $(GIET_INCLUDE) -c -o $@ $<
377
378build/libs/libmath.a: $(MATH_OBJS)
379        $(AR) -rcs $@ $^
380
381#####################################
382### classif   application compilation
383### update classif/appli.elf on virtual disk
384applications/classif/appli.elf: build/libs/libuser.a
385        $(MAKE) -C applications/classif
386        mdel -i $(DISK_IMAGE) ::/bin/classif/appli.elf   || true
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        mdel -i $(DISK_IMAGE) ::/bin/convol/appli.elf  || true
396        mcopy -o -i $(DISK_IMAGE) applications/convol/appli.elf ::/bin/convol
397
398########################################
399### coproc   application compilation
400### update coproc/appli.elf on virtual disk
401applications/coproc/appli.elf: build/libs/libuser.a
402        $(MAKE) -C applications/coproc
403        mdel -i $(DISK_IMAGE) ::/bin/coproc/appli.elf  || true
404        mcopy -o -i $(DISK_IMAGE) applications/coproc/appli.elf ::/bin/coproc
405
406########################################
407### coremark compilation
408applications/coremark/appli.elf: build/libs/libuser.a
409        $(MAKE) -C applications/coremark
410        mdel -i $(DISK_IMAGE) ::/bin/coremark/appli.elf  || true
411        mcopy -o -i $(DISK_IMAGE) applications/coremark/appli.elf ::/bin/coremark
412
413
414########################################
415### dhrystone   application compilation
416### update dhrystone/appli.elf on virtual disk
417applications/dhrystone/appli.elf: build/libs/libuser.a
418        $(MAKE) -C applications/dhrystone
419        mdel -i $(DISK_IMAGE) ::/bin/dhrystone/appli.elf  || true
420        mcopy -o -i $(DISK_IMAGE) applications/dhtystone/appli.elf ::/bin/dhrystone
421
422########################################
423### display  application compilation
424### update display/appli.elf on virtual disk
425applications/display/appli.elf: build/libs/libuser.a
426        $(MAKE) -C applications/display
427        mdel -i $(DISK_IMAGE) ::/bin/display/appli.elf   || true
428        mcopy -o -i $(DISK_IMAGE) applications/display/appli.elf ::/bin/display
429
430########################################
431### gameoflife  application compilation
432### update gameoflife/appli.elf on virtual disk
433applications/gameoflife/appli.elf: build/libs/libuser.a
434        $(MAKE) -C applications/gameoflife
435        mdel -i $(DISK_IMAGE) ::/bin/gameoflife/appli.elf   || true
436        mcopy -o -i $(DISK_IMAGE) applications/gameoflife/appli.elf ::/bin/gameoflife
437
438########################################
439### mjpeg  application compilation
440### update mjpeg/appli.elf on virtual disk
441applications/mjpeg/appli.elf: build/libs/libuser.a
442        $(MAKE) -C applications/mjpeg
443        mdel -i $(DISK_IMAGE) ::/bin/mjpeg/appli.elf   || true
444        mcopy -o -i $(DISK_IMAGE) applications/mjpeg/appli.elf ::/bin/mjpeg
445
446########################################
447### ocean  application compilation
448### update ocean/appli.elf on virtual disk
449applications/ocean/appli.elf: build/libs/libmath.a  build/libs/libuser.a
450        cd applications/ocean && $(MAKE) && cd ../..
451        mdel -i $(DISK_IMAGE) ::/bin/ocean/appli.elf   || true
452        mcopy -o -i $(DISK_IMAGE) applications/ocean/appli.elf ::/bin/ocean
453
454########################################
455### raycast application compilation
456### update raycast/appli.elf on virtual disk
457applications/raycast/appli.elf: build/libs/libmath.a build/libs/libuser.a
458        $(MAKE) -C applications/raycast
459        mdel -i $(DISK_IMAGE) ::/bin/raycast/appli.elf   || true
460        mcopy -o -i $(DISK_IMAGE) applications/raycast/appli.elf ::/bin/raycast
461
462########################################
463### rosenfeld  application compilation
464### update rosenfeld/appli.elf on virtual disk
465applications/rosenfeld/appli.elf: build/libs/libuser.a
466        $(MAKE) -C applications/rosenfeld
467        mdel -i $(DISK_IMAGE) ::/bin/rosenfeld/appli.elf   || true
468        mcopy -o -i $(DISK_IMAGE) applications/rosenfeld/appli.elf ::/bin/router
469
470########################################
471### router  application compilation
472### update router/appli.elf on virtual disk
473applications/router/appli.elf: build/libs/libuser.a
474        $(MAKE) -C applications/router
475        mdel -i $(DISK_IMAGE) ::/bin/router/appli.elf   || true
476        mcopy -o -i $(DISK_IMAGE) applications/router/appli.elf ::/bin/router
477
478########################################
479### shell  application compilation
480### update shell/appli.elf on virtual disk
481applications/shell/appli.elf: build/libs/libuser.a
482        $(MAKE) -C applications/shell
483        mdel -i $(DISK_IMAGE) ::/bin/shell/appli.elf   || true
484        mcopy -o -i $(DISK_IMAGE) applications/shell/appli.elf ::/bin/shell
485
486########################################
487### sort  application compilation
488### update sort/appli.elf on virtual disk
489applications/sort/appli.elf: build/libs/libuser.a
490        $(MAKE) -C applications/sort
491        mdel -i $(DISK_IMAGE) ::/bin/sort/appli.elf   || true
492        mcopy -o -i $(DISK_IMAGE) applications/sort/appli.elf ::/bin/sort
493
494########################################
495### transpose compilation
496### update transpose/appli.elf on virtual disk
497applications/transpose/appli.elf: build/libs/libuser.a
498        $(MAKE) -C applications/transpose
499        mdel -i $(DISK_IMAGE) ::/bin/transpose/appli.elf   || true
500        mcopy -o -i $(DISK_IMAGE) applications/transpose/appli.elf ::/bin/transpose
501
Note: See TracBrowser for help on using the repository browser.