Jannis234 / jm-overlay

A portage overlay for gentoo users
14 stars 7 forks source link

games-emulation/citra-9999 fails to build. #13

Closed crocket closed 6 years ago

crocket commented 6 years ago
 * Messages for package games-emulation/citra-9999:

 * ERROR: games-emulation/citra-9999::jm-overlay failed (unpack phase):
 *   git checkout 7e00cea85e24f836f86e715acd1d07128512acb4 failed
Jannis234 commented 6 years ago

Looks like citra's usage of git submodules caused problems with git-r3.eclass, should be fixed now.

crocket commented 6 years ago

I think it should be reopened. It still fails to build.

/var/tmp/portage/games-emulation/citra-9999/work/citra-9999/src/core/file_sys/archive_backend.cpp: In constructor ‘FileSys::Path::Path(FileSys::LowPathType, const std::vector<unsigned char>&)’:
/var/tmp/portage/games-emulation/citra-9999/work/citra-9999/src/core/file_sys/archive_backend.cpp:24:32: error: invalid conversion from ‘const void*’ to ‘void*’ [-fpermissive]
         std::memcpy(string.data(), data.data(), string.size());
                     ~~~~~~~~~~~^~
In file included from /usr/include/features.h:410:0,
                 from /usr/lib/gcc/x86_64-pc-linux-gnu/6.4.0/include/g++-v6/x86_64-pc-linux-gnu/bits/os_defines.h:39,
                 from /usr/lib/gcc/x86_64-pc-linux-gnu/6.4.0/include/g++-v6/x86_64-pc-linux-gnu/bits/c++config.h:507,
                 from /usr/lib/gcc/x86_64-pc-linux-gnu/6.4.0/include/g++-v6/cstddef:49,
                 from /var/tmp/portage/games-emulation/citra-9999/work/citra-9999/src/core/file_sys/archive_backend.cpp:5:
/usr/include/bits/string3.h:50:1: note:   initializing argument 1 of ‘void* memcpy(void*, const void*, size_t)’
 __NTH (memcpy (void *__restrict __dest, const void *__restrict __src,
 ^
/var/tmp/portage/games-emulation/citra-9999/work/citra-9999/src/core/file_sys/archive_backend.cpp:30:32: error: invalid conversion from ‘const void*’ to ‘void*’ [-fpermissive]
         std::memcpy(u16str.data(), data.data(), u16str.size() * sizeof(char16_t));
                     ~~~~~~~~~~~^~
In file included from /usr/include/features.h:410:0,
                 from /usr/lib/gcc/x86_64-pc-linux-gnu/6.4.0/include/g++-v6/x86_64-pc-linux-gnu/bits/os_defines.h:39,
                 from /usr/lib/gcc/x86_64-pc-linux-gnu/6.4.0/include/g++-v6/x86_64-pc-linux-gnu/bits/c++config.h:507,
                 from /usr/lib/gcc/x86_64-pc-linux-gnu/6.4.0/include/g++-v6/cstddef:49,
                 from /var/tmp/portage/games-emulation/citra-9999/work/citra-9999/src/core/file_sys/archive_backend.cpp:5:
/usr/include/bits/string3.h:50:1: note:   initializing argument 1 of ‘void* memcpy(void*, const void*, size_t)’
 __NTH (memcpy (void *__restrict __dest, const void *__restrict __src,
 ^
make[2]: *** [src/core/CMakeFiles/core.dir/build.make:399: src/core/CMakeFiles/core.dir/file_sys/archive_backend.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: Leaving directory '/var/tmp/portage/games-emulation/citra-9999/work/citra-9999_build'
make[1]: *** [CMakeFiles/Makefile2:675: src/core/CMakeFiles/core.dir/all] Error 2
make[1]: Leaving directory '/var/tmp/portage/games-emulation/citra-9999/work/citra-9999_build'
make: *** [Makefile:141: all] Error 2
 * ERROR: games-emulation/citra-9999::jm-overlay failed (compile phase):
 *   emake failed
Jannis234 commented 6 years ago

Looks like you need GCC 7 or newer to build citra, I updated the ebuild for that. You can still build with USE=clang if you don't want to update to an unstable GCC.

crocket commented 6 years ago

With USE=clang,

/var/tmp/portage/games-emulation/citra-9999/work/citra-9999/src/dedicated_room/citra-room.cpp:12:10: fatal error: 'SDL.h' file not found
#include <SDL.h>

libsdl2 keeps SDL.h in /usr/include/SDL2/

It seems #include <SDL.h> should become #include <SDL2/SDL.h>

However, I discovered that sdl2 USE flag is not enabled in citra.

I haven't tried to compile citra with gcc-7, yet. Shall I try compiling citra with gcc-7?

Jannis234 commented 6 years ago

This looks like an upstream bug to me, as citra is trying to compile SDL2 code even when SDL2 support is explicitly turned off. It seems to find the header and build correctly when USE=sdl2 is set.

crocket commented 6 years ago

Perhaps, it makes sense to cut a 1.0-pre release in jm-overlay and compensate for upstream issue.

crocket commented 6 years ago

I disabled clang and enabled sdl2.

gcc-7.3.0 doesn't make it work

/var/tmp/portage/games-emulation/citra-9999/work/citra-9999/src/core/file_sys/archive_backend.cpp: In constructor ‘FileSys::Path::Path(FileSys::LowPathType, const std::vector<unsigned char>&)’:
/var/tmp/portage/games-emulation/citra-9999/work/citra-9999/src/core/file_sys/archive_backend.cpp:24:32: error: invalid conversion from ‘const void*’ to ‘void*’ [-fpermissive]
         std::memcpy(string.data(), data.data(), string.size());
                     ~~~~~~~~~~~^~
In file included from /usr/include/features.h:410:0,
                 from /usr/lib/gcc/x86_64-pc-linux-gnu/6.4.0/include/g++-v6/x86_64-pc-linux-gnu/bits/os_defines.h:39,
                 from /usr/lib/gcc/x86_64-pc-linux-gnu/6.4.0/include/g++-v6/x86_64-pc-linux-gnu/bits/c++config.h:507,
                 from /usr/lib/gcc/x86_64-pc-linux-gnu/6.4.0/include/g++-v6/cstddef:49,
                 from /var/tmp/portage/games-emulation/citra-9999/work/citra-9999/src/core/file_sys/archive_backend.cpp:5:
/usr/include/bits/string3.h:50:1: note:   initializing argument 1 of ‘void* memcpy(void*, const void*, size_t)’
 __NTH (memcpy (void *__restrict __dest, const void *__restrict __src,
 ^
/var/tmp/portage/games-emulation/citra-9999/work/citra-9999/src/core/file_sys/archive_backend.cpp:30:32: error: invalid conversion from ‘const void*’ to ‘void*’ [-fpermissive]
         std::memcpy(u16str.data(), data.data(), u16str.size() * sizeof(char16_t));
                     ~~~~~~~~~~~^~
In file included from /usr/include/features.h:410:0,
                 from /usr/lib/gcc/x86_64-pc-linux-gnu/6.4.0/include/g++-v6/x86_64-pc-linux-gnu/bits/os_defines.h:39,
                 from /usr/lib/gcc/x86_64-pc-linux-gnu/6.4.0/include/g++-v6/x86_64-pc-linux-gnu/bits/c++config.h:507,
                 from /usr/lib/gcc/x86_64-pc-linux-gnu/6.4.0/include/g++-v6/cstddef:49,
                 from /var/tmp/portage/games-emulation/citra-9999/work/citra-9999/src/core/file_sys/archive_backend.cpp:5:
/usr/include/bits/string3.h:50:1: note:   initializing argument 1 of ‘void* memcpy(void*, const void*, size_t)’
 __NTH (memcpy (void *__restrict __dest, const void *__restrict __src,
 ^
make[2]: *** [src/core/CMakeFiles/core.dir/build.make:399: src/core/CMakeFiles/core.dir/file_sys/archive_backend.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: Leaving directory '/var/tmp/portage/games-emulation/citra-9999/work/citra-9999_build'
make[1]: *** [CMakeFiles/Makefile2:678: src/core/CMakeFiles/core.dir/all] Error 2
make[1]: Leaving directory '/var/tmp/portage/games-emulation/citra-9999/work/citra-9999_build'
make: *** [Makefile:141: all] Error 2
 * ERROR: games-emulation/citra-9999::jm-overlay failed (compile phase):
 *   emake failed
Jannis234 commented 6 years ago

The error messages still say 6.4.0, are you sure that you've set up 7.3.0 as your active GCC profile correctly? I've added a check for that to the ebuild.

crocket commented 6 years ago

I had to execute gcc-config to force emerge to use 7.3.0.

But, https://github.com/citra-emu/citra/issues/3538#issuecomment-373912726 reveals that -9999 needs >=boost-1.66

Jannis234 commented 6 years ago

Since it build with boost 1.65.0 and clang, I'm assuming that boost 1.66.0 is only required when using GCC. I've updated the ebuild and re-added the system-boost useflag since 1.66.0 is currently not available in portage.

crocket commented 6 years ago

Now, citra can be built with either gcc-7.3.0 or clang. It can even run 3ds games, but I still have to configure input.