[fpc-pascal] Cross-compilation for OS/2 target

Tomas Hajny XHajT03 at hajny.biz
Tue Jun 16 11:11:41 CEST 2026


On 2026-05-07 14:57, Tomas Hajny wrote:
> On 2026-04-21 11:11, Tomas Hajny wrote:
>> On 2026-04-21 10:21, Karoly Balogh via fpc-pascal wrote:


Hi,

>  .
>  .
>>> Are you sure? There seem to be several very recent cross-emx 
>>> toolchains on
>>> GitHub, for example:
>>> 
>>> https://github.com/komh/cross-os2emx
  .
  .
> FWIW, an update on this topic:
> 
> 1) The binaries provided with cross-os2emx don't work with Debian 
> oldstable (BookWorm) running on my machine, but they work with Debian 
> stable (Trixie), i.e. this is no problem.
> 
> 2) For some reason, the (cross-)linker complains about a duplicate 
> symbol in the OS/2 RTL. From a technical point of view, the complaint 
> is correct and I can resolve it, but it's strange that I don't get such 
> a complaint when linking natively. However, no big deal.
> 
> 3) The ported emxbind doesn't accept the same parameters as the native 
> version. That surprises me (I wouldn't expect a port to Linux to behave 
> differently from the original OS/2 program), but it's no problem to fix 
> it (the unsupported parameters are related to EMX binaries able to run 
> under both OS/2 and DOS natively and that is not supported for the OS/2 
> target anyway - unlike the EMX target - so I can simply skip them for 
> the OS/2 target).
> 
> 4) Unfortunately, I get another error from emxbind (i.e. the final 
> linking stage transforming the generated a.out file to OS/2 EXE): 
> "emxbind: invalid data segment (does not start with 0xba0bab)". That's 
> certainly not something I could fix myself - it suggests that probably 
> either the ported as version, or the ported ld linker create something 
> not expected by emxbind. I'll experiment with it a bit more to locate 
> the culprit (it might be an error in the emxbind port as well) and try 
> contacting author of the port in order to get some support from him. I 
> suspect that he might be using emxomfld instead, thus not working with 
> emxbind at all, but binaries created that way cannot be debugged with 
> gdb (or anything else) and, moreover, I couldn't make emxomfld to work 
> for me with FPC compiled binaries when experimenting with this option 
> in the past.

The update promised earlier - after my report of the problem mentioned 
in point 4 above, the latest release 1.2.0 of the cross-os2emx project 
allows successful cross-compilation of OS/2 binaries under Linux 
(obviously with a 32-bit FPC compiler) together with my 2 fixes (one for 
the loader file within the OS/2 RTL, another for the linker parameters) 
which should be hopefully included with the 3.2.4 release (without these 
changes, one must compile with -s and modify the linker parameters 
manually). Needless to say, it's useful to create symbolic links for the 
cross-os2emx binaries in order to allow FPC finding the assembler (as), 
linker (ld) and linking post-processor (emxbind) with the expected 
prefixes (i386-os2-). In addition, it should be possible to use this 
solution on a MS Windows machine as well if combined with WSL (Windows 
Services for Linux). ;-) Direct compilation of the cross-os2emx sources 
to native MS Windows executables might be possible as well, but I didn't 
try that and the author of the cross-os2emx port doesn't provide MS 
Windows binaries (perfectly understandable decision as far as I'm 
concerned :-) ).

I didn't try building a complete OS/2 release with this setup yet, but I 
might test it later; if nothing else, I assume that some additional make 
parameters would be necessary compared to native building in order to 
use zip rather than tar as expected for OS/2, but it should be perfectly 
doable. Regardless from that, I'll continue building the OS/2 release 
under OS/2 natively, it's just to provide alternatives for anybody 
possibly interested.

Tomas


More information about the fpc-pascal mailing list