liquidat Posted August 19, 2022 Report Share Posted August 19, 2022 (edited) Hi, since I can't wait for the next release I decided to give it a try to compile it myself. I keep running into bugs: Either during the first step, where something is off with the mozjs part. Or if I use system mozjs, I run into some JS converting error. If you have an idea, I would appreciate it. Don't sweat it though - I am also doing this since I am not patient enough to wait for the release. I will survive it if I have to wait until then My machine is running Fedora 36, here are the steps I did (dependencies installed as far as I can tell): > git clone https://gitlab.com/0ad/0ad.git --depth=50 > cd 0ad/build/workspaces > ./update-workspaces.sh -j3 The error I run into is: /home/liquidat/gits/gitlab/0ad/libraries/source/spidermonkey/mozjs-78.6.0/js/src/util/TrailingArray.h:73:41: internal compiler error: unexpected expression ‘ElemSize’ of kind template_parm_index 73 | MOZ_ASSERT((end - start) % ElemSize == 0); | ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~ So I decided to premake with system version of mozjs (78.15.0): > ./update-workspaces.sh -j3 --with-system-mozjs That went through . But compile failed: > cd gcc > make -j3 ==== Building mocks_real (release) ==== Creating obj/mocks_real_Release mocks_real.cpp Linking mocks_real ==== Building network (release) ==== Creating obj/network_Release precompiled.h In file included from ../../../source/network/NetMessages.h:27, from ../../../source/network/NetMessage.h:26, from ../../../source/pch/network/precompiled.h:26: ../../../source/scriptinterface/ScriptTypes.h:85:2: error: #error Your compiler is trying to use an untested minor version of the SpiderMonkey library. If you are a package maintainer, please make sure to check very carefully that this version does not change the behaviour of the code executed by SpiderMonkey. Different parts of the game (e.g. the multiplayer mode) rely on deterministic behaviour of the JavaScript engine. A simple way for testing this would be playing a network game with one player using the old version and one player using the new version. Another way for testing is running replays and comparing the final hash (check trac.wildfiregames.com/wiki/Debugging#Replaymode). For more information check this link: trac.wildfiregames.com/wiki/Debugging#Outofsync 85 | #error Your compiler is trying to use an untested minor version of the \ | ^~~~~ make[1]: *** [network.make:138: obj/network_Release/precompiled.h.gch] Error 1 make: *** [Makefile:79: network] Error 2 So in ../../../source/scriptinterface/ScriptTypes.h I removed the warning for the sub-version and tried again, but run into another error: ScriptConversions.cpp ../../../source/scriptinterface/ScriptContext.cpp: In member function ‘void ScriptContext::UnRegisterRealm(JS::Realm*)’: ../../../source/scriptinterface/ScriptContext.cpp:146:46: error: cannot convert ‘JS::Zone*’ to ‘JSContext*’ 146 | JS::PrepareZoneForGC(js::GetRealmZone(realm)); In file included from /usr/include/mozjs-78/js/Value.h:25, from /usr/include/mozjs-78/js/CallArgs.h:74, from /usr/include/mozjs-78/jsapi.h:31, I found an existing thread discussing a similar error. But according to that, their error was fixed in SpiderMonkey 78.7, and my version is much newer. Edited August 19, 2022 by liquidat Found a thread discussing the same error. Quote Link to comment Share on other sites More sharing options...
smiley Posted August 19, 2022 Report Share Posted August 19, 2022 https://bugs.gentoo.org/847601 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105756 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105931 GCC bug, updating to gcc 12.2 should fix it. 1 Quote Link to comment Share on other sites More sharing options...
liquidat Posted August 19, 2022 Author Report Share Posted August 19, 2022 @smiley Ah! Thank you so much for the details, that explains it! Now I only have to find a way to update my compiler on my Fedora system If I succeed, I will post it here. Quote Link to comment Share on other sites More sharing options...
smiley Posted August 20, 2022 Report Share Posted August 20, 2022 You could also use clang. Quote Link to comment Share on other sites More sharing options...
Stan` Posted August 20, 2022 Report Share Posted August 20, 2022 See https://code.wildfiregames.com/P209 for an example. Quote Link to comment Share on other sites More sharing options...
smiley Posted August 20, 2022 Report Share Posted August 20, 2022 If you don't need anything fancy an alias would do fine as well. alias use_clang='CC=clang CXX=clang++' The commands can be prefixed with use_clang which would save a little time, although, you would need to clean your workspace when switching with clean-workspace.sh. Quote Link to comment Share on other sites More sharing options...
liquidat Posted August 21, 2022 Author Report Share Posted August 21, 2022 @smiley@Stan`Luckily, Fedora build a few pre-testing packages for 12.2, and with them I was able to build and successfully play the game. Awesome, thanks for the help! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.