ch32funのMakefile
ch32funで作ったプログラムのmapファイルを見ていたら,使っていないはずの関数が残っていたので,なんでだろうと思って調べてみたら,Makefileのオプションの指定が間違っていたことが分かった.
別のフォルダにあるライブラリも含めないといけなかったので,それをMakefile中のCFLAGSで指定し, さらに最適化して使っていない関数を除去しようと,以下のように指定していた.
CFLAGS += -Os -flto
理由はよく理解していないが,さらに以下のオプションを加えないと,使っていない関数が適切に除去できなかった.
CFLAGS += -ffunction-sections -fdata-sections
ch32funのexampleの多くでは,これらのオプションの指定はしていない. 調べてみると,ch32fun.mkの中では,以下のような記述がある.
CFLAGS?=-g -Os -flto -ffunction-sections -fdata-sections -fmessage-length=0 -msmall-data-limit=8 -fno-tree-loop-distribute-patterns
しかし,Makefile中でCFLAGSの設定したことによって,この設定が無効になってしまったようだ. Makefileで,ライブラリについての情報はEXTRA_CFLAGSに書くようにして,CFLAGSを指定しないしないようにしたら,期待通りの結果が得られた.