Как я могу использовать ccache с gcc -march = native для нескольких архитектур?

Опция -march = native для gcc генерирует различный код в зависимости от архитектуры хоста. ccache не хранит архитектуру машины в своем хеше, что означает, что если вы измените архитектуру машины, например, для переключения на высокопроизводительный узел VPS, кэшированные объектные файлы могут оказаться несовместимыми.

Как я могу убедиться, что я получаю правильные объектные файлы, но при этом использую преимущества кэширования?

1

Решение

ccache не хранит архитектуру, но хранит флаги компилятора, которые использовались при первом создании объекта. Поэтому потенциальное решение вашей проблемы может заключаться в использовании тонкого сценария-оболочки, который расширит -march=native к фактическому набору флагов (например, используя что-то вроде этот), прежде чем передать их ccache,

(Я, конечно, оставлю фактическую реализацию в качестве упражнения для читателя ..)

0

Другие решения

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

Также помните, что если вы используете -march=native тогда любой, кто хочет запустить ваш двоичный файл, должен иметь такую ​​же (или, возможно, более новую, но обратно-совместимую) архитектуру машины. Что может или не может быть проблемой.

0

По вопросам рекламы [email protected]