суббота, 24 сентября 2016 г.

Распознавание Solaris x86/x86_64 компилятором GCC

Нужно отличить для условной компиляции Solaris 10 x86 и x86_64 от остальных систем, включая Solaris SPARC.

Вам это кажется тривиальной задачей? Как бы не так. Попробуйте, если не верите.

После исследования доступных материалов и целой серии экспериментов удалось найти следующее работоспособное решение:

 #if defined (__sun) || (defined (__i386) && defined (__i86pc))  
 // Solaris x86 stuff  
 #endif  
   
   

Вне зависимости от того, какое ядро загружено, Solaris Intel обозначает себя в GCC таким образом. Протестировано на GCC 4.9.2 и 5.2.0 на x86/x86_64 и sun4u.

Замечание. Для Solaris Studio это не работает. Если нужно полностью совместимый код, условие должно быть более сложным.