source: uKadecot/trunk/ssp/configure@ 109

Last change on this file since 109 was 109, checked in by coas-nagasima, 9 years ago

MIMEプロパティの変更

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