(toppers-users 250) ターゲット用の cpp 使用で cfg エラー

Naoki Saito saito @ nmiri.city.nagoya.jp
2001年 8月 15日 (水) 12:12:58 JST


はじめまして。
斉藤@名市工研と申します。

http://www.ertl.jp/TOPPERS/download.html
より TOPPERS/JSPカーネル Release 1.1 (patchlevel=1)
をダウンロードし、りぬくす工房さん
http://www.si-linux.com/index.html
のSH3ボードCAT68701(http://www.si-linux.com/cat/index.html)
で動作させることを考えています。

ftp://sourceware.cygnus.com/
からダウンロードした
binutils-2.11.2.tar.bz2
gcc-core-3.0.tar.bz2
newlib-1.9.0.tar.gz
を使い、サンプルのコンパイルまではエラー無く
出来るようになりました。

> pre-define されているマクロも、ターゲットによって微妙に
> 違いますから、ターゲット用の cppを使うようにしたほうが、
> より安全だと思います。如何でしょうか。

上記環境(GCC 3.0)で作成したターゲット用のcppを
サンプルプログラムと同じディレクトリのMakefileにおいて
指定し、 make してみたところその出力メッセージの中で
以下の部分を見付けました。(適当に改行しています)

(ちなみに -I../config/sh3/cat68701 というのは
jsp/config/sh3/dvesh7700/ をコピーしてつくった
ディレクトリですのでここではあまり気にしないでください。)

/usr/local/bin/sh-hitachi-elf-cpp -I. -I../include
   -I../config/sh3 -I../config/sh3/cat68701
   -DCONFIG_60MHZ  -DWITH_STUB sample1.cfg | ../cfg/cfg
Program was aborted with fatal errors
(null)(13) : [#9"../systask/timer.cfg"INCLUDE] その静的APIはありません

そこで、プリプロセッサの出力を見てみると

-----(ここから)-----

# 9 "sample1.cfg"
INCLUDE("\"sample1.h\"");
CRE_TSK(TASK1, { TA_HLNG, (VP_INT) 1, task, MID_PRIORITY, STACK_SIZE, NULL });
CRE_TSK(TASK2, { TA_HLNG, (VP_INT) 2, task, MID_PRIORITY, STACK_SIZE, NULL });
CRE_TSK(TASK3, { TA_HLNG, (VP_INT) 3, task, MID_PRIORITY, STACK_SIZE, NULL });
CRE_TSK(MAIN_TASK, { TA_HLNG|TA_ACT, 0, main_task, MAIN_PRIORITY,
                        STACK_SIZE, NULL });
DEF_TEX(TASK1, { TA_HLNG, tex_routine });
CRE_CYC(CYCHDR1, { TA_HLNG, 0, cyclic_handler, 2000, 0 });
DEF_EXC(224, { TA_HLNG, LoadAddressError_handler} );

# 1 "../systask/timer.cfg" 1
# 9 "../systask/timer.cfg"
INCLUDE("\"timer.h\"");
ATT_INI({ TA_HLNG, 0, timer_initialize });
DEF_INH(INHNO_TIMER, { TA_HLNG, timer_handler });
# 20 "sample1.cfg" 2

-----(ここまで)-----

の様になっており、これをcfgに渡すとエラーが
出ているようです。

cpp に -P オプションをつけて "#" で始まる行を
出力しないようにしたところ、エラーは出なくなりました。

上の出力で
# 9 "../systask/timer.cfg"
となっている行を削除してcfgに渡してもも
エラーは出なくなりました。

ターゲット用でないcpp(このときはエラーは出なかった)の出力との違いも
(空白等の違いを除けば)この行だけの様です。