source: soft/giet_vm/Makefile @ 776

Last change on this file since 776 was 776, checked in by alain, 9 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.