498019a39b
Make mac builder use -m32 in CFLAGS etc. to produce a 32 bit binary targetting 10.7 (Lion.) This provides the greatest backward compatibility for older macs, and also allows for asm filters. Fix an issue with m4 on 10.13 using a patch from macports. Support `-pX` patch level args in DIST_PATCHES in builder. Fix an issue with bison on 10.13 by bumping the version to 3.0.5. Build libxslt `--without-crypto` so that it doesn't try to link the brew libgcrypt. Invoke cmake for dists with -DCMAKE_C_COMPILER_LAUNCHER=ccache and -DCMAKE_CXX_COMPILER_LAUNCHER=ccache to use ccache, and set CMAKE_C_COMPILER and CMAKE_CXX_COMPILER to the actual compilers not prefixed by ccache. When checking for ccache in vbam cmake code, check that CMAKE_CXX_COMPILER_LAUNCHER and CMAKE_C_COMPILER_LAUNCHER were not already defined (generally on the command line.) Remove align attributes from sections in 2xSaImmx.asm, macho format on mac does not support this and the filter works fine without them. In the Quartz2D renderer, pass the NSRect view.bounds through NSRectToCGRect when calling CGContextDrawImage(), this is necessary for the 32 bit API. Bump openssl to 1.0.2o. Bump libxml2 to 2.9.8. Update URL for urw fonts, and improve the dist downloading/unpacking code to handle URLs that do not contain the filename (for .tar.gz and .zip as identified by `file`.) Change post-build for harfbuzz from `rebuild_dist freetype;` to `rebuild_dist freetype --with-harfbuzz=yes;` as it was supposed to have been. Build cmake itself with --parallel and --enable-ccache. Silence errors from killed jobs due to tmp directory being gone. Write a couple of string functions, rtrim() and gsub(). Make path_exists() handle globs with spaces in them, by escaping the space. Use --host and --build args to autoconf configure to "cross-compile" for 32 bits, this is necessary for some dists, and does not work for others, remove it for dists where it does not work. Add COMMAND_MODE=unix2003 to the build environment, this is necessary to fix some build errors, why I have no clue, found it on stackoverflow. Pass -Wl,-no_compact_unwind in LDFLAGS to openssl, this is necessary for 32 bits. Force sfml to compile as 32 bit, it normally does not allow this. Remove shared-mime-info from this build, it's not necessary for anything and there are issues XML::Parser linked to our expat and brew perl that need to be resolved. |
||
---|---|---|
.github | ||
cmake | ||
data | ||
dependencies@226f6601fa | ||
doc | ||
fex | ||
po | ||
project | ||
src | ||
tools | ||
.clang-format | ||
.drone.yml | ||
.gitignore | ||
.gitmodules | ||
.travis.yml | ||
CHANGELOG.md | ||
CMakeLists.txt | ||
README.md | ||
installdeps | ||
installer.nsi | ||
todo.md |
README.md
Visual Boy Advance - M
Game Boy Advance Emulator
Homepage and Forum: http://vba-m.com
Windows and Mac builds are in the releases tab.
Daily Ubuntu packages here: https://code.launchpad.net/~sergio-br2/+archive/ubuntu/vbam-trunk
Your distribution may have packages available as well, search for "vbam".
It is also generally very easy to build from source, see below.
Note for Windows Users
If you are having issues, try resetting your config file first.
- open file explorer
- in the location bar, type
%USERPROFILE%\AppData\Local
and press enter - delete the directory called
visualboyadvance-m
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 -j`nproc`
./installdeps
is supported on MSys2, Linux (Debian/Ubuntu, Fedora, Arch or
Solus) and Mac OS X (homebrew, macports or fink.)
The Ninja cmake generator is also now supported, including on msys2.
If your OS is not supported, you will need the following:
And the following development libraries:
- zlib (required)
- mesa (if using X11 or any OpenGL otherwise)
- ffmpeg (optional, for game recording)
- gettext and gettext tools (optional, with ENABLE_NLS)
- png (required)
- SDL2 (required)
- SFML (optional, for link)
- OpenAL (optional, a sound interface)
- wxWidgets (required, 2.8 is still supported, --enable-stl is supported)
On Linux and similar, you also need the version of GTK your wxWidgets is linked to (usually 2 or 3).
Support for more OSes/distributions for ./installdeps
is planned.
Cross compiling for 32 bit on a 64 bit host
./installdeps m32
will set things up to build a 32 bit binary.
This is supported on Fedora, Arch, Solus and MSYS2.
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 (BUGGY AND DANGEROUS) | OFF |
ENABLE_ASM | Enable the following two ASM options | 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 | OFF |
ENABLE_LTO | Compile with Link Time Optimization (gcc and clang only) | ON for release build |
ENABLE_GBA_LOGGING | Enable extended GBA logging | ON |
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 | OFF |
VBAM_STATIC | Try link all libs statically (the following are set to ON if ON) | OFF |
SDL2_STATIC | Try to link static SDL2 libraries | OFF |
SFML_STATIC_LIBRARIES | Try to link static SFML libraries | OFF |
FFMPEG_STATIC | Try to link static ffmpeg libraries | OFF |
SSP_STATIC | Try to link static gcc stack protector library (gcc only) | OFF except Win32 |
OPENAL_STATIC | Try to link static OpenAL libraries | OFF |
Note for distro packagers, we use the CMake module GNUInstallDirs to configure installation directories.
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()
, e.g.:
int foo = 42;
wxLogDebug(wxT("the value of foo = %d"), foo);
Reporting Crash Bugs
If the emulator crashes and you wish to report the bug, a backtrace made with debug symbols would be immensely helpful.
To generate one (on Linux and MSYS2) first build in debug mode by invoking
cmake
as:
cmake .. -DCMAKE_BUILD_TYPE=Debug
After you've reproduced the crash, you need the core dump file, you may need to do something such as:
ulimit -c unlimited
in your shell to enable coredump files.
This post explains how to retrieve core dump on Fedora Linux (and possibly other distributions.)
Once you have the core dump file, open it with gdb
, for example:
gdb -c core ./visualboyadvance-m
In the gdb
shell, to print the backtrace, type:
bt
This may be a bit of a hassle, but it helps us out immensely.
Contributing
Please keep in mind that this app needs to run on Windows, Linux and macOS at
the very least, so code should be portable and/or use the appropriate #ifdef
s
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.