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.