Среда выполнения GnatBench

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

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

EDIT: Чтобы уточнить, я использую 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;

person NeoSer    schedule 20.01.2017    source источник
comment
какой инструмент используется для строительства? gnatmake или gprbuild? не могли бы вы опубликовать файл .gpr?   -  person flotto    schedule 22.03.2017
comment
@flotto, привет, пожалуйста, ознакомьтесь с правкой в ​​вопросе.   -  person NeoSer    schedule 27.03.2017
comment
eclipse и GPS должны вызывать gprbuild, можете ли вы убедиться, что они используют одну и ту же команду? кстати. Наличие файла gpr не является гарантией использования gprbuild, потому что gnatmake также будет работать с файлами gpr. Вы пытались использовать gprbuild из cmd?   -  person flotto    schedule 27.03.2017
comment
@flotto, я уверен, что используется gprbuild, потому что, если я запускаю компиляцию с помощью gprbuild в окне терминала, проект компилируется нормально. Eclipse также показывает, что он пытается вызвать gprbuild для компиляции проекта, когда атрибут Runtime не упоминается. Похоже, проблема связана только с настройкой Eclipse.   -  person NeoSer    schedule 29.03.2017
comment
Хм, у вас установлено несколько версий gnat? Вы можете проверить команду сборки eclipse (возможно, использовать абсолютный путь к gprbuild)?   -  person flotto    schedule 03.04.2017
comment
У меня установлено два компилятора gnat: leon-elf и linux i386 native. Проблема в том, что даже когда я пытаюсь импортировать проект с установленной системой времени выполнения, как о чем идет речь, я получаю сообщение об ошибке 8:8:undefined attribute "runtime". Итак, я думаю, что проблема на самом деле не в компиляторе; скорее, в расширении комара для Eclipse.   -  person NeoSer    schedule 07.04.2017


Ответы (1)


Я использую этот подключаемый модуль 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 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

or

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.

person JCGobbi    schedule 19.09.2019