GPRbuild: переключатель компилятора передается компоновщику - PullRequest
2 голосов
/ 18 марта 2019

Я создаю простую программу для ARM. GPRbuild выводит следующее:

gprbuild -p -P avocado_test.gpr (in directory: /home/rodeo/Projects/AvocadoTest)
Bind
   [gprbind]      run_avocado_test.bexch
   [Ada]          run_avocado_test.ali
Link
   [link]         run_avocado_test.adb
/opt/GNAT/arm-elf/bin/arm-eabi-ld: unrecognised emulation mode: cpu=cortex-m3
Supported emulations: armelf
gprbuild: link of run_avocado_test.adb failed
Compilation failed.

Из того, что я мог найти в сети, ld имеет переключатель -m, который определяет режим эмуляции. Однако я не использую этот переключатель в компоновщике моего проекта. Однако я использую переключатель -mcpu=cortex-m3 в компиляторе, и похоже, что GPRbuild передает этот переключатель и компоновщику. Вот мой .gpr файл:

project Avocado_Test is

   for Source_Dirs use ("source");
   for Object_Dir  use "build";
   for Main use ("source/run_avocado_test.adb");

   for Target use "arm-eabi";
   for Runtime ("Ada") use "ravenscar-sfp-sam3x8e";

   package Builder is
      for Executable_Suffix use ".elf";
      for Switches ("Ada") use ("-j0");
   end Builder;

   package Compiler is
      for Driver ("Ada") use "arm-eabi-gcc";
      for Switches ("Ada") use (
        "-mthumb",
        "-mcpu=cortex-m3",
        "-O2");
   end Compiler;

   package Binder is
      for Driver ("Ada") use "arm-eabi-gnatbind";
   end Binder;

   package Linker is
      for Driver use "arm-eabi-ld";
   end Linker;

end Avocado_Test;

Почему компоновщик берет переключение от компилятора? Как мне предотвратить это?

1 Ответ

3 голосов
/ 18 марта 2019

Я бы вообще не использовал Driver ни в одном из ваших пакетов GPR.Как только gprbuild видит for Target use "arm-eabi";, он знает, что нужно добавить arm-eabi- к каждому инструменту.

Нет причин избегать передачи переключений компилятора на драйвер компоновщика по умолчанию, который является gcc (в данном случае arm-eabi-gcc), потому что он знает, какой из них передать компоновщику.

Вы можете найти их интересными из моего проекта cortex-gnat-rts : runtime.xml (но обратите внимание, детали могут отличаться от времени выполнения AdaCore), testbed.gpr .

...