Closed crocket closed 6 years ago
Looks like citra's usage of git submodules caused problems with git-r3.eclass, should be fixed now.
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
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.
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?
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.
Perhaps, it makes sense to cut a 1.0-pre
release in jm-overlay and compensate for upstream issue.
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
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.
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
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.
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.