2016-04-08 7 views
1

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

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

ответ

0

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

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

0

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

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