Как скомпилировать программу, чтобы она работала везде (g++)?
1. выделить оптимизируемую функциональность в отдельную библиотеку.
2. собрать её с различными оптимизациями
3. в своём коде - определиться с подключаемой версией
4. подключить её.
Но, вероятно, проще использовать поставку исходников и сборку "на месте"
1) Стартовый модуль определяет тип используемого процессора
2) По результатам проверки вызывается динамическое подключение модулей (.so) под обнаруженную архитектуру.