Step-by-step: How to build EmulationStation on Windows
-
@TheRealFox said in Step-by-step: How to build EmulationStation on Windows:
The post lack of detailed information for noobs like me. That is my situation: How I do that: "Edit tif_config.h to remove #define snprintf _snprintf"
I put together the step-by-step by setting up a brand new VM starting with nothing installed and noted down what I did at each step. The idea was to help experienced developers to get a build environment up and running with the least pain. I know some of the steps are a bit vague and require some experience but I think you would need that experience in order to actually understand the ES code to make any meaningful modifications.
However, I am happy to help noobs to get going as much as I can, although trying to find time when I have three young kids and a full time job is quite hard!
Anyway, I hope you managed to get it building.
-
@fieldofcows Thanks for writing up this tutorial, it has inspired me to try and get a build environment up and running. I believe that I have everything setup properly and I was able to build all of the dependent libraries and use cmake to generate emulationstation-all.sln, but when I try to build ES in VS I immediately get errors because it appears to not find the boost library.
1>------ Build started: Project: es-core, Configuration: Release Win32 ------ 1> platform.cpp 1> Util.cpp 1>C:\esdev\src\EmulationStation\es-core\src\platform.cpp(87): error C3861: 'open': identifier not found 1>C:\esdev\src\EmulationStation\es-core\src\platform.cpp(89): error C3861: 'close': identifier not found 1>C:\esdev\src\EmulationStation\es-core\src\Util.cpp(105): error C2440: 'initializing': cannot convert from 'const boost::filesystem::path::value_type *' to 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' 1> C:\esdev\src\EmulationStation\es-core\src\Util.cpp(105): note: No constructor could take the source type, or constructor overload resolution was ambiguous 1>C:\esdev\src\EmulationStation\es-core\src\Util.cpp(106): error C2440: 'initializing': cannot convert from 'const boost::filesystem::path::value_type *' to 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' 1> C:\esdev\src\EmulationStation\es-core\src\Util.cpp(106): note: No constructor could take the source type, or constructor overload resolution was ambiguous
Any help you could provide would be appreciated.
-
If you're getting compilation errors due to a signature mismatch in the function definition, it's because there is an unnecessary redefinition in one of the project header files. Locate the .h file containing the definition of the offending function and comment it out, then try building again.
-
@jdrassa What fork of EmulationStation are you trying to build? open() and close() are not supported on Windows and boost on Windows uses wide strings in some places where Linux/Pi uses short strings. This error pops up in a few of the forks that are out there but I have fixed this in my fork: https://github.com/fieldofcows/EmulationStation.
See the changes to Util.cpp and platform.cpp in this commit: https://github.com/fieldofcows/EmulationStation/commit/1297107533bef0b8bb351e5d10338371de7ef436. You don't want to include the other changes from this commit to make it work.
-
@fieldofcows I was working off of the RetroPie fork. I pulled in the changes from yours and I am now able to build. Thanks.
-
@fieldofcows :
After pulling in the latest changes on the RetroPie/master branch, I am now trying to compile with your video-view included.
When first setting up my build environment, I followed the steps you described above, and all was well.
Now, after pulling in these latest changes, I re-ran the long cmake command, and tried to build.
I run into the following error: in viewcontroller.cpp, line15:#include <SDL2/SDL.h>
, which gives me the error:1> ViewController.cpp 1>C:\src\EmulationStation\es-app\src\views\ViewController.cpp(15): fatal error C1083: Cannot open include file: 'SDL2/SDL.h': No such file or directory
.
A simple enough message to understand, why I am getting it is another matter.
When I go into myC:\src\lib\SDL2-2.0.5\include
folder, SDL.h is there alright.
This does not match with%ES_LIB_DIR%\SDL2-2.0.5\include\SDL2\SDL.h
, which I think <SDL2/SDL.h> gets translated into?
Sure enough, when I change it into just#include <SDL.h>
I can build just fine.I am just wondering why I need to make that change, and apparently you do not.
-
@Zigurana - the retropie ES branch contains a couple issues that prevent it from building in Windows. I have the fixes ready which I'll submit as a PR shortly. I was building from my fork which already included the fixes. The SDL2/SDL.h include was actually added for the video view so it's my fault that the Windows build breaks here when following the instructions in this post.
There are two ways to fix it. The first is to do exactly what you've done and remove the SDL2/ from the beginning. The second is to add the parent directory of SDL2 into the include path. This is what happens on the RPi and Linux. I would suggest just fixing it the way you have done for now.
-
@fieldofcows I'm trying to compile, i had the same error than @zigurana and i made the same change for #include <SDL.h> but i still have errors and i can't compile:
Error C3861 'open': can't find identifier es-core C:\src\EmulationStation\es-core\src\platform.cpp 87
Error C3861 'close': can't find identifier es-core C:\src\EmulationStation\es-core\src\platform.cpp 89
Error C2440 'initializating': can't do conversion of 'const boost::filesystem::path::value_type *' a 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' es-core C:\src\EmulationStation\es-core\src\Util.cpp 105
Error C2440 'initializating': can't do conversion of 'const boost::filesystem::path::value_type *' a 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' es-core C:\src\EmulationStation\es-core\src\Util.cpp 106
Error LNK1104 can't open file '....\Debug\es-cored.lib' emulationstation C:\src\EmulationStation\build\es-app\LINK 1
I translated some error because my VS2015 is not in english language so may differ a bit.
Any help would be aprecciated.
-
@Nismo In addition to the SDL change, have a look at this commit to my fork:
https://github.com/fieldofcows/EmulationStation/commit/59fe6a36cbafc0a94a5db8e877ad3f497c76efd5
This details the changes that need to be made in order to compile the RetroPie ES for Windows.
-
@fieldofcows Thank you i'll take a look right now.
-
@fieldofcows sorry but still can't compile (never compiled before) what i'm doing wrong?
1> ------ Operation Compilation omitted: project: INSTALL, configuration: Debug Win32 ------
1> Project not selected to be compiled for this solution configuration
2> ------ Operation Compilation omitted: project: PACKAGE, configuration: Debug Win32 ------
2> Project not selected to be compiled for this solution configuration
========== Compile: 0 correct, 0 incorrect, 6 updated, 2 omitted ==========I'm trying to compile emulationstation-all debug win32
And if I try to compile release:
6> ------ Operation Compile started: project: ALL_BUILD, configuration: Release Win32 ------
6> Building Custom Rule C: /src/EmulationStation/CMakeLists.txt
6> CMake does not need to be re-run because C: \ src \ EmulationStation \ build \ CMakeFiles \ generate.stamp is up-to-date.
7> ------ Operation Compile skipped: project: INSTALL, configuration: Release Win32 ------
7> Project not selected to be compiled for this solution configuration
8> ------ Operation Compile skipped: project: PACKAGE, configuration: Release Win32 ------
8> Project not selected to be compiled for this solution configuration
========== Compile: 6 correct, 0 incorrect, 0 updated, 2 omitted ========== -
@Nismo That looks like it built correctly. If you look in your EmulationStation source directory there should be subdirectory named "Release" which should now contain your emulationstation.exe.
-
@fieldofcows yes the directories are there but no .exe inside, only log files.
Edit: it's ok, i was looking in the wrong release and debug folders inside "build" folder.
Compiled ok, thanks a lot, now i'm trying to translate some menus.
-
@fieldofcows Sorry mate but i have another problem, when i try to run my compiled program, it doesn't use the same libs than before, it requires mt-gd libs and more than before, now requires boost_thread, boost_chrono, boost_date_time, icuind57.dll and icuucd57.dll:
- boost_chrono-vc140-mt-gd-1_61.dll
- boost_date_time-vc140-mt-gd-1_61.dll
- boost_filesystem-vc140-mt-gd-1_61.dll
- boost_locale-vc140-mt-gd-1_61.dll
- boost_system-vc140-mt-gd-1_61.dll
- boost_thread-vc140-mt-gd-1_61.dll
- icuind57.dll
- icuucd57.dll
No problem with boost libs, i have found compiled libs out there, but i can't find icuind57.dll and icuucd57.dll.
Any tips?
Edit: fixed by compiling minsizerelease.
-
@fieldofcows it's not working the no splash screen command in the last build?
-
@Nismo said in Step-by-step: How to build EmulationStation on Windows:
it's not working the no splash screen command in the last build
Which fork of ES are you building? I've separated all the 'enhancements' out into separate commits and at the moment there isn't a branch that pulls in the latest of everything. I can put one together for you shortly if you want.
-
@fieldofcows can you do it for me? I'm using your fork I downloaded today.
Where I can find the commits you did?
-
@Nismo I tidied up my fork a while ago. The 'master' now tracks the retropie master. This branch is the previous one I built you and contains all modifications except the opacity bug fix. Will that one do for now?
-
@fieldofcows Yes!! thank you vey much!!! Nice christmas present.
I'm translating to my native language.
-
@fieldofcows do I need to make this commits to that fork?
https://github.com/fieldofcows/EmulationStation/commit/59fe6a36cbafc0a94a5db8e877ad3f497c76efd5
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.