source: soft/giet_vm/Makefile @ 608

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

Makefile: fix .PHONY targets and group them

genmap was always executed.

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