Как сделать кросс-компиляцию с файлом проекта.gpr и gprbuild?

Я пытаюсь кросс-компилировать из Linux (Fedora 29) программу Ada с Windows в качестве цели. У меня нет никаких знаний о компиляции, и документ менеджера проекта Gnat не мог помочь нубу, которым я являюсь. Я бы предпочел использовать ключи внутри файла проекта и сделать команду максимально простой. Что я должен делать?

Я пытался gprbuild -P logfilter.gpr --target=Windows что приводит к

Error: no compiler found for language 'c', target = Windows, default runtime
Error: no compiler found for language 'ada', target = Windows, default runtime
logfilter.gpr:3:09: warning: no compiler specified for language "Ada", ignoring all its sources
logfilter.gpr:7:19: "log_filter_main.adb" is not a source of project "logfilter"
gprbuild: problems with main sources

Вот мой gprconfig:

prconfig has found the following compilers on your PATH.
  Only those matching the target and the selected compilers are displayed.
   1. GNAT for Ada in /usr/bin/ version 8.3 (default runtime)
   2. GCC-ASM for Asm in /usr/bin/ version 8.3.1
   3. GCC-ASM for Asm2 in /usr/bin/ version 8.3.1
   4. GCC-ASM for Asm_Cpp in /usr/bin/ version 8.3.1
   5. LLVM for C in /usr/bin/ version 7.0.1
   6. GCC for C in /usr/bin/ version 8.3.1
   7. G++ for C++ in /usr/bin/ version 8.3.1

и мой gprconfig --show-targets:

List of targets supported by a compiler:
x86_64-redhat-linux
x86_64-unknown-linux-gnu

вот мой file.gpr:

with "../../lib/gnat/gtkada";

project LogFilter is
    for Source_Dirs use ("src");
    for Object_Dir  use "obj";
    for Exec_Dir    use "exec";
    for Main use ("log_filter_main.adb");

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

   package Compiler is
      for Switches ("ada") use ("-gnat2012");
   end Compiler;

end Logfilter;

2 ответа

Однажды я сделал это с Fedora 24. Но это потребовало создания кросс-компилятора. У меня все еще есть изображение докера

и патчи для пакетов fedora

Я заполнил запрос на Fedora, чтобы включить ADA в Windows в кросс-компилятор, но они закрыли его. Однако я не могу найти номер ошибки.

Подскажите, если вас интересует свежая версия этого или инструкция по использованию.

Обновление: я восстановил кросс для FC29. Вы можете попробовать это так:

dnf copr enable reznik/ada
dnf install mingw64-gcc-gnat
dnf install gprbuild

sed -i -e 's/-pc-mingw/-w64-mingw/g' /usr/share/gprconfig/*

cat > hello.adb << EOF
with Ada.Text_IO;
procedure Hello is
begin
   Ada.Text_IO.Put_Line ("Hello");
end Hello;
EOF

cat > hello.gpr << EOF
project Hello is
   for Main use ("hello.adb");
end Hello;
EOF
gprbuild --target=x86_64-w64-mingw32 -P hello.gpr
file hello.exe

hello.exe: PE32+ executable (console) x86-64, for MS Windows

PS: ссылка на копр

Как уже отмечали другие, проблема, с которой вы сталкиваетесь, заключается в том, что вы не используете кросс-компилятор. Просто чтобы кое-что прояснить gprbuild это могло бы прояснить это: gprbuild это просто интерфейс для версий gcc а также gnat в вашей системе. По сути это просто Ада-специфический аналог make, Он обрабатывает файл конфигурации проекта и определяет, какие части проекта будут построены. Из gprconfig В результате получается, что вы используете FSF GNAT, полученный из репозиториев Fedora. gprconfig --show-targets показывает только цели нативных компиляторов Linux, найденные в вашем $PATH,

Чтобы решить вашу проблему, вам нужно найти компилятор Ada, ориентированный на Windows, что, вероятно, легче сказать, чем сделать. У меня были всевозможные проблемы при создании кросс-компилятора GCC для Linux. AdaCore предоставляет довольно приличный компилятор для Windows, если это вариант для вас. Я хотел бы быть более полезным, но я думаю, что у вас будет много проблем, пытаясь получить кросс-компилятор для этого случая. Кросс-компиляторная поддержка в GCC для Ada кажется в лучшем случае случайной.

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