source: soft/giet_vm/Makefile @ 600

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

Makefile: generate PYTHONPATH and .py deps

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