source: EcnlProtoTool/trunk/asp3_dcre/configure.rb

Last change on this file was 429, checked in by coas-nagasima, 4 years ago

ASP3, TINET, mbed を更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby;charset=UTF-8
File size: 14.0 KB
Line 
1#!/usr/bin/env ruby
2# -*- coding: utf-8 -*-
3#
4# TOPPERS Software
5# Toyohashi Open Platform for Embedded Real-Time Systems
6#
7# Copyright (C) 2001-2003 by Embedded and Real-Time Systems Laboratory
8# Toyohashi Univ. of Technology, JAPAN
9# Copyright (C) 2006-2019 by Embedded and Real-Time Systems Laboratory
10# Graduate School of Information Science, Nagoya Univ., JAPAN
11#
12# 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
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# 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
33# 免責すること.
34#
35# 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
36# よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
37# に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
38# アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
39# の責任を負わない.
40#
41# $Id$
42#
43
44Encoding.default_external = 'utf-8'
45require "optparse"
46require "fileutils"
47require "shell"
48
49# オプションの定義
50#
51# -T <target> ターゲット名(必須)
52# -a <appldirs> アプリケーションのディレクトリ名(複数指定可.デ
53# フォルトはsampleディレクトリ)
54# -A <applname> アプリケーションプログラム名(デフォルトはsample1)
55# -t メインのオブジェクトファイルをリンク対象に含めない
56# -c <cfgfile> システムコンフィギュレーションファイル(.cfgファイ
57# ル名)名
58# -C <cdlflle> コンポーネント記述ファイル(.cdlファイル)名
59# -U <applobjs> アプリケーションの追加のオブジェクトファイル
60# (.oファイル名で指定.複数指定可)
61# -S <syssvcobjs> システムサービスのオブジェクトファイル
62# (.oファイル名で指定.複数指定可)
63# -B <bannerobj> バナー表示のオブジェクトファイル(.oファイル名で指定)
64# -L <kernel_lib> カーネルライブラリ(libkernel.a)のディレクトリ名
65# (省略した場合,カーネルライブラリもmakeする)
66# -f カーネルを関数単位でコンパイルするかどうかの指定
67# -D <srcdir> カーネルソースの置かれているディレクトリ
68# -l <srclang> プログラミング言語(現時点ではcとc++のみサポート)
69# -m <tempmakefile> Makefileのテンプレートのファイル名の指定(デフォル
70# トはsampleディレクトリのMakefile)
71# -d <objdir> 中間オブジェクトファイルと依存関係ファイルを置く
72# ディレクトリ名(デフォルトはobjs)
73# -w TECSを使用しない
74# -W <tecsdir> TECS関係ファイルのディレクトリ名(デフォルトはソー
75# スファイルのディレクトリの下のtecsgen)
76# -r トレースログ記録のサンプルコードを使用するかどうか
77# の指定
78# -V <devtooldir> 開発ツール(コンパイラ等)の置かれているディレクトリ
79# -R <ruby> rubyのパス名(明示的に指定する場合)
80# -g <cfg> コンフィギュレータ(cfg)のパス名
81# -G <tecsgen> TECSジェネレータ(tecsgen)のパス名
82# -o <options> コンパイルオプション(COPTSに追加)
83# -O <options> シンボル定義オプション(CDEFSに追加)
84# -k <options> リンカオプション(LDFLAGSに追加)
85# -b <options> リンカオプション(LIBSに追加)
86# -e <tinetdir> TINET のソースの置かれているディレクトリ
87# -i <net_if> ネットワークインタフェース(TINETが有効の場合は必須)
88# ether、ppp、loop の何れかを指定する。
89# -v <net_dev> イーサネット・ディバイスドライバ
90# (ネットワークインタフェースに ether を指定した場合は必須)
91# -n <net_proto> ネットワーク層プロトコル(TINETが有効の場合は必須)
92# inet6、inet4、inet6/inet4、inet6m、inet6m/inet4 の何れかを指定する。
93# -s <trans_proto> トランスポート層プロトコル(TINETが有効の場合は必須)
94# tcp、udp、tcp/udp の何れかを指定する。
95
96# 使用例(1)
97#
98# % ../configure.rb -T ct11mpcore_gcc -O "-DTOPPERS_USE_QEMU" \
99# -A perf1 -a ../test -S "test_svc.o histogram.o"
100#
101# 使用例(2)
102#
103# % ../configure.rb -T macosx_gcc -L .
104# アプリケーションプログラムは,sample1になる.
105#
106# 使用例(3)
107#
108# % ../configure.rb -T ct11mpcore_gcc -O "-DTOPPERS_USE_QEMU" -A tSample2 -t
109# アプリケーションプログラムは,TECS版のサンプルプログラムになる.
110#
111# 使用例(4)
112#
113# % ../configure.rb -T ct11mpcore_gcc PRC_NUM=4
114# PRC_NUMを4に定義する.
115#
116# 使用例(5)
117#
118# % ../configure.rb -T gr_sakura_gcc -A sample1n \
119# -e tinet -i ether -v if_mbed -n inet4 -s tcp -U sample1.o
120# TINETを有効にする.
121
122#
123# 変数の初期化
124#
125$target = nil
126$appldirs = []
127$applname = nil
128$option_t = false
129$cfgfile = nil
130$cdlfile = nil
131$applobjs = []
132$syssvcobjs = []
133$bannerobj = nil
134$kernel_lib = ""
135$kernel_funcobjs = ""
136$srcdir = nil
137$srclang = "c"
138$tempmakefile = nil
139$objdir = "objs"
140$omit_tecs = ""
141$tecsdir = nil
142$enable_trace = ""
143$devtooldir = ""
144$ruby = "ruby"
145$cfg = nil
146$tecsgen = nil
147$copts = []
148$cdefs = []
149$ldflags = []
150$libs = []
151
152#
153# オプションの処理
154#
155OptionParser.new(nil, 22) do |opt|
156 opt.on("-T target", "taget name (mandatory)") do |val|
157 $target = val
158 end
159 opt.on("-a appldirs", "application directories") do |val|
160 $appldirs += val.split(/\s+/)
161 end
162 opt.on("-A applname", "application program name") do |val|
163 $applname = val
164 end
165 opt.on("-t", "TECS is used for application development") do |val|
166 $option_t = true
167 end
168 opt.on("-c cfgfile", "system configuration file") do |val|
169 $cfgfile = val
170 end
171 opt.on("-C cdlfile", "component description file") do |val|
172 $cdlfile = val
173 end
174 opt.on("-U applobjs", "additional application object files") do |val|
175 $applobjs += val.split(/\s+/)
176 end
177 opt.on("-S syssvcobjs", "system service object files") do |val|
178 $syssvcobjs += val.split(/\s+/)
179 end
180 opt.on("-B bannerobj", "banner display object file") do |val|
181 $bannerobj = val
182 end
183 opt.on("-L kernel_lib", "directory of built kernel library") do |val|
184 $kernel_lib = val
185 end
186 opt.on("-f", "each function is complied separately in kernel") do |val|
187 $kernel_funcobjs = "true"
188 end
189 opt.on("-D srcdir", "path of source code directory") do |val|
190 $srcdir = val
191 end
192 opt.on("-l srclang", "programming language (C or C++)") do |val|
193 $srclang = val
194 end
195 opt.on("-m tempmakefile", "template file of Makefile") do |val|
196 $tempmakefile = val
197 end
198 opt.on("-d objdir", "relocatable object file directory") do |val|
199 $objdir = val
200 end
201 opt.on("-w", "TECS is not used at all") do |val|
202 $omit_tecs = "true"
203 end
204 opt.on("-W tecsdir", "path of TECS file directory") do |val|
205 $tecsdir = val
206 end
207 opt.on("-r", "use the sample code for trace log") do |val|
208 $enable_trace = "true"
209 end
210 opt.on("-V devtooldir", "development tools directory") do |val|
211 $devtooldir = val
212 end
213 opt.on("-R ruby", "path of ruby command") do |val|
214 $ruby = val
215 end
216 opt.on("-g cfg", "path of configurator") do |val|
217 $cfg = val
218 end
219 opt.on("-G tecsgen", "path of TECS generator") do |val|
220 $tecsgen = val
221 end
222 opt.on("-o options", "compiler options") do |val|
223 $copts += val.split(/\s+/)
224 end
225 opt.on("-O options", "symbol definition options") do |val|
226 $cdefs += val.split(/\s+/)
227 end
228 opt.on("-k options", "linker options") do |val|
229 $ldflags += val.split(/\s+/)
230 end
231 opt.on("-b options", "linker options for linking libraries") do |val|
232 $libs += val.split(/\s+/)
233 end
234 opt.on("-e options", "path of TINET directory") do |val|
235 $tinetdir = val
236 end
237 opt.on("-i options", "network interface (ether or ppp or loop)") do |val|
238 $net_if = val
239 end
240 opt.on("-v options", "ethernet device driver") do |val|
241 $net_dev = val
242 end
243 opt.on("-n options", "network layer protocol (inet6 or inet4 or inet6/inet4 or inet6m or inet6m/inet4)") do |val|
244 $net_proto = val
245 end
246 opt.on("-s options", "transeport layer protocol (tcp or udp or tcp/udp)") do |val|
247 $trans_proto = val
248 end
249 opt.parse!(ARGV)
250end
251
252#
253# オブジェクトファイル名の拡張子を返す
254#
255def GetObjectExtension
256 if /cygwin/ =~ RUBY_PLATFORM
257 return("exe")
258 else
259 return("")
260 end
261end
262
263#
264# 変数のデフォルト値(文字列変数のデフォルト値は初期化で与える)
265#
266if $appldirs.empty?
267 $appldirs.push("\$(SRCDIR)/sample")
268end
269$applname ||= "sample1"
270$cfgfile ||= $applname + ".cfg"
271$cdlfile ||= $applname + ".cdl"
272$applobjs.unshift($applname + ".o") if !$option_t
273$bannerobj ||= ($omit_tecs == "") ? "tBannerMain.o" : "banner.o"
274if $srcdir.nil?
275 # ソースディレクトリ名を取り出す
276 if /(.*)\/configure/ =~ $0
277 $srcdir = $1
278 else
279 $srcdir = Shell.new.cwd
280 end
281end
282if /^\// =~ $srcdir
283 $srcabsdir = $srcdir
284else
285 $srcabsdir = Shell.new.cwd + "/" + $srcdir
286end
287$tempmakefile ||= $srcdir + "/sample/Makefile"
288$tecsdir ||= "\$(SRCDIR)/tecsgen"
289$cfg ||= $ruby + " \$(SRCDIR)/cfg/cfg.rb"
290$tecsgen ||= $ruby + " \$(TECSDIR)/tecsgen.rb"
291
292#
293# -Tオプションとターゲット依存部ディレクトリの確認
294#
295if $target.nil?
296 puts("configure.rb: -T option is mandatory")
297elsif !File.directory?($srcdir + "/target/" + $target)
298 puts("configure.rb: #{$srcdir}/target/#{$target} not exist.")
299 $target = nil
300end
301
302if $target.nil?
303 puts("Installed targets are:")
304 Dir.glob($srcdir + "/target/[a-zA-Z0-9]*").each do |target|
305 target.sub!($srcdir + "/target/", "")
306 puts("\t" + target)
307 end
308 abort
309end
310
311#
312# 変数テーブルの作成
313#
314$vartable = Hash.new("")
315$vartable["TARGET"] = $target
316$vartable["APPLDIRS"] = $appldirs.join(" ")
317$vartable["APPLNAME"] = $applname
318$vartable["CFGFILE"] = $cfgfile
319$vartable["CDLFILE"] = $cdlfile
320$vartable["APPLOBJS"] = $applobjs.join(" ")
321$vartable["SYSSVCOBJS"] = $syssvcobjs.join(" ")
322$vartable["BANNEROBJ"] = $bannerobj
323$vartable["KERNEL_LIB"] = $kernel_lib
324$vartable["KERNEL_FUNCOBJS"] = $kernel_funcobjs
325$vartable["SRCDIR"] = $srcdir
326$vartable["SRCABSDIR"] = $srcabsdir
327$vartable["SRCLANG"] = $srclang
328$vartable["OBJDIR"] = $objdir
329$vartable["OMIT_TECS"] = $omit_tecs
330$vartable["TECSDIR"] = $tecsdir
331$vartable["ENABLE_TRACE"] = $enable_trace
332$vartable["DEVTOOLDIR"] = $devtooldir
333$vartable["RUBY"] = $ruby
334$vartable["CFG"] = $cfg
335$vartable["TECSGEN"] = $tecsgen
336$vartable["COPTS"] = $copts.join(" ")
337$vartable["CDEFS"] = $cdefs.join(" ")
338$vartable["LDFLAGS"] = $ldflags.join(" ")
339$vartable["LIBS"] = $libs.join(" ")
340$vartable["OBJEXT"] = GetObjectExtension()
341$vartable["TINETDIR"] = $tinetdir
342$vartable["NET_IF"] = $net_if
343$vartable["NET_DEV"] = $net_dev
344$vartable["SUPPORT_INET6"] = ($net_proto == "inet6") || ($net_proto == "inet6/inet4") || ($net_proto == "inet6m") || ($net_proto == "inet6m/inet4")
345$vartable["SUPPORT_INET4"] = ($net_proto == "inet4") || ($net_proto == "inet6/inet4") || ($net_proto == "inet6m/inet4")
346$vartable["SUPPORT_TCP"] = ($trans_proto == "tcp") || ($net_proto == "tcp/udp")
347$vartable["SUPPORT_UDP"] = ($trans_proto == "udp") || ($net_proto == "tcp/udp")
348$vartable["API_CFG_IP4MAPPED_ADDR"] = ($net_proto == "inet6m") || ($net_proto == "inet6m/inet4")
349
350ARGV.each do |arg|
351 if /^([A-Za-z0-9_]+)\s*\=\s*(.*)$/ =~ arg
352 $vartable[$1] = $2
353 else
354 $vartable[arg] = true
355 end
356end
357
358#
359# ファイルを変換する
360#
361def convert(inFileName, outFileName)
362 puts("Generating #{outFileName} from #{inFileName}.\n")
363 if (File.file?(outFileName))
364 puts("#{outFileName} exists. Save as #{outFileName}.bak.\n")
365 FileUtils.move(outFileName, outFileName + ".bak")
366 end
367
368 begin
369 inFile = File.open(inFileName)
370 outFile = File.open(outFileName, "w")
371 rescue Errno::ENOENT, Errno::EACCES => ex
372 abort(ex.message)
373 end
374
375 inFile.each do |line|
376 line.chomp!
377 while line.sub!(/\@\(([A-Za-z0-9_]+)\)/) {|var| $vartable[$1]} do end
378 outFile.print(line,"\n")
379 end
380
381 inFile.close
382 outFile.close
383end
384
385#
386# Makefileの生成
387#
388convert($tempmakefile, "Makefile")
389
390#
391# 依存関係ファイルのディレクトリの作成
392#
393if !File.directory?($objdir)
394 Dir.mkdir($objdir)
395end
Note: See TracBrowser for help on using the repository browser.