[Ohrrpgce] SVN: james/12449 Docker: ohrrpgce-build-env-wine now has mingw64 and euphoria

Ralph Versteegen teeemcee at gmail.com
Mon Sep 20 08:06:12 PDT 2021


On Mon, 20 Sept 2021 at 23:08, James Paige <Bob at hamsterrepublic.com> wrote:

>
>
> On Sun., Sep. 19, 2021, 8:56 p.m. Ralph Versteegen, <teeemcee at gmail.com>
> wrote:
>
>>
>>
>> On Mon, 20 Sept 2021 at 07:06, James Paige <Bob at hamsterrepublic.com>
>> wrote:
>>
>>>
>>> I made a bunch of fixes, and now *wine scons* gets further.
>>>
>>> Switching to 32 bit compiler packages instead of 64 bit helped a lot.
>>>
>>> Also, I did manage to get reloadbasic.py running with just "python3" and
>>> not needing the whole path (The base image I am using sets up the PATH
>>> environment variable inside wine incorrectly for python). I have not made
>>> the change in the SConscript yet because i still need to upgrade from
>>> python2 to python3 on the Windows nightly build machine
>>>
>>
>> Did you try just 'python'? Works for me, and python is python 2.7 on my
>> system.
>>
>
> That would work on windows, but it breaks on modern Debian where python
> doesn't exist anymore, only python2 and python3
>

Debian too? :(  I thought it was just ArchLinux that would do something
so... hipster!


>
>
>>
>>> Right now the current error I am bumping into is:
>>>
>>>
>>> *windres --input gicon.rc --output build\gicon.owindres: can't popen
>>> `gcc -E -xc -DRC_INVOKED  gicon.rc': Bad file descriptor*
>>>
>>> I searched around for that error message, and found people suggesting to
>>> add the *windres.exe *argument *--use-temp-file* but that didn't help,
>>> it just changed the failure
>>>
>>>
>>> *windres --use-temp-file --input gicon.rc --output build\gicon.owindres:
>>> can't redirect stdout: `C:\users\root\Temp\cca00360.irc': Bad file
>>> descriptor*
>>>
>>
>> I could not find any search results at all for those errors while running
>> windres under wine, though I did see them for running windres.exe on
>> Windows. So I have no idea how to fix them other than not use windres.exe
>> at all.
>> You could use a linux build of windres instead of windres.exe.
>> I also note the following comment in SConscript:
>>
>> # windres is part of mingw, and this is only used with linkgcc anyway.
>> # FB includes GoRC.exe, but finding that file is too much trouble...
>>
>> The part about linkgcc is wrong (though we could avoid explicitly calling
>> windres when using linkgcc=0, but it would be better not to do that
>> anyway), but GoRC could be an option.
>>
>> If you spend much time trying to force wine into the build system then it
>> would be easier to cross-compile to Windows with mxe, plus builds are as
>> fast as they are on Unix. I can't imagine wine being very fast.
>>
>
> Hmm! That is a possibility too. I had ignored mxe because it wasn't going
> to work for euphoria, so I expected to need whine anyway for hspeak... But
> maybe I actually can use the combination of both?
>

Using wine just for compiling/binding hspeak would certainly be possible.
Also, it turns out that euphoria 4.1 *can* crosscompile, it is just missing
a copy of the runtime eu.a library for Windows. (Eu 4.0.3, which I still
usually use, also takes a -plat argument for cross-compiling, but I ran
into several problems with it.) By downloading a Windows build of Eu 4.1,
taking the eu.a from that, and telling a 64-bit linux euc build to use it I
was able to get a working hspeak.exe!
Unlike, FB, Euphoria seems to have no convention for where to store the
library for each target, instead you need to manually pass in the path to
the right runtime. But it's actually pretty painless, since the entire
runtime is a single .a file, compared with FB which needs a whole folder of
libraries and variants.
I've added support to scons. Note that only euc works, not eubind (I
haven't looked into whether that's possible), but scons calls eubind
instead in debug builds, which needs to be overridden.

To cross-compile hspeak.exe with mxe I did:

export EUDIR=/home/ralph/local/euphoria-4.1.0-Linux-x64/
export EUC=$EUDIR/bin/euc
export PATH=/mnt/common/src/mxe/usr/bin:$PATH
scons target=i686-w64-mingw32.static hspeak release=1
eulib=tmp/euphoria-4.1.0-Windows-x86/bin/eu.a

(The first two lines aren't necessary if Euphoria is installed globally)




>
> Wine does not seem slow. Probably not as fast as native, but not slow at
> all, as far as I can tell
>
>
>>
>>>
>>>
>>> Too much fun :D
>>>
>>> I am also thinking ahead about how to do a docker build for Mac. Running
>>> darwin in Docker is apparently possible, but sounds impractical. An actual
>>> OSX inside KVM inside Docker is also apparently possible, but I feel like
>>> that defeats the point of dockerizing it. I guess i'll look at OSXcross
>>> more later.
>>>
>>> Of course, the real goal I am working towards is not Dockerizing all the
>>> builds, it is really making Jenkins do all the builds-- so if dockerizing a
>>> build is more work than setting up an always-on VM with a Jenkins agent
>>> installed in it, then I just switch my approach :D
>>>
>>> ---
>>> James
>>>
>>> On Sat, Sep 18, 2021 at 11:09 PM Ralph Versteegen <teeemcee at gmail.com>
>>> wrote:
>>>
>>>>
>>>>
>>>> On Sun, 19 Sept 2021 at 12:56, James Paige <Bob at hamsterrepublic.com>
>>>> wrote:
>>>>
>>>>> So now not only does fbc work in the wine docker container, so does
>>>>> mingw64 and euphoria
>>>>>
>>>>>  *wine scons hspeak* actually works, and produces a working
>>>>> hspeak.exe (tested with *wine hspeak*)
>>>>>
>>>>> compiling game and custom fails though. I see two problems so far.
>>>>>
>>>>> First, when scons executes reloadbasic/reloadbasic.py on Windows, this
>>>>> relies on the .py file type being associated with python, so scons seems to
>>>>> be directly invoking *reloadbasic/reloadbasic.py* and this works on
>>>>> Real windows because the filetype is associated with python.exe but on
>>>>> Wine, this type of file association does not seem to work, even when I make
>>>>> sure the association is set up with regedit.
>>>>>
>>>>> Editing the constructor for the rbasic_builder in Sconscript to *Builder
>>>>> (action = ["C:\Python39\python.exe", [File('reloadbasic/reloadbasic.py'),
>>>>> ...* does work and fixes the problem, so I just need to work out a
>>>>> clean way to do that without breaking other platforms.
>>>>>
>>>>
>>>> Can't you just invoke python or python3 instead of
>>>> C:\Python39\python.exe?
>>>> (I'm not sure whether we dropped python 2 support when you switched all
>>>> the #! lines to python3; maybe python2 would still work if invoked
>>>> explicitly, or maybe python3 will be called somewhere whether installed or
>>>> not)
>>>>
>>>>
>>>>>
>>>>> The other error is this:
>>>>>
>>>>> os_windows.bas(107) error 20: Type mismatch, before ')' in 'dim fd as
>>>>> integer = _open_osfhandle(cast(integer, fhandle), 0)'
>>>>> os_windows.bas(714) warning 35(1): Mixing signed/unsigned operands
>>>>> os_windows.bas(784) warning 35(1): Mixing signed/unsigned operands
>>>>>
>>>>> Which makes me think I might have a mismatch in my FreeBasic/mingw64
>>>>> versions, but I don't really know yet, just a wild guess.
>>>>>
>>>>
>>>> This error is thrown by fbc, so the mingw version isn't related.
>>>> I suspect that maybe you're trying to compile for win64/x86_64? If fbc
>>>> itself is a win64 .exe then it probably also defaults to win64 builds. If
>>>> it has 32-bit libraries then it can compile for x86 with scons arch=32, and
>>>> we should make that the default.
>>>> [Note: win64 informally is used to mean 64-bit windows, but win32 does
>>>> not mean 32-bit Windows, it means not-16-bit, and for example compilers
>>>> such as FB define __FB_WIN32__ (or equivalent in C) on 64-bit Windows]
>>>>
>>>> I also see that you're downloading a 6-bit version of Euphoria for
>>>> Windows, that should be 32-bit instead (I assume Euphoria can't
>>>> crosscompile on Windows, just as it can't on Unix).
>>>>
>>>>
>>>>>
>>>>> ---
>>>>> James
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Sat, Sep 18, 2021 at 6:55 PM <subversion at hamsterrepublic.com>
>>>>> wrote:
>>>>>
>>>>>> james
>>>>>> 2021-09-18 15:55:34 -0700 (Sat, 18 Sep 2021)
>>>>>> 60
>>>>>> Docker: ohrrpgce-build-env-wine now has mingw64 and euphoria
>>>>>> ---
>>>>>> U   wip/docker/ohrrpgce-build-env-wine/Dockerfile
>>>>>>
>>>>>> _______________________________________________
>>>>>> Ohrrpgce mailing list
>>>>>> ohrrpgce at lists.motherhamster.org
>>>>>> http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org
>>>>>>
>>>>> _______________________________________________
>>>>> Ohrrpgce mailing list
>>>>> ohrrpgce at lists.motherhamster.org
>>>>> http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org
>>>>>
>>>> _______________________________________________
>>>> Ohrrpgce mailing list
>>>> ohrrpgce at lists.motherhamster.org
>>>> http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org
>>>>
>>> _______________________________________________
>>> Ohrrpgce mailing list
>>> ohrrpgce at lists.motherhamster.org
>>> http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org
>>>
>> _______________________________________________
>> Ohrrpgce mailing list
>> ohrrpgce at lists.motherhamster.org
>> http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org
>>
> _______________________________________________
> Ohrrpgce mailing list
> ohrrpgce at lists.motherhamster.org
> http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.motherhamster.org/pipermail/ohrrpgce-motherhamster.org/attachments/20210921/cdcae7dd/attachment-0001.html>


More information about the Ohrrpgce mailing list