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を指定しないしないようにしたら,期待通りの結果が得られた.