(toppers-etrobo 60) サブディレクトリのソースコードを取り込むための追加

Takayuki TOGOU ishidai @ mbr.nifty.com
2016年 6月 2日 (木) 12:35:43 JST


ETロボコン2016関西地区実行委員の都甲です。
ML初投稿です。

EV3RT Beta 6-2の sdk/workspace にあるサンプルコードには、
サブディレクトリの存在する場合がなく、全てのサンプルでファイルが
フラットに配置されております。
先日ETロボコン地区MLにてサブディレクトリのある場合もビルドしたい
旨の相談を受けて、その時は個別対応でクリアしたのですが、EV3RT の
本式として「サブディレクトリはどうなっているか」調べてみました。
開発環境は Cygwin + GNUARM 4.8 2014q3 です。

sdk/common/Makefile.img の「ソースファイルのあるディレクトリに
関する定義」のあたりで、アプリケーションディレクトリの下位の
include ディレクトリと src ディレクトリのパスを取得しているところが
あり、このディレクトリの作法を守ってサブディレクトリを作り、
Makefile.incにオブジェクトファイルを追加することで、make img=*
のビルドはできるようです。

(helloev3の場合)
sdk
└─workspace
       ├─helloev3
       └─helloev3-subdir
           |  ├─include
           |  └─src
           └─subdir
               ├─include
               └─src

一方 make app=* でのビルドでは、make img=* と同じ対応を取っても
サブディレクトリが見つけられずに失敗します。そこで「ソース
ファイルのあるディレクトリに関する定義」の一部を応用して、
sdk/common/Makefile.app でもサブディレクトリを取り込めるように
改修を加えました。

diff -r -u hrp2.orig/sdk/common/Makefile.app hrp2/sdk/common/Makefile.app
--- hrp2.orig/sdk/common/Makefile.app	2016-03-17 08:45:03.000000000 +0900
+++ hrp2/sdk/common/Makefile.app	2016-05-30 17:42:02.040405600 +0900
@@ -45,6 +45,12 @@
     OMIT_DEBUG_INFO = 1

     #
+#  ソースファイルのあるディレクトリに関する定義
+#
+INCLUDES += $(foreach dir,$(shell find @(APPLDIR) -type d -name  
include),-I$(dir))
+SRCDIRS += $(foreach dir,$(shell find @(APPLDIR) -type d -name src),$(dir))
+
+#
     # Include common part
     #
     BUILD_LOADABLE_MODULE = 1

これで make img=* と同様に make app=* でもビルドできるように
なりました。
beta4やbeta5の場合は、サンプルを流用して Makefile.appmod に
同様の修正を加えると make mod=* でもサブディレクトリが使える
ようになります。

以上ご検討くださいませ。

-- 
都甲 隆之 <ishidai @ mbr.nifty.com>