Xcode: сборка архитектуры, специфичная для файловых настроек компилятора - PullRequest
0 голосов
/ 26 октября 2009

В моем проекте iPhone я использую встроенный ассемблер, который исключается, если целевой архитектурой является устройство, а не симулятор.

Поскольку некоторые встроенные коды asm предназначены только для рук, а не для большого пальца, при компиляции для iPhone необходимо указать флаг c -marm, поскольку в противном случае он пытается скомпилировать код с помощью инструкций большого пальца.

И вот в чем проблема, если я ввожу флаг -marm в настройке сборки конкретного файла, gcc выдает ошибку, если я скомпилирую для симулятора:

cc1obj: ошибка: нераспознанная опция командной строки "-marm"

Есть ли способ передать эту опцию, только если целевой архитектурой является arm? Я знаю, что вы можете сделать это с глобальными флагами c, но я не хочу компилировать весь мой проект с флагом -marm. Я хочу, чтобы только несколько файлов .m были -marm.

Спасибо и привет, Ким

1 Ответ

0 голосов
/ 27 октября 2009

ОК. Я нашел решение проблемы.

Вот комментарий, который я добавил к коду:

// the asm code only works with arm not with thumb,
// so if you compile it and gcc trys to compile it as thumb
// you will get an error.
// to make gcc compile the file as arm and not thumb you need
// to add -marm to the files compiler config (select the file
// and press cmd + i and select the build tab and enter there
// the problem is that if you try to compile for the simulator
// it will fail, because intel gcc doesnt know the flat -marm.
// To solve this add a new "User defined setting" in your targets 
// build settings with the name use_marm and give it the value ""
// then add a build setting condition and select Any iPhone OS
// Device and give it the value "-marm"
// In your file's compiler flags add $use_marm
// If you build for the device it will add -marm and if you
// build for the simulator it wont.
...