FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://sites.google.com/site/fpgadevelopindex/

MicroPython試行(1. ダウンロードとビルド → RISC-Vツールチェインでコンパイルするとどうなる?)

ちょっとやりたいことがあって、MicroPythonをダウンロードしてビルドした。

github.com

sudo apt install -y libffi-dev
git clone https://github.com/micropython/micropython.git
cd micropython/
git submodule update --init
make axtls
make

なるほど、MicroPython、それなりにでっかい。

size -A ./micropython
./micropython  :
section                size      addr
.interp                  28   4194872
.note.ABI-tag            32   4194900
.note.gnu.build-id       36   4194932
.gnu.hash               380   4194968
.dynsym                3864   4195352
.dynstr                1586   4199216
.gnu.version            322   4200802
.gnu.version_r          208   4201128
.rela.dyn               312   4201336
.rela.plt              3144   4201648
.init                    26   4204792
.plt                   2112   4204832
.plt.got                  8   4206944
.text                234112   4206960
.fini                     9   4441072
.rodata               76929   4441088
.eh_frame_hdr         11740   4518020
.eh_frame             57748   4529760
.init_array               8   6688208
.fini_array               8   6688216
.jcr                      8   6688224
.dynamic                528   6688232
.got                      8   6688760
.got.plt               1072   6688768
.data                  4288   6689856
.bss                   2464   6694144
.comment                 52         0
Total                401032

なるほど、次に、QEMU-ARMでは?

cd ../qemu-arm
make
...
CC ../../lib/libm/sf_ldexp.c
CC ../../lib/libm/asinfacosf.c
CC ../../lib/libm/atanf.c
CC ../../lib/libm/atan2f.c
CC ../../lib/utils/sys_stdio_mphal.c
CC main.c
/opt/Xilinx/SDK/2017.1/gnu/aarch32/lin/gcc-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/bin/ld: -lc_nano が見つかりません
collect2: error: ld returned 1 exit status

あれ、Xilinxのツール使ってしまった。ってか-lc_nanoって何だろう?

先に進む。RISC-V用のビルドディレクトリを作ってみる。

cd ../
cp qemu-arm qemu-riscv -r
cd qemu-riscv
make

うーん、途中で失敗した。

CC ../../py/emitinlinextensa.c
CC ../../py/formatfloat.c
CC ../../py/parsenumbase.c
CC ../../py/parsenum.c
CC ../../py/emitglue.c
CC ../../py/persistentcode.c
CC ../../py/runtime.c
CC ../../py/runtime_utils.c
CC ../../py/scheduler.c
CC ../../py/nativeglue.c
../../py/nativeglue.c:158:5: error: 'nlr_push' undeclared here (not in a function)
     nlr_push,
     ^~~~~~~~
../../py/nativeglue.c:159:5: error: 'nlr_pop' undeclared here (not in a function)
     nlr_pop,
     ^~~~~~~
../../py/mkrules.mk:47: ターゲット 'build/py/nativeglue.o' のレシピで失敗しました
make: *** [build/py/nativeglue.o] エラー 1

ちょっと先は長そうだ。