[Ohrrpgce] how to emscripten?
Ralph Versteegen
teeemcee at gmail.com
Thu Dec 28 17:33:33 PST 2023
Excellent!
Yes, all four files are needed, and no others. However the .data file just
contains the files/directories specified by the --preload-file arg to emcc.
In SConscript:
gameenv['CCLINKFLAGS'] += ['--preload-file', 'games']
I only added that for testing and if you comment that out then there is no
.data file. The format of it is just all the input files concatenated
without anything between them. If you search ohrrpgce-game.js you'll see
something like:
loadPackage({"files": [{"filename": "/games/c_debug.txt", "start": 0,
"end": 5823}, {"filename": "/games/inputtest.rpg", "start": 5823, "end":
541481}], "remote_package_size": 541481});
We don't need to use this generated loadPackage code, we can include our
own js code into ohrrpgce-game.js which loads an external data file and
puts it in the virtual filesystem. Notably an .rpg file could be used as a
.data file simply by setting the correct "end", or even better we can write
an .rpg parser in JS and load it more efficiently as an .rpgdir. I haven't
done any work on that yet to allow distributing games for web, aside from
browsing the JS code to get an understanding of the virtual filesystem.
For now I suggest just putting a test .rpg in games/ so people have
something for testing, but we'll remove the "--preload-file games" once I
push the rest of Blain's emscripten work which includes adding a button to
the .html to let you "upload" .rpg files into the virtual FS.
> I need to run a local webserver (I guess emscripten uses some js features
that aren't allowed on file:/// urls?)
Unfortunately all modern web browsers have this problem, you can't access
one local file from another (e.g. a .css included in a .html) without
running a local web server. The easiest is to run "python3 -m http.server"
from the directory.
On Fri, 29 Dec 2023 at 10:25, James Paige <james.robert.paige at gmail.com>
wrote:
> Aha! I see. I need to run a local webserver (I guess emscripten uses some
> js features that aren't allowed on file:/// urls?)
>
> I ran a local werbserver with
> docker run -it --rm -d -p 8080:80 -v
> ~/src/ohrrpgce:/usr/share/nginx/html --name localweb nginx
>
> And now I can go to http://localhost:8080/ohrrpgce-game.html and see the
> game I put in the games directory
>
> [image: image.png]
> So it works! Yay!
>
> Question about the files, .html .js .data .wasm
> Do I need them all in the nightly build? Are there any other files that I
> need that I haven't noticed yet?
>
> I assume that ohrrpgce-game.data has the filesystem in it? What format is
> it in? Is there a way that people can add .rpg files to it without having
> the emscripten sdk?
>
> I'm wondering what we should put in ./games for the nightly build. For the
> minimalist builds for the distrib menu to use, I assume nothing (except
> that isn't allowed)
> Does a non-minimalist build of emscripten even make sense?
>
> On Thu, Dec 28, 2023 at 4:04 PM James Paige <james.robert.paige at gmail.com>
> wrote:
>
>> Nice that fix did help.
>>
>> Now I get:
>>
>> error: games does not exist
>> emcc: error: '/emsdk/upstream/emscripten/tools/file_packager
>> ohrrpgce-game.data --from-emcc --preload games' failed (returned 1)
>>
>> If I make an empty directory named "games" the first part of that err
>> goes away, but it still says:
>>
>> emcc: error: '/emsdk/upstream/emscripten/tools/file_packager
>> ohrrpgce-game.data --from-emcc --preload games' failed (returned 1)
>>
>> If I put a random rpg file into the games directory, then `scons
>> target=js` runs to completion, and I can see that
>> ohrrpgce-(game|custom).(data|html|js|wasm) although if I load it up in my
>> browser via file:/// I just get an error "Exception thrown, see JavaScript
>> console"
>>
>> [image: image.png]
>> So I am getting closer, but not quite there yet!
>>
>>
>>
>> On Thu, Dec 28, 2023 at 3:30 PM Ralph Versteegen <teeemcee at gmail.com>
>> wrote:
>>
>>> This must be due to using a different emscripten version than I have
>>> installed. I haven't upgraded, but I've just pushed a commit that should
>>> fix it.
>>>
>>> On Fri, 29 Dec 2023 at 08:56, James Paige <james.robert.paige at gmail.com>
>>> wrote:
>>>
>>>> Those instructions were very helpful. I now have a docker container
>>>> with the latest emscripten and fbc compiled from your emscripten branch.
>>>> However, I get a mutex error in filelayer.cpp
>>>>
>>>> scons: Building targets ...
>>>> emcc -o build/filelayer.o -c -Wall -Wno-deprecated-declarations
>>>> -Wno-unused-but-set-variable -DFBCVERSION=1101 -g -fno-omit-frame-pointer
>>>> -O3 -DMINIMAL_OS -fno-pie -fwrapv --std=c++0x -Wno-non-virtual-dtor
>>>> filelayer.cpp
>>>> filelayer.cpp:39:1: error: reference to 'mutex' is ambiguous
>>>> 39 | mutex openfiles_mutex(true); // Non-destructing mutex
>>>> | ^
>>>> ./mutex.hpp:14:7: note: candidate found by name lookup is 'mutex'
>>>> 14 | class mutex {
>>>> | ^
>>>> /emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__mutex/mutex.h:24:87:
>>>> note: candidate found by name lookup is 'std::mutex'
>>>> 24 | class _LIBCPP_EXPORTED_FROM_ABI
>>>> _LIBCPP_THREAD_SAFETY_ANNOTATION(capability("mutex")) mutex {
>>>> |
>>>> ^
>>>> filelayer.cpp:39:7: error: no matching constructor for initialization
>>>> of 'mutex'
>>>> 39 | mutex openfiles_mutex(true); // Non-destructing mutex
>>>> | ^ ~~~~
>>>> /emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__mutex/mutex.h:30:3:
>>>> note: candidate constructor not viable: no known conversion from 'bool' to
>>>> 'const mutex' for 1st argument
>>>> 30 | mutex(const mutex&) = delete;
>>>> | ^ ~~~~~~~~~~~~
>>>> /emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/__mutex/mutex.h:28:43:
>>>> note: candidate constructor not viable: requires 0 arguments, but 1 was
>>>> provided
>>>> 28 | _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR mutex() = default;
>>>> | ^
>>>> 2 errors generated.
>>>> scons: *** [build/filelayer.o] Error 1
>>>> scons: building terminated because of errors.
>>>>
>>>>
>>>> On Wed, Dec 27, 2023 at 7:54 AM Ralph Versteegen via Ohrrpgce <
>>>> ohrrpgce at lists.motherhamster.org> wrote:
>>>>
>>>>> Oh, I haven't written instructions yet. I need to do that. But quickly:
>>>>>
>>>>> If you haven't already, install emscripten:
>>>>> git clone https://github.com/emscripten-core/emsdk.git
>>>>> cd emsdk
>>>>> Install "latest" version, or to avoid surprises in nightlies it's
>>>>> probably better to use the same version I have, which is 3.1.42
>>>>> ./emsdk install 3.1.42
>>>>> ./emsdk activate 3.1.42
>>>>> Put .../emsdk/upstream/emscripten in your PATH
>>>>>
>>>>> Compile FB:
>>>>> git clone https://github.com/rversteegen/fbc.git
>>>>> cd fbc
>>>>> checkout my 'emscripten' branch (which mostly contains bugfixes. I'll
>>>>> get these upstreamed sometime soonish)
>>>>> make -j4 install-compiler install-includes prefix=/install/fb/here
>>>>> make -j4 install-rtlib TARGET=asmjs-unknown-emscripten
>>>>> prefix=/install/fb/here
>>>>> (you can run "make install-rtlib TARGET=..." additional times to
>>>>> compile libraries for other targets)
>>>>>
>>>>> Then you can compile with "scons target=js ..." (add fbc=... or else
>>>>> put the newly compiled fbc in $PATH)
>>>>>
>>>>>
>>>>>
>>>>> On Wed, 27 Dec 2023 at 07:32, James Paige via Ohrrpgce <
>>>>> ohrrpgce at lists.motherhamster.org> wrote:
>>>>>
>>>>>> I see when I run `scons target=js` I get
>>>>>>
>>>>>> Error: This installation of FreeBASIC doesn't support this
>>>>>> target-arch combination;
>>>>>> /usr/local/bin/../lib/freebasic/js-asmjs/libfb.a [or libfbpic.a] is
>>>>>> missing.
>>>>>>
>>>>>> Where do I find freebasic/js-asmjs/libfb.a ?
>>>>>>
>>>>>> TMC, have you written any instructions anywhere for how to compile
>>>>>> the ohr with emscripten?
>>>>>>
>>>>>> I'm feeling ready to tackle that nightly build :D
>>>>>>
>>>>>> ---
>>>>>> James
>>>>>>
>>>>>> _______________________________________________
>>>>>> 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/20231229/eef3d6f3/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 23267 bytes
Desc: not available
URL: <http://lists.motherhamster.org/pipermail/ohrrpgce-motherhamster.org/attachments/20231229/eef3d6f3/attachment-0002.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 22476 bytes
Desc: not available
URL: <http://lists.motherhamster.org/pipermail/ohrrpgce-motherhamster.org/attachments/20231229/eef3d6f3/attachment-0003.png>
More information about the Ohrrpgce
mailing list