Configurator クラス


Configurator クラスはCCTに入力するための多岐に渡る関数を含んでいます。ほとんどの場合、クラスは QANonMSVSConfigurator から継承するべきです。


メンバ変数

_generates_cip_includes

コンパイラインクルードファイルが read_includes 関数によって検索される場合、True に設定する必要があります。

詳細についてはfilter_init 関数 と filterの設定 を参照してください。


compiler_name

コンパイラバイナリの名前を取得します。これは、CCTで COMPILER_NAME 設定を入力するために使用されます。


conf

コンパイラに関する様々な情報を含む Configurator クラスのインスタンスです。このインスタンスを使用している後述の例を参照してください。 これは、compiler_name、defines、include_dirs、language 関数を間接的に実装するためにも使用されます。


_defines_dict

self.conf.defines から生成される定義済みのコンパイラマクロの辞書です。これは、defines_dict プロパティよりアクセスします。


オーバーライド可能な関数

以下の関数または、プロパティは所定のフィルタに対しオーバーライドが可能です。


target

target により返された文字列はCCTの TARGET の設定に使用されます。例えば、この関数は target の値として --chip 引数に対する設定を返します。

def target(self):
    return qa_util.get_option(r'--chip=([a-zA-Z0-9_]+)', self.conf.path)

これは、定義済みのコンパイラマクロの値を使用します。

def target(self):
    return self.defines_dict.get("__TID__", "icc")

これは、コンパイラ名を使用します。

def target(self):
    return self.compiler_name.replace('CL', '')


hierarchy

戻り値である文字列は、CCTで COMPILER_HIERARCHY を指定するために使用されます。


user_visible_name

フィルタが初期化されたときに正確なコンパイラ名が不明である場合(フィルタが複数のコンパイラを扱うなどの理由で)、このプロパティがコンパイラ名を取得します。 通常は単純に self.compiler_name を返します。Configurator でプロパティが宣言されていない場合、filter_init 関数に渡された名前が使用されます。


custom_intrinsic_types

size_t または、 ptrdiff_t などの型は多くの場合、特定の定義済みマクロを検索することで見つけることができます。見つからない場合、Configurator はこの関数を宣言しさらに複雑な演算を実行することができます。例:

def custom_intrinsic_types(self, intrinsic_types_dict):
    debug("custom_intrinsic_types called " + self.language_standard_version)
    if '__LP64__' in self.defines_dict:
        intrinsic_types_dict['ptrdiff_t'] = 'long'
        intrinsic_types_dict['size_t'] = 'unsigned long'
    else:
        intrinsic_types_dict['ptrdiff_t'] = 'int'
        intrinsic_types_dict['size_t'] = 'unsigned int'
    if '__cplusplus' not in self.defines_dict:
        intrinsic_types_dict['wchar_t'] = 'unsigned short'
        return intrinsic_types_dict


custom_size_map

一般的な戻り値:

{
    "char": "__CHAR_BIT__",
    "short": "__SIZEOF_SHORT__",
    "int": "__SIZEOF_INT__",
    "long": "__SIZEOF_LONG__",
    "longlong": "__SIZEOF_LONG_LONG__",
    "float": "__SIZEOF_FLOAT__",
    "double": "__SIZEOF_DOUBLE__",
    "ldouble": "__SIZEOF_LONG_DOUBLE__",
}

様々な型のサイズを所定の定義済みのコンパイラ変数に基づいた値に設定します。これらの値はCCTの -s 値の設定に使用されます。


custom_align

一般的には、アライメントは様々な型に対するサイズ設定から計算されます。この計算がコンパイラが期待するものと一致しない状況もあります。この関数はそういったときに使用します。 例えば、long long 型が実際にアライメント4である場合、以下の関数が宣言される可能性があります。

def custom_align(self, typename):
    return 4 if typename == 'longlong' else 0

戻り値 0 は通常の計算が使用されるべきであることを示しています。


custom_parser_extensions

他のカテゴリに適合しないものすべてのリストを戻します。例えば、filter がヘッダファイルにコンパイラオプションを実装するためにこの関数を使用する(強制的にインクルードする)ときなど。


generate_headers

ヘッダを生成する必要がある場合に使用します。CCTの環境変数 QAC_CCT_ LOCATION は cctgen.py script を呼出すことによりディレクトリに設定されることに留意してください。 これは、ヘッダディレクトリを検索することに使用できます。