I'm trying to cross-compile from Linux (Fedora 29) an Ada program with Windows as target. I have no knowledge about compilation and the Gnat project manager doc couldn't help the noob I am. I would prefer to use switches inside the project file and keep the command the simplest possible. What should I do?
I tried gprbuild -P logfilter.gpr --target=Windows
which leads to
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
Here is my 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
and my gprconfig --show-targets
:
List of targets supported by a compiler:
x86_64-redhat-linux
x86_64-unknown-linux-gnu
here is my 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;
As others have pointed out, the issue you're encountering is because you're not using a cross compiler.
Just to clarify something about gprbuild
that might make this clearer: gprbuild
is just a front-end for the versions of gcc
and gnat
on your system. Essentially it's just an Ada-specific analogue of make
. It processes the project configuration file and works out what parts of the project to be built. From the gprconfig
output it looks like you're using the FSF GNAT obtained from the Fedora repos. gprconfig --show-targets
is only showing you the targets of the native Linux compilers that it's found in your $PATH
.
To solve your problem you'll need to find an Ada compiler targeting Windows. AdaCore provide a pretty decent native Windows compiler if that's an option for you.