質問の短いバージョン:
システムのマシンアーキテクチャに対応するマクロが含まれているCヘッダー(例:__x86_64__
、__ia64__
、__mips__
?)
質問の長いバージョン:
Linuxを実行する Tilera ベースのシステムで ganglia 監視ツールを実行したいと思います。
Gangliaは現在Tileraをサポートしていません。これを機能させるために、マシンアーキテクチャを返す machine_type_func というC関数を変更する必要がありました。この関数の本体はコンパイル時に決定され、次のようになります。
g_val_t
machine_type_func ( void )
{
g_val_t val;
#ifdef __i386__
snprintf(val.str, MAX_G_STRING_SIZE, "x86");
#endif
#ifdef __x86_64__
snprintf(val.str, MAX_G_STRING_SIZE, "x86_64");
#endif
...
return val;
}
Tileraに適切な行を追加する必要がありますが、Tileraベースのシステムを指定するマクロの名前がわかりません。このマクロは標準のLinuxヘッダーの1つで定義されていると思いますが、どれを調べるべきかわかりません。
それを定義するヘッダーファイルはありません-それらのマクロはコンパイラーによって事前定義されています。事前定義されたマクロの完全なリストを見つけるには、次のようにします。
echo | gcc -E -dM -
次に、結果を調べて、可能性のあるマクロを探します。
もっと正確に言えば、これが__x86_64__
は次のように定義されます: https://github.com/gcc-mirror/gcc/blob/gcc-7_3_0-release/gcc/config/i386/i386-c.c#L568
cpp_define (parse_in, "__x86_64__");
しかし、ソースを変更し、再コンパイルしてテストする忍耐力はまだありませんでした。検索する良い方法は次のとおりです。
git grep '"__aarch64__'