The continuing development of the legendary VBA gameboy advance emulator.
Go to file
Rafael Kitover fdc389c280 fix wx 2.8 compat, debug logging works everywhere
Fix backcompat with wx 2.8. This involved writing
wxPositiveDoubleValidator and rewiring the DrawingPanel inheritance tree
and event handling mechanisms (because 2.8 does not have ->Bind, only
->Connect which is less flexible.) As a result all the event handling
has been gathered into GameArea and the affected code is somewhat
cleaner. 2.8 support is untested on Mac because it requires 32 bit libs
and Carbon.

Add support for cross-compiling for windows using the Fedora MinGW
packages in ./installdeps.

Check for OpenGL support in the wx library being linked, this was
necessary because the Fedora MinGW wx library does not have OpenGL
support.

Remove vbamDebug() in favor of wxLogDebug(), and add an override for it
so that it works in non-debug builds of wx as well as on Windows. Turn
off buffering on stdout and stderr on startup so that debug logging
works in msys2/cygwin mintty as well.

On Windows, build a console binary for debug builds.

Update README.md to reflect Fedora MinGW support and debug logging
support.

Add -Wextra to cflags for debug builds.
2017-01-25 10:53:05 -08:00
.github adjust small things in preparation in a move. 2016-12-20 17:27:30 -05:00
CMakeScripts fix wx 2.8 compat, debug logging works everywhere 2017-01-25 10:53:05 -08:00
data Added the Official No-Intro Nintendo Gameboy Advance Number (Date) file for the release numbering. 2015-05-16 07:48:02 +00:00
dependencies@76e2d57b89 added submodule for dependencies. 2015-09-19 11:58:26 -04:00
doc Fix some lintian warnings. Patch by sergio-br2. 2015-05-29 22:11:38 +00:00
fex Redundant code? 2016-12-30 11:41:33 -05:00
po Translation update https://www.transifex.com/projects/p/vba-m/ 2015-06-29 23:30:33 +10:00
project initial dump of the dependencies into trunk, may look to changing it into a git submodule later. 2015-06-10 20:08:42 -04:00
src fix wx 2.8 compat, debug logging works everywhere 2017-01-25 10:53:05 -08:00
.clang-format Small change: make `.clang-format` use C++11 Standard 2016-08-08 13:42:19 -07:00
.gitignore check for RAW_CONTROL only on macs in switch stmts 2016-12-14 06:23:02 -08:00
.gitmodules added submodule for dependencies. 2015-09-19 11:58:26 -04:00
CMakeLists.txt fix wx 2.8 compat, debug logging works everywhere 2017-01-25 10:53:05 -08:00
README.md fix wx 2.8 compat, debug logging works everywhere 2017-01-25 10:53:05 -08:00
installdeps fix wx 2.8 compat, debug logging works everywhere 2017-01-25 10:53:05 -08:00
todo.md msys2 build improvements 2016-11-14 10:56:50 -08:00

README.md

Visual Boy Advance - M

Game Boy Advance Emulator

Homepage and Forum: http://vba-m.com

Building

The basic formula to build vba-m is:

cd ~ && mkdir src && cd src
git clone https://github.com/visualboyadvance-m/visualboyadvance-m.git
cd visualboyadvance-m
./installdeps

# ./installdeps will give you build instructions, which will be similar to:

mkdir build && cd build
cmake ..
make -j10

./installdeps is supported on MSys2, Linux (Debian/Ubuntu, Fedora or Arch Linux) and Mac OS X (homebrew, macports or fink.)

If your OS is not supported, you will need the following:

  • c++ compiler and binutils
  • make
  • cmake
  • git
  • nasm (for 32 bit builds)

And the following development libraries:

  • zlib
  • mesa (if using X11 or any OpenGL otherwise)
  • ffmpeg (optional, for game recording)
  • gettext and gettext tools
  • jpeg
  • png
  • tiff
  • SDL2
  • SFML (optional, for link)
  • OpenAL (optional, a sound interface)
  • wxWidgets
  • cairo (completely optional)

Support for more OSes/distributions for ./installdeps is planned.

Cross Compiling for Win32

./installdeps takes one optional parameter for cross-compiling target, which may be win32 which is an alias for mingw-w64-i686 to target 32 bit Windows, or mingw-gw64-x86_64 for 64 bit Windows targets.

The target is implicit on MSys2 depending on which MINGW shell you started (the value of $MSYSTEM.) It will not run in the MSys shell.

On Debian/Ubuntu this uses the MXE apt repository and works really well.

On Fedora it can build using the Fedora MinGW packages, albeit with wx 2.8, no OpenGL support, and no Link support for lack of SFML.

On Arch it currently doesn't work at all because the AUR stuff is completely broken, I will at some point redo the arch stuff to use MXE as well.

CMake Options

The CMake code tries to guess reasonable defaults for options, but you can override them on the cmake command with e.g.:

cmake .. -DENABLE_LINK=NO

Of particular interest is making RELEASE or DEBUG builds, the default mode is RELEASE, to make a DEBUG build use something like:

cmake .. -DCMAKE_BUILD_TYPE=Debug

Here is the complete list:

CMake Option What it Does Defaults
ENABLE_SDL Build the SDL port OFF
ENABLE_WX Build the wxWidgets port ON
ENABLE_DEBUGGER Enable the debugger ON
ENABLE_NLS Enable translations ON
ENABLE_ASM_CORE Enable x86 ASM CPU cores ON for 32 bit builds
ENABLE_ASM_SCALERS Enable x86 ASM graphic filters ON for 32 bit builds
ENABLE_MMX Enable MMX ON for 32 bit builds
ENABLE_LINK Enable GBA linking functionality (requires SFML) ON
ENABLE_LIRC Enable LIRC support OFF
ENABLE_FFMPEG Enable ffmpeg A/V recording ON on Linux and MSys2
ENABLE_LTO Compile with Link Time Optimization (gcc and clang only) ON where works
ENABLE_GBA_LOGGING Enable extended GBA logging ON
ENABLE_CAIRO Enable Cairo rendering for wxWidgets OFF
ENABLE_DIRECT3D Direct3D rendering for wxWidgets (Windows, NOT IMPLEMENTED!!!) ON
ENABLE_XAUDIO2 Enable xaudio2 sound output for wxWidgets (Windows only) ON
ENABLE_OPENAL Enable OpenAL for the wxWidgets port ON

MSys2 Notes

To run the resulting binary, you can simply type:

./visualboyadvance-m

in the shell where you built it.

If you built with -DCMAKE_BUILD_TYPE=Debug, you will get a console app and will see debug messages, even in mintty.

If you want to start the binary from e.g. a shortcut or Explorer, you will need to put c:\msys64\mingw32\bin for 32 bit builds and c:\msys64\mingw64\bin for 64 bit builds in your PATH (to edit system PATH, go to Control Panel -> System -> Advanced system settings -> Environment Variables.)

If you want to package the binary, you will need to include the MinGW DLLs it depends on, they can install to the same directory as the binary.

For our own builds, we use MXE to make static builds.

Debug Messages

We have an override for wxLogDebug() to make it work even in non-debug builds of wx and on windows, even in mintty. Using this function for console debug messages is recommended.

It works like printf(), but using wxString, so use wxT() e.g.:

int foo = 42;
wxLogDebug(wxT("the value of foo = %d"), foo);

%s does not work for wxString, so use concatenation instead, e.g.:

wxString world = "world";
wxLogDebug(wxT("Hello, ") + world + wxT("!"));

CONTRIBUTING

Please keep in mind that this app needs to run on Windows, Linux and Mac OS X at the very least, so code should be portable and/or use the appropriate #ifdefs and the like when needed.

Please try to craft a good commit message, this post by the great tpope explains how to do so: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html

If you have multiple small commits for a change, please try to use git rebase -i (interactive rebase) to squash them into one or a few logical commits (with good commit messages!) See: https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History if you are new to this.