GnatBench Runtime

Я пытаюсь заставить Eclipse компилировать проекты Ada. Я установил CDT и GNATBench 2014 (кажется, последний) под Eclipse Neon 2, и родной компилятор, кажется, работает нормально. Тем не менее, когда я пытаюсь кросс-компилировать другой проект, который использует настроенную систему времени выполнения с оператором for Runtime ("Ada") use project; в файле gpr Eclipse жалуется, что undefined attribute "runtime", Инструмент GPS прекрасно компилирует этот проект.

Чего не хватает в установке Eclipse? Я использую последнюю версию Ubutu с установленными необходимыми библиотеками.

РЕДАКТИРОВАТЬ: Чтобы уточнить, я использую gprbuild. Файл gpr выглядит так:

project TEST is

  for Target use "leon-elf";
  for Languages use ("Ada", "Asm_Cpp");
  for Object_Dir use "./obj";
  for Main use ("main.adb");
  for Source_Dirs use (".");
  for Runtime ("ada") use project'Project_Dir & "../ada-rts-grm";
  for Exec_Dir use "./obj";

  package Linker is
     for Default_Switches ("ada") use ("-g", "-gdwarf-3", "-gstrict-dwarf", "-Wl,-Map,roic.map");
     for Linker_Options use ();
  end Linker;

  package Ide is
     for Gnat use "leon-elf-gnat";
     for Gnatlist use "leon-elf-gnatls";
     for Debugger_Command use "leon-elf-gdb";
  end Ide;

  package Compiler is
     for Switches ("ada") use ("-gnatwa.V.i.s", "-gdwarf-3", "-O3", "-gnatn", "-funroll-loops", "-gnatp");
  end Compiler;

  package Binder is
  end Binder;

  package Builder is
     for Executable ("main.adb") use "main.elf";
  end Builder;

end TEST;

0 ответов

Я использую этот плагин eclipse с компилятором Adacore GNAT ARM, который имеет несколько сред выполнения. Внутри Eclipse с подключаемым модулем GNATbench более безопасно определить все атрибуты перед его использованием, поместив его определение в project.gpr:

type Runtime_Type is
   ("ada-rts-grm", "any-other-runtime");
Runtime: Runtime_Type := external ("RUNTIME", "ada-rts-grm");

Это указывает gnatmake и gprbuild использовать переменную RUNTIME, определенную извне, и, если она не определена, по умолчанию будет использоваться "ada-rts-grm". Если вы хотите определить RUNTIME извне, сделайте это перед вызовом eclipse в командной строке:

RUNTIME="any-runtime"; export RUNTIME
<eclipse_path>eclipse

Проблема в том, что внутри Eclipse не определен путь для поиска RTS. Итак, вам нужно поместить внутрь Package Builder:

package Builder is
   for Default_Switches ("ada") use ("-g", "--RTS=" & external ("RUNTIME_PATH", "") & "ada-rts-grm");
end Builder

и вы определяете

RUNTIME_PATH="runtime_path/"; export RUNTIME_PATH
<eclipse_path>eclipse

или

package Builder is
   for Default_Switches ("ada") use ("-g", "--RTS=" & project'Project_Dir & "../ada-rts-grm");
end Builder

Вы можете подтвердить, что переменные определены в вашей программе: Окно -> Показать вид -> Переменные сценария (или Другое... -> Переменная сценария, если ее там нет).

Проблема в том, что в компиляторе ARM GNAT от Adacore нет файла "arm-eabi-gnatmake", поэтому плагин не найдет компилятор, даже gprbuild не работает. Обходной путь - получить "gnatmake" из другого дистрибутива, скомпилированного для архитектуры ARM. MuntsOs ( http://repo.muntsos.com/) имеет инструмент компиляции для Linux ARM, который можно использовать. Переименуйте файл "arm-linux-gnueabihf-gnatmake" в "arm-eabi-ganatmake" и поместите его в каталог "bin" из пути компилятора Adacore GNAT ARM.

И это все. Теперь вы можете компилировать свои проекты ARM с помощью RTS внутри Eclipse с помощью gnatmake или gprbuild.

Другие вопросы по тегам