source: soft/giet_vm/Makefile @ 776

Last change on this file since 776 was 776, checked in by alain, 9 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.