Можно ли получить доступ к целевым флагам XC16/gcc из кода?

Я компилирую код для процессоров Microchip серии dspic33, используя компилятор Microchip XC16.

У меня есть код, который используется в нескольких приложениях (т.е. он находится в библиотеке кода). Для определенных модулей я хочу убедиться, что определенные флаги компилятора установлены во время компиляции, в идеале с использованием препроцессора. В частности, меня интересует тестирование целевых флагов -mauxflash и -code-in-auxflash.

Есть ли способ проверить параметры компилятора во время компиляции?

Я попытался сбросить все #define с помощью xc16-gcc -dM -E - ‹ /dev/null, но ничего не изменилось. Есть 3 определения, связанные с auxflash (AUXFLASH_LENGTH, __AUXFLASH_BASE и __HAS_AUXFLASH), но ничего не связанного с целевыми флагами.


person EBlake    schedule 09.03.2016    source источник


Ответы (1)


не все флаги влияют на определения CPP, поэтому вы можете быть SOL. использование вами -dM -E — лучший способ проверить.

однако есть несколько функций, которые могут быть вам полезны:

  1. -grecord-gcc-switches: здесь записываются все флаги, используемые во время компиляции, на объектная база в информации DWARF. тогда у вас может быть сценарий, который проверяет объекты и выдает ошибку, если он был построен без флага, который вам нужен.
  2. __attribute__((optimize("flags"))): gcc позволяет установить определенные флаги для каждой функции. основа.
  3. #pragma GCC optimize ("flags"): gcc позволяет установить определенные флаги в файле. уровень.
person Mike Frysinger    schedule 10.03.2016
comment
Спасибо! К сожалению, флаги интерпретируются как параметры -f вместо параметров -m, поэтому они не распознаются. Я немного поковырялся и обнаружил #pragma GCC target("flags"), но использование этого в GCC со вкусом XC16 приводит к ошибке #pragma GCC target is not supported for this machine. Я предполагаю, что предложенные вами параметры хороши для изменения уровней оптимизации и т. Д., Но не параметры -m. - person EBlake; 10.03.2016
comment
В дополнение к вышесказанному я только что понял, что параметры -m, которые меня интересуют (auxflash и const-in-auxflash), являются параметрами модели памяти, а не целевыми параметрами. Возможно, нет способа установить их с помощью прагм. - person EBlake; 10.03.2016