2017-09-18 07:58:47 +00:00
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE - RUN doctoc TO UPDATE -->
2017-09-18 08:02:33 +00:00
2017-09-18 07:58:47 +00:00
- [Visual Boy Advance - M ](#visual-boy-advance---m )
- [Building ](#building )
2019-08-20 07:31:38 +00:00
- [Building a Libretro core ](#building-a-libretro-core )
- [Visual Studio Support ](#visual-studio-support )
- [Dependencies ](#dependencies )
2017-09-18 07:58:47 +00:00
- [Cross compiling for 32 bit on a 64 bit host ](#cross-compiling-for-32-bit-on-a-64-bit-host )
- [Cross Compiling for Win32 ](#cross-compiling-for-win32 )
- [CMake Options ](#cmake-options )
- [MSys2 Notes ](#msys2-notes )
- [Debug Messages ](#debug-messages )
- [Reporting Crash Bugs ](#reporting-crash-bugs )
- [Contributing ](#contributing )
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
2017-08-14 20:56:54 +00:00
[![Join the chat at https://gitter.im/visualboyadvance-m/Lobby ](https://badges.gitter.im/visualboyadvance-m/Lobby.svg )](https://gitter.im/visualboyadvance-m/Lobby)
2019-08-20 07:31:38 +00:00
[![travis ](https://travis-ci.org/visualboyadvance-m/visualboyadvance-m.svg?branch=master )](https://travis-ci.org/visualboyadvance-m/visualboyadvance-m)
[![appveyor ](https://ci.appveyor.com/api/projects/status/5ckx25vct1q1ovfc?svg=true )](https://ci.appveyor.com/project/ZachBacon65337/visualboyadvance-m-2ys5r)
2019-12-29 03:18:23 +00:00
2020-02-08 04:42:12 +00:00
[![Get it from the Snap Store ](https://snapcraft.io/static/images/badges/en/snap-store-black.svg )](https://snapcraft.io/visualboyadvance-m)
2018-06-27 02:15:22 +00:00
2016-12-23 13:38:50 +00:00
# Visual Boy Advance - M
2020-03-22 15:04:06 +00:00
Game Boy and Game Boy Advance Emulator
2020-03-23 00:27:51 +00:00
The forums are [here ](https://board.vba-m.com/ ).
2016-12-23 13:38:50 +00:00
2017-03-06 10:03:15 +00:00
Windows and Mac builds are in the [releases tab ](https://github.com/visualboyadvance-m/visualboyadvance-m/releases ).
2020-03-23 00:27:51 +00:00
Nightly builds are [here ](https://win.vba-m.com/nightly/ ).
2020-03-16 12:13:25 +00:00
2020-11-27 06:15:10 +00:00
**PLESE TEST THE NIGHTLY OR MASTER BEFORE REPORTING ISSUES**
2020-03-16 12:13:25 +00:00
Your distribution may have packages available as well, search for
`visualboyadvance-m` or `vbam` .
2017-03-06 10:03:15 +00:00
2017-03-06 10:10:06 +00:00
It is also generally very easy to build from source, see below.
2019-03-03 01:34:36 +00:00
If you are using the windows binary release and you need localization, unzip
the `translations.zip` to the same directory as the executable.
2020-03-16 12:13:25 +00:00
If you are having issues, try resetting the config file first, go to `Help ->
Factory Reset`.
2018-06-23 20:45:35 +00:00
2016-12-23 13:38:50 +00:00
## Building
The basic formula to build vba-m is:
2017-08-14 20:56:54 +00:00
```shell
2016-12-23 13:38:50 +00:00
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
2020-03-16 12:13:25 +00:00
cmake .. -G Ninja
ninja
2016-12-23 13:38:50 +00:00
```
2019-03-28 21:45:06 +00:00
`./installdeps` is supported on MSys2, Linux (Debian/Ubuntu, Fedora, Arch,
2019-08-20 07:31:38 +00:00
Solus, OpenSUSE, Gentoo and RHEL/CentOS) and Mac OS X (homebrew, macports or
fink.)
2016-12-23 13:38:50 +00:00
2019-07-23 11:24:59 +00:00
## Building a Libretro core
Clone this repo and then,
2020-03-16 12:13:25 +00:00
```bash
cd src/libretro
make -j`nproc`
2019-07-23 11:24:59 +00:00
```
2020-03-16 12:13:25 +00:00
Copy vbam_libretro.so to your RetroArch cores directory.
2019-08-20 07:31:38 +00:00
## Visual Studio Support
auto deps for visual studio, take 1
Use vcpkg to build deps when Visual Studio on Windows is detected, this
only happens on first build, but does take a while because things like
wxWidgets need to be built. Building from the developer command line is
also supported.
I considered making a pre-built tarball available, but the resulting
files are just too big for this to be practical.
Make the necessary cmake code changes for this to work and to use the
vcpkg packages, which work just like on linux or have other cmake glue
code available.
To do this, we make vcpkg a submodule, use git to checkout all
submodules, then just build and use the `vcpkg.exe`. Then we set the
CMAKE_TOOLCHAIN_FILE to the vcpkg toolchain and also include it
directly, why this is necessary I don't know, without it it doesn't work
in the IDE but does on the command line.
All of this requires no vcpkg integration with either the user or the
project. A user-wide `ENV{VCPKG_ROOT}` is also supported.
Fix the dynamic arrays in the GBA core, MSVC follows the C++ standard on
this and gcc does not.
TODO: add the necessary gcc flags to make this an error in cmake.
Use `wxArrayString` instead of `std::vector<wxString>` in
`src/wx/strutils.cpp` which is used in options parsing. This was
necessary because of a bizarre linker error with wxWidgets when using
Visual Studio:
https://trac.wxwidgets.org/ticket/10884#comment:46
In `src/wx/panel.cpp` make sure the unimplemented D3D renderer code does
not get compiled if it's actually `OFF`.
Also fix the new spacer code for the drawing panel to not combine
`wxEXPAND` with `wxALIGN_CENTER`, which is an error on wxWidgets 3.1.2,
which is what vcpkg uses. The drawing panel seems to be automatically
stretched to the max size automatically anyway.
TODO: if all of this works, we'll need an Appveyor set up for visual
studio.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-21 23:01:46 +00:00
For visual studio, dependency management is handled automatically with vcpkg,
cmake: Visual Studio support improvements.
Add support for vcpkg ffmpeg, this requires using someone's
FindFFmpeg.cmake instead of relying on pkg-config, since vcpkg does not
have pkg-config.
Do not use the ffmpeg from vcpkg on appveyor however, because that
pushes the build cache generation over the time limit for jobs.
Add secur32 and bcrypt to the list of ffmpeg libs on windows, these are
standard windows libraries.
Change some code in ffmpeg.cpp to remove C-style casts of struct
initializers, which are illegal in MSVC.
Add the INT64_C and UINT64_C macros missing in MSVC's stdint.h (if not
defined) to ffmpeg.h before the ffmpeg headers are included, because
they rely on them.
Rewrite the wxWidgets finding code for the vcpkg wxWidgets to be nicer
and work correctly for debug and static builds.
Remove all /W* and /w* warnings options from cmake compiler flags, and
replace them with /W4 for debug builds, and /w (no warnings) for release
modes.
When building a static binary, remove all /MD* flags from cmake compiler
flags, and use /MT for static release builds and /MTd for static debug
builds.
Improve the vcpkg toolchain wrapper to only rebuild the vcpkg binary if
there were git updates.
Redo the handling of SDL2 and SDL_main. Only link SDL2Main to the SDL
binary and don't use the definitions.
Update CMakeSettings.json to use Ninja and include static
configurations.
Use CMAKE_PROJECT_DIR instead of CMAKE_SOURCE_DIR to determine the vcpkg
root, as CMAKE_SOURCE_DIR is sometimes set incorrectly in the 2017 GUI.
Add /nodefaultlib:libcmt to the debug build link flags, as in debug
builds libcmtd is used and libcmt should not be.
Add /subsystem:console to debug build link flags to produce a windows
console app for debug builds, like we do for mingw builds. To do this,
define a WIN32_CONSOLE_APP macro and if set, define a main() that calls
WinMain().
Call wxMesdsageOutput::Set() in OnInit with an instance of
wxMessageOutputStderr for windows debug builds to make sure the --help
text etc. goes to the console instead of a popup box.
Update the Visual Studio related text in README.md.
Fix dynamic debug builds by linking to the debug version of SDL2 and
copying the debug version of the dll to the build dir.
Fix issue in MainFrame::BindAppIcon with the function we are using not
being found in a Windows DLL in debug builds by using
wxDynamicLibrary::GetSymboolAorW() instead of GetSymbol().
Enable LTO for MSVC in Release modes, if the option is set.
Change appveyor config to use an 8 item build matrix of
x64/x86 / Release/Debug / Static/Dynamic. And test the binary in debug
modes by running --help.
When copying the wxrc.exe out of the build tree, copy both the release
and debug versions, this is so that appveyor caching of vcpkg works,
since the build trees are not cached.
Add some necessary win32 libraries to the SDL binary. And enable
building it on appveyor.
Fix #465.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-10 11:13:58 +00:00
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.
auto deps for visual studio, take 1
Use vcpkg to build deps when Visual Studio on Windows is detected, this
only happens on first build, but does take a while because things like
wxWidgets need to be built. Building from the developer command line is
also supported.
I considered making a pre-built tarball available, but the resulting
files are just too big for this to be practical.
Make the necessary cmake code changes for this to work and to use the
vcpkg packages, which work just like on linux or have other cmake glue
code available.
To do this, we make vcpkg a submodule, use git to checkout all
submodules, then just build and use the `vcpkg.exe`. Then we set the
CMAKE_TOOLCHAIN_FILE to the vcpkg toolchain and also include it
directly, why this is necessary I don't know, without it it doesn't work
in the IDE but does on the command line.
All of this requires no vcpkg integration with either the user or the
project. A user-wide `ENV{VCPKG_ROOT}` is also supported.
Fix the dynamic arrays in the GBA core, MSVC follows the C++ standard on
this and gcc does not.
TODO: add the necessary gcc flags to make this an error in cmake.
Use `wxArrayString` instead of `std::vector<wxString>` in
`src/wx/strutils.cpp` which is used in options parsing. This was
necessary because of a bizarre linker error with wxWidgets when using
Visual Studio:
https://trac.wxwidgets.org/ticket/10884#comment:46
In `src/wx/panel.cpp` make sure the unimplemented D3D renderer code does
not get compiled if it's actually `OFF`.
Also fix the new spacer code for the drawing panel to not combine
`wxEXPAND` with `wxALIGN_CENTER`, which is an error on wxWidgets 3.1.2,
which is what vcpkg uses. The drawing panel seems to be automatically
stretched to the max size automatically anyway.
TODO: if all of this works, we'll need an Appveyor set up for visual
studio.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-21 23:01:46 +00:00
Using your own user-wide installation of vcpkg is supported, just make sure the
environment variable `VCPKG_ROOT` is set.
2019-07-03 23:28:48 +00:00
To build in the visual studio command prompt, use something like this:
```
2019-09-12 03:12:15 +00:00
mkdir build
cd build
cmake: Visual Studio support improvements.
Add support for vcpkg ffmpeg, this requires using someone's
FindFFmpeg.cmake instead of relying on pkg-config, since vcpkg does not
have pkg-config.
Do not use the ffmpeg from vcpkg on appveyor however, because that
pushes the build cache generation over the time limit for jobs.
Add secur32 and bcrypt to the list of ffmpeg libs on windows, these are
standard windows libraries.
Change some code in ffmpeg.cpp to remove C-style casts of struct
initializers, which are illegal in MSVC.
Add the INT64_C and UINT64_C macros missing in MSVC's stdint.h (if not
defined) to ffmpeg.h before the ffmpeg headers are included, because
they rely on them.
Rewrite the wxWidgets finding code for the vcpkg wxWidgets to be nicer
and work correctly for debug and static builds.
Remove all /W* and /w* warnings options from cmake compiler flags, and
replace them with /W4 for debug builds, and /w (no warnings) for release
modes.
When building a static binary, remove all /MD* flags from cmake compiler
flags, and use /MT for static release builds and /MTd for static debug
builds.
Improve the vcpkg toolchain wrapper to only rebuild the vcpkg binary if
there were git updates.
Redo the handling of SDL2 and SDL_main. Only link SDL2Main to the SDL
binary and don't use the definitions.
Update CMakeSettings.json to use Ninja and include static
configurations.
Use CMAKE_PROJECT_DIR instead of CMAKE_SOURCE_DIR to determine the vcpkg
root, as CMAKE_SOURCE_DIR is sometimes set incorrectly in the 2017 GUI.
Add /nodefaultlib:libcmt to the debug build link flags, as in debug
builds libcmtd is used and libcmt should not be.
Add /subsystem:console to debug build link flags to produce a windows
console app for debug builds, like we do for mingw builds. To do this,
define a WIN32_CONSOLE_APP macro and if set, define a main() that calls
WinMain().
Call wxMesdsageOutput::Set() in OnInit with an instance of
wxMessageOutputStderr for windows debug builds to make sure the --help
text etc. goes to the console instead of a popup box.
Update the Visual Studio related text in README.md.
Fix dynamic debug builds by linking to the debug version of SDL2 and
copying the debug version of the dll to the build dir.
Fix issue in MainFrame::BindAppIcon with the function we are using not
being found in a Windows DLL in debug builds by using
wxDynamicLibrary::GetSymboolAorW() instead of GetSymbol().
Enable LTO for MSVC in Release modes, if the option is set.
Change appveyor config to use an 8 item build matrix of
x64/x86 / Release/Debug / Static/Dynamic. And test the binary in debug
modes by running --help.
When copying the wxrc.exe out of the build tree, copy both the release
and debug versions, this is so that appveyor caching of vcpkg works,
since the build trees are not cached.
Add some necessary win32 libraries to the SDL binary. And enable
building it on appveyor.
Fix #465.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-10 11:13:58 +00:00
cmake .. -DVCPKG_TARGET_TRIPLET=x64-windows-static -DCMAKE_BUILD_TYPE=Debug -G Ninja
2019-12-07 16:58:12 +00:00
ninja
2019-07-03 23:28:48 +00:00
```
2019-08-20 07:31:38 +00:00
## Dependencies
2017-02-11 22:18:38 +00:00
2016-12-23 13:38:50 +00:00
If your OS is not supported, you will need the following:
2017-08-14 20:56:54 +00:00
- C++ compiler and binutils
- [make ](https://en.wikipedia.org/wiki/Make_(software ))
- [CMake ](https://cmake.org/ )
- [git ](https://git-scm.com/ )
2019-08-20 07:31:38 +00:00
- [nasm ](https://www.nasm.us/ ) (optional, for 32 bit builds)
2016-12-23 13:38:50 +00:00
And the following development libraries:
2017-08-14 20:56:54 +00:00
- [zlib ](https://zlib.net/ ) (required)
- [mesa ](https://mesa3d.org/ ) (if using X11 or any OpenGL otherwise)
2019-09-01 20:37:39 +00:00
- [ffmpeg ](https://ffmpeg.org/ ) (optional, at least version `4.0.4` , for game recording)
2019-08-20 07:31:38 +00:00
- [gettext ](https://www.gnu.org/software/gettext/ ) and gettext-tools (optional, with ENABLE_NLS)
- [SDL2 ](https://www.libsdl.org/ ) (required)
2017-08-14 20:56:54 +00:00
- [SFML ](https://www.sfml-dev.org/ ) (optional, for link)
2019-08-20 07:31:38 +00:00
- [OpenAL ](https://www.openal.org/ ) or [openal-soft ](https://kcat.strangesoft.net/openal.html ) (optional, a sound interface)
2020-03-16 12:13:25 +00:00
- [wxWidgets ](https://wxwidgets.org/ ) (required for GUI, 2.8 and non-stl builds are no longer supported)
2016-12-23 13:38:50 +00:00
2017-02-20 21:20:09 +00:00
On Linux and similar, you also need the version of GTK your wxWidgets is linked
2019-08-20 07:31:38 +00:00
to (usually 2 or 3) and the xorg development libraries.
2017-02-20 21:20:09 +00:00
2016-12-23 13:38:50 +00:00
Support for more OSes/distributions for `./installdeps` is planned.
2017-03-23 21:09:17 +00:00
## 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.
2016-12-23 13:38:50 +00:00
## 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
2019-08-20 07:31:38 +00:00
value of `$MSYSTEM` .)
2016-12-23 13:38:50 +00:00
2019-08-20 07:31:38 +00:00
On Debian/Ubuntu this uses the MXE apt repository and works quite well.
2016-12-23 13:38:50 +00:00
2017-01-25 18:53:05 +00:00
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.
2016-12-23 13:38:50 +00:00
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
2019-08-20 07:31:38 +00:00
override them, for example:
2016-12-23 13:38:50 +00:00
2017-08-14 20:56:54 +00:00
```shell
2020-03-16 12:13:25 +00:00
cmake .. -DENABLE_LINK=NO -G Ninja
2016-12-23 13:38:50 +00:00
```
2020-03-16 12:13:25 +00:00
Of particular interest is making **Release** or **Debug** builds, the default
mode is **Release** , to make a **Debug** build use something like:
2016-12-23 14:10:54 +00:00
2017-08-14 20:56:54 +00:00
```shell
2020-03-16 12:13:25 +00:00
cmake .. -DCMAKE_BUILD_TYPE=Debug -G Ninja
2016-12-23 14:10:54 +00:00
```
2016-12-23 13:38:50 +00:00
Here is the complete list:
2017-10-22 22:35:56 +00:00
| **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 |
2019-08-20 08:21:38 +00:00
| ENABLE_LINK | Enable GBA linking functionality (requires SFML) | AUTO |
2017-10-22 22:35:56 +00:00
| ENABLE_LIRC | Enable LIRC support | OFF |
2019-08-20 08:21:38 +00:00
| ENABLE_FFMPEG | Enable ffmpeg A/V recording | AUTO |
2019-07-10 23:47:16 +00:00
| ENABLE_ONLINEUPDATES | Enable online update checks | ON |
2017-10-22 22:35:56 +00:00
| 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 |
2019-08-20 08:21:38 +00:00
| ENABLE_OPENAL | Enable OpenAL for the wxWidgets port | AUTO |
2018-08-10 23:35:49 +00:00
| ENABLE_SSP | Enable gcc stack protector support (gcc only) | OFF |
2019-01-02 16:23:26 +00:00
| ENABLE_ASAN | Enable libasan sanitizers (by default address, only in debug mode) | OFF |
2019-12-24 06:32:01 +00:00
| UPSTREAM_RELEASE | Do some release tasks, like codesigning, making zip and gpg sigs. | OFF |
2020-07-10 13:40:05 +00:00
| BUILD_TESTING | Build the tests and enable ctest support. | ON |
2018-02-24 19:39:29 +00:00
| 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 |
2018-08-10 23:35:49 +00:00
| SSP_STATIC | Link gcc stack protecter libssp statically (gcc, with ENABLE_SSP) | OFF |
2017-05-24 11:25:45 +00:00
Note for distro packagers, we use the CMake module
[GNUInstallDirs ](https://cmake.org/cmake/help/v2.8.12/cmake.html#module:GNUInstallDirs )
to configure installation directories.
2016-12-23 13:38:50 +00:00
Turbo config refactor followup.
In the Turbo config dialog, remove the selection list for entering the
value and leave only the spin control. Allow values above 600%, up to
4000%.
Reintroduce the speedup_frame_skip config variable, defaulting to 9, use
it for turbo selection values > 600%, with speedup_throttle == 0.
The rationale for this is that on average modern hardware, throttle
values above 500% or 600% will not be effective.
The default is now shown as 1000%, which is:
frame_skip == 9 && speedup == 1,
where:
speedup == 1 is equivalent to throttle == 0,
as was the case before the turbo config changes.
Values above 600% are automatically rounded up or down to the nearest
100%, on entry and on click of the up/down arrows of the spin control.
The frame skip checkbox is cleared and disabled for the "Unlimited"
setting (throttle == 0), and set and disabled for values > 600%, to
reflect the mechanism to the user.
When the value again enters the modifiable range in the spin control,
the previous value of the checkbox is restored.
Misc:
- Turn off translation of percentage values in the xrc.
- Remove the size element for the throttle selection list in the general
config dialog xrc, it breaks the layout on GTK3.
- Add a note about passing wxWidgets_CONFIG_EXECUTABLE to cmake to
select wxWidgets version to README.md.
Hopefully this will reduce confusion and present a nicer UI.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-05-14 17:47:32 +00:00
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.
2016-12-23 13:38:50 +00:00
## MSys2 Notes
To run the resulting binary, you can simply type:
2017-08-14 20:56:54 +00:00
```shell
2016-12-23 13:38:50 +00:00
./visualboyadvance-m
```
in the shell where you built it.
2017-01-25 18:53:05 +00:00
If you built with `-DCMAKE_BUILD_TYPE=Debug` , you will get a console app and
will see debug messages, even in mintty.
2016-12-23 14:10:54 +00:00
2016-12-23 13:38:50 +00:00
If you want to start the binary from e.g. a shortcut or Explorer, you will need
2016-12-23 15:15:47 +00:00
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.)
2016-12-23 13:38:50 +00:00
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.
2020-03-16 12:13:25 +00:00
Our own builds are static.
2016-12-23 13:38:50 +00:00
2017-01-25 18:53:05 +00:00
## Debug Messages
We have an override for `wxLogDebug()` to make it work even in non-debug builds
2020-03-16 12:13:25 +00:00
of wx and on windows, even in mintty.
2017-01-25 18:53:05 +00:00
2017-09-18 07:58:47 +00:00
It works like `printf()` , e.g.:
2017-01-25 18:53:05 +00:00
```cpp
int foo = 42;
wxLogDebug(wxT("the value of foo = %d"), foo);
```
2020-03-16 12:13:25 +00:00
From the core etc. the usual:
```cpp
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.
2017-09-18 07:58:47 +00:00
## Reporting Crash Bugs
2017-08-17 21:25:27 +00:00
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:
```shell
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:
```shell
ulimit -c unlimited
```
in your shell to enable coredump files.
[This
post](https://ask.fedoraproject.org/en/question/98776/where-is-core-dump-located/?answer=98779#post-id-98779)
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:
```shell
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.
2017-09-18 07:58:47 +00:00
## Contributing
2016-12-23 13:38:50 +00:00
2020-02-25 19:51:53 +00:00
See the [Developer Manual ](/DEVELOPER-MANUAL.md ).