Closed gamelaster closed 5 years ago
We use a patched ffmpeg so we should make a rasp-2B specific prebuild and put in ppsspp-ffmpeg. It should not be very hard to tweak the existing Linux build script that's in there...
I'm getting a rasp-2B myself but won't get to it for a little while.
Awesome, anyway, i can participate with anything about RPI! Anyway, i tried some stuffs to edit to be works, but when i changed a paths to full path (with ffmpeg), then that library got other errors with path. But others similiar libraries in FFMPEG including at sceAtrac.cpp has been included good :laughing:
Instead of changing paths, leave everything alone. The code should be okay to build.
The only paths you might change are in CMakeLists.txt, not in any cpp or h file. But first you need to run a script in the ffmpeg/ subdirectory to create the ffmpeg .a files. You'll create the script by modifying this:
https://github.com/hrydgard/ppsspp-ffmpeg/blob/master/linux_arm.sh (it might just work as-is.)
Once that is built, ffmpeg libraries will exist inside ffmpeg/. This is where ppsspp expects them, and ppsspp should be able to build.
If you're changing any lines that have #include
in them, you're changing the wrong thing.
-[Unknown]
You must change -mfloat-abi=softfp to -mfloat-abi=hard in linux_arm.sh, and delete GENERAL stuff for cross-compile. And delete build_ARMv6 too.
sergiobenrocha2: I know to delete ARMv6 build, already deleted. I tryied to delete general stuff for cross-compile, but anyway, i didnt found another way how to compile FFMPEG without cross-compile (if u look at original ffmpeg build process in Raspberry Pi, anyway u must install cross-tools). So, i will see if that helps... But in Raspberry Pi takes very long to install and patch toolchain and other stuffs, what made build (if i integrate the time to first build) more than hour. 20 minutes to download tools (its not failure of my internet), next 10 minutes to extract and patch etc. I actually work on that so i will write my result. Anyway, thanks for the idea to edit linux_arm.sh ! :P
//EDIT: OMG -_- installing crosstool is ... ah, 3 hours i trying to install.. 2 times RPI frozen... I think i will be must overclock that.
//EDIT 2: I think the best way has been to providing the compiled version of PPSSPP, i grab this todo, i will be doing the builds for RPI :) Becouse installing PPL for host in toolchain wants so much time & and power, so probably it will works only on overclocked devices (already testing on nooverclocked)
Ahh, so you use cross-compiler instead of build in the rpi. Well, I use an odroid u3, it does not take many time to compile stuff, dunno about rpi B+.
I can compile here and send a PR, but I don't know the preferable gcc version and other stuff to make sure it will work in all distros, not only in ubuntu 14.04.
Oh im dumb, why i making cross compiler on RPI :D ... Anyway, so when i want to do works a PPSSPP build on RaspBian, i must compile ARM version of modified FFMPEG on x86 Ubuntu and move it to PPSSPP project or how? I will going to try it, im little bit new in C/C++ so i must try it to do :P .
Anyway, i can try on my RPI anything, so we can try it. Just write me on IRC ppsspp (GAMiEE)
//EDIT 20:44 - So i installed cross-tool and others on my Ubuntu and suceffuly compiled FFMPEG for ARMv7 with edited script of build_arm.sh and Build instructions at FFMPEG wiki for Raspberry pi. So im going to copy that version and try to build that at RPI :P //EDIT 21:40 - FFMPEG build failed, the linux/armv7 has not created, so IDK what builded O_O but prefix path has been setted good O_O actually disoriented -.-
Today i successfull builded PPSSPPSDL on my RPI, but i got here a problem with launch:
libEGL warning: DRI2: failed to authenticate SDL_CreateWindow failed: Could not initialize OpenGL / GLES library
I really dont get idea where is problem... Mesa libraries has been installed, but im little misunderstand becouse idk if i have installed SDL2 so if that has been not trouble.. Any ideas?
//EDIT: So i now building SDL2 on my RPI , so we will see... Question, i need again to rebuild a PPSSPP with SDL2?
I don't know, but please keep reporting your progress, it's useful :)
ppsspp usually dynamically links to sdl2 so unless you linked it in statically or the headers changed you should not need to rebuild ppsspp
SDL2 installed, works, i recompiled full PPSSPP, but still got error, but its some other:
libEGL warning: DRI2: failed to authenticate SDL_CreateWindow failed: Couldn't find matching GLX visual
I think the main problem is the warning what makes SDL_CreateWindow fail. Now i didnt get idea, im stay still googling about this 2 errors and we will see :/
"failed to authenticate"? try running it as root? (shouldn't be needed, but hey...)
Tryied, failed. I think is problem on side SDL, i checked SDL source files and i found he exception when is thrown, and its when trying to get access to Monitor/Display. I will continue to search..
//EDIT: When is available Qt (on linux is little bit buggy, but.. :P ), i can try build Qt version, but that take some more time than normal build (on Ubuntu takes build Qt long, so in RPI lol :D )
//EDIT2: Qt build attempting error with some files, its not files for ARM, so its can be global trouble (at all Qt builds), i will write what troubles, but first im someone writes me to try build Libretro-ppsspp so we will see! :)
//EDIT3: Same result as default PPSSPP, + libretro ppsspp has been working (as i seen), but idk why its not works, i still think is trouble in SDL side, but anyway, i try to fix that bug from source code, but if failure, i try to fix bug in Qt build :)
//EDIT4: Its really crazy... :D Someone got this trouble too, i looked at that but anyway still same error http://raspberrypi.stackexchange.com/questions/3285/sdl-couldnt-find-matching-glx-visual Now trying to again rebuild that, we will see :P
After some troubles i again reruned the build PPSSPP to Raspberry! Actually still got problems with building. Actually is all builds successfull but linking have trouble! I reinstalled Raspbian, but i didnt get this error on my build O_o i probably installed something what fix this, but i cant find now what has fixed that...
Linking CXX executable PPSSPPSDL
lib/libCore.a(Framebuffer.cpp.o): In function FramebufferManager::ClearDepthBuffer()': Framebuffer.cpp:(.text+0x1430): undefined reference to
glClearDepth'
lib/libCore.a(Framebuffer.cpp.o): In function `FramebufferManager::ClearBuffer()':
Its looks like missing some OpenGL headers, but idk, i tried update RPI firmware what contains /opt/vc/ but not helped. I installed almost all MESA libraries, but again not helped. Fully disoriented and without idea... But probably, if i solve this trouble, its may to works good...
BTW, Qt build failed too, error: Common -I../ffmpeg/linux/armv7/include -I../../ppsspp -I../native -I../native/ext/glew -I/usr/X11R6/include -I.moc/GPU -I. -o .obj/GPU/Rasterizer.o ../GPU/Software/Rasterizer.cpp ../GPU/Software/Rasterizer.cpp: In function ‘void Rasterizer::DrawLine(const VertexData&, const VertexData&)’: ../GPU/Software/Rasterizer.cpp:1503:1: error: unrecognizable insn: (insn 2246 2245 2247 13 (set (reg:HI 2 r2) (reg:SI 73 s10)) ../GPU/Software/Rasterizer.cpp:1488 -1 (nil)) ../GPU/Software/Rasterizer.cpp:1503:1: internal compiler error: in extract_insn, at recog.c:2123
I think you're not getting USING_GLES2 defined for some reason, but using GLES2 libs. I think you want that defined.
The Qt thing, "unrecognizable insn"? That seems bad. What version of gcc?
-[Unknown]
[Unknown](u have awesome name :D), i didnt changed CMakeList or anything, all is default. My gcc version is 4.7 (i can check more, but 100% i have 4.7, but i have installed 4.6 too, but i selected 4.7 by update-alternatives). Someone telled me to add -lGL and -lX11 to the linker, but idk how... :/ I now going to try build libretro ppsspp what works?!? :-)
Hmm, not sure, but try adding USING_GLES2 to CMakeCache.txt. It's a user option:
option(USING_GLES2 "Set to ON if target device uses OpenGL ES 2.0" ${USING_GLES2})
It's not on by default with RPI, not sure if it should be.
-[Unknown]
I had better success building the libretro core
$ git clone https://github.com/libretro/libretro-ppsspp.git
$ cd libretro-ppsspp
$ git submodule init && git submodule update
$ export CC=gcc-4.8
$ export CXX=g++-4.8
$ export CFLAGS="-mcpu=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -I/opt/vc/include"
$ export CXXFLAGS="$CFLAGS"
$ export LDFLAGS="-L/opt/vc/lib"
$ cd libretro
$ make platform=imx6 -j4
The compiler gives 'conflicting specifier' errors for these lines in gl3stub.h (had this problem with the standalone version, too). If I remove extern
from those lines, the code compiles and links without errors
But now when I try to load the libretro core, it gives a bunch of 'undefined symbol' errors (probably related to the change I made above I guess?). I got rid of most of them by removing most of the code in the gl3stubInit function in gl3stub.c, leaving just:
GLboolean gl3stubInit() {
return GL_FALSE; // also tried GL_TRUE - I have no idea what I'm doing
}
The last remaining undefined symbol was glBlitFramebuffer
, so (again not knowing what I'm doing) I removed every reference to it in GPU/GLES/Framebuffer.cpp and GPU/GLES/StencilBuffer.cpp
Now the libretro core loads and I can launch Tekken 6. It plays the intro movie and gets to the "Press start" screen, but then it crashes after I press start:
RetroArch [WARN] :: udev_input_init :: [udev]: Couldn't open any keyboard, mouse or touchpad. Are permissions set correctly for /dev/input/event*?
W: ../native/file/file_util.cpp:220: W: IsDirectory: stat failed on /home/pi/system/PPSSPP/lang/.ini
RetroArch [WARN] :: udev_input_init :: [udev]: Couldn't open any keyboard, mouse or touchpad. Are permissions set correctly for /dev/input/event*?
RetroArch: rarch_log_libretro: [libretro INFO] :: Context reset!
I: ../native/gfx/gl_lost_manager.cpp:50: I: gl_lost() restoring 0 items:
I: ../native/gfx/gl_lost_manager.cpp:55: I: gl_lost() completed restoring 0 items:
I: ../native/gfx_es2/gl_state.cpp:137: I: GPU Vendor : Broadcom ; renderer: VideoCore IV HW version str: OpenGL ES 2.0 ; GLSL version str: OpenGL ES GLSL ES 1.00
I: ../native/gfx_es2/gpu_features.cpp:20: I: Checking for GL driver bugs... vendor=7 model='VideoCore IV HW'
W: ../native/file/file_util.cpp:220: W: IsDirectory: stat failed on /home/pi/system/PPSSPP/flash0/font/jpn0.pgf
Failed to load ppge_atlas.zim.
Place it in the directory "assets" under your PPSSPP directory.
W: ../native/file/file_util.cpp:220: W: IsDirectory: stat failed on /home/pi/system/PPSSPP/shaders
I: ../native/file/zip_read.cpp:359: I: Not a VFS path: /home/pi/system/PPSSPP/PSP/shaders . Reading local directory.
W: ../native/file/file_util.cpp:220: W: IsDirectory: stat failed on /home/pi/system/PPSSPP/flash0/font/jpn0.pgf
I: ../native/gfx_es2/fbo.cpp:194: I: Creating 512 x 1 FBO using separate stencil
I: ../native/gfx_es2/fbo.cpp:194: I: Creating 512 x 272 FBO using separate stencil
glGetError 0x500
I: ../native/gfx_es2/fbo.cpp:194: I: Creating 480 x 272 FBO using separate stencil
glGetError 0x500
I: ../native/gfx_es2/fbo.cpp:194: I: Creating 480 x 272 FBO using separate stencil
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
glGetError 0x500
pure virtual method called
terminate called without an active exception
Aborted
Great progress @steevp ! How smoothly does the video play?
The video was very smooth, everything seemed to be running full speed up until the point that it crashed (though I never actually got into gameplay)
The only other game I tried was Vice City Stories, which crashed immediately with:
pure virtual method called
terminate called without an active exception
Aborted
I'll try some more games just to see if something works, but I'm sure I probably broke something by removing all those lines
"pure virtual method called" is almost always from trying to call a method on a deleted object, of some sort. Can you get a callstack? (run in gdb or lldb, type bt after the crash)
@hrydgard Anything useful here?
Program received signal SIGABRT, Aborted.
[Switching to Thread 0x7403c470 (LWP 2152)]
0x76bef8dc in raise () from /lib/arm-linux-gnueabihf/libc.so.6
(gdb) bt
#0 0x76bef8dc in raise () from /lib/arm-linux-gnueabihf/libc.so.6
#1 0x76bf365c in abort () from /lib/arm-linux-gnueabihf/libc.so.6
#2 0x71d15c0c in ?? () from /usr/lib/arm-linux-gnueabihf/libstdc++.so.6
#3 0x71d15c0c in ?? () from /usr/lib/arm-linux-gnueabihf/libstdc++.so.6
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb)
No, unfortunately not. You might want to compile with -O0 and -g options for a better stacktrace..
Hmm unfortunately the result was the same with -O0 -g
Got it working on RPI2.
You don't need to change much:
Run cmake, edit CMakeCache.txt and set FBDEV to ON, GLES2 to ON, maybe even MOBILE_DEVICE to ON, run cmake again, then run make.
A bit disappointed with the performance (GPU clocked at 500MHz), it runs fullspeed on the odroid... https://www.youtube.com/watch?v=O8juShfoJtE
There must have been something wrong with my Raspbian install. I switched to a different sdcard with Arch Linux ARM and the libretro core works now as well.
what's the performance of the libretro core?
The "libretro core" is PPSSPP so it's the same.
No, for example I don't have shared context in RetroArch so only buffered works, which is slower than unbuffered. But this was on Mali, not rpi2.
Right, all settings may not work but apart from that it's the same :)
Here's a video of the libretro core: http://youtu.be/tqLM5DuUgo0
I'm not familiar with all the PPSSPP options, but I turned on everything marked "speedhack" and left the resolution low. No frameskip
My overclock settings are: arm_freq=1000 core_freq=500 sdram_freq=500 over_voltage=2
thanks @steevp - it's indeed much slower than the standalone simulator. i think 1x resolution buffered can get almost 60fps, though i only test with 2x resolution. Can you try to use the SDL2 retroarch video driver and unbuffered with 960 resolution?
I couldn't get the SDL2 driver to work without X11 in RetroArch (It works with PPSSPP standalone so I guess my SDL2 build is okay). Under X it was terrible. ~5 fps just in the menu
Hi @steevp @mihailescu2m , I'm a Linux noob. Are you able to post here, or somewhere, detailed step by step instructions of how to compile this?
Hello . Thanks thanks thanks it's work great
SAVE and LOAD crashes :'( And for you ?
any movement on this?
Probably this is the best: https://github.com/hrydgard/ppsspp/issues/7479#issuecomment-75403013
That being said, don't expect great performance. The GPU is not very strong.
-[Unknown]
...and that's not crashing on saving and loading? I've been following the thread on the retropie forums (notice the link directly below the post you linked to.) Nobody there seems to be able to save or load anything.
So, im there again, i trying building PPSSPP again, all works great until linking CXX executables
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/4.7/../../../arm-linux-gnueabihf/libSDL2.so: undefined reference to symbol 'XOpenDisplay'
//usr/lib/arm-linux-gnueabihf/libX11.so.6: error adding symbols: DSO missing from command line
I tryied to fix that but with failure. I just gitted clean PPSSPP repositary + update and added headers what writing @mihailescu2m , but i dont enabled GLES2 and FBDEV, but i dont think is about that. Any ideas?
Linking CXX executable PPSSPPSDL
lib/libCore.a(Framebuffer.cpp.o): In function `FramebufferManager::ClearDepthBuffer()':
Framebuffer.cpp:(.text+0x83c): undefined reference to `glClearDepth'
lib/libCore.a(Framebuffer.cpp.o): In function `FramebufferManager::ClearBuffer()':
Framebuffer.cpp:(.text+0xcd0): undefined reference to `glClearDepth'
lib/libCore.a(Framebuffer.cpp.o): In function `FramebufferManager::GetCurrentFramebuffer(GPUDebugBuffer&)':
Framebuffer.cpp:(.text+0x2034): undefined reference to `glReadBuffer'
lib/libCore.a(Framebuffer.cpp.o): In function `FramebufferManager::GetCurrentDepthbuffer(GPUDebugBuffer&)':
Framebuffer.cpp:(.text+0x22a4): undefined reference to `glReadBuffer'
lib/libCore.a(Framebuffer.cpp.o): In function `FramebufferManager::GetCurrentStencilbuffer(GPUDebugBuffer&)':
Framebuffer.cpp:(.text+0x2418): undefined reference to `glReadBuffer'
lib/libnative.a(thin3d_gl.cpp.o): In function `Thin3DGLContext::Clear(int, unsigned int, float, int)':
thin3d_gl.cpp:(.text+0x180): undefined reference to `glClearDepth'
lib/libnative.a(thin3d_gl.cpp.o): In function `Thin3DGLContext::SetViewports(int, T3DViewport*)':
thin3d_gl.cpp:(.text._ZN15Thin3DGLContext12SetViewportsEiP11T3DViewport[_ZN15Thin3DGLContext12SetViewportsEiP11T3DViewport]+0xb4): undefined reference to `glDepthRange'
lib/libCore.a(GLES_GPU.cpp.o): In function `GLES_GPU::GetCurrentTexture(GPUDebugBuffer&, int) [clone .part.10]':
GLES_GPU.cpp:(.text+0xaa4): undefined reference to `glGetTexLevelParameteriv'
GLES_GPU.cpp:(.text+0xab8): undefined reference to `glGetTexLevelParameteriv'
GLES_GPU.cpp:(.text+0xb5c): undefined reference to `glGetTexImage'
GLES_GPU.cpp:(.text+0xbb4): undefined reference to `glGetTexLevelParameteriv'
GLES_GPU.cpp:(.text+0xbc8): undefined reference to `glGetTexLevelParameteriv'
lib/libCore.a(TransformPipeline.cpp.o): In function `TransformDrawEngine::DoFlush()':
TransformPipeline.cpp:(.text+0x2050): undefined reference to `glClearDepth'
lib/libCore.a(StateMapping.cpp.o): In function `TransformDrawEngine::ApplyDrawState(int)':
StateMapping.cpp:(.text+0x1bd8): undefined reference to `glDepthRange'
StateMapping.cpp:(.text+0x1f5c): undefined reference to `glDepthRange'
lib/libnative.a(gl_state.cpp.o): In function `OpenGLState::Restore()':
gl_state.cpp:(.text+0xbc): undefined reference to `glDepthRange'
lib/libglew.a(glew.c.o): In function `_glewInit_GL_VERSION_1_3':
glew.c:(.text+0x178): undefined reference to `glXGetProcAddressARB'
glew.c:(.text+0x18c): undefined reference to `glXGetProcAddressARB'
glew.c:(.text+0x1a0): undefined reference to `glXGetProcAddressARB'
glew.c:(.text+0x1b4): undefined reference to `glXGetProcAddressARB'
glew.c:(.text+0x1c8): undefined reference to `glXGetProcAddressARB'
lib/libglew.a(glew.c.o):glew.c:(.text+0x1dc): more undefined references to `glXGetProcAddressARB' follow
lib/libglew.a(glew.c.o): In function `glxewGetExtension':
glew.c:(.text+0x109c0): undefined reference to `glXGetClientString'
lib/libglew.a(glew.c.o): In function `glxewContextInit':
glew.c:(.text+0x10a20): undefined reference to `glXGetProcAddressARB'
glew.c:(.text+0x10a54): undefined reference to `glXQueryVersion'
glew.c:(.text+0x10a78): undefined reference to `glXGetClientString'
glew.c:(.text+0x10b18): undefined reference to `glXGetProcAddressARB'
glew.c:(.text+0x110e8): undefined reference to `glXGetProcAddressARB'
glew.c:(.text+0x11100): undefined reference to `glXGetProcAddressARB'
glew.c:(.text+0x11154): undefined reference to `glXGetProcAddressARB'
glew.c:(.text+0x1116c): undefined reference to `glXGetProcAddressARB'
lib/libglew.a(glew.c.o):glew.c:(.text+0x11180): more undefined references to `glXGetProcAddressARB' follow
collect2: error: ld returned 1 exit status
CMakeFiles/PPSSPPSDL.dir/build.make:656: recipe for target 'PPSSPPSDL' failed
make[2]: *** [PPSSPPSDL] Error 1
CMakeFiles/Makefile2:210: recipe for target 'CMakeFiles/PPSSPPSDL.dir/all' failed
make[1]: *** [CMakeFiles/PPSSPPSDL.dir/all] Error 2
Makefile:72: recipe for target 'all' failed
make: *** [all] Error 2
Now this... oh ..
@GAMELASTER This is about FBDEV and GLES2 (trying to link to X11 stuff is the default and FBDEV changes that)
@Bigpet so, when i have enabled FBDEV, i got the GLEW compiling errors, but when is disabled i have x11 errors. So what now? mmm Adding my edited CMAKEList where i imported headers: http://pastebin.com/e9NMHRJg
About that "undefined reference to symbol 'XOpenDisplay'", it seems it's missing this in CMakeLists.txt (-lX11):
find_package(X11)
I think the managing a X11 doing a FBDEV
Well, again i trying to build PPSSPP (no libretro) on Raspberry Pi. Actualy, i still get this error:
lib/libCore.a(Framebuffer.cpp.o): In function `FramebufferManager::ClearDepthBuffer()':
Framebuffer.cpp:(.text+0x83c): undefined reference to `glClearDepth'
I have FBDEV enabled and adding the GLEW libraries is enabled.. Well, for example of this error.Its says the glClearDepth is NOT defined... But, we can find the definition of glClearDepth at native/ext/glew/GL/glew.h , what is linked in GLEW library. So i think is something with including of GLEW library...
I think ARM (GLES) boards does not use GLEW.
@GAMELASTER , issue #7815 may be useful for you. SDL version will not work in these ARM boards, it's trying to use GL instead GLES. So it's useless you try to compile SDL for now. Have you tried to compile Qt version?
Here the deps to compile the Qt version under ARM:
libqt5opengl5-dev, libsdl2-dev, qt5-qmake, qtbase5-dev, qttools5-dev-tools, zlib1g-dev
@sergiobenrocha2 Well, actually at february i tested a Qt version, but its not work. Im going to do that again. Thanks
Are you using this for SDL?
cmake . -DUSING_GLES2=ON
In native/gfx/gl_common.h, there's a #elif defined(USING_GLES2), so it'll use Glew only in desktop (non GLES hardware, line 13)
The Qt version is the only one working for me, on Odroid U3. I think there's a guy in Odroid forums that managed to compile sdl-fbdev version for Odroid C1.
Heya,
Today i trying to build on my RPI a PPSSPP, but i still failure becouse libswresample has not found.
/home/pi/Desktop/ppsspp/Core/HLE/sceAtrac.cpp:95:38: fatal error: libswresample/swresample.h: Directory or file not exists
I searched alot about that and i found its becouse of ffmpeg, but i installed ffmpeg, but anyway, i probably need a ffmpeg-dev, but thats not for RPI...
Any ideas?
//EDIT: after some exploring i found that file in Hrydgards FFMPEG repository. That repository i got, and i found that file in my "solution". So i dont know why the sceAtrac cant found swresample.h ...