source: rtos_arduino/trunk/asp_1.9.2/configure@ 136

Last change on this file since 136 was 136, checked in by ertl-honda, 8 years ago

ライブラリとOS及びベーシックなサンプルの追加.

File size: 8.6 KB
Line 
1#! /usr/bin/perl
2#
3# TOPPERS Software
4# Toyohashi Open Platform for Embedded Real-Time Systems
5#
6# Copyright (C) 2001-2003 by Embedded and Real-Time Systems Laboratory
7# Toyohashi Univ. of Technology, JAPAN
8# Copyright (C) 2006-2012 by Embedded and Real-Time Systems Laboratory
9# Graduate School of Information Science, Nagoya Univ., JAPAN
10#
11# 上記著作権者
12は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
13# ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
14# 変・再é…
15å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
16# (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
17# 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
18# スコード中に含まれていること.
19# (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
20# 用できる形で再é…
21å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
22å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
23# 者
24マニュアルなど)に,上記の著作権表示,この利用条件および下記
25# の無保証規定を掲載すること.
26# (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
27# 用できない形で再é…
28å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
29# と.
30# (a) 再é…
31å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
32マニュアルなど)に,上記の著
33# 作権表示,この利用条件および下記の無保証規定を掲載すること.
34# (b) 再é…
35å¸ƒã®å½¢æ…
36‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
37# 報告すること.
38# (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
39# 害からも,上記著作権者
40およびTOPPERSプロジェクトをå…
41è²¬ã™ã‚‹ã“と.
42# また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
43# 由に基づく請求からも,上記著作権者
44およびTOPPERSプロジェクトを
45# å…
46è²¬ã™ã‚‹ã“と.
47#
48# 本ソフトウェアは,無保証で提供されているものである.上記著作権者
49お
50# よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
51# に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
52# アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
53# の責任を負わない.
54#
55# @(#) $Id: configure 2424 2012-11-11 08:23:22Z ertl-hiro $
56#
57
58use Getopt::Std;
59
60# オプションの定義
61#
62# -T <target> ターゲット名(必
63須)
64# -A <applname> アプリケーションプログラム名(デフォルトはsample1)
65# -a <appldir> アプリケーションのディレクトリ名
66# -U <applobjs> 他のアプリケーションプログラムファイル
67# (.oファイル名で指定.複数指定可)
68# -S <syssvcobjs> システムサービスのプログラムファイル
69# (.oファイル名で指定.複数指定可)
70# -L <kernel_lib> カーネルライブラリ(libkernel.a)のディレクトリ名
71# (省略した場合,カーネルライブラリもmakeする)
72# -f カーネルを関数単位でコンパイルするかどうかの指定
73# -D <srcdir> カーネル等のソースの置かれているディレクトリ
74# -l <srclang> プログラミング言語(現時点ではcとc++のみサポート)
75# -t <templatedir> テンプレートディレクトリの指定(デフォルトはsample)
76# -m <makefile> テンプレートMakefile名の指定(デフォルトはMakefile)
77# -d <dbgenv> 実行環境の名称
78# -r トレースログ記録のサンプルコードを使用するかどうか
79# の指定
80# -p <perl> perlのパス名(明示的に指定する場合)
81# -g <cfg> コンフィギュレータ(cfg)のパス名
82# -P <num> プロセッサ数(マルチプロセッサ対応カーネルの場合)
83# -o <options> å…
84±é€šã‚³ãƒ³ãƒ‘イルオプション(COPTSに追加)
85# -O <options> å…
86±é€šã‚·ãƒ³ãƒœãƒ«å®šç¾©ã‚ªãƒ—ション(CDEFSに追加)
87# -k <options> å…
88±é€šãƒªãƒ³ã‚«ã‚ªãƒ—ション(LDFLAGS等に追加)
89
90# 使用例(1)
91#
92# % ../configure -T dve68k_gcc -D GDB_STUB -A perf1 -a ../test -U histogram.o
93#
94# 使用例(2)
95#
96# % ../configure -T macosx_gcc -L .
97# アプリケーションプログラムは sample1 になる.
98
99#
100# オプションの処理
101#
102getopt("TAaUSLDltmdpgPoOk");
103
104#
105# 変数の初期化
106#
107
108$target = $opt_T;
109$applname = $opt_A ? $opt_A : "sample1";
110$appldir = $opt_a ? $opt_a : "";
111$applobjs = $opt_U ? $opt_U : "";
112$syssvcobjs = $opt_S ? $opt_S : "";
113$kernel_lib = $opt_L ? $opt_L : "";
114$kernel_funcobjs = $opt_f ? "true" : "";
115$srclang = $opt_l ? $opt_l : "c";
116$makefile = $opt_m ? $opt_m : "Makefile";
117$dbgenv = $opt_d ? "TOPPERS_".$opt_d : "";
118$enable_trace = $opt_r ? "true" : "";
119$prc_num = $opt_P ? $opt_P : "";
120$copts = $opt_o ? $opt_o : "";
121$cdefs = $opt_O ? $opt_O : "";
122$ldflags = $opt_k ? $opt_k : "";
123
124#
125# オブジェクトファイル名の拡張子を返す
126#
127sub get_objext {
128 if ($^O eq 'cygwin') {
129 return("exe");
130 }
131 else {
132 return("");
133 }
134}
135
136#
137# プログラムの場所を検索する
138#
139sub get_path {
140 my($progname, @pathlist) = @_;
141 my($path);
142
143 foreach $path (@pathlist) {
144 if (-x $path."/".$progname) {
145 return($path."/".$progname);
146 }
147 }
148 return("");
149}
150
151#
152# ファイルを変換する
153#
154sub convert {
155 my($infile, $outfile) = @_;
156 my($line);
157
158 print STDERR "configure: Generating $outfile from $infile.\n";
159 if (-f $outfile) {
160 print STDERR "configure: $outfile exists.",
161 " Save as $outfile.bak.\n";
162 rename($outfile, $outfile.".bak");
163 }
164 unless (open(INFILE, $infile)) {
165 print STDERR "configure: can't open $infile\n";
166 exit(1);
167 }
168 unless (open(OUTFILE, "> ".$outfile)) {
169 print STDERR "configure: can't open $outfile\n";
170 exit(1);
171 }
172
173 while ($line = <INFILE>) {
174 chop $line;
175 while ($line =~ /^(.*)\@\(([A-Za-z_]+)\)(.*)$/) {
176 $line = $1.$vartable{$2}.$3;
177 }
178 print OUTFILE $line,"\n";
179 }
180
181 close(INFILE);
182 close(OUTFILE);
183}
184
185#
186# サンプルを見つけてファイルを生成する
187#
188sub generate {
189 my($file, $mandatory) = @_;
190 my($path);
191
192 $path = $templatedir."/".$file.".".$target;
193 if (-f $path) {
194 convert($path, $file);
195 return;
196 }
197
198 $path = $templatedir."/".$file;
199 if ($mandatory || -f $path) {
200 convert($path, $file);
201 }
202}
203
204#
205# ソースディレクトリ名を取り出す
206#
207$pwd = `pwd`; chop $pwd;
208if ($opt_D) {
209 $srcabsdir = $srcdir = $opt_D;
210}
211elsif ($0 =~ /(.*)\/configure/) {
212 $srcdir = $1;
213 if ($srcdir =~ /^\//) {
214 $srcabsdir = $srcdir;
215 }
216 else {
217 $srcabsdir = $pwd."/".$srcdir;
218 }
219}
220else {
221 $srcabsdir = $srcdir = $pwd;
222}
223
224$perl = $opt_p ? $opt_p : get_path("perl", ("/usr/local/bin", "/usr/bin"));
225$cfg = $opt_g ? $opt_g : "\$(SRCDIR)/cfg/cfg/cfg";
226$cfgfile = $opt_g ? $opt_g : $srcdir."/cfg/cfg/cfg";
227$templatedir = $opt_t ? $opt_t : $srcdir."/sample";
228
229#
230# -Tオプションの確認
231#
232unless ($opt_T) {
233 print STDERR "configure: -T option is mandatory\n";
234 print STDERR "Installed targets are:\n";
235 foreach $targetname (<$srcdir/target/[a-zA-Z0-9]*>) {
236 $targetname =~ s|$srcdir/target/||;
237 print STDERR "\t$targetname\n";
238 }
239 exit(1);
240}
241
242#
243# 変数テーブルの作成
244#
245%vartable = ();
246$vartable{"TARGET"} = $target;
247$vartable{"APPLNAME"} = $applname;
248$vartable{"APPLDIR"} = $appldir;
249$vartable{"APPLOBJS"} = $applobjs;
250$vartable{"SYSSVCOBJS"} = $syssvcobjs;
251$vartable{"KERNEL_LIB"} = $kernel_lib;
252$vartable{"KERNEL_FUNCOBJS"} = $kernel_funcobjs;
253$vartable{"SRCDIR"} = $srcdir;
254$vartable{"SRCABSDIR"} = $srcabsdir;
255$vartable{"SRCLANG"} = $srclang;
256$vartable{"DBGENV"} = $dbgenv;
257$vartable{"ENABLE_TRACE"} = $enable_trace;
258$vartable{"PERL"} = $perl;
259$vartable{"CFG"} = $cfg;
260$objext = get_objext();
261$vartable{"OBJEXT"} = $objext;
262$vartable{"PRC_NUM"} = $prc_num;
263$vartable{"COPTS"} = $copts;
264$vartable{"CDEFS"} = $cdefs;
265$vartable{"LDFLAGS"} = $ldflags;
266
267#
268# ターゲットディレクトリのチェック
269#
270
271if (! -d $srcdir."/target/".$target) {
272 print STDERR "configure: $srcdir/target/$target not exist\n";
273 exit(1);
274}
275
276#
277# Makefile とアプリケーションファイルの生成
278#
279
280generate($makefile, 1);
281generate($applname.".c", 0);
282generate($applname.".cpp", 0);
283generate($applname.".h", 0);
284generate($applname.".cfg", 0);
285
286#
287# cfg ができているかのチェック
288#
289
290if (!(-x ($objext eq "" ? $cfgfile : $cfgfile.".".$objext))) {
291 print STDERR "Executable file of the configurator (cfg) is not found.\n";
292}
Note: See TracBrowser for help on using the repository browser.