Linux – Which header defines the macro that specifies the machine architecture

header-filelinux

Shorter version of question:

Which C header contains the macro that corresponds to the machine architecture of the system (e.g., __x86_64__, __ia64__, __mips__?)

Longer version of question:

I'd like to run the ganglia monitoring tools on a Tilera-based system that runs Linux.

Ganglia doesn't currently have support for Tilera. To get this to work, I ned to modify a C function called machine_type_func that returns the machine architecture. The body of this function is determined at compile-time, it looks like this:

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;
}

I need to add the appropriate line for Tilera, but I don't know the name of the macro that specifies a Tilera-based system. I'm guessing this macro is defined in one of the standard Linux headers, but I don't know which one to look in.

Best Answer

No header file defines it - those macros are predefined by the compiler. To find out the full list of predefined macros do this:

echo | gcc -E -dM -

Then look through the results for likely macros.

Related Question