source: asp_wo_cfg/trunk/configure@ 164

Last change on this file since 164 was 56, checked in by ertl-hiro, 11 years ago

ASPカーネルの修正への対応。

  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 7.2 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# 上記著作権者は,以下の(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 56 2012-11-11 09:18:55Z ertl-hiro $
41#
42
43use Getopt::Std;
44
45# オプションの定義
46#
47# -T <target> ターゲット名(必須)
48# -A <applname> アプリケーションプログラム名(デフォルトはsample1)
49# -a <appldir> アプリケーションのディレクトリ名
50# -U <applobjs> 他のアプリケーションプログラムファイル
51# (.oファイル名で指定.複数指定可)
52# -S <syssvcobjs> システムサービスのプログラムファイル
53# (.oファイル名で指定.複数指定可)
54# -L <kernel_lib> カーネルライブラリ(libkernel.a)のディレクトリ名
55# (省略した場合,カーネルライブラリもmakeする)
56# -f カーネルを関数単位でコンパイルするかどうかの指定
57# -D <srcdir> カーネル等のソースの置かれているディレクトリ
58# -l <srclang> プログラミング言語(現時点ではcとc++のみサポート)
59# -t <templatedir> テンプレートディレクトリの指定(デフォルトはsample)
60# -m <makefile> テンプレートMakefile名の指定(デフォルトはMakefile)
61# -d <dbgenv> 実行環境の名称
62# -r トレースログ記録のサンプルコードを使用するかどうか
63# の指定
64# -p <perl> perlのパス名(明示的に指定する場合)
65# -g <cfg> コンフィギュレータ(cfg)のパス名
66# -P <num> プロセッサ数(マルチプロセッサ対応カーネルの場合)
67# -o <options> 共通コンパイルオプション(COPTSに追加)
68# -O <options> 共通シンボル定義オプション(CDEFSに追加)
69# -k <options> 共通リンカオプション(LDFLAGS等に追加)
70
71# 使用例(1)
72#
73# % ../configure -T dve68k_gcc -D GDB_STUB -A perf1 -a ../test -U histogram.o
74#
75# 使用例(2)
76#
77# % ../configure -T macosx_gcc -L .
78# アプリケーションプログラムは sample1 になる.
79
80#
81# オプションの処理
82#
83getopt("TAaUSLDltmdpgPoOk");
84
85#
86# 変数の初期化
87#
88
89$target = $opt_T;
90$applname = $opt_A ? $opt_A : "sample1";
91$appldir = $opt_a ? $opt_a : "";
92$applobjs = $opt_U ? $opt_U : "";
93$syssvcobjs = $opt_S ? $opt_S : "";
94$kernel_lib = $opt_L ? $opt_L : "";
95$kernel_funcobjs = $opt_f ? "true" : "";
96$srclang = $opt_l ? $opt_l : "c";
97$makefile = $opt_m ? $opt_m : "Makefile";
98$dbgenv = $opt_d ? "TOPPERS_".$opt_d : "";
99$enable_trace = $opt_r ? "true" : "";
100$prc_num = $opt_P ? $opt_P : "";
101$copts = $opt_o ? $opt_o : "";
102$cdefs = $opt_O ? $opt_O : "";
103$ldflags = $opt_k ? $opt_k : "";
104
105#
106# オブジェクトファイル名の拡張子を返す
107#
108sub get_objext {
109 if ($^O eq 'cygwin') {
110 return("exe");
111 }
112 else {
113 return("");
114 }
115}
116
117#
118# プログラムの場所を検索する
119#
120sub get_path {
121 my($progname, @pathlist) = @_;
122 my($path);
123
124 foreach $path (@pathlist) {
125 if (-x $path."/".$progname) {
126 return($path."/".$progname);
127 }
128 }
129 return("");
130}
131
132#
133# ファイルを変換する
134#
135sub convert {
136 my($infile, $outfile) = @_;
137 my($line);
138
139 print STDERR "configure: Generating $outfile from $infile.\n";
140 if (-f $outfile) {
141 print STDERR "configure: $outfile exists.",
142 " Save as $outfile.bak.\n";
143 rename($outfile, $outfile.".bak");
144 }
145 unless (open(INFILE, $infile)) {
146 print STDERR "configure: can't open $infile\n";
147 exit(1);
148 }
149 unless (open(OUTFILE, "> ".$outfile)) {
150 print STDERR "configure: can't open $outfile\n";
151 exit(1);
152 }
153
154 while ($line = <INFILE>) {
155 chop $line;
156 while ($line =~ /^(.*)\@\(([A-Za-z_]+)\)(.*)$/) {
157 $line = $1.$vartable{$2}.$3;
158 }
159 print OUTFILE $line,"\n";
160 }
161
162 close(INFILE);
163 close(OUTFILE);
164}
165
166#
167# サンプルを見つけてファイルを生成する
168#
169sub generate {
170 my($file, $mandatory) = @_;
171 my($path);
172
173 $path = $templatedir."/".$file.".".$target;
174 if (-f $path) {
175 convert($path, $file);
176 return;
177 }
178
179 $path = $templatedir."/".$file;
180 if ($mandatory || -f $path) {
181 convert($path, $file);
182 }
183}
184
185#
186# ソースディレクトリ名を取り出す
187#
188$pwd = `pwd`; chop $pwd;
189if ($opt_D) {
190 $srcabsdir = $srcdir = $opt_D;
191}
192elsif ($0 =~ /(.*)\/configure/) {
193 $srcdir = $1;
194 if ($srcdir =~ /^\//) {
195 $srcabsdir = $srcdir;
196 }
197 else {
198 $srcabsdir = $pwd."/".$srcdir;
199 }
200}
201else {
202 $srcabsdir = $srcdir = $pwd;
203}
204
205$perl = $opt_p ? $opt_p : get_path("perl", ("/usr/local/bin", "/usr/bin"));
206$cfg = $opt_g ? $opt_g : "\$(SRCDIR)/cfg/cfg/cfg";
207$cfgfile = $opt_g ? $opt_g : $srcdir."/cfg/cfg/cfg";
208$templatedir = $opt_t ? $opt_t : $srcdir."/sample";
209
210#
211# -Tオプションの確認
212#
213unless ($opt_T) {
214 print STDERR "configure: -T option is mandatory\n";
215 print STDERR "Installed targets are:\n";
216 foreach $targetname (<$srcdir/target/[a-zA-Z0-9]*>) {
217 $targetname =~ s|$srcdir/target/||;
218 print STDERR "\t$targetname\n";
219 }
220 exit(1);
221}
222
223#
224# 変数テーブルの作成
225#
226%vartable = ();
227$vartable{"TARGET"} = $target;
228$vartable{"APPLNAME"} = $applname;
229$vartable{"APPLDIR"} = $appldir;
230$vartable{"APPLOBJS"} = $applobjs;
231$vartable{"SYSSVCOBJS"} = $syssvcobjs;
232$vartable{"KERNEL_LIB"} = $kernel_lib;
233$vartable{"KERNEL_FUNCOBJS"} = $kernel_funcobjs;
234$vartable{"SRCDIR"} = $srcdir;
235$vartable{"SRCABSDIR"} = $srcabsdir;
236$vartable{"SRCLANG"} = $srclang;
237$vartable{"DBGENV"} = $dbgenv;
238$vartable{"ENABLE_TRACE"} = $enable_trace;
239$vartable{"PERL"} = $perl;
240$vartable{"CFG"} = $cfg;
241$objext = get_objext();
242$vartable{"OBJEXT"} = $objext;
243$vartable{"PRC_NUM"} = $prc_num;
244$vartable{"COPTS"} = $copts;
245$vartable{"CDEFS"} = $cdefs;
246$vartable{"LDFLAGS"} = $ldflags;
247
248#
249# ターゲットディレクトリのチェック
250#
251
252if (! -d $srcdir."/target/".$target) {
253 print STDERR "configure: $srcdir/target/$target not exist\n";
254 exit(1);
255}
256
257#
258# Makefile とアプリケーションファイルの生成
259#
260
261generate($makefile, 1);
262generate($applname.".c", 0);
263generate($applname.".cpp", 0);
264generate($applname.".h", 0);
265generate("kernel_cfg.h", 0);
266generate("kernel_id.h", 0);
Note: See TracBrowser for help on using the repository browser.