source: soft/giet_vm/Makefile @ 786

Last change on this file since 786 was 777, checked in by meunier, 9 years ago
  • Ajout de quelques fonction dans la lib math
  • Déplacement de certaines fonctions de stdlib vers string
File size: 19.4 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### delete all binary files from Unix File System
229### and build a new virtual disk :
230### - create the bin / misc / home directories
231### - create applications sub-directories
232### - store various files into misc
233### This requires the generic LINUX/MacOS script "create_dmg" script
234### written by C.Fuguet. (should be installed in GIET-VM root directory).
235clean-disk: clean
236        rm -f $(DISK_IMAGE)
237        ./create_dmg create $(basename $(DISK_IMAGE))
238        dd if=$(DISK_IMAGE) of=temp.dmg count=65536
239        mv temp.dmg $(DISK_IMAGE)
240        mmd -o -i $(DISK_IMAGE) ::/bin               || true
241        mmd -o -i $(DISK_IMAGE) ::/bin/kernel        || true
242        mmd -o -i $(DISK_IMAGE) ::/bin/classif       || true
243        mmd -o -i $(DISK_IMAGE) ::/bin/convol        || true
244        mmd -o -i $(DISK_IMAGE) ::/bin/coproc        || true
245        mmd -o -i $(DISK_IMAGE) ::/bin/coremark      || true
246        mmd -o -i $(DISK_IMAGE) ::/bin/dhrystone     || true
247        mmd -o -i $(DISK_IMAGE) ::/bin/display       || true
248        mmd -o -i $(DISK_IMAGE) ::/bin/gameoflife    || true
249        mmd -o -i $(DISK_IMAGE) ::/bin/mjpeg         || true
250        mmd -o -i $(DISK_IMAGE) ::/bin/ocean         || true
251        mmd -o -i $(DISK_IMAGE) ::/bin/raycast       || true
252        mmd -o -i $(DISK_IMAGE) ::/bin/rosenfeld     || true
253        mmd -o -i $(DISK_IMAGE) ::/bin/router        || true
254        mmd -o -i $(DISK_IMAGE) ::/bin/shell         || true
255        mmd -o -i $(DISK_IMAGE) ::/bin/sort          || true
256        mmd -o -i $(DISK_IMAGE) ::/bin/transpose     || true
257        mmd -o -i $(DISK_IMAGE) ::/misc              || true
258        mmd -o -i $(DISK_IMAGE) ::/home              || true
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/lena_256.raw ::/misc
262        mcopy -o -i $(DISK_IMAGE) images/bridge_256.raw ::/misc
263        mcopy -o -i $(DISK_IMAGE) images/couple_512.raw ::/misc
264        mcopy -o -i $(DISK_IMAGE) images/door_32.raw ::/misc
265        mcopy -o -i $(DISK_IMAGE) images/handle_32.raw ::/misc
266        mcopy -o -i $(DISK_IMAGE) images/rock_32.raw ::/misc
267        mcopy -o -i $(DISK_IMAGE) images/wood_32.raw ::/misc
268        mcopy -o -i $(DISK_IMAGE) images/wood_32.raw ::/misc
269        mcopy -o -i $(DISK_IMAGE) images/plan_48.mjpg ::/misc
270        mcopy -o -i $(DISK_IMAGE) images/mandel_128.mjpg ::/misc
271        mcopy -o -i $(DISK_IMAGE) images/video_160_120.mjpg ::/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        mdel -i $(DISK_IMAGE) ::/bin/kernel/kernel.elf   || true
350        mcopy -i $(DISK_IMAGE) build/kernel/kernel.elf ::/bin/kernel
351
352build/kernel/%.o: giet_kernel/%.c    \
353                  hard_config.h      \
354                  giet_config.h
355        $(CC) $(GIET_INCLUDE) $(CFLAGS)  -c -o $@ $<
356
357build/kernel/%.o: giet_kernel/%.s    \
358                  hard_config.h      \
359                  giet_config.h
360        $(CC) $(GIET_INCLUDE) $(CFLAGS)  -c -o $@ $<
361
362############################
363### user library compilation
364build/libs/%.o: giet_libs/%.c        \
365                     giet_libs/%.h   \
366                     hard_config.h   \
367                     giet_config.h
368        $(CC) $(CFLAGS) $(GIET_INCLUDE) -c -o $@ $<
369
370build/libs/libuser.a: $(USER_OBJS)
371        $(AR) -rcs $@ $^
372
373############################
374### math library compilation
375build/libs/math/%.o: giet_libs/math/%.c             \
376                     giet_libs/math/math_private.h  \
377                     giet_libs/math.h
378        $(CC) $(CFLAGS) $(GIET_INCLUDE) -c -o $@ $<
379
380build/libs/libmath.a: $(MATH_OBJS)
381        $(AR) -rcs $@ $^
382
383#####################################
384### classif   application compilation
385### update classif/appli.elf on virtual disk
386applications/classif/appli.elf: build/libs/libuser.a
387        $(MAKE) -C applications/classif
388        mdel -i $(DISK_IMAGE) ::/bin/classif/appli.elf   || true
389        mcopy -o -i $(DISK_IMAGE) applications/classif/appli.elf ::/bin/classif
390
391
392####################################
393### convol   application compilation
394### update convol/appli.elf on virtual disk
395applications/convol/appli.elf: build/libs/libuser.a
396        $(MAKE) -C applications/convol
397        mdel -i $(DISK_IMAGE) ::/bin/convol/appli.elf  || true
398        mcopy -o -i $(DISK_IMAGE) applications/convol/appli.elf ::/bin/convol
399
400########################################
401### coproc   application compilation
402### update coproc/appli.elf on virtual disk
403applications/coproc/appli.elf: build/libs/libuser.a
404        $(MAKE) -C applications/coproc
405        mdel -i $(DISK_IMAGE) ::/bin/coproc/appli.elf  || true
406        mcopy -o -i $(DISK_IMAGE) applications/coproc/appli.elf ::/bin/coproc
407
408########################################
409### coremark compilation
410applications/coremark/appli.elf: build/libs/libuser.a
411        $(MAKE) -C applications/coremark
412        mdel -i $(DISK_IMAGE) ::/bin/coremark/appli.elf  || true
413        mcopy -o -i $(DISK_IMAGE) applications/coremark/appli.elf ::/bin/coremark
414
415
416########################################
417### dhrystone   application compilation
418### update dhrystone/appli.elf on virtual disk
419applications/dhrystone/appli.elf: build/libs/libuser.a
420        $(MAKE) -C applications/dhrystone
421        mdel -i $(DISK_IMAGE) ::/bin/dhrystone/appli.elf  || true
422        mcopy -o -i $(DISK_IMAGE) applications/dhtystone/appli.elf ::/bin/dhrystone
423
424########################################
425### display  application compilation
426### update display/appli.elf on virtual disk
427applications/display/appli.elf: build/libs/libuser.a
428        $(MAKE) -C applications/display
429        mdel -i $(DISK_IMAGE) ::/bin/display/appli.elf   || true
430        mcopy -o -i $(DISK_IMAGE) applications/display/appli.elf ::/bin/display
431
432########################################
433### gameoflife  application compilation
434### update gameoflife/appli.elf on virtual disk
435applications/gameoflife/appli.elf: build/libs/libuser.a
436        $(MAKE) -C applications/gameoflife
437        mdel -i $(DISK_IMAGE) ::/bin/gameoflife/appli.elf   || true
438        mcopy -o -i $(DISK_IMAGE) applications/gameoflife/appli.elf ::/bin/gameoflife
439
440########################################
441### mjpeg  application compilation
442### update mjpeg/appli.elf on virtual disk
443applications/mjpeg/appli.elf: build/libs/libuser.a
444        $(MAKE) -C applications/mjpeg
445        mdel -i $(DISK_IMAGE) ::/bin/mjpeg/appli.elf   || true
446        mcopy -o -i $(DISK_IMAGE) applications/mjpeg/appli.elf ::/bin/mjpeg
447
448########################################
449### ocean  application compilation
450### update ocean/appli.elf on virtual disk
451applications/ocean/appli.elf: build/libs/libmath.a  build/libs/libuser.a
452        cd applications/ocean && $(MAKE) && cd ../..
453        mdel -i $(DISK_IMAGE) ::/bin/ocean/appli.elf   || true
454        mcopy -o -i $(DISK_IMAGE) applications/ocean/appli.elf ::/bin/ocean
455
456########################################
457### raycast application compilation
458### update raycast/appli.elf on virtual disk
459applications/raycast/appli.elf: build/libs/libmath.a build/libs/libuser.a
460        $(MAKE) -C applications/raycast
461        mdel -i $(DISK_IMAGE) ::/bin/raycast/appli.elf   || true
462        mcopy -o -i $(DISK_IMAGE) applications/raycast/appli.elf ::/bin/raycast
463
464########################################
465### rosenfeld  application compilation
466### update rosenfeld/appli.elf on virtual disk
467applications/rosenfeld/appli.elf: build/libs/libuser.a
468        $(MAKE) -C applications/rosenfeld
469        mdel -i $(DISK_IMAGE) ::/bin/rosenfeld/appli.elf   || true
470        mcopy -o -i $(DISK_IMAGE) applications/rosenfeld/appli.elf ::/bin/router
471
472########################################
473### router  application compilation
474### update router/appli.elf on virtual disk
475applications/router/appli.elf: build/libs/libuser.a
476        $(MAKE) -C applications/router
477        mdel -i $(DISK_IMAGE) ::/bin/router/appli.elf   || true
478        mcopy -o -i $(DISK_IMAGE) applications/router/appli.elf ::/bin/router
479
480########################################
481### shell  application compilation
482### update shell/appli.elf on virtual disk
483applications/shell/appli.elf: build/libs/libuser.a
484        $(MAKE) -C applications/shell
485        mdel -i $(DISK_IMAGE) ::/bin/shell/appli.elf   || true
486        mcopy -o -i $(DISK_IMAGE) applications/shell/appli.elf ::/bin/shell
487
488########################################
489### sort  application compilation
490### update sort/appli.elf on virtual disk
491applications/sort/appli.elf: build/libs/libuser.a
492        $(MAKE) -C applications/sort
493        mdel -i $(DISK_IMAGE) ::/bin/sort/appli.elf   || true
494        mcopy -o -i $(DISK_IMAGE) applications/sort/appli.elf ::/bin/sort
495
496########################################
497### transpose compilation
498### update transpose/appli.elf on virtual disk
499applications/transpose/appli.elf: build/libs/libuser.a
500        $(MAKE) -C applications/transpose
501        mdel -i $(DISK_IMAGE) ::/bin/transpose/appli.elf   || true
502        mcopy -o -i $(DISK_IMAGE) applications/transpose/appli.elf ::/bin/transpose
503
Note: See TracBrowser for help on using the repository browser.