AUTO CCT スクリプトを使って作業する
Auto CCT機能はCCTを生成するために一連の python スクリプトを使用します。スクリプトはフィルタと呼ばれます。ほとんどのフィルタにはいくつもの主要なクラスがあります。代表的なものは:
- Configurator クラス:ConfiguratorにはCCTの多岐に渡る特性(target, hierarchy、 compiler nameなど)が含まれています。サイズ、アライメント値などパーサに必要な様々なフラグも指定します。詳細はConfigurator クラスを参照して下さい。
- CCTData クラス:通常、C言語にひとつ、C++言語にひとつのCCTDataクラスがあります。このクラスの機能は define の追加、一般のCCTオプションの指定、マクロ定義の追加などです。詳細についてはCCTData クラスを参照して下さい。
- Visitor クラス (オプション処理):Visitor クラスはコマンドラインの引数を処理します。詳細についてはVisitor クラス (オプションの処理) を参照してください。
クラスはfilter_init
関数に渡す必要があります。詳細については、filter_init 関数 と filterの設定を参照してください。
ゼロからフィルタを生成する方法の詳細については新しいコンパイラを追加するを参照してください。
デバッグ
フィルタを使って作業をするときには、 Perforce QACのログレベルを TRACE に設定することを推奨します。これにより、ログファイルにデバッグの詳細がログファイルまたは、qacli からの出力に表示されます。
エラーが発生した場合に python のスタックトレースが表示されます。
フィルタはログに情報を書込むため debug 関数を呼出します。新しいデバッグ呼出しの追加は問題点の追跡をアシストします。
通常、ジェネレータを起動するため qacli を使用することが推奨されます。これは正確に何が起きているかを確かめるのに役立ちます。
ログファイルを見ると、cctgen.py
という名前のスクリプトがあります。これが qainject
バイナリを順番に起動します。ログレベルをTRACEに設定することでこれらのプロセスがどのように起動されるかを見ることができます。従って、qacli とは関係なく呼出すことができます。
フィルタの場所と qafilter.conf
フィルタは製品に付属しているCCTと共に格納されています。Perforce QACが初回にスタートするときに、インストレーションフォルダからユーザのlocal data へコピーされます。
Windows での場所:
および
フォルダはすべてのフィルタおよび、当該実行ファイルにどのフィルタが使用されているかを説明するファイル qafilter.conf
も含みます。例えば、icc で始まるすべての実行ファイルに対し qa_icc_filter.py
ファイルを起動する行は:
#で始まるコメント行は qacli help -a
コマンドで使用され、コンパイラの名前を表示するためすべてのサポートされているフィルタを表示します。
CCTの例
どの関数がセクションの出力を制御するかに関する情報をもつCCTの例です。以下は簡潔にするためセクションまたは、設定が削減されているTI CCTです。
{
"PLATFORM" : "PLATFORM_WIN64",
"COMPILER_HIERARCHY" : "TI",
"COMPILER_NAME": "ARMCL",
"COMPILER_VERSION": "20.2",
"HOST": "x64",
"TARGET": "ARM",
"SOURCE_LANGUAGE": "C",
"COMPILER_CMD": "c:\\ti\\ccs1110\\armcl.exe",
"COMPILER_ADDITIONAL_ARGS" : ["--plain_char=signed"],
"ADDITIONAL_INCLUDES": "DATA/autocct/Stub/TI_C",
"INCLUDE_LIST" : [
{"INCLUDE_STRUCTURE": {
"INCLUDE_TYPE": "MasterScript",
"INCLUDE_VALUE": "DATA/autocct/Script/master_script.py"
}
}],
"SYNCHRONISATION" : {
"INCLUDE_FLAGS":"-I",
"DEFINE_FLAGS":"-D",
"SETTINGS_FILE_OPTIONS": {
"FLAG":"-@,--cmd_file=",
"EXTENSION":",",
"LITERAL_QUOTES":","
}
}
}
- PLATFORM :使用しているOSにより、
PLATFORM_WIN64
またはPLATFORM_LIN64
です。 - COMPILER_HIERARCHY :Configurator内の hierarchy 関数から取得します。
- COMPILER_NAME :
filter_init
へのパラメータから取得または、Configurator内のuser_visible_ name
によりオーバーライドされます。 - COMPILER_VERSION :
filter_init
へ与えられたパラメータをもつコンパイラから抽出されます。 - HOST :使用してるホストコンピュータにより、x64 または x86 です。
- TARGET :このケースではConfiguratorから取得されます。
- SOURCE_LANGUAGE :ファイル拡張子により決定されます。
- COMPILER_CMD :コンパイラバイナリへのパスです。
- COMPILER_ADDITIONAL_ARGS :
filter_init
関数へのignore_options
パラメータにより制御されたため特定のオプションが削除された最初のコンパイルコマンドのパラメータです。 - ADDITIONAL_INCLUDES :CCTData内の
additional_include
関数から取得します。 - INCLUDE_STRUCTURE :このケースでは CCTData内の
masterscript_include
から取得します。これはCIP生成スクリプトをへのパスです。 - SYNCHRONISATION :設定は様々なコンパイラフラグの働きがすでに分かっているためAuto CCTの設定には関係なく同期を実行します。この設定は作成されたCCTが後に異なる同期メソッドで使用されることを考慮して念のため生成されます。
- INCLUDE_FLAGS :CCTData 内の
include_flags
から取得します。DEFINE_FLAGS
はCCTData 内のdefine_ flags
から取得します。 - SETTINGS_FILE_OPTIONS :CCTData内の
get_settings_file_options
から取得します。
* compiler behavior
* parsing extensions
-xn 16384
-na 16384
-ar+
-ex ansipc
-ex pc
-ex asm
-ex longlong
-fpc+
-sl-
-xc-
parsing extension
セクションは CCTData内の parser_extensions
関数から取得します。
* CIP replacement
-q "C:\ti\ccs1110\ccs\tools\compiler\ti-cgt-arm_20.2.5.LTS\include\libcxx"
-si "C:\ti\ccs1110\ccs\tools\compiler\ti-cgt-arm_20.2.5.LTS\include\libcxx"
-q "C:\ti\ccs1110\ccs\tools\compiler\ti-cgt-arm_20.2.5.LTS\include\libcxx\ext"
-si "C:\ti\ccs1110\ccs\tools\compiler\ti-cgt-arm_20.2.5.LTS\include\libcxx\ext"
CIPがコンパイラインクルードパスを生成しない場合、Configurator 内の _generates_cip_includes
のメンバ変数を True
に設定する必要があります。
設定の後、read_includes
関数の結果(filter_init
関数に渡される)がこのセクションを生成するために使用されます。
* preprocessor symbol definitions
-sd __intaddr__="1 prl_ignore_paren"
-sd __interrupt=""
-sd interrupt=""
-sd __LONG_LONG_MAX__="9223372036854775807"
-sd __LONG_MAX__="2147483647"
-sd _OPTIMIZE_FOR_SPACE="1"
-sd __PRAGMA_REDEFINE_EXTNAME="1"
-sd prl_ignore_paren="_ignore_paren"
-sd _PRL_STRINGIFY(x)="#x"
-sd __PTRDIFF_T_TYPE__="int"
-sd __signed_chars__="1"
-sd __SIZE_T_TYPE__="unsigned"
-sd __SIZEOF_DOUBLE__="8"
-sd __SIZEOF_FLOAT__="4"
-sd __SIZEOF_INT__="4"
-sd __SIZEOF_LONG__="4"
-sd __STDC__="1"
-sd __STDC_VERSION__="199409L"
-sd __TI_VFPLIB_SUPPORT__="1"
-sd __TI_WCHAR_T_BITS__="16"
-sd __TIME__=_PRL_STRINGIFY("13:10:40")
-sd __TIMESTAMP__="__DATE__ __TIME__"
-sd __TMS470__="1"
-sd __va_argcsu="1 prl_ignore_paren"
-sd __va_argref="1 prl_ignore_paren"
-sd __VERSION__=_PRL_STRINGIFY("EDG gcc 4.8 mode")
-sd __WCHAR_T_TYPE__="unsigned short"
これらの設定のほとんどはコンパイラに定義済のマクロのリストを要求した結果です。これらは通常、filter_init
関数の info_args
パラメータでコンパイラを実行することで取得します。
あるいは、read_defines
関数(filter_init
に渡される)を使用します。他の値は CCTData内の extra_defines
関数から取得します。
intrinsic types
は CCTData内の type_mappings
関数から取得します。
* basic type size and alignment
-s char="8"
-a char="1"
-s double="64"
-a double="8"
-s float="32"
-a float="4"
-s int="32"
-a int="4"
-s ldouble="64"
-a ldouble="8"
-s long="32"
-a long="4"
-s longlong="64"
-a longlong="8"
-s short="16"
-a short="2"
型サイズとアライメントセクションは CCTData内の ize_type_map
から計算されます。
GNU Visitor クラスから継承する TI フィルタの Visitor クラスはデフォルトで bits
, ex dollar
および u
の設定をもちます。
これらの設定の詳細については、Visitor クラス (オプションの処理)の_qac_parser_options
およびCCTData クラスの signed_char_defines
を参照してください。-ex c++
フラグはバージョンが C90 でないときに C ソースコードのシステムにより追加されます。