Xenoveritas / abuse

Abuse SDL port originally from Crack-Dot-Com and released into the public domain
Other
128 stars 24 forks source link

[Termux] Build error #22

Open IntinteDAO opened 2 years ago

IntinteDAO commented 2 years ago

This is how I try to build various projects under Termux. Probably a proper patch would fix the problem, but I'm not familiar with C++ (so the question is whether it makes sense to build the source code :P).

I wonder if you can fix it (as long as it's fixable so as not to break compatibility)

[ 18%] Building CXX object src/net/CMakeFiles/net.dir/fileman.cpp.o
/data/data/com.termux/files/home/termux/frabs/abuse/src/sdlport/hmi.cpp:302:97: error: non-constant-expression cannot be narrowed from type 'int' to 'uint8_t' (aka 'unsigned char') in initializer list
      [-Wc++11-narrowing]
    uint8_t midi_header[] = { 0x4D, 0x54, 0x68, 0x64, 0x00, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, (num_tracks + 1), 0x00, 0xC0 };
                                                                                                ^~~~~~~~~~~~~~~~
/data/data/com.termux/files/home/termux/frabs/abuse/src/sdlport/hmi.cpp:302:97: note: insert an explicit cast to silence this issue
    uint8_t midi_header[] = { 0x4D, 0x54, 0x68, 0x64, 0x00, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, (num_tracks + 1), 0x00, 0xC0 };
                                                                                                ^~~~~~~~~~~~~~~~
                                                                                                static_cast<uint8_t>( )
1 error generated.
make[2]: *** [src/sdlport/CMakeFiles/sdlport.dir/build.make:174: src/sdlport/CMakeFiles/sdlport.dir/hmi.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
[ 19%] Building CXX object src/net/CMakeFiles/net.dir/sock.cpp.o
/data/data/com.termux/files/home/termux/frabs/abuse/src/net/fileman.cpp:310:33: error: non-constant-expression cannot be narrowed from type 'unsigned long' to 'uint8_t' (aka 'unsigned char') in
      initializer list [-Wc++11-narrowing]
  uint8_t sizes[3]={ CLIENT_NFS,strlen(filename)+1,strlen(mode)+1};
                                ^~~~~~~~~~~~~~~~~~
/data/data/com.termux/files/home/termux/frabs/abuse/src/net/fileman.cpp:310:33: note: insert an explicit cast to silence this issue
  uint8_t sizes[3]={ CLIENT_NFS,strlen(filename)+1,strlen(mode)+1};
                                ^~~~~~~~~~~~~~~~~~
                                static_cast<uint8_t>( )
/data/data/com.termux/files/home/termux/frabs/abuse/src/net/fileman.cpp:310:52: error: non-constant-expression cannot be narrowed from type 'unsigned long' to 'uint8_t' (aka 'unsigned char') in
      initializer list [-Wc++11-narrowing]
  uint8_t sizes[3]={ CLIENT_NFS,strlen(filename)+1,strlen(mode)+1};
                                                   ^~~~~~~~~~~~~~
/data/data/com.termux/files/home/termux/frabs/abuse/src/net/fileman.cpp:310:52: note: insert an explicit cast to silence this issue
  uint8_t sizes[3]={ CLIENT_NFS,strlen(filename)+1,strlen(mode)+1};
                                                   ^~~~~~~~~~~~~~
                                                   static_cast<uint8_t>( )

The compiler is clang, Termux doesn't have gcc

nunotexbsd commented 1 year ago

Could you try these patches from FreeBSD port?

fileman.cpp:296:33: error: non-constant-expression cannot be narrowed from type 'unsigned long' to 'uint8_t' (aka 'unsigned char') in initializer list [-Wc++11-narrowing]
  uint8_t sizes[3]={ CLIENT_NFS,strlen(filename)+1,strlen(mode)+1};
                                ^~~~~~~~~~~~~~~~~~
fileman.cpp:296:33: note: insert an explicit cast to silence this issue
  uint8_t sizes[3]={ CLIENT_NFS,strlen(filename)+1,strlen(mode)+1};
                                ^~~~~~~~~~~~~~~~~~
                                static_cast<uint8_t>( )
fileman.cpp:296:52: error: non-constant-expression cannot be narrowed from type 'unsigned long' to 'uint8_t' (aka 'unsigned char') in initializer list [-Wc++11-narrowing]
  uint8_t sizes[3]={ CLIENT_NFS,strlen(filename)+1,strlen(mode)+1};
                                                   ^~~~~~~~~~~~~~
fileman.cpp:296:52: note: insert an explicit cast to silence this issue
  uint8_t sizes[3]={ CLIENT_NFS,strlen(filename)+1,strlen(mode)+1};
                                                   ^~~~~~~~~~~~~~
                                                   static_cast<uint8_t>( )

--- src/net/fileman.cpp.orig    2011-05-02 11:55:06 UTC
+++ src/net/fileman.cpp
@@ -293,7 +293,7 @@ file_manager::remote_file::remote_file(net_socket *soc
   next=Next;
   open_local=0;

-  uint8_t sizes[3]={ CLIENT_NFS,strlen(filename)+1,strlen(mode)+1};
+  uint8_t sizes[3]={ CLIENT_NFS,(uint8_t)(strlen(filename)+1),(uint8_t)(strlen(mode)+1)};
   if (sock->write(sizes,3)!=3) { r_close("could not send open info"); return ; }
   if (sock->write(filename,sizes[1])!=sizes[1]) { r_close("could not send filename"); return ; }
   if (sock->write(mode,sizes[2])!=sizes[2]) { r_close("could not send mode"); return ; }
hmi.cpp:302:97: error: non-constant-expression cannot be narrowed from type 'int' to 'uint8_t'
      (aka 'unsigned char') in initializer list [-Wc++11-narrowing]
  ...0x54, 0x68, 0x64, 0x00, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, (num_tracks + 1), 0x00, 0xC0 };
                                                                 ^~~~~~~~~~~~~~~~
hmi.cpp:302:97: note: insert an explicit cast to silence this issue
  ...0x54, 0x68, 0x64, 0x00, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, (num_tracks + 1), 0x00, 0xC0 };
                                                                 ^~~~~~~~~~~~~~~~
                                                                 static_cast<uint8_t>( )

--- src/sdlport/hmi.cpp.orig    2011-05-09 07:58:30 UTC
+++ src/sdlport/hmi.cpp
@@ -299,7 +299,7 @@ uint8_t* load_hmi(char const *filename, uint32_t &data
     uint8_t num_tracks = (next_offset - offset_tracks) / sizeof(uint32_t);

     // Write Midi file header
-    uint8_t midi_header[] = { 0x4D, 0x54, 0x68, 0x64, 0x00, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, (num_tracks + 1), 0x00, 0xC0 };
+    uint8_t midi_header[] = { 0x4D, 0x54, 0x68, 0x64, 0x00, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, (uint8_t)(num_tracks + 1), 0x00, 0xC0 };
     memcpy(output_buffer_ptr, midi_header, 14);
     output_buffer_ptr += 14;
nunotexbsd commented 1 year ago

Other thing I've tested is that it only runs when compiled with clang <= 11 or I get a seg fault, could you confirm?

IntinteDAO commented 1 year ago

Other thing I've tested is that it only runs when compiled with clang <= 11 or I get a seg fault, could you confirm?

Yep, I tried on Termux and it segfaults when compiled on Clang, but works on GCC. Sorry for waiting, we just use GCC to compile Abuse on Termux.

But still no issue why it's segfaulting