The continuing development of the legendary VBA gameboy advance emulator.
Go to file
Rafael Kitover d9432ebb14
build: fix build on MINGW{64,32}/UCRT64 on MSYS2
Pass -Wno-deprecated-copy only for C++, gcc gives a warning for C.

Pass -Wno-unused-command-line-argument for clang only, gcc gives a
warning about it.

Add a failsafe for gcc/clang static link flags if libstdc++ or
libpthread is not available as a static library.

Move link command adjustment script invocations to src/wx, the target is
not yet defined in the toolchain.

Add -lws2_32 to the end of the link command for gcc on Windows because
of link order issues with those symbols.

Disable LTO for gcc on Windows, as it is broken.

Don't install extra-cmake-modules on MINGW32, that package is not
available there.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-03-30 20:14:32 +00:00
.github ci: add clang+bintools for macOS, disable LTO 2024-03-11 08:53:47 +00:00
.tx translations: update .tx/config to new format 2022-12-02 22:48:44 +00:00
cmake build: fix build on MINGW{64,32}/UCRT64 on MSYS2 2024-03-30 20:14:32 +00:00
data [Windows] Enable winsparkle update checker. 2019-11-09 22:47:34 +00:00
dependencies@e8ce758a98 build: update Windows dependencies submodule 2022-12-29 20:29:53 -08:00
doc [Build] Move non-core common code to `components/` 2024-03-16 17:32:09 -07:00
po/wxvbam translations: transifex pull 2024-03-29 02:00:21 +00:00
src build: fix build on MINGW{64,32}/UCRT64 on MSYS2 2024-03-30 20:14:32 +00:00
third_party/include [Build] Move non-core common code to `components/` 2024-03-16 17:32:09 -07:00
tools build: update macOS dependencies 2023-12-13 13:49:54 +00:00
.appveyor.yml Add Catch2 unit testing framework + some tests. 2020-07-10 13:43:48 +00:00
.gitignore [build] Add VS Code integration 2022-11-12 13:26:23 +00:00
.gitlab-ci.yml Fix GameCube builds for VBA-M Libretro too 2023-08-19 15:26:08 +00:00
.gitmodules Make win32 dependencies submodule point to master. 2020-02-08 21:46:22 +00:00
.travis.yml Switch to C++17 for GUI. 2020-09-28 12:09:54 +00:00
CHANGELOG.md Update links to new domain visualboyadvance-m.org 2024-02-06 15:55:19 +00:00
CMakeLists.txt build: fix build on MINGW{64,32}/UCRT64 on MSYS2 2024-03-30 20:14:32 +00:00
CMakeSettings.json build: add arm64 VS build configs 2023-04-12 03:01:25 +00:00
DEVELOPER-MANUAL.md doc: update commit message guide in dev manual 2023-12-25 15:20:21 +00:00
README.md [Build] Remove ENABLE_NLS, fix TRANSLATIONS_ONLY 2024-03-26 17:38:12 -07:00
cmake-variants.yaml [Build] Move the core emulator to src/core/ 2024-03-16 14:35:36 -07:00
default.nix ci: add clang+bintools for macOS, disable LTO 2024-03-11 08:53:47 +00:00
installdeps build: fix build on MINGW{64,32}/UCRT64 on MSYS2 2024-03-30 20:14:32 +00:00
snapcraft.yaml snapcraft.yml: Rebuilt the snapcraft yaml to utilize core22 2023-10-23 14:14:35 -04:00
todo.md msys2 build improvements 2016-11-14 10:56:50 -08:00

README.md

Join the chat at https://gitter.im/visualboyadvance-m/Lobby

Our bridged Discord server is Here.

We are also on #vba-m on Libera IRC which has a Web Chat.

Get it from flathub Get it from the Snap Store

Want to know where you can install visualboyadvance-m in your linux distribution?

Packaging status

Visual Boy Advance - M

Game Boy and Game Boy Advance Emulator

The forums are here.

Windows and Mac builds are in the releases tab.

Nightly builds for Windows and macOS are at https://nightly.visualboyadvance-m.org/.

PLEASE TEST THE NIGHTLY OR MASTER WITH A FACTORY RESET BEFORE REPORTING ISSUES

Your distribution may have packages available as well, search for visualboyadvance-m or vbam.

It is also generally very easy to build from source, see below.

If you are using the windows binary release and you need localization, unzip the translations.zip to the same directory as the executable.

If you are having issues, try resetting the config file first, go to Help -> Factory Reset.

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 .. -G Ninja
ninja

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

Building a Libretro core

Clone this repo and then,

cd src/libretro
make -j`nproc`

Copy vbam_libretro.so to your RetroArch cores directory.

Visual Studio Support

For visual studio, dependency management is handled automatically with vcpkg, From the Visual Studio GUI, just clone the repository with git and build with the cmake configurations provided.

If the GUI does not detect cmake, go to File -> Open -> CMake and open the CMakeLists.txt.

If you are using 2017, make sure you have all the latest updates, some issues with cmake projects in the GUI have been fixed.

You can also build from the developer command prompt or powershell with the environment loaded.

Using your own user-wide installation of vcpkg is supported, just make sure the environment variable VCPKG_ROOT is set.

To build in the visual studio command prompt, use something like this:

mkdir build
cd build
cmake .. -DVCPKG_TARGET_TRIPLET=x64-windows-static -DCMAKE_BUILD_TYPE=Debug -G Ninja
ninja

Visual Studio Code Support

Make sure the C/C++ and CMake Tools extensions are installed.

Add the following to your settings.json:

{
    "cmake.configureOnOpen": true,
    "cmake.preferredGenerators": [ "Ninja" ]
}

.

Dependencies

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, at least version 4.0.4, for game recording)
  • gettext and gettext-tools
  • SDL2 (required)
  • SFML (optional, for link)
  • OpenAL or openal-soft (required, a sound interface)
  • wxWidgets (required for GUI, 2.8 and non-stl builds are no longer supported)

On Linux and similar, you also need the version of GTK your wxWidgets is linked to (usually 2 or 3) and the xorg development libraries.

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-w64-x86_64 for 64 bit Windows targets.

The target is implicit on MSys2 depending on which MINGW shell you started (the value of $MSYSTEM.)

On Debian/Ubuntu this uses the MXE apt repository and works quite 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, for example:

cmake .. -DENABLE_LINK=NO -G Ninja

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 -G Ninja

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_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) AUTO
ENABLE_LIRC Enable LIRC support OFF
ENABLE_FFMPEG Enable ffmpeg A/V recording AUTO
ENABLE_ONLINEUPDATES Enable online update checks ON
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 AUTO
ENABLE_ASAN Enable libasan sanitizers (by default address, only in debug mode) OFF
UPSTREAM_RELEASE Do some release tasks, like codesigning, making zip and gpg sigs. OFF
BUILD_TESTING Build the tests and enable ctest support. ON
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
OPENAL_STATIC Try to link static OpenAL libraries OFF
TRANSLATIONS_ONLY Build only the translations.zip and nothing else OFF

Note for distro packagers, we use the CMake module GNUInstallDirs to configure installation directories.

On Unix to use a different version of wxWidgets, set wxWidgets_CONFIG_EXECUTABLE to the path to the wx-config script you want to use.

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.

Our own builds are static.

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.

It works like printf(), e.g.:

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

From the core etc. the usual:

fprintf(stderr, "...", ...);

will work fine.

You need a debug build for this to work or to even have a console on Windows. Pass -DCMAKE_BUILD_TYPE=Debug to cmake.

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

See the Developer Manual.