https://qa.debian.org/excuses.php?package=warzone2100
The RTS game Warzone 2100 which has etensive 3D graphics currently doesn't
build on armhf (32bit ARM), i386, s390x, and riscv64. The details of the
errors are at the bottom.
Does it make sense to compile for 32bit ARM (old, slow, and not connected to
suitable displays), i386 (old, slow, and everyone who had one as a desktop has
upgraded to amd64), or s390x (not a desktop)?
One could argue that getting code compiled on all platforms is good for
assuring code quality, but does spending hours compiling code on systems that
will never run it really provide that much benefit?
The armhf bug is a trivial issue, but maybe not worth addressing. The i386 one
is more complex and indicates a problem with the gpu-basis-universal package
(which should be fixed as a separate issue).
THe s390x one is something that should be addressed as a good coding measure
but I can send a patch upstream without involving Debian. The riscv64 one is
a real issue that should be fixed as I believe that riscv64 will be a good
gaming platform at some future time.
At the moment the riscv64 builders are apparently backlogged, so would it make
sense to disable riscv64 builds until someone releases riscv64 hardware that
is capable of actually playing the game?
Does it make sense to have the gpu-basis-universal package on 32bit platforms?
That package is used to build games like warzone2100 which takes over 1.5
hours of CPU time on a E5-2699A v4 with SSE. On a 32bit CPU without vector
instructions it would take much more CPU time only to produce packages that
probably aren't playable.
I don't think we are helping users by making software available to download
which is unlikely to run well on their hardware. There is a range of games
available which have had little or no code changes in 20 years which will run
very nicely on i386 and armhf.
armhf is because of the following warning which is not useful as old versions
of GCC are not used in the build process, so we could exclude that from -
Werror.
/usr/include/c++/15/bits/stl_tree.h:2832:5: note: parameter passing for
argument of type ‘std::_Rb_tree<std::__cxx11::basic_string<char>,
std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> >,
std::_Select1st<std::pair<const std::__cxx11::basic_string<char>
, nlohmann::basic_json<> > >, std::less<void>, std::allocator<std::pair<const
std::__cxx11::basic_string<char>, nlohmann::basic_json<> > >
>::const_iterator’ changed in GCC 7.1
2832 | _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
i386 is because it build-depends on basisu and we get the following:
CMake Error at 3rdparty/CMakeLists.txt:170 (message):
basisu does not seem to be executable on this host?: /usr/bin/basisu (exit
code: Subprocess aborted)
riscv64 gets the following which seems like a serious issue:
/build/reproducible-path/warzone2100-4.6.3/lib/netplay/tcp/
tcp_connection_address.cpp: In member function ‘virtual
net::result<std::__cxx11::basic_string<char> >
tcp::TCPConnectionAddress::toString() const’:
/build/reproducible-path/warzone2100-4.6.3/lib/netplay/tcp/
tcp_connection_address.cpp:56:43: error: cast from ‘sockaddr*’ to
‘sockaddr_in*’ increases required alignment of target type [-Werror=cast-
align]
56 | struct sockaddr_in* sin = reinterpret_cast<struct
sockaddr_in*>(addr_->ai_addr);
|
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/build/reproducible-path/warzone2100-4.6.3/lib/netplay/tcp/
tcp_connection_address.cpp:66:44: error: cast from ‘sockaddr*’ to
‘sockaddr_in6*’ increases required alignment of target type [-Werror=cast-
align]
66 | struct sockaddr_in6* sin = reinterpret_cast<struct
sockaddr_in6*>(addr_->ai_addr);
s390x gets the following, it might be worth debugging this for general
platform support:
steamnetworkingsockets_udp.cpp.o -c /build/reproducible-path/
warzone2100-4.6.3/3rdparty/GameNetworkingSockets/src/steamnetworkingsockets/
clientlib/steamnetworkingsockets_udp.cpp
FAILED: [code=1] 3rdparty/GameNetworkingSockets/src/CMakeFiles/
GameNetworkingSockets_s.dir/steamnetworkingsockets/clientlib/
steamnetworkingsockets_udp.cpp.o
/usr/bin/c++ -DENABLE_OPENSSLCONNECTION -DGOOGLE_PROTOBUF_NO_RTTI -DLINUX -
DSTEAMNETWORKINGSOCKETS_ENABLE_ICE -DSTEAMNETWORKINGSOCKETS_FOREXPORT -
DVALVE_CRYPTO_25519_LIBSODIUM -DVALVE_CRYPTO_ENABLE_25519 -
DVALVE_CRYPTO_LIBSODIUM -DVALVE_CRYPTO_SHA1_WPA -I/build/reproducible-pat
h/warzone2100-4.6.3/debian/build -I/build/reproducible-path/
warzone2100-4.6.3/. -I/build/reproducible-path/warzone2100-4.6.3/3rdparty -I/
build/reproducible-path/warzone2100-4.6.3/3rdparty/GameNetworkingSockets/
src/../include -I/build/reproducible-path/warzone2100-4.6.3/3rdparty
/GameNetworkingSockets/src/common -I/build/reproducible-path/
warzone2100-4.6.3/3rdparty/GameNetworkingSockets/src/public -I/build/
reproducible-path/warzone2100-4.6.3/debian/build/3rdparty/
GameNetworkingSockets/src -isystem /build/reproducible-path/
warzone2100-4.6.3/3rdparty/glm
-isystem /build/reproducible-path/warzone2100-4.6.3/3rdparty/date/include -g
-O2 -ffile-prefix-map=/build/reproducible-path/warzone2100-4.6.3=. -fstack-
protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -DNDEBUG
-fstack-protector-strong -fstack-clash-protect
ion -O2 -g -DNDEBUG -std=gnu++17 -fPIC -ffunction-sections -fdata-sections -
fstack-protector-strong -fvisibility=hidden -fno-strict-aliasing -Wall -Wno-
unknown-pragmas -Wno-sign-compare -Wno-unused-local-typedef -Wno-unused-const-
variable -Wno-nested-anon-types -Wno-format-trun
cation -fvisibility-inlines-hidden -Wno-reorder -Wno-non-virtual-dtor -Wno-
zero-as-null-pointer-constant -fno-exceptions -fno-rtti -DNDEBUG -MD -MT
3rdparty/GameNetworkingSockets/src/CMakeFiles/GameNetworkingSockets_s.dir/
steamnetworkingsockets/clientlib/steamnetworkingsockets_
udp.cpp.o -MF 3rdparty/GameNetworkingSockets/src/CMakeFiles/
GameNetworkingSockets_s.dir/steamnetworkingsockets/clientlib/
steamnetworkingsockets_udp.cpp.o.d -o 3rdparty/GameNetworkingSockets/src/
CMakeFiles/GameNetworkingSockets_s.dir/steamnetworkingsockets/clientlib/
steamnetwork
ingsockets_udp.cpp.o -c /build/reproducible-path/warzone2100-4.6.3/3rdparty/
GameNetworkingSockets/src/steamnetworkingsockets/clientlib/
steamnetworkingsockets_udp.cpp
In file included from /build/reproducible-path/warzone2100-4.6.3/3rdparty/
GameNetworkingSockets/src/public/tier0/platform.h:30,
from /build/reproducible-path/warzone2100-4.6.3/3rdparty/
GameNetworkingSockets/src/public/tier0/basetypes.h:15,
from /build/reproducible-path/warzone2100-4.6.3/3rdparty/
GameNetworkingSockets/src/steamnetworkingsockets/clientlib/../
steamnetworkingsockets_internal.h:12,
from /build/reproducible-path/warzone2100-4.6.3/3rdparty/
GameNetworkingSockets/src/steamnetworkingsockets/clientlib/
steamnetworkingsockets_connections.h:7,
from /build/reproducible-path/warzone2100-4.6.3/3rdparty/
GameNetworkingSockets/src/steamnetworkingsockets/clientlib/
steamnetworkingsockets_udp.h:7,
from /build/reproducible-path/warzone2100-4.6.3/3rdparty/
GameNetworkingSockets/src/steamnetworkingsockets/clientlib/
steamnetworkingsockets_udp.cpp:3:
/build/reproducible-path/warzone2100-4.6.3/3rdparty/GameNetworkingSockets/src/
public/minbase/minbase_endian.h: In instantiation of ‘T WordSwapC(T) [with T =
long long unsigned int]’:
/build/reproducible-path/warzone2100-4.6.3/3rdparty/GameNetworkingSockets/src/
steamnetworkingsockets/clientlib/steamnetworkingsockets_udp.cpp:584:20:
required from here
101 | #define LittleWord( val ) WordSwap( val )
| ^
/build/reproducible-path/warzone2100-4.6.3/3rdparty/GameNetworkingSockets/src/
public/minbase/minbase_endian.h:26:45: error: static assertion failed: Compile
time assert constraint is not true: sizeof(T) == sizeof(uint16)
26 | PLAT_COMPILE_TIME_ASSERT( sizeof(T) == sizeof(uint16) );
| ~~~~~~~~~~^~~~~~~~~~~~~~~~~
/build/reproducible-path/warzone2100-4.6.3/3rdparty/GameNetworkingSockets/src/
public/minbase/minbase_macros.h:36:65: note: in definition of macro
‘PLAT_COMPILE_TIME_ASSERT’
36 | #define PLAT_COMPILE_TIME_ASSERT( pred ) static_assert( pred,
"Compile time assert constraint is not true: " #pred )
| ^~~~
/build/reproducible-path/warzone2100-4.6.3/3rdparty/GameNetworkingSockets/src/
public/minbase/minbase_endian.h:26:45: note: the comparison reduces to ‘(8 ==
2)’
26 | PLAT_COMPILE_TIME_ASSERT( sizeof(T) == sizeof(uint16) );
| ~~~~~~~~~~^~~~~~~~~~~~~~~~~
/build/reproducible-path/warzone2100-4.6.3/3rdparty/GameNetworkingSockets/src/
public/minbase/minbase_macros.h:36:65: note: in definition of macro
‘PLAT_COMPILE_TIME_ASSERT’
36 | #define PLAT_COMPILE_TIME_ASSERT( pred ) static_assert( pred,
"Compile time assert constraint is not true: " #pred )
--
My Main Blog http://etbe.coker.com.au/
My Documents Blog http://doc.coker.com.au/