source: soft/giet_vm/Makefile @ 599

Last change on this file since 599 was 599, checked in by guerin, 9 years ago

Makefile: create temporary directories

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