source: soft/giet_vm/Makefile @ 776

Last change on this file since 776 was 776, checked in by alain, 10 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
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
[611]12# These parameters should be defined in the params.mk file
[595]13ARCH      ?= pathname
[581]14X_SIZE    ?= 1
15Y_SIZE    ?= 1
[595]16NB_PROCS  ?= 1
[580]17NB_TTYS   ?= 1
[595]18FBF_WIDTH ?= 256
19IOC_TYPE  ?= BDV
[739]20MWR_TYPE  ?= CPY
[611]21APPLIS    ?= shell
[326]22
[595]23# build the list of applications used as argument by genmap
24GENMAP_APPLIS := $(addprefix --,$(APPLIS))
[510]25
[649]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          \
[776]30                 applications/coremark/coremark.py      \
[649]31                 applications/display/display.py        \
32                 applications/dhrystone/dhrystone.py    \
33                 applications/gameoflife/gameoflife.py  \
[739]34                 applications/mjpeg/mjpeg.py            \
[649]35                 applications/ocean/ocean.py            \
[673]36                 applications/raycast/raycast.py        \
[776]37                 applications/rosenfeld/rosenfeld.py    \
[649]38                 applications/router/router.py          \
39                 applications/shell/shell.py            \
40                 applications/sort/sort.py              \
[776]41                 applications/transpose/transpose.py
[326]42
[776]43
44# build the list of applications to be executed (used in the "compile" rule)
[595]45APPLIS_ELF    := $(addsuffix /appli.elf,$(addprefix applications/,$(APPLIS)))
[204]46
[600]47# Build PYTHONPATH
[602]48PYTHONPATH := $(shell find . -name *.py | grep -o "\(.*\)/" | sort -u | tr '\n' :)
[600]49
[595]50# check hardware platform definition
51ifeq ($(wildcard $(ARCH)),)
52$(error please define in ARCH parameter the path to the platform)
53endif
[580]54
[608]55### Rules that don't build a target file
[776]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)
[595]65
[463]66### Objects to be linked for the drivers library
[535]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      \
[380]81               build/drivers/pic_driver.o
82
83### Objects to be linked for kernel.elf
[510]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      \
[258]97               build/kernel/kernel_init.o
[162]98
[258]99### Objects to be linked for boot.elf
[510]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      \
[535]109               build/kernel/irq_handler.o      \
[595]110               build/kernel/sys_handler.o      \
[510]111               build/kernel/switch.o           \
112               build/boot/boot.o               \
[366]113               build/boot/boot_entry.o
[258]114
[585]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      \
[709]122                build/libs/user_lock.o
[585]123
[583]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        \
[667]139                build/libs/math/s_cos.o        \
[595]140                build/libs/math/e_sqrt.o       
[580]141
[162]142
[435]143CFLAGS = -Wall -ffreestanding -mno-gpopt -mips32 -g -O2 \
[776]144                 -fno-delete-null-pointer-checks
[158]145
[258]146GIET_INCLUDE = -Igiet_boot    \
147               -Igiet_kernel  \
148               -Igiet_xml     \
149               -Igiet_fat32   \
150               -Igiet_drivers \
151               -Igiet_common  \
152               -Igiet_libs    \
153               -I.
[158]154
[302]155DISK_IMAGE  := hdd/virt_hdd.dmg
156
[595]157### The Mtools used to build the FAT32 disk image perform a few sanity checks,
[582]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.
[776]161
[582]162MTOOLS_SKIP_CHECK := 1
163
[595]164##################################
[776]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)         
[580]173        mdir -/ -b -i $(DISK_IMAGE) ::/
[160]174
[776]175########################################
176### create build directories for giet_vm
[599]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
[608]186#####################################################
187### make a recursive list of the virtual disk content
188list:
189         mdir -/ -w -i $(DISK_IMAGE) ::/
190
[776]191#####################################################
192### make a file system check for the the virtual disk
193fsck:
194         fsck_msdos $(DISK_IMAGE) 
195
[608]196########################################################
197### copy the files generated by the virtual prototype on
[776]198### the virtual disk "home" directory to the current directory
[608]199extract:
200        mcopy -o -i $(DISK_IMAGE) ::/home .
201
[776]202####################################################
203### delete all binary files from Unix File System
204### but does NOT modify the virtual disk
[608]205clean:
206        rm -f *.o *.elf *.bin *.txt core
207        rm -f hard_config.h giet_vsegs.ld map.bin map.xml
[694]208        rm -rf build/
[611]209        cd applications/classif      && $(MAKE) clean && cd ../..
210        cd applications/convol       && $(MAKE) clean && cd ../..
211        cd applications/coproc       && $(MAKE) clean && cd ../..
[776]212        cd applications/coremark     && $(MAKE) clean && cd ../..
[611]213        cd applications/display      && $(MAKE) clean && cd ../..
214        cd applications/dhrystone    && $(MAKE) clean && cd ../..
215        cd applications/gameoflife   && $(MAKE) clean && cd ../..
[739]216        cd applications/mjpeg        && $(MAKE) clean && cd ../..
[611]217        cd applications/ocean        && $(MAKE) clean && cd ../..
[673]218        cd applications/raycast      && $(MAKE) clean && cd ../..
[776]219        cd applications/rosenfeld    && $(MAKE) clean && cd ../..
[611]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 ../..
[608]224
[776]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
[582]231### This requires the generic LINUX/MacOS script "create_dmg" script
[258]232### written by C.Fuguet. (should be installed in GIET-VM root directory).
[776]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) ::/
[295]271
[595]272#########################################################################
[326]273### mapping generation: map.bin / map.xml / hard_config.h / giet_vsegs.ld
[776]274### update map.bin on virtual disk
[701]275hard_config.h: $(ARCH)/arch.py $(APPLIS_PY)
[510]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) \
[553]282                       --ioc=$(IOC_TYPE)  \
[739]283                       --mwr=$(MWR_TYPE)  \
[510]284                       --giet=.           \
[595]285                       $(GENMAP_APPLIS)   \
[510]286                       --xml=.
[776]287        mcopy -o -i $(DISK_IMAGE) map.bin ::/      || true
[158]288
[583]289################################
290### drivers library compilation
291build/drivers/%.o: giet_drivers/%.c \
292                   giet_drivers/%.h \
293                   hard_config.h    \
294                   giet_config.h
[295]295        $(CC) $(GIET_INCLUDE) $(CFLAGS)  -c -o $@ $<
296
[380]297build/drivers/libdrivers.a: $(DRIVERS_OBJS)
298        $(AR) -rcs $@ $(DRIVERS_OBJS)
299
[374]300##########################
[583]301### fat32 compilation
[258]302build/fat32/fat32.o: giet_fat32/fat32.c \
303                     giet_fat32/fat32.h \
[326]304                     hard_config.h      \
305                     giet_config.h
[258]306        $(CC) $(GIET_INCLUDE) $(CFLAGS)  -c -o $@ $<
307
[583]308##########################
309### common compilation
310build/common/%.o: giet_common/%.c   \
311                  giet_common/%.h   \
312                  hard_config.h     \
313                  giet_config.h
[258]314        $(CC) $(GIET_INCLUDE) $(CFLAGS)  -c -o $@ $<
315
[776]316##########################
[177]317### boot compilation
[776]318### Copy boot.elf into sector 2 of disk image
[326]319build/boot/boot.elf: $(BOOT_OBJS)            \
[380]320                     giet_boot/boot.ld       \
[583]321                     build/drivers/libdrivers.a
[582]322        $(LD) -o $@ -T giet_boot/boot.ld $(BOOT_OBJS) -Lbuild/drivers -ldrivers
[189]323        $(DU) -D $@ > $@.txt
[776]324        dd if=build/boot/boot.elf of=$(DISK_IMAGE) seek=2 conv=notrunc
325   
[158]326
[258]327build/boot/boot.o: giet_boot/boot.c          \
328                   giet_common/utils.h       \
329                   giet_fat32/fat32.h        \
[289]330                   giet_common/vmem.h        \
[326]331                   hard_config.h             \
[366]332                   giet_config.h
[258]333        $(CC) $(GIET_INCLUDE) $(CFLAGS)  -c -o $@ $<
[158]334
[366]335build/boot/boot_entry.o: giet_boot/boot_entry.S \
336                         hard_config.h
337        $(CC) $(GIET_INCLUDE) $(CFLAGS)  -c -o $@ $<
338
[776]339##########################
340### kernel.elf compilation
341### update kernel.elf on virtual disk
[326]342build/kernel/kernel.elf: $(KERNEL_OBJS)        \
[380]343                         giet_kernel/kernel.ld \
344                         build/drivers/libdrivers.a
[582]345        $(LD) -o $@ -T giet_kernel/kernel.ld $(KERNEL_OBJS) -Lbuild/drivers -ldrivers
346        $(DU) -D $@ > $@.txt
[776]347        mdel -i $(DISK_IMAGE) ::/bin/kernel/kernel.elf   || true
348        mcopy -i $(DISK_IMAGE) build/kernel/kernel.elf ::/bin/kernel
[158]349
[326]350build/kernel/%.o: giet_kernel/%.c    \
351                  hard_config.h      \
[582]352                  giet_config.h
[258]353        $(CC) $(GIET_INCLUDE) $(CFLAGS)  -c -o $@ $<
354
[326]355build/kernel/%.o: giet_kernel/%.s    \
356                  hard_config.h      \
[582]357                  giet_config.h
[258]358        $(CC) $(GIET_INCLUDE) $(CFLAGS)  -c -o $@ $<
359
[776]360############################
[585]361### user library compilation
[595]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 $@ $<
[258]367
[585]368build/libs/libuser.a: $(USER_OBJS)
369        $(AR) -rcs $@ $^
370
[776]371############################
[583]372### math library compilation
373build/libs/math/%.o: giet_libs/math/%.c             \
374                     giet_libs/math/math_private.h  \
375                     giet_libs/math.h
[595]376        $(CC) $(CFLAGS) $(GIET_INCLUDE) -c -o $@ $<
[258]377
[583]378build/libs/libmath.a: $(MATH_OBJS)
[580]379        $(AR) -rcs $@ $^
380
[776]381#####################################
[595]382### classif   application compilation
[776]383### update classif/appli.elf on virtual disk
[609]384applications/classif/appli.elf: build/libs/libuser.a
[595]385        $(MAKE) -C applications/classif
[776]386        mdel -i $(DISK_IMAGE) ::/bin/classif/appli.elf   || true
387        mcopy -o -i $(DISK_IMAGE) applications/classif/appli.elf ::/bin/classif
[189]388
[776]389
390####################################
[595]391### convol   application compilation
[776]392### update convol/appli.elf on virtual disk
[609]393applications/convol/appli.elf: build/libs/libuser.a
[595]394        $(MAKE) -C applications/convol
[776]395        mdel -i $(DISK_IMAGE) ::/bin/convol/appli.elf  || true
396        mcopy -o -i $(DISK_IMAGE) applications/convol/appli.elf ::/bin/convol
[189]397
[374]398########################################
[595]399### coproc   application compilation
[776]400### update coproc/appli.elf on virtual disk
[609]401applications/coproc/appli.elf: build/libs/libuser.a
[595]402        $(MAKE) -C applications/coproc
[776]403        mdel -i $(DISK_IMAGE) ::/bin/coproc/appli.elf  || true
404        mcopy -o -i $(DISK_IMAGE) applications/coproc/appli.elf ::/bin/coproc
[189]405
[595]406########################################
[776]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########################################
[595]415### dhrystone   application compilation
[776]416### update dhrystone/appli.elf on virtual disk
[609]417applications/dhrystone/appli.elf: build/libs/libuser.a
[595]418        $(MAKE) -C applications/dhrystone
[776]419        mdel -i $(DISK_IMAGE) ::/bin/dhrystone/appli.elf  || true
420        mcopy -o -i $(DISK_IMAGE) applications/dhtystone/appli.elf ::/bin/dhrystone
[189]421
[374]422########################################
[595]423### display  application compilation
[776]424### update display/appli.elf on virtual disk
[609]425applications/display/appli.elf: build/libs/libuser.a
[595]426        $(MAKE) -C applications/display
[776]427        mdel -i $(DISK_IMAGE) ::/bin/display/appli.elf   || true
428        mcopy -o -i $(DISK_IMAGE) applications/display/appli.elf ::/bin/display
[189]429
[374]430########################################
[595]431### gameoflife  application compilation
[776]432### update gameoflife/appli.elf on virtual disk
[609]433applications/gameoflife/appli.elf: build/libs/libuser.a
[595]434        $(MAKE) -C applications/gameoflife
[776]435        mdel -i $(DISK_IMAGE) ::/bin/gameoflife/appli.elf   || true
436        mcopy -o -i $(DISK_IMAGE) applications/gameoflife/appli.elf ::/bin/gameoflife
[251]437
[595]438########################################
[739]439### mjpeg  application compilation
[776]440### update mjpeg/appli.elf on virtual disk
[739]441applications/mjpeg/appli.elf: build/libs/libuser.a
442        $(MAKE) -C applications/mjpeg
[776]443        mdel -i $(DISK_IMAGE) ::/bin/mjpeg/appli.elf   || true
444        mcopy -o -i $(DISK_IMAGE) applications/mjpeg/appli.elf ::/bin/mjpeg
[739]445
446########################################
[595]447### ocean  application compilation
[776]448### update ocean/appli.elf on virtual disk
[609]449applications/ocean/appli.elf: build/libs/libmath.a  build/libs/libuser.a
[598]450        cd applications/ocean && $(MAKE) && cd ../..
[776]451        mdel -i $(DISK_IMAGE) ::/bin/ocean/appli.elf   || true
452        mcopy -o -i $(DISK_IMAGE) applications/ocean/appli.elf ::/bin/ocean
[251]453
[374]454########################################
[673]455### raycast application compilation
[776]456### update raycast/appli.elf on virtual disk
[673]457applications/raycast/appli.elf: build/libs/libmath.a build/libs/libuser.a
458        $(MAKE) -C applications/raycast
[776]459        mdel -i $(DISK_IMAGE) ::/bin/raycast/appli.elf   || true
460        mcopy -o -i $(DISK_IMAGE) applications/raycast/appli.elf ::/bin/raycast
[673]461
462########################################
[776]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########################################
[595]471### router  application compilation
[776]472### update router/appli.elf on virtual disk
[609]473applications/router/appli.elf: build/libs/libuser.a
[595]474        $(MAKE) -C applications/router
[776]475        mdel -i $(DISK_IMAGE) ::/bin/router/appli.elf   || true
476        mcopy -o -i $(DISK_IMAGE) applications/router/appli.elf ::/bin/router
[241]477
[595]478########################################
479### shell  application compilation
[776]480### update shell/appli.elf on virtual disk
[609]481applications/shell/appli.elf: build/libs/libuser.a
[595]482        $(MAKE) -C applications/shell
[776]483        mdel -i $(DISK_IMAGE) ::/bin/shell/appli.elf   || true
484        mcopy -o -i $(DISK_IMAGE) applications/shell/appli.elf ::/bin/shell
[241]485
[374]486########################################
[595]487### sort  application compilation
[776]488### update sort/appli.elf on virtual disk
[609]489applications/sort/appli.elf: build/libs/libuser.a
[595]490        $(MAKE) -C applications/sort
[776]491        mdel -i $(DISK_IMAGE) ::/bin/sort/appli.elf   || true
492        mcopy -o -i $(DISK_IMAGE) applications/sort/appli.elf ::/bin/sort
[256]493
[374]494########################################
[295]495### transpose compilation
[776]496### update transpose/appli.elf on virtual disk
[609]497applications/transpose/appli.elf: build/libs/libuser.a
[595]498        $(MAKE) -C applications/transpose
[776]499        mdel -i $(DISK_IMAGE) ::/bin/transpose/appli.elf   || true
500        mcopy -o -i $(DISK_IMAGE) applications/transpose/appli.elf ::/bin/transpose
[295]501
Note: See TracBrowser for help on using the repository browser.