OSDN Git Service

Ubuntu 14.04 で動作するように修正
[trx-305dsp/dsp.git] / trx305 / kernel / configure
1 #! /usr/bin/perl
2 #
3 #  TOPPERS/JSP Kernel
4 #      Toyohashi Open Platform for Embedded Real-Time Systems/
5 #      Just Standard Profile Kernel
6
7 #  Copyright (C) 2001-2003 by Embedded and Real-Time Systems Laboratory
8 #                              Toyohashi Univ. of Technology, JAPAN
9
10 #  上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 
11 #  によって公表されている GNU General Public License の Version 2 に記
12 #  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
13 #  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
14 #  利用と呼ぶ)することを無償で許諾する.
15 #  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
16 #      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 #      スコード中に含まれていること.
18 #  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
19 #      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
20 #      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
21 #      の無保証規定を掲載すること.
22 #  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
23 #      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
24 #      と.
25 #    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
26 #        作権表示,この利用条件および下記の無保証規定を掲載すること.
27 #    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
28 #        報告すること.
29 #  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
30 #      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
31
32 #  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
33 #  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
34 #  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
35 #  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
36
37 #  @(#) $Id: configure,v 1.2 2012/06/17 00:24:19 suikan Exp $
38
39
40 use Getopt::Std;
41
42 #  オプションの定義
43 #
44 #  -C <cpu>     プロセッサ名(必須)
45 #  -S <sys>     システム名
46 #  -T <tool>        開発環境名
47 #  -A <uname>       アプリケーションプログラム名
48 #  -U <utask>       他のアプリケーションプログラムファイル
49 #           (.o ファイル名で指定.複数指定可)
50 #  -L <kernel_lib>  カーネルライブラリ(libkernel.a)のディレクトリ名
51 #           (省略した場合,カーネルライブラリも make する)
52 #  -D <srcdir>      カーネル等のソースの置かれているディレクトリ
53 #  -P <prefix>      開発環境インストール時の PREFIX
54 #           (現在は PREFIX を使っているファイルはない)
55 #  -p <perl>        perl のパス名(明示的に指定する場合)
56 #  -l <lang>        プログラミング言語(現時点ではC++のみサポート)
57 #  -d <dir>     テンプレートディレクトリを指定(デフォルトはsample)
58
59 #  使用例(1)
60 #
61 #  % ../configure -C m68k -S dve68k -A test1 -U test_support.o -L .
62 #
63 #  使用例(2)
64 #
65 #  % ../configure -C linux
66 #   アプリケーションプログラムは sample1 になる.
67
68 #
69 #  オプションの処理
70 #
71 getopt("CSTAULDPpld");
72 unless ($opt_C) {
73     print STDERR "configure: -C option is mandatory\n";
74     exit(1);
75 }
76
77 $cpu = $opt_C;
78 $sys = $opt_S ? $opt_S : "";
79 $tool = $opt_T ? $opt_T : "";
80 $uname = $opt_A ? $opt_A : "sample1";
81 $utask = $opt_U ? $opt_U : "";
82 $kernel_lib = $opt_L ? $opt_L : "";
83 $prefix = $opt_P ? $opt_P : "/usr/local";
84 $perl = opt_p ? $opt_p : get_path("perl", ("/usr/local/bin", "/usr/bin"));
85 $lang = $opt_l ? $opt_l : "";
86 $templatedir = $opt_d ? $opt_d : "sample";
87
88 #
89 #  オブジェクトファイル名の拡張子を返す
90 #
91 sub get_objext {
92     local(@uname);
93
94     use POSIX;
95     @uname = uname();
96     if ($uname[0] =~ /^cygwin/i) {
97         return("exe");
98     }
99     else {
100         return("");
101     }
102 }
103
104 #
105 #  プログラムの場所を検索する
106 #
107 sub get_path {
108     local($progname, @pathlist) = @_;
109     local($path);
110
111     foreach $path (@pathlist) {
112         if (-x $path."/".$progname) {
113             return($path."/".$progname);
114         }
115     }
116     return("");
117 }
118
119 #
120 #  ファイルを変換する
121 #
122 sub convert {
123     local($infile, $outfile) = @_;
124     local($line, $varname, $varval);
125
126     print STDERR "configure: Generating $outfile from $infile.\n";
127     if (-f $outfile) {
128         print STDERR "configure: $outfile exists.",
129                 "  Save as $outfile.bak.\n";
130         rename($outfile, $outfile.".bak");
131     }
132     unless (open(INFILE, $infile)) {
133         print STDERR "configure: can't open $infile\n";
134         exit(1);
135     }
136     unless (open(OUTFILE, "> ".$outfile)) {
137         print STDERR "configure: can't open $outfile\n";
138         exit(1);
139     }
140
141     while ($line = <INFILE>) {
142         chop $line;
143         while ($line =~ /^(.*)\@\(([A-Za-z_]+)\)(.*)$/) {
144             $line = $1.$vartable{$2}.$3;
145         }
146         print OUTFILE $line,"\n";
147     }
148
149     close(INFILE);
150     close(OUTFILE);
151 }
152
153 #
154 #  サンプルを見つけてファイルを生成する
155 #
156 sub generate {
157     local($file, $mandatory) = @_;
158     local($path);
159
160     if ($sys) {
161         $path = $sampledir.$file.".".$cpu."-".$sys;
162         if (-f $path) {
163             convert($path, $file);
164             return;
165         }
166
167         $path = $sampledir.$file.".".$sys;
168         if (-f $path) {
169             convert($path, $file);
170             return;
171         }
172     }   
173
174     $path = $sampledir.$file.".".$cpu;
175     if (-f $path) {
176         convert($path, $file);
177         return;
178     }   
179
180     $path = $sampledir.$file;
181     if ($mandatory || -f $path) {
182         convert($path, $file);
183     }   
184 }
185
186 #
187 #  変数の初期化
188 #
189
190 #
191 #  ソースディレクトリ名を取り出す
192 #
193 $pwd = `pwd`; chop $pwd;
194 if ($opt_D) {
195     $srcabsdir = $srcdir = $opt_D;
196 }
197 elsif ($0 =~ /(.*)\/configure/) {
198     $srcdir = $1;
199     if ($srcdir =~ /^\//) {
200         $srcabsdir = $srcdir;
201     }
202     else {
203         $srcabsdir = $pwd."/".$srcdir;
204     }
205 }
206 else {
207     $srcabsdir = $srcdir = $pwd;
208 }
209 $sampledir = $srcdir."/".$templatedir."/";
210
211 #
212 #  変数テーブルの作成
213 #
214 %vartable = ();
215 $vartable{"CPU"} = $cpu;
216 $vartable{"SYS"} = $sys;
217 $vartable{"TOOL"} = $tool;
218 $vartable{"UNAME"} = $uname;
219 $vartable{"UTASK"} = $utask;
220 $vartable{"KERNEL_LIB"} = $kernel_lib;
221 $vartable{"SRCDIR"} = $srcdir;
222 $vartable{"SRCABSDIR"} = $srcabsdir;
223 $vartable{"PREFIX"} = $prefix;
224 $vartable{"OBJEXT"} = get_objext();
225 $vartable{"PERL"} = $perl;
226 $vartable{"LANG"} = $lang;
227
228 #
229 #  ディレクトリのチェック
230 #
231
232 if (! -d $srcdir."/config/".$cpu) {
233     print STDERR "configure: $srcdir/config/$cpu not exist\n";
234     exit(1);
235 }
236 if ($sys && ! -d $srcdir."/config/".$cpu."/".$sys) {
237     print STDERR "configure: $srcdir/config/$cpu/$sys not exist\n";
238     exit(1);
239 }
240 if ($tool && ! -d $srcdir."/config/".$cpu."-".$tool."/".$sys) {
241     print STDERR "configure: $srcdir/config/$cpu-$tool/$sys not exist\n";
242     exit(1);
243 }
244 if ($tool && $sys && ! -d $srcdir."/config/".$cpu."-".$tool."/".$sys) {
245     print STDERR "configure: $srcdir/config/$cpu-$tool/$sys not exist\n";
246     exit(1);
247 }
248
249 #
250 #  Makefile とアプリケーションファイルの生成
251 #
252
253 generate("Makefile", 1);
254 generate($uname.".c", 0);
255 generate($uname.".cpp", 0);
256 generate($uname.".h", 0);
257 generate($uname.".cfg", 0);