(toppers-users 3191) [cq_starm_gcc]makefile.dependが不正になりmake出来ない件

中村 norichan1108 @ gmail.com
2010年 5月 7日 (金) 17:03:07 JST


こんにちは、中村です。

先日は、H8の件で大変お世話になりました。
今回Cortex-M3を使ってTOPPERS/ASPにチャレンジしています。

自分の環境において1つ問題がおきましたので報告しておきます。
既に既知・対応済みでしたらもうしわけありません。

・cygwin 1.7(make)
・CodeSourcery G++ Lite 2010q1 188(gcc)

という組み合わせで、Windows上に開発環境を構築しました。
gccは標準のインストール先である、
C:\Program Files\CodeSourcery\Sourcery G++ Lite
にインストールされています。

この環境で、CONFIG、make dependは問題なく通るのですが、
生成されたmakefile.dependを使ってのmakeが正常に通らない不具合に
ぶつかりました。

$ perl ../asp/configure -T cq_starm_gcc
configure: Generating Makefile from ../asp/sample/Makefile.
configure: Generating sample1.c from ../asp/sample/sample1.c.
configure: Generating sample1.h from ../asp/sample/sample1.h.
configure: Generating sample1.cfg from ../asp/sample/sample1.cfg.

$ make depend
rm -f Makefile.depend
arm-none-eabi-gcc -S  -mcpu=cortex-m3 -mthumb  -Wall -g -O2
-DTOPPERS_LABEL_ASM -I. -I../asp/include -I../asp/arch -I../asp
-I../asp/target/cq_starm_gcc -I../asp/arch/arm_m_gcc/ -DALLFUNC
-fno-strict-aliasing -mcpu=cortex-m3 -I../asp/kernel
../asp/arch/arm_m_gcc/makeoffset.c
/usr/bin/perl ../asp/utils/genoffset makeoffset.s > offset.h
../asp/cfg/cfg/cfg --pass 1 --kernel asp -I. -I../asp/include
-I../asp/arch -I../asp  -I../asp/target/cq_starm_gcc
-I../asp/arch/arm_m_gcc/ --api-table ../asp/kernel/kernel_api.csv
--cfg1-def-table ../asp/kernel/kernel_def.csv  --cfg1-def-table
../asp/target/cq_starm_gcc/target_def.csv --cfg1-def-table
../asp/arch/arm_m_gcc/prc_def.csv sample1.cfg
arm-none-eabi-gcc -c  -mcpu=cortex-m3 -mthumb  -Wall -g -O2
-DTOPPERS_LABEL_ASM -I. -I../asp/include -I../asp/arch -I../asp
-I../asp/target/cq_starm_gcc -I../asp/arch/arm_m_gcc/   -DALLFUNC
-fno-strict-aliasing -mcpu=cortex-m3 -I../asp/kernel cfg1_out.c
arm-none-eabi-gcc -c  -mcpu=cortex-m3 -mthumb  -Wall -g -O2
-DTOPPERS_LABEL_ASM -I. -I../asp/include -I../asp/arch -I../asp
-I../asp/target/cq_starm_gcc -I../asp/arch/arm_m_gcc/ -DALLFUNC
-fno-strict-aliasing -mcpu=cortex-m3 -I../asp/kernel
../asp/arch/arm_m_gcc/start.S
arm-none-eabi-gcc  -mcpu=cortex-m3 -mthumb  -Wall -g -O2
-DTOPPERS_LABEL_ASM -I. -I../asp/include -I../asp/arch -I../asp
-I../asp/target/cq_starm_gcc -I../asp/arch/arm_m_gcc/ -nostdlib
-nostdlib   -Wl,-Ttext,0x08000000 -Wl,-Tdata,0x20000000 -T
../asp/target/cq_starm_gcc/cq_starm.ld  -o cfg1_out.exe \
                                                 cfg1_out.o
arm-none-eabi-nm -C cfg1_out.exe > cfg1_out.syms
arm-none-eabi-objcopy -O srec -S cfg1_out.exe cfg1_out.srec
../asp/cfg/cfg/cfg --pass 2 --kernel asp -I. -I../asp/include
-I../asp/arch -I../asp  -I../asp/target/cq_starm_gcc
-I../asp/arch/arm_m_gcc/ \
                                -T ../asp/target/cq_starm_gcc/target.tf
--api-table ../asp/kernel/kernel_api.csv --cfg1-def-table
../asp/kernel/kernel_def.csv  --cfg1-def-table
../asp/target/cq_starm_gcc/target_def.csv --cfg1-def-table
../asp/arch/arm_m_gcc/prc_def.csv sample1.cfg
touch kernel_cfg.timestamp
Generating Makefile.depend.

-- ここまでは問題ない --

$ make
cygwin warning:
  MS-DOS style path detected: /cygdrive/c\\program
files\\codesourcery\\sourcery
  Preferred POSIX equivalent is: /cygdrive/c//program
files//codesourcery//sourcery
  CYGWIN environment variable option "nodosfilewarning" turns off this
warning.
  Consult the user's guide for more details about POSIX paths:
    http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
make: *** No rule to make target `/cygdrive/c\\program
files\\codesourcery\\sourcery', needed by `cfg1_out.o'.  Stop.

ここでNo ruleとなってしまう。

cygwin warningはCYGWIN環境変数にnododfilewarningを設定すれば消えるので
問題はないのですが、makeのルールにおいて依存関係のパスが途中で切れてし
まっています。その為、ルールが無いよ!と怒られているようです。

cfg1_out.o: ../asp/target/cq_starm_gcc/target_unrename.h \
	../asp/arch/arm_m_gcc/prc_timer.cfg \
	../asp/arch/arm_m_gcc/prc_cfg1_out.h \
	../asp/target/cq_starm_gcc/target_rename.h \
	../asp/syssvc/syslog.h ../asp/arch/arm_m_gcc/prc_stddef.h \
	sample1.h ../asp/arch/arm_m_gcc/prc_sil.h \
	../asp/kernel/kernel_int.h \
	../asp/target/cq_starm_gcc/cq_starm.h \
	../asp/syssvc/syslog.cfg ../asp/arch/arm_m_gcc/prc_test.h \
	../asp/kernel/mailbox.h ../asp/syssvc/serial.cfg \
	../asp/syssvc/serial.h ../asp/kernel/kernel_unrename.h \
	../asp/target/cq_starm_gcc/target_stddef.h \
	/cygdrive/c\\program\ files\\codesourcery\\sourcery g++
lite\\bin\\../lib/gcc/arm-none-eabi/4.4.1/../../../../arm-none-eabi/include/machine/ieeefp.h
\
	../asp/kernel/allfunc.h ../asp/syssvc/banner.cfg \
	../asp/arch/arm_m_gcc/prc_kernel.h \
	/cygdrive/c\\program\ files\\codesourcery\\sourcery g++
lite\\bin\\../lib/gcc/arm-none-eabi/4.4.1/include-fixed/limits.h \
	../asp/include/t_syslog.h ../asp/kernel/semaphore.h \
	/cygdrive/c\\program\ files\\codesourcery\\sourcery g++
lite\\bin\\../lib/gcc/arm-none-eabi/4.4.1/include/stddef.h \
	../asp/syssvc/banner.h sample1.cfg ../asp/kernel/interrupt.h \
	../asp/target/cq_starm_gcc/target_cfg1_out.h \

実際のmakefile.dependを見てみると上のようにパス記述が少し変です。

/cygdrive/c\\program\ files\\codesourcery\\sourcery g++ lite\\

c\\program\ files\\のスペースには\が付いているのに、
\\sourcery g++ lite\\のスペースには\が付いていません。
その為、\\sourceryで切れて認識されてしまっているようです。
makedepのソースをみると
$filename =~ s/ /\\ /;
となっていて、最初のスペースにしか\をつけないようになっています。


そこで、makedepを少し手直ししました。

Index: makedep
===================================================================
--- makedep	(リビジョン 18)
+++ makedep	(作業コピー)
@@ -132,10 +132,11 @@
 	while ($line = <INPUT>) {
 		if ($line =~ /^\#\s*([0-9]+)\s*\"([^\"]+)\"/) {
 			$filename = $2;
-			$filename =~ s/ /\\ /;
+			$filename =~ s/ /\\ /g;
 			if ($filename !~ /^\<.*\>$/ && $filename !~ /\/$/) {
 				if ($cygwin) {
 					$filename =~ s/^([a-z]):/\/cygdrive\/$1/;
+					$filename =~ s/\\\\/\//g;
 				}
 				$dependlist{$filename} = 1;
 			}


以上の修正で、下記の通りパスの問題がなくなるようです。

	/cygdrive/c/program\ files/codesourcery/sourcery\ g++\
lite/bin/../lib/gcc/arm-none-eabi/4.4.1/../../../../arm-none-eabi/include/_ansi.h
\
	../asp/arch/arm_m_gcc/prc_stddef.h sample1.h \
	../asp/arch/arm_m_gcc/prc_sil.h ../asp/kernel/kernel_int.h \
	../asp/target/cq_starm_gcc/cq_starm.h \
	../asp/syssvc/syslog.cfg ../asp/arch/arm_m_gcc/prc_test.h \
	../asp/kernel/mailbox.h ../asp/syssvc/serial.cfg \
	../asp/syssvc/serial.h ../asp/kernel/kernel_unrename.h \
	../asp/target/cq_starm_gcc/target_stddef.h \
	/cygdrive/c/program\ files/codesourcery/sourcery\ g++\
lite/bin/../lib/gcc/arm-none-eabi/4.4.1/include/stddef.h \
	/cygdrive/c/program\ files/codesourcery/sourcery\ g++\
lite/bin/../lib/gcc/arm-none-eabi/4.4.1/../../../../arm-none-eabi/include/limits.h
\
	../asp/kernel/allfunc.h \
	/cygdrive/c/program\ files/codesourcery/sourcery\ g++\
lite/bin/../lib/gcc/arm-none-eabi/4.4.1/include-fixed/syslimits.h \
	../asp/syssvc/banner.cfg ../asp/arch/arm_m_gcc/prc_kernel.h \


#サンダーバードの自動改行がものすごくうざいのですが・・・(--;