Remove zh.po, which is not on Transifex anymore and zh-Hans.po, which I
have removed from Transifex just now, leaving zh-CN.po, as suggested by
@wuweiran.
Fix#1435.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Followup on 29e85e5d (build: update Link SFML usage to SFML 3.x APIs,
2025-04-01) to alias an optional.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
In #1424, the app event handler was disabling all key down events,
preventing controls that depend on them to properly handle these. This
was done to work around an issue on macOS where unhandled keyboard
events would fire an audio alert.
Since this breaks text controls, these changes check for the currently
focused window and let the event propagate for text controls.
Fixes#1434
SFML 2 no longer compiles with a modern compiler and we are blocked on
SFML 3 being available in vcpkg to fix it. There is no easy way to
backport fixes to SFML 2 so disable link for the time being.
On startup, the internal emulator sound volume is set to 100%. The user
value in the wx frontend is not used until the emulator volume slider is
modified, resulting in games starting with volume at 100% on startup.
This fixes#1407 by always setting the internal emulator sound volume on
game startup.
Update default.nix to remove gcc from the macOS package set and add
clang/llvm/libcxx to the Linux package set.
Change 'epoxy' in the Linux package set to the new package name
'libepoxy'.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Update `installdeps` for current OpenSUSE wxWidgets and FFmpeg packages.
Disable 32 bit cross builds in OpenSUSE because those packages are no
longer available.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use the `sqrt()` introduced in 615e5863 (Add fast-inverse SSE1 sqrt()
from Quake 3 Arena, 2025-01-12) or the xBRZ filters for Windows XP 32
bit builds.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add developer block to `metainfo.xml` with id 'visualboyadvance-m.org'.
Also set component type to 'desktop-application'.
This file is used to describe the application on Linux.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
For static builds for Windows, link `avrt`, a system library that is now
required by OpenAL.
Also remove our version of `FindOpenAL.cmake` in favor of the
system-provided version.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Try to initialize the GTest Git submodule from the CMake code if it has
not been.
If that fails, turn off `BUILD_TESTING`.
We do not want to require recursive clones or initializing submodules
for users by default.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Some Linux distributions use a hermetic build environment to build. This
resulted in issues with `FetchContent` attempting to download googletest
at configure time.
This fixes the issue by integrating googletest as a git submodule
instead of downloading it at configure time.
* [GB] Add support for per-game overrides
Alleyway is a buggy game that does not work properly when a Game Boy
Printer is connected. In order to work around this issue, this adds
upport for built-in per-software Game Boy overrides. In addition, this
renames various variables to make their meaning clearer.
* This only supports built-in overrides. External INI files are not
supported.
* Only the Game Boy Printer option is supported, this only takes effect
on game startup and the general configuration option is restored when
the game is unloaded.
* As a result, it is possible to override the per-game override by
manually setting the option while the game is running, this is working
as intended.
* Future refactors of the option handling will manage overrides better.
* Switch `gbPrinterEnabled` default to off.
Fixes#1368
When pressing Alt+Tab, the "Alt" and "Tab" keys were considered in the
"pressed" state until the user pressed them again because the window is
no longer receiving keyboard events. This resulted in some shortcuts no
longer working, since "Alt" was always in the pressed state. This
changes the keyboard tracking to be reset when the application loses
focus, fixing the issue.
This change also adds tests for the keyboard tracking.
Rename the Git submodule `dependencies` used for some dependent files
for Win32 builds to `win32-deps` and make the necessary adjustments to
the CMake code.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Update harfbuzz in the macOS builder from the ancient version to the
current release and switch it to using Meson.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
The Wii U VC emulator incorrectly allows for armv6 thumb instructions
(like LSRS). These cause an undefined instruction error on real hardware
but the Wii U VC emulator just ignores them. This change mimicks the Wii
U VC emulator behavior.
Use a file for the Windows code-signing certificate instead of
hardcoding it into the CMake code.
Update the developer manual with instructions on where to put the
Windows code-signing certificate and the file containing the password
for it.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Tracking whether or not the menus are opened is necessary on Windows since menus stop
the main loop. This is not necessary on other platforms. In particular, on Mac, we do
not get a `wxEVT_MENU_CLOSE` event when opening a dialog from a shortcut, resulting in
the menu status tracking being incorrect.
Fixes#1348
Calling `ExpandAll()` on the `wxTreeCtrl` would cause it to display outside of its
intended view, hiding other controls. Instead, this sets a minimum size for the tree
control, so the default window size is reasonable.
Fixes#1348
Link `FAudio.a` explicitly on MINGW toolchains, for some reason linking
`FAudio` with static preference no longer works.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Previously, the OPRI register was always set to be in CGB mode when not
using the CGB BIOS, resulting in graphics corruption when running DMG
software in CGB mode without using the CGB BIOS. This fixes the issue by
properly setting bit 1 of the OPRI register as expected.
This was broken in #1119.
Stop trying to use debug libs for `CMAKE_BUILD_TYPE=RelWithDebInfo`,
this also fixes the current link error with SFML.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Remove the cmake code that adds the pcre library because the wxWidgets
cmake code correctly includes it now, on both vcpkg and MSYS2.
Also fix up `wxWidgets_ROOT_DIR` and `wxWidgets_LIB_DIR` for debug
builds.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Set `VCPKG_HOST_TRIPLET` and `VCPKG_USE_HOST_TOOLS` when using an X64
host for an ARM64 cross build in order to use the host `pkgconf` and
possibly other tools.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add information on unlocking the keychain for codesigning and setting up
credentials for notarization to the macOS binary section in the release
process section of the developer manual.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Make compiler symlinks in the macOS builder instead of prepending
`ccache` to the compiler in the CC/CXX environment variables.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Fix the URL a browser is launched with when the `Help -> Translations`
menu item is selected to point to the project page on Transifex.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Shortcuts were mistakenly written in `Keyboard/Keyboard` rather than in
the `Keyboard` section.
In addition, this properly fixes toggling checkable menu item options
via a shortcut.
Fixes#1334
Add the `EXCLUDE_FROM_ALL` keyword to the `FetchContent_Declare` call
for GoogleTest, so that gtest/gmock are not installed with the project.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Update the included WinSparkle dll to 0.8.1 and add support for using
the ARM64 WinSparkle dll as well.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Update the release steps in the developer manual to mention the
requirement for a GnuPG key, emphasize the editing the changelog step
and add instructions for putting `signtool.exe` in the `PATH` for the 32
bit Windows binary.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Do not try to install FAudio for the MINGW32 32 bit Windows MSYS2 target
in `installdeps`. We do not use it for the 32 bit build and there is no
package for it for MINGW32.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Update README.md and remove outdated information.
Update the Developer Manual and describe the current release process.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Update the cmake -DTAG_RELEASE script to work with recent cmake changes.
Change it to not automatically make the release commit and tag, instead
specifying in the instructions that the person making the release must
edit the CHANGELOG.md and then run the commands, given in the
instructions, to make the release commit and tag.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
On Windows, wchar_t is 16 bits and represents UTF-16 code units.
However, on other platforms, wchar_t is typically implemented as 32 bits
to represent UTF-32 code units. In order to work around this problem, we
always convert the string we get from FAudio, which is represented as
UTF-16 code units, into UTF-8 and let wxString handle the conversion to
its native type internally.
Previously, `wxEVT_KEY_DOWN` and `wxEVT_KEY_UP` were transformed into
`VBAM_EVT_USER_INPUT` and marked as processed early. This broke a number
of controls that rely on the traditional widgets events.
To fix this, we now filter the `wxEVT_KEY_*` and `wxEVT_CHAR` events in
the only widget we use that cares about them, `UserInputCtrl` instead of
filtering them at the application level.
Add core option to mute sound during speedup, implemented in the gba
core. Link the option to the SDL port as well.
Add the new Mute Sound option as a checkbox to the xrc for the
Speedup/Turbo dialog and improve the dialog appearance.
Fix the max values for the options speedup_throttle and
speedup_frame_skip.
Add base class for numeric OptionProxy types implementing the +=, -=
operators, increment/decrement operators and operator T(). Add tests for
these operators on numeric types.
Move Speedup/Turbo dialog code from guiinit.cpp to a dialog class and
rewrite it using validators.
Remove the "GL VIEWPORT" debug prints from panel.cpp.
Fix#865
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use the __WXGTK3__ macro to check for GTK3 when setting the gdk backend
to X11 when Wayland EGL is not available, GTK2 does not have this
function and always uses X11 anyway.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
This changes the way we handle asserts to use a set of custom macros.
This greatly speeds up crashing, especially on Windows, and provides
assertions in release mode too.
In addition to fixing a couple of minor bugs, this also creates some
utility functions to access the cmdtab data.
Finally, this disables tests on MSYS2 as they can be flaky.
Breaking the main wx target down to multiple libraries had the side
effect that many build options were not properly applied to libraries.
This fixes the issue by having a common configuration function in CMake
to share most of the configuration between all of the wx-related
targets.
Followup on 244149c0 (build: fix faudio static linkage, 2024-05-09)
which broke linking faudio on MSVC+vcpkg, go back to using the
FAudio::FAudio cmake target for MSVC.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use "faudio" and dependent dlls on Windows instead of the FAudio::FAudio
cmake target, because the cmake target always links the faudio dll.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
* Convert the only existing test (strutils) to googletest.
* Create a test target for vbam-wx-config.
* Add necessary fakes for the test binary.
* Add tests to CI.
Stop enabling the SDL binary by default on Windows or macOS because it
usually only of interest to Linux users.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add the GPG_SIGNATURES cmake option to control creating gpg clearsign
signatures for the translations and exe zips for UPSTREAM_RELEASE,
defaulting to OFF.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Circular dependencies between the config sub-module and the rest of the
wx frontend have been removed. This change separates the config code to
its own submodule.
This is a preliminary change to improve testing coverage.
A change in GitHub Actions broke our MSVC build flow due to different
toolchains being used at different steps of the build process. While the
upstream issue will eventually be fixed, we need to explicitly specify
the toolchain version for now.
Bug: #1297
This changes key events to be filtered globally by the application,
preventing any widget from accessing them. Widgets should instead use
the new VBAM_USER_INPUT_EVENT event.
In addition, this explicitly removes accelerator handling from wxWidgets
main menu, allowing us to populate joystick options in the menu without
firing wxWidgets assertions.
This modifies the UserInputEvent class to fire a vector of events at
once, rather than individual down/up events for each UserInput. This
simplifies handling of the global event filter and prevents the firing
of spurious events.
This also fixes a bug when pressing "Ctrl+1" would trigger the command
for both the command assigned to "Ctrl+1" and to "1". Now, only the
"Ctrl+1" command will fire.
* Moves cmdtab to config/. This removes the dependency on the wxvbam.h
header from the config/ directory.
* Fixes a number of issues in the shortcuts configuration window:
* The "Remove" command was not working properly due to an incorrect
refactor.
* The window is now fully expandable.
This unifies command handling between game and shortcut commands. Both
types of commands are now handled in a common manner and the binding
configuration is shared. In particular, this prevents assigning the same
user input (joypad or keyboard) to a game command or a shortcut command.
Bug: #745
Previously, some input-related configuration objects were either owned
by `gopts` or global values. This moves these objects to be owned by the
app object instead.
Rather than directly accessing the app object, other objects (like
dialogs) that need to access the input-related configuration objects are
passed a `ConfigurationObjectProvider` function. This will make it
easier to test these objects independently down the line.
Bug: #745
Originally, UserInput was built around the key, mod, joy triplet values
to maintain compatibility with other parts of the code base that made
use of these values. Since the UserInput class was introduced, all use
cases have been transitioned off these values in favor of treating the
UserInput as an abstract input.
UserInput is now a simple wrapper around either a KeyboardInput or a
JoyInput structure that only contain data pertinent to their input type.
This concludes the transition to the UserInput type.
Bug: #745
This adds a custom UserInputEvent for handling joypad and keyboard input
for both accelerators and emulator control configuration.
These changes fix a number of issues with the wxWidgets implementation
of key down / up event handling. In particular, every "down" event now
has a corresponding "up" event. All of the special handling that was
done in multiple places to handle shortcuts is now done in a new class,
`UserInputEventSender`, simplifying multiple call sites.
This is another step towards complete unification of UserInput handling,
which will prevent double assignment between shortcuts and emulator
controls.
Bug: #745
This changes most dialogs in the wx frontend to use a common base
abstraction, `dialogs::BaseDialog`. This base class sets up common
style options for every dialog and automatically saves and restores the
dialog position.
In addition, this moves the first time show position of the dialog to be
slightly to the bottom and right of the main window, even if the main
window is on a screen other than the main screen.
Copy the cmake 3.28.3 FindGettext.cmake to cmake/ and comment out the
line that updates the po file from the pot. Because we download po files
from transifex we don't want this.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add the NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM env var to the macOS CI as
faudio has not been marked compatible with macOS yet.
Remove FindGettext.cmake as it is a core cmake module that is available
in the versions of cmake we support now.
Add support for nix to MacPackageManagers.cmake and add brew gettext to
CMAKE_IGNORE_PATH when not using brew. Also update the cmake style.
Add faudio, libintl and the System framework to buildInputs in
default.nix.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Move setting up the environment for macOS Homebrew earlier in
Options.cmake, as well as finding pkgconfig.
Update gcc/clang toolchain to not pass a gcc-specific option to clang.
Add faudio to list of brew packages to get in installdeps.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Update from the channels/channel_layout API to the new ch_layout API,
assume two channel stereo always.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Change the find_package() call for FAudio to QUIET to not show a giant
warning when it's not available.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Change Linux nix dependencies in default.nix for OpenGL from mesa to
libGL and libGLU, also fixing the compile error for the SDL binary.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
The CPSR register needs to be restored from SPSR when switching modes.
This is currently being done for all mode switches /except/ for FIQ,
which is very likely just an oversight rather than intended behaviour.
This fixes the random crashing in OpenLara, as well as fixing random
glitching of my own project that uses FIQ mode switches. The issue
happens "at random" because it requires an interrupt to occur while in
FIQ mode, and it must also fire inside a section of code that relies on
the status flags (or the CPSR register in general): When exiting the
interrupt exception, the CPSR register is supposed to be restored from
SPSR, but this isn't being done when switching from IRQ mode back to FIQ
mode, which results in CPSR (and thus the status flags) being corrupted.
For example, SUBS r0, #1; [interrupt]; BNE 1b would trigger the bug, but
[interrupt]; SUBS r0, #1; BNE 1b wouldn't, and neither would
SUBS r0,#1; BNE 1b; [interrupt].
Remove -lgcc from static link flags for gcc/clang, clang does not
support this and -static-libgcc is enough.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Update dists for gettext and gsed to get around new compile errors from
clang.
Update SDL and ffmpeg and add FAudio.
Make some other minor adjustments for recent changes.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
This removes remaining dependencies on Windows in the FAudio code by
removing the device notification code and switching to portable
`condition_variable` for the buffer end notification event.
This moves all of the audio code in the wx frontend to the
`src/wx/audio` folder and simplifies many call sites by having one
generic API to enumerate audio devices and create the audio driver.
In addition, this fixes many corner cases in device enumerations and
moves handling of the default device to the respective audio backends,
rather than pushing it to the UI.
Finally, this changes the `Sound/AudioDevice` setting to use the
underlying device ID, rather than the user-facing name.
Pass `/fd certHash /td certHash` to signtool as they are required
arguments.
signtool comes with Visual Studio and now works and we don't need to
require osslsigncode anymore.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Make the regular expression against VCPKG_ROOT less specific for
detecting the default Visual Studio vcpkg, for some reason it stopped
working.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Corrected the current FAudio output code, FAudio api wasn't
a direct 1 for 1 code replacement. Adjusted the existing
code structure so that FAudioVoiceCallBack struct
was being properly called on.
Signed-off-by: Zach Bacon <zachbacon@vba-m.com>
This fixes a number of issues with the current implementation. Namely,
some options were not properly saved and the audio driver was not
properly reloaded when some options were changed.
In addition, this moves most sound-related options to `g_owned_opts` and
simplifies many call sites.
Only pass -Werror=lto-type-mismatch to gcc, clang does not have this
option and throws a warning.
Also quote some barewords in if() statements.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
* Move CMake dependencies checkout to `cmake/Dependencies.cmake`.
* Disable most dependencies checkout from the `TRANSLATIONS_ONLY` build.
* Remove the debug/translations_only GitHub Action.
Add -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing to
compile and link options for gcc/clang always.
Rename struct yy_buffer_state in src/sdl/expr-lex.cpp to struct
yy_buffer_state_sdl because it breaks when linking the SDL binary with
-Werror=odr.
Fix#1260
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add a toggle for SDL GameController Mode in the game key configuration
dialog, default enabled.
On check or uncheck, change the option and reinitialize joysticks, not
using GameController mode if it is disabled.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add faudio to list of optional vcpkg deps linked to ENABLE_FAUDIO.
This codepath is not used right now as we are using binary packages.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
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>
Bring back setting the MSYS variable under MSYS2, it's still being used
in a few places.
Link the SDL2::SDL2-static target for static builds.
Add -static-libgcc and -static-libstdc++ to the gcc/clang toolchain for
static builds.
Edit wxWidgets_LIBRARIES under MSYS2 to specify liblzma.a explicitly
because for some reason it's not being linked statically by default for
static builds.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
When using vcpkg as the toolchain, pass NO_DEFAULT_PATH to
find_package(wxWidgets ...) so that the default cmake
FindwxWidgets.cmake is not included.
Set wxWidgets_DIR to the
<vcpkg-root>/installed/<triplet>/share/wxwidgets vcpkg port directory
for the subsequent find_package() calls to find the port-installed
wxWidgetsConfig.cmake file.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Apple compiler ID is defined as `AppleClang`. Rather than explicitly
adding every single compiler ID, this changes the build to try to apply
settings for GCC for every non-MSVC-like compilers.
* Bring the wx frontend more in-line with the rest of the codebase.
* Always default to Unicode APIs on Windows.
* Clean up all include guards and headers.
* Create multiple components library. These depend on the core code and
are used by multiple frontends.
* Clean up the filters declaration by moving them to a common header in
`components/filters/filters.h`.
* Clean up the include guards and include orders.
* Fix the modified paths in `src/debian/copyright` to match their new
location.
* Move src/apu/, src/gb/ and src/gba/ to src/core/.
* Clean up include guards and headers.
* Rename `BKPT_SUPPORT` to `VBAM_ENABLE_DEBUGGER` and remove the
`NO_DEBUGGER` define.
* Clean out all of the dependent headers.
* Modify generated version.h to improve the dependency chain and isolate
the generated file to its own sub-directory within the build
directory.
* Remove duplicate function definitions between the libretro and other
frontends by merging them into a common source file.
* Also move `systemMessage()` and message IDs definitions to core/base.
* Clean up and modernize many file utility methods.
* Clean up source set and public headers.
* Make the fex library an OBJECT library to speed up build.
* Clean up the only fex include to use the full path to the header.
CMake 3.25 introduced the CMAKE_MSVC_DEBUG_INFORMATION_FORMAT to set the
/Z flag for MSVC toolchains. Use it rather than modifying the compile
options if possible. We revert to setting the compile options manually
if the CMake version is too old.
* Use add_compile_definitions everywhere.
* Remove unused intermediate target.
* Add ASAN support for MSVC.
* Remove duplicate option definitions.
* Configure MinGW separately from the toolchain
* Move toolchain-specific options to their own files.
* Clean up and modernize the use of toolchain options.
* Use modern cmake LTO support.
* Remove dead cmake code and cmake functions available in upstream cmake.
* Update README.md to remove references to removed build options.
Add llvmPackages_latest.clang and bintools to the macOS part of
default.nix for nix, because for some reason the `ar` utility is not
found in GitHub actions right now.
Disable LTO for the macOS action for now, this is a consequence of
recent cmake refactoring and needs to be fixed.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
This moves all build options to their own file to clean up the main
CMakeLists.txt. In addition, this upgrades the minimum required CMake
version and changes the build to use CMAKE_MSVC_RUNTIME_LIBRARY rather
than hardcoding the MSVC ABI flag.
SDL2 now comes with a cmake find_package() module, so we will use it
instead of this one that came from someone's github a decade ago.
Keep the fixup for libsamplerate with vcpkg and move it into the main
cmake code.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add clang when installing for CLANG* environments in MSYS2 because this
package is no longer included by default in the set of packages we
install.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
In preparation for including the finished FAudio support, link the cmake
FAudio target FAudio::FAudio when the feature is enabled.
Add pthreads to vcpkg deps and use the installed PThreads4W on Windows.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use cmake find_program() to find powershell.exe on Windows because
invoking `powershell` or `powershell.exe` without a path sometimes fails
for some reason. Use the standard location on Windows 11 as a hint.
Make the `pwsh` executable REQUIRED when installing vcpkg packages
on non-Windows.
Use find_program() to find the zip executable before downloading it on
Windows vcpkg builds.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Don't convert wx-config and wxrc into UNIX commands on a Windows host,
as the paths may have spaces in them and this will break the invocation.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Change sys-devel to dev-build to match current gentoo package naming
convention. Also add --ask flag to prompt for confirmation before
merging packages.
Signed-off-by: Mohamad Issawi <68k@segv.moe>
Update all URLs in the code and documentation to the new domain
visualboyadvance-m.org and also fix the date for the last release in the
CHANGELOG.md.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add libglu-devel to the list of dependencies for solus in installdeps,
this is required for wxWidgets and OpenGL.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Because of reported framerate issues with the SDL sound driver, remove
it and make XAudio2 the default on Windows and OpenAL the default
everywhere else.
Rewrite the "sdl" value from users' configs to the new default.
Make OpenAL a mandatory dependency as well.
Fix#709
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
In SoundConfig.xrc and DisplayConfig.xrc use the 'option' property
to fully expand the contents.
In NetLink.xrc add a label at the top of the dialog explaining that Link
will likely not work over the internet or over LAN.
Signed-off-by: Zach Bacon <zachbacon@vba-m.com>
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
On Windows, detect the host triplet for vcpkg and prepend it to the
triplet list to get the binary packages for vcpkg build dependencies
correctly.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Fix parsing of package list from the server html, which was ignoring
brotli because it was on the same line as another package. Use a
different method to extract the links that does not rely on them being
on separate lines.
Also fix the errors from `vcpkg list` on new vcpkg clones.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Describe the requirements for commit messages in this project in detail
and add a standard set of area prefixes.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Check for musl libc in Patch.cpp and use fseeko()/ftello() in that case
instead of fseeko64()/ftello64() as well, as the 64 variants are glibc
extensions.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Useful for app stores like KDE's discover and gnome software
Also updated to current specifications of appstream
Signed-off-by: Zach Bacon <zachbacon@vba-m.com>
Fix the logic in the vcpkg automatic support to return on non-WIN32 if
VCPKG_TARGET_TRIPLET is not defined.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Fix if(EXISTS var) statements to be written as if(EXISTS ${var}) because
the EXISTS operator does not accept variable references.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Since the new default VS vcpkg does not implement list, use list from
the powershell module to check for packages that are already installed.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Fix checking for already installed vcpkg ports in user vcpkg clones,
broken in 491f104b (build: better binpkg support for default VS vcpkg,
2023-11-30).
Checking for installed ports in the VS default vcpkg is still broken,
because it does not implement the list command.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
If the vcpkg clone exists in our preferred location, and VCPKG_ROOT has
not been passed to the build system, use it over the Visual Studio
default one, which is much more problematic.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Check for cl.exe in the PATH to also automatically enable vcpkg support.
Ignore git errors for default VS vcpkg, as it is not in git.
Get host triplet packages (build depends currently) for static triplets,
e.g. get x64-windows packages also when getting x64-windows-static
packages. This helps with the default VS vcpkg too, as it cannot run
regular install commands for build deps.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Make the vcpkg triplet inferring code only run on WIN32 explicitly, and
make all inferred triplets -static, not only when BUILD_SHARED_LIBS is
FALSE.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Fix the Linux-specific date command in the cmake code, and skip the ABI
check for vcpkg, because it is failing for some reason on Linux+vcpkg.
The resulting executable works perfectly.
This should also help on mac, I will test this later.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Fix the regex against the file listing module on the server for the
vcpkg binary package list.
Also replace all the dashes in versions with periods for comparison
purposes.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use the new code in the powershell module for vcpkg binary packages to
install the downloaded binary packages in dependency order with build
dependencies so that the database is not corrupted at any point in the
installation process or after.
Also remove the build binary package directory after installation, so
that all the previous packages are not reinstalled if a package is
updated on a subsequent run.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Read the revision from the vcpkg binary package zip file names and from
`vcpkg list` and use them in version comparisons.
Also fix up the indentation a bit.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add a Visual Studio build workflow to the CI, test building using ninja
(msbuild support needs to be fixed) for both 64 and 32 bit.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Now that there is a task on the Windows build VM to upgrade all vcpkg
ports and generate packages, update the cmake vcpkg code to install
them.
This is a working prototype implementation, all of this will require a
significant amount of further work.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
The GameArea was setting incorrect minimum size during initialization
due to the MainFrame not being entirely loaded, this caused the
MainFrame to not be resized properly on initialization. Resetting the
MainFrame minimum size after everything has been loaded fixes the issue.
This also changes MainFrame to ignore events sent before initialization
is complete, which should speed up startup a bit.
Fixes#1186
Previously, the status bar was always shown at startup, even if the
status bar had been previously disabled. This fixes the issue by hiding
the status bar when it is first set up, if needed.
The nonstd:: implementation of nonstd::variant was causing a link error
in the Debug configuration on MSYS2 CLANG64.
Set the macros for choosing the implementation of both nonstd::optional
and nonstd::variant to the std:: forwarding behavior on all platforms
other than macOS.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Also added the joystick plug, however it doesn't autoconnect.
to autoconnect manually you'll need to use snapctl
Permission will be asked by the snapcraft forums to allow it to autoconnect
Signed-off-by: Zach Bacon <zachbacon@vba-m.com>
Remove the suggested project config in favor of a suggested global
settings.json configuration change to use ninja and automatically run
cmake.
The other parts are all automatic now and don't need to be mentioned.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Followup on d8d3ee2b (build: remove unneeded ffmpeg/sfml deps for macOS,
2023-10-20). Also remove the link flags for these deps in the cmake
code, otherwise linking fails.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use the wxString-returning form of wxRegex.GetMatch() because the bool
form always returns true if the initial match succeeded, causing every
hat direction in the config to be interpreted as north, the first
condition in the if statement.
Fix#1192
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Remove all extra dists for ffmpeg deps since we only use core ffmpeg,
adding those in the first place was a mistake.
Remove libogg and liborbis and stop building sfml-audio, since we only
use sfml-network.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Bump openssl, curl, glib, sdl2, sfml, wxWidgets and ffmpeg.
Add support for DIST_INSTALL_TARGETS in order to use `make install_sw`
instead of `make install` for openssl because installing the man pages
and symlinks to them is very painfully slow with my install code. It's
even more painfully slow with whatever whoever did to my macOS virtual
machine.
Add `brew unlink openssl@3` in the brew setup code because someone broke
my compiler and it's not giving precedence to the include directories
passed on the command line, breaking the build.
Remove `-stdlib=libc++` from compiler flags. This was only necessary
when using a 10.7 macOS target, which has both libstdc++ and libc++,
libc++ being the newer and current distribution of the C++ standard
library for clang and macOS. We are now using a 10.10 macOS target which
does not have the old libstdc++, and this compiler option no longer
exists, causing a build failure in glib due to -Werror and an unused
command line option warning.
Remove my patch to link gettext statically for glib, this has been fixed
in the newer versions.
Install meson using pip in the python3 POST_BUILD instead of using a
dist.
Add the variables MAKE and MESON to point to the respective invoking
commands.
Check for /usr/bin/perl before /usr/local/bin/perl, the brew perl no
longer works but the macOS perl does.
Fix overwriting meson with a symlink when meson has already been
installed.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Start Network Link is not allowed while Local mode is selected, but
state change of Local mode was ignored until an option which triggers
EnableNetworkMenu() was selected.
Removed EnableNetworkMenu() from the Configuration option because it
doesn't change anything related to Link menu state.
Add references to frameworks being linked to `buildInputs` in
`default.nix`. Remove `-framework System` from `wxWidgets_LIBRARIES` in
the cmake code as it's not necessary and nix does it have it in
`darwin.apple_sdk.frameworks`.
TODO:
Debug build currently builds and runs. Release build builds but does not
run because of a problem with the dylib bundling.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add openal, which was missing, and pcre2 which is required by glib,
which is an indirect dependency.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
On initialization, if wxWidgets was compiled without EGL support, check
in environment variables if running under Wayland and if so tell GDK to
prefer using an X11 backend, causing the program to launch under
xwayland.
Fix#1028
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
In doMirroring() do nothing if the ROM size is greater than 32MB. This
fixes these ROMs automatically working without disabling mirroring in
settings.
Fix#1046
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Update the default.nix, which is used on nixOS and other nix
installations for loading the build dependencies into a shell for
building.
Update the wxWidgets package to wxGTK32, the current version.
Add an if statement to check for macOS and load the right package set
for it.
Building with nix on macOS does not currently work, but the build
dependencies do work now.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Change CI actions to a matrix with cmake options, for both release and
debug builds, with ENABLE_LINK=OFF and ENABLE_SDL=ON configurations, for
all 3 runners.
Also add both g++ and clang++ to the matrix for the Ubuntu runner to
test on clang.
Disable the macOS workflow for now because brew is failing to install
dependencies.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
The NO_LINK build had bitrot and was no longer building. This fixes the
issue by properly disabling Link-related code, including unreachable
functions when the project is built with ENABLE_LINK=FALSE
Update installdeps for Debian to find the new version wx packages, but
still use the -gtk3 variants on very old versions of Debian.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Previously, MBC7 EEPROM was saved at address 0xa000 in memory, rather
than inside the `gbRam` data buffer. This was inconsistent with other
mappers, resulting in issues like the EEPROM data being cleared on
`gbReset`.
Fixes#1173
Fix Mac build regression caused by 2407923f (build: fix cmake version
warnings, 2023-08-26) due to vbamcore and vbam targets using C++11 but
no longer being compatible with it.
When cmake_minimum_required() was set to a much older version, the
CXX_STANDARD property for vbamcore and vbam were ignored.
With the change mentioned above setting a higher
cmake_minimum_required(), the -std=gnu++11 flag started being passed when
compiling these two targets, making them fail due to recent changes no
longer being C++11 compatible.
Set cmake_minimum_required() to 3.8.2, the first version of cmake
supporting C++17, remove the CXX_STANDARD and CXX_STANDARD_REQUIRED
properties from these two targets, and set CMAKE_CXX_STANDARD to 17 to
set this property to C++17 for all targets in the project.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
To fix some cmake dev warnings in recent cmake versions, move
cmake_minimum_required() to before project() and set the minimum
required cmake version to 3.5.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Since Wii and Wii U are both big-endian systems, we need to call in the Makefile for Libretro cores that these must use big endian code for be able to work, otherwise the emulation will just give a white screen.
Fix by Ploggy, many thanks to him.
Since Wii and Wii U are both big-endian systems, we need to call in the Makefile for Libretro cores that these must use big endian code for be able to work, otherwise the emulation will just give a white screen.
Fix by Ploggy, many thanks to him.
Separate writing the version into the Info.plist on macOS into a
separate action from the online updates Sparkle framework into a
separate POST_BUILD action because we are not using Sparkle for macOS
builds right now due to codesigning issues.
Also sort tags by reverse tag name in the cmake git version extractor
because a tag was rewritten.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
CMAKE_CROSSCOMPILING is true when building arm64 on an x64 host, so
ignore this on MSVC.
Eventually we want to run osslsigncode through wine when cross compiling
for win32 on other platforms, or use the native signtool.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Check if the OpenGL context is valid on every operation, and if not
re-initialize it. Also rebind the textures every time the frame is
drawn.
Also rename the SetCurrent method to SetContext, which is clearer.
Fix#643Fix#767Fix#840Fix#843
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Make a bool SetCurrent() wrapper over checking the wxGL_IMPLICIT_CONTEXT
define and executing the appropriate behavior to set the OpenGL context.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Change the cmake code to install the translations gettext .mo files into
the .app bundle for non-release builds too.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
First launch would fail because wx does not create the configuration
directory by itself if it does not exist.
This also fixes an incorrect menu option.
Update glib/gvdb to fix a compile error with newer clang compilers.
Add link flags for ffmpeg to link the static libraries and frameworks it
needs.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
The lz77 uncompresssion software BIOS implementation was exiting early
when uncompressing data, if the overall length was larger than
advertised in the function parameter. However, real GBA BIOS does read
further than the advertised length, so we do here too. This fixes
Advance Wars title screen.
This also adds a SoundDriverVSyncOn implementation, silencing an error
for some Shrek games, though they still cannot properly boot with an
emulated BIOS.
Fixes#789
* Removes wxAcceleratorEntryUnicode and assorted arrays in favor of a
new class, `config::Shortcuts`, which handles UserInput assignment to
commands and resolution at runtime. `config::Shortcuts` also handles the
INI user configuration in a backwards-compatible way. Runtime
resolution of UserInput to command is also now logarithmic rather than
linear.
* The same shortcut can no longer be assigned to 2 different commands,
which fixes#158.
* Moves the `AccelConfig` dialog to its own dedicated class.
This replaces all uses of wxJoyKeyCtrl with a new custom widget,
UserInputControl. Internally, this class keeps track of UserInputs
associated with the current control, allowing direct access to the
UserInputs, rather than going through string conversions.
Acceleration handling is simplified by going through UserInput -
converted to the key, mod, joy triplet for now - rather than handling
string comparisons.
Add some fixes for building on macOS Homebrew.
- Set ZLIB_ROOT because zlib is now keg-only. Unfortunately the cmake
warning about policy CMP0074 cannot be suppressed because of some kind
of cmake bug.
- Update FindFFmpeg.cmake from:
https://github.com/snikulov/cmake-modules/blob/master/FindFFmpeg.cmake
, this fixes a problem with FFmpeg not being found.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
The `wxAcceleratorTable` for the `GameArea` panel was initialized with an
array of `wxAcceleratorEntryUnicode`, while the API calls for an array
of `wxAcceleratorEntry`. This resulted in the array not being properly
interpreted by the `wxAcceleratorEntry`. This fixes the issue by using
`wxAcceleratorEntry` to instantiate the array.
These can be accessed via the global gbCartData object. In addition,
this cleans up gbMemory to remove dead code that was used as a
workaround for ROM hacks.
We rely on the rom size in the cartridge header as a proxy for the RAM
size. Only 3 cartridges exist that use MBC7, Korokoro Kirby / Kirby
Tilt'n'Rumble and Command Master. Both versions of Kirby use a 256 bytes
EEPROM while Command Master uses a 512 bytes EEPROM. There does not seem
to be any other way to reliably get the EEPROM size for MBC7 cartridges.
Some MBC7 cartridges use 512 bytes EEPROM rather than 256 bytes. For
compatibility with older versions, we keep saving and loading 256 bytes
of EEPROM for every MBC7 cartridge. TODOs have been left to figure out
how to identify the EEPROM capacity properly.
* Removes all of the per-mapper helper functions in favor of an
iovec-like structure that is set on ROM load and ROM patch.
* Changes the MBC7 RAM size to 256 bytes, which is what the cart
actually uses.
* Works around issues with homebrews by overriding some of the header
data. For instance, battery is disabled if a cart specifies a battery
but no RAM and no RTC.
Test: This was tested with every known RTC/RAM/Battery variations by
creating a battery file before these changes and checking that the
battery file is still loaded properly with these changes applied. The
reverse was also tested to ensure compatibility.
* Simplifies most of the GB save/load state code and changes many
of the global variable uses to go through gbCartData instead.
* Changes all battery reads to use gzFiles. This seems to have been an
oversight in an earlier refactor of the code.
* Removes some unused variables and stops exporting internal-only
functions in GB.cpp/gb.h.
Breaking change: Cartridges with no mapper, but a save battery should
now properly save and load changes. However, this type of cartridge has
not been used in any commercially released software for Game Boy so the
exact intended behavior is speculative.
Add MOVE_START/MOVE_END events to detect when the window is moved or
resized and pause sound on Windows to prevent the DirectSound driver
from looping.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Update the Visual Studio build configurations in CMakeSettings.json to
remove dynamic builds and add RelWithDebInfo.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Make some tweaks to the cmake files to support
CMAKE_BUILD_TYPE=RelWithDebInfo, release with debug information for MSVC
vcpkg builds.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
* Moves most directory settings to g_owned_opts.
* Converts the DirectoriesConfig dialog to the new structure.
* Various includes clean-ups.
Breaking change: Loading a GB/GBC/GBA ROM when the ROM directory setting
is unset for that platform will now populate the per-platform ROM
directory setting.
Further testing showed some limitations with the current GB header
parsing. Many homebrew and some licensed cartridges do not follow the
expected format. In particular, the manufacturer code used in the "new
format" is not always used properly.
Some mapper flags seem to not actually exist in practice. These have
been documented as comments.
The header parsing code was creating string objects with '\0' bytes,
this is now properly sanitized.
The destination code flag was not being set properly. This has been
fixed.
This adds checks for every allocation failure in the core Game Boy
emulator. In addition, this replaces some magic values defined
constant expressions and removes an unused function.
This also removes asserts for failed allocations in GB.cpp, they now
report a failure to the caller.
Add pkgconf to list of vcpkg deps. We are not using it right now for
vcpkg builds, but it may be good to have available.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Pause only sound on menu open on Windows, and resume on menu close if
emulator is not paused.
This is to avoid DirectSound looping on menu open.
Fix#788Fix#1077
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
On Linux, when not running under Wayland and the app was built with XSS
(X ScreenSaver) support, optionally suspend the X11 screensaver when a
ROM is loaded and not paused.
Add a "Suspend ScreenSaver" checkbox in UI Settings bound to an option
to enable this feature, visible only under X11.
Defaults to off, as there is already a call to suspend the screensaver
on joystick input, which may be sufficient for the user.
TODO: Add necessary support for other platforms.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Bump the macOS target OS from 10.7 Lion to 10.10 Yosemite to use the
newest Wx, 3.2.2.1.
This also fixes dark mode support on macOS 13 Ventura.
Remove --enable-static from base CONFIGURE_ARGS because it breaks Wx,
and add it to DIST_ARGS where it's needed, libffi, libicu and libx264.
Make the necessary adjustments to build the new Wx and a couple of other
minor fixes.
Fix#1102
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
This adds a new class, gbCartData to do all of the GB/GBC header parsing
in a single location.
Breaking change: ROMs advertising a 2 KiB RAM size now properly only
have 2 KiB allocated for RAM, whereas it used to be 8 KiB. This was
tested with the one aftermarket ROM making use of this RAM size
(Quartet), with no issue. Save files and save state files should still
be compatible since the RAM was saved with the correct 2 KiB size.
Some software (like the EU version of Digimon Racing) relies on the
SIOCNT register being properly updated when no cable is connected.
Otherwise, they risk getting stuck in a loop waiting for an update on
the SIOCNT register.
This changes all of the options handled by the GameBoyConfig dialog to
use the new Option type. This also fixes a number of small issues
related to palette handling and GB emulation:
* Modifying the custom GB palette no longer incorrectly applies to GBC
and SGB modes.
* Loading a GB save state (not GBC or SGB) properly applies the
user-defined palettte and not the one in the save state.
* The GBC core now accepts .gbc BIOS files.
Finally, this modifies and renames wxFarRadio to widgets::GroupCheckBox.
In addition GroupCheckBoxes can now be loaded and fully configured from
the XRC file rather than having to be manually configured on dialog
initialization.
This game cart may have a flashcontroller but no flashram onboard, the game automatically goes down the Flash Type path and hits a stackoverflow at cpuSaveGameFunc after cpuSramEnabled returns as false
I'm not sure of the specifics, but with this change it seems to avoid this condition.
I have tested a number of titles that create Sram, 512 and 1024Mbit flash and they all still seem to just fine.
Check if CMAKE_BUILD_TYPE is false and not just empty string, as it is
some kind of other empty value in the default vscode build and the check
fails.
If CMAKE_BUILD_TYPE is unset, default to Debug, which is what vscode and
most things expect as the default CMAKE_BUILD_TYPE.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
The previously used algorithm was too aggressive. This fixes the issue
by using the last second data and using a more gentle adjustment curve
to prevent huge changes in frame skipping.
Fix some more strings marked for translation in the source code to be
more correct and easier to localize.
References #1071#1029
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
This introduces a new INI config option called "IniVersion". Whenever
default values change or options are renmaed, the latest version number is
incremented and an update path is run.
This change also rewrites part of the initialization routine by adding
more safety checks before creating or reading the configuration file.
This also removes limits on the main window position so it can now be
negative. This is necessary on Windows where multiple screens to the
left and top of the main screen have negative coordinates. A check at
startup ensures we always restore the window within the drawable area.
This introduces an OPTION macro, as well as assignment operators and
convenience conversion operators to make it easier to treat the
OptionProxy object (renamed from Proxy) as a variable.
This removes the global accessors for individual options in favor of a
proxy template class with a simpler per-type API. This adds compile-time
checks to validate that the right option is used with the right type
when accessing it directly.
Options used by the core emulator were set with global variables. This
moves all of the options used by the core emulator into a new struct,
shared by all 3 frontends.
Fix some source strings in the source code that are marked for
translation to be more formally/grammatically correct and easier to
localize.
References #1029
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
The DisplayConfig dialog had a few issues:
* The OK/Cancel buttons were not working as expected. The configuration
options would be immediately written whenever some control values were
changed. The configuration options are now properly being set on a
click to OK, and ignored on a click to Cancel.
* The X button works again.
* There is now proper validation for the Display Scale option,
validation ensures that the value is in the right range and incorrect
data can no longer be input in that field.
* The Direct3D option is now properly enabled on Direct3D builds.
* Clean-up ConfigManager options
Many of the options in ConfigManager were not actually used.
* Some options are only used by wx, they have been moved to gopts. In
addition, the type of the option has been changed to "bool" when
applicable.
* Some options are only used by SDL and do not have a corresponding
configuration option, they have been moved to the SDL implementation.
* Some options are not used at all, they have been removed.
Fix rvalue variable declarations in be1e5ca1, the && associates with the
variable, not the type.
This has no effect on functionality.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Move ru.po to ru_RU.po because it is the more complete translation, and
the latter is checked first.
Fix#1057
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
When executing the EGL subsurface move backport fix, check for loaded
library version < 3.2.2 so as not to execute an unnecessary EGL
subsurface move operation on versions which will already have the fix.
References #1028
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
A regression from #1008 was identified as the root cause for #1050 and
fixed in #1051. This is a follow-up that changes the constants used
for `sineTable` to be unsigned hex, which fixes warnings in MSVC
without breaking changes.
Bug: #1003
Enable severe warnings for MSVC release builds with /W1.
Disable macro redefinition warnings explicitly with /wd4005.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Silence output of nuget commands used to get gettext tools for the
Windows build.
Remove Objective-C++ source files (.mm extension) from the list of all
sources passed to xgettext to silence the warning about the file type
being unrecognized. These do not have any strings that need to be
translated.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
It seems the GitHub Actions macOS image has a conflicting python in
/usr/local, invoke:
brew -v install python
brew link --overwrite python
, before installing dependencies.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Adjust cmake code to support building a Windows arm64 binary on a
Windows x86/x64 host.
Add /EHsc to MSVC compiler flags for exception unwind support.
Check VCPKG_TARGET_TRIPLET in Architecture.cmake to set the appropriate
cmake variables for cross-compiling for arm64.
Add MSVC_x86_Host_Compile.cmake script, used from HostCompile.cmake, to
adjust the path of the cl.exe compiler and ENV{LIB} to build a C program
for x86 when cross-compiling, necessary for the bin2c utility.
Use wxrc from dependencies submodule when cross-compiling, because the
cross wxrc executable cannot be run on the host.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
This reverts commit 1ac7ac999b.
The %% sequence turned out to not be dealt with specially by gettext
tools.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Check for the condition where the windowing system has wayland support
but not wayland EGL support for wxGLCanvas in wx, in which case the
Simple renderer must be forced.
This is currently how the wx packages are built on Fedora.
Refer #1028
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Disable the EGL subsurface move backport for Wayland GLCanvas if the wx
config sets wxUSE_GLCANVAS_EGL=0 (off.)
This fixes the build failure on Fedora. To fix the functionality,
however, they need to enable the EGL GLCanvas in their wx builds.
Also use a different hack to access the private wxGLCanvasEGL member
using template instantiation instead of redefining a keyword as a macro.
Refer #1028
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
For Fedora ./installdeps support, install either wxGTK-devel or
wxGTK3-devel, depending on which has a higher version.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Disable the Sparkle online updater for the mac build because it requires
10.13 and we currently only build for 10.7.
Once I add a newer macOS build, I will reenable it for that build.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add a few translation markers for strings that are translated in the
wxWidgets catalogs, which we do not pull yet.
Also change the string "% of normal:" to "percent of normal:" because
the percent sign was causing an error in poedit.
Fix#1029.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
On Windows, StrawberryPerl tools and libraries exposed in the PATH
environment variable can pollute and break the build, remove any such
entries for WIN32 as a startup cmake action.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
The MSVC linker can now apparently link MinGW .a static libs too, and
StrawberryPerl pollutes the build with its own.
Set CMAKE_FIND_LIBRARY_SUFFIXES to .lib only when MSVC is true for
static builds.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Sometimes vcpkg calls the SDL2 library SDL2-static for static toolchains
and sometimes it doesn't, change FindSDL2.cmake to search some possible
library names in order of priority.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
cmake:
Add cmake option `DISABLE_MACOS_PACKAGE_MANAGERS` to disable
automatically using macOS Homebrew, MacPorts or Fink.
Use `-Ofast` instead of `-O2` for default compiler optimization flags,
which enables `-ffast-math` among a few other tweaks. There is a lot of
controversy about this, but in our testing on MSVC with `/fp:fast` the
performance increase for this specific app is dramatic.
Update version regexps on the SFML headers in `FindSFML.cmake` to allow
for a variable number of spaces between the macro and its definition.
Update the version of the Sparkle update checker framework for macOS
from 1.23.0 to 2.3.0-beta.2, and add a command to the cmake commands for
copying the framework to the `.app` to delete it first if already
copied.
Builder dist changes:
Updates:
dist old v new v
==============================================================
xz 5.2.4 5.2.6
openssl 1.1.1f 1.1.1g
curl 7.65.3 7.85.0
ccache 3.4.3 4.6.3
cmake 3.19.4 3.24.1
autoconf 2.69 2.71
autoconf-archive 2017.09.28 2022.09.03
libtool 2.4.6 2.4.7
help2man 1.47.5 1.49.2
libiconv 1.16 1.17
gsed 4.4 4.8
bison 3.0.5 3.8.2
texinfo 6.5 6.8
flex e7d45afc ea6493d9
libicu 65_1 71_1
nasm 2.14.02 2.15.05
pcre 8.41 8.45
libffi 3.2.1 3.4.2
libxml2 2.9.12 2.10.2
libxslt 1.1.33-rc2 1.1.37
XML-SAX 0.99 1.02
expat 2.2.4 2.4.8
libjpeg-turbo 2.0.4 2.1.4
libtiff 4.1.0 4.4.0
freetype 2.10.0 2.12.1
libgd 2.2.5 2.3.3
liberation 2.0.1 2.1.5
urw 91edd6ec 20200910
graphviz 4bf0ec9b 5.0.1
python2 2.7.15 2.7.18
python3 3.9.1 3.10.6
swig 3.0.12 4.0.2
doxygen 1.8.14 1.9.5
bakefile 33c270a5 7a218d89
XML-Parser 2.44 2.46
ninja 1.9.0 1.11.1
meson 0.51.2 0.63.2
glib 2.62.2 51251940
libgpg-error 1.41 1.45
libgcrypt 1.8.5 1.10.1
libsecret 0.19.1 0.20.5
sdl2 2.0.10 2.24.0
flac 1.3.3 1.3.4
libogg 1.3.4 1.3.5
libvorbis 1.3.6 1.3.7
harfbuzz 1.7.5 5.1.0
sfml 03375688 2.5.1
shared-mime-info 1.9 2.2
wxwidgets 9cc0c9a0 31720e1e
graphite2 ce0e793f 425da3d0
xvidcore 1.3.5 1.3.7
fribidi 1.0.1 1.0.12
libgsm 1.0.18 1.0.22
libmodplug 5a39f591 d1b97ed0
libopencore-amrnb 0.1.5 0.1.6
snappy 1.1.7 af720f9a
speex 1.2.0 1.2.1
vidstab 1.1.0 90c76aca
libvo-amrwbenc 0.1.3 3b3fcd0d
libass 0.14.0 0.16.0
libbluray 1.1.2 1.3.2
libvpx 1.8.1 1.12.0
libx264 20190913-2245 f7074e12
libxavs distrotech-xavs-git 8300fbf4
libzmq 4.2.2 4.3.4
ffmpeg 4.3.1 5.1.1
Removed dists:
dist ver
=========================
zlib 1.2.11
pkgconfig 0.29.2
docbook5.0 5.0
libwavpack 5.1.0
Added dists:
dist ver
========================
zlib-ng ce01b1e4
zstd 1.5.2
hiredis 1.0.2
pkgconf 1.9.3
pcre2 10.40
docbook5.0.1 5.0.1
docbook5.1 5.1
Changes:
Update all non-working dist URLs.
Replace zlib 1.2.11 with a recent zlib-ng built with `--zlib-compat`.
Add zstd and hiredis, new deps of ccache.
Replace pkgconfig with pkgconf.
Use both pcre1 and pcre2.
Remove the libxml2-python dist alias and rebuild libxml2 `--with-python`
and `--with-python3` after python 2 and 3 have built.
Remove libwavpack as ffmpeg 5 no longer uses it as a dependency.
Builder core:
Rename some of the directories and files to be a bit nicer.
Add `-Ofast -march=core2 -mtune=generic -pipe` to the global
`{C,CXX,OBJC,LD}FLAGS`. These are the optimization settings used by
default in the project as well, while `-pipe` significantly reduces
build time by making the compiler use pipes internally.
Add `-DFLOAT_APPROX` to the global `{CPP,C,CXX,OBJC}FLAGS` because we
are now using `-Ofast` and consequently, `-ffast-math`.
Set the `LIBRARY_PATH` variable in the global environment.
Make some adjustments for the new dist versions and make some other
improvements.
macOS builder fixes (tested on High Sierra 10.13 and Catalina 10.15):
Add support for predefined BUILD_ROOT and append BUILD_ROOT_SUFFIX.
Allow pre-defined CHECKOUT directory for building the project sources.
Sanitize `PATH` before build to remove `/usr/local` etc., use
/usr/local/bin/brew explicitly for deps instead.
If llvm and clang is installed from nix or brew, prepend the path of the
highest version found to `PATH`.
Remove `-lm` from build environment as macOS has never had an `m` math
library and this causes problems in some config checks.
Add LLVM `libunwind` from the LLVM archive.
Add a patch for `glib`'s `meson.build` to statically link
`gettext`/`libintl`, adds `-liconv -framework CoreFoundation`.
Add an extra location to check for `stdint.h` in XCode.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
* Add convenience direct accessors to individual Options.
* Move BasicOptionObserver to a separate header and allow it to
observer multiple options. This also removes the include for
"config/option.h" for using this observer, reducing build time.
* Never skip the "Plugin" option when changing filters. This is
already handled properly in the GameArea class. If the plugin is
unusable, GameArea resets the filter to the default value.
* Make the OptionID names slightly less long and fix the inconsistent
naming in the enum.
Fix regression in ea2a929f, which broke x11 support by not checking for
Wayland when making the Wayland EGL subsurface move call.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Backport 800d6ed69b from wxWidgets git to fix resizing the
`GLDrawingPanel` in Wayland using the EGL `wxGLCanvas`.
Also rename `IsItWayland()` to `IsWayland()`.
Fix#1028
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
When processing the `OnSize` event in the `GameArea` and calling the
embedded `DrawingPanel` `OnSize` event, call `Layout()` afterwards.
This seems to improve the resizing behavior of the EGL `wxGLCanvas`
`DrawingPanel` on Wayland.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
This adds a generic Observer interface to config::Option. To
demonstrate its intended usage, the Display Configuration dialog and
the options it controls have been updated to be entirely handled via
the config::Option class.
Implementations for wxValidator are used to validate the flow between
the UI and the underlying Option. In turn, modifying the Option value
triggers all of its observers that should then do what they need to
do.
Rather than explicitly calling all of the needed methods after
modifying a global option value, the UI elements that need to be
notified when an Option value is modified will be notified via their
observers. Runtime assert checks are put in place to prevent infinite
recursion if an observer attempts to modify an Option while handling
the observer callback.
Once all uses of Options have been updated, we should get into a state
where the following will be true:
* cmdevents.cpp will no longer rely on the application state.
* All dialogs will have been moved to specific implementations,
reducing the size of guiinit.cpp
* update_opts() will no longer need to be called and will be removed.
This will then make it easier to update accelerator handling to be
done with config::UserInput.
Bug: #745
Destroy the DrawingPanel on vsync checkbox toggle so that it is
re-created with the vsync option in effect.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add support for `eglSwapInterval()` to enable or disable VSync on
Wayland.
Also add status messages for enabling or disabling VSync, for both EGL
and GLX.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
wxWidgets 3.2+ has experimental `wxGLCanvas` support for Wayland EGL,
enable it for those versions.
The `glXQueryExtensionsString()` method for enabling or disabling vsync
does not work on Wayland currently, so it's disabled.
TODO: Enable/disable vsync on Wayland EGL.
Fix#1028.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
* Remove the custom handling for pre-3.1.4 builds on Windows since
both the mingw and msvc builds now use 3.2.
* Remove wxDPIChangedEvent handling, since this triggers a resize,
which has the same effect.
* Implement main/WinMain ourselves, rather than relying on wxWidgets
macros. This allows us to initialize the console earlier in the
process.
* Add an explicit dependency on the manifest file to trigger a link
when it is modified.
This converts the HiDPIAware into a series of helper functions, using
wxWidgets native support starting with wxWidgets 3.1.4. Custom
implementations are provided for Mac and Windows.
In addition, this fixes a few issues with the Windows build:
* Use the same defines variables in the MSVC and MinGW builds, with
g++ and Clang.
* Add a custom manifest for the application, indicating full DPI
support and support for recent Windows versions so the application
will no longer run in compatibility mode by default.
* Manually spawn a console in debug builds if none is attached and
always use the parent console if it is available otherwise, even in
release builds. This also removes the /subsystem:console linker
argument.
The static lib is now called `SDL2-static.lib` and the debug version is
called `SDL2-staticd.lib`.
Adjust our `cmake/FindSDL2.cmake` for the new vcpkg naming convention.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Remove constexpr in user-input.h as LLVM 13 complains that it is
illegal.
Use variant-lite as nonstd::variant and related types as some variant
functions are macOS 10.14 Mojave only.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
* Remove the wx prefix and make UserInput a class in the config
namespace.
* Make UserInput constexpr-constructible. This should reduce program
startup time by having the compiler pre-allocate UserInput objects.
* Change initialization of UserInput objects to be made via
constructor. A previous approach would have limited creation of
UserInput objects to a few places but that proved unworkable in the
long run.
* Changed the string to enum conversions to be built at runtime from
the existing constant array rather than redefining the strings.
* Fixed an issue in the initialization of the `checkable_mi` array.
A test had been mistakenly removed during the refactor.
* Fixed an issue where changing a bool or int option would cause an
assertion error at runtime. Changed helper methods definitions to
use a pointer to a variable rather than take a parameter by
reference, clarifying the intent from the caller perspective.
* Fixed the `renderer` enum definition to properly exclude Direct3D or
Quartz2D depending on the platform.
* Various comment fixes.
This change introduces a new class to handle all of the INI options
data, VbamOption. A VbamOption represents a single option in the INI
file. It is not constructible outside of its implementation, which
prevents the initialization of incorrectly formatted options.
Internally, a VbamOption points to a global variable in memory, which
holds the value used at runtime. This is because various parts of the
codebase edit the global variable rather than going through a central
registry. This also means we need to separately update the INI values.
In the future, we may be able to convert all existing reads and writes
to the global variable to go through VbamOption. Individual UX elements
could link directly to getters/setters for a specific VbamOption rather
than have duplicate data.
VbamOption replaces the opt_desc struct and the global opts array. All
users of opt_desc and the global opts array have been updated.
This is a necessary preliminary change to better support a refactor of
accelerators, through wxUserInput.
Issue: #745, #158
Add default menu accelerator `CTRL+I` to `ChangeIFB` which is the menu
item to change the interframe blending algorithm.
CMD+I on macOS.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
When changing the interframe blending algorithm via:
`Options -> Video -> Change interframe blending`
, show the short name of the algorithm instead of the list number in the
OSD.
Store a pointer to the wxChoice of interframe algorithms read from the
XRC for easy access.
Shorten the names of the algorithms in the XRC selection list.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use namespace strutils:: instead of the `str_` prefix for the functions.
Remove `vec_find` as it's just an alias for `wxArrayString::Index(str)`
and is not a function on a string.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
On gcc/clang check that the -mtune=znver3 compiler flag is supported, on
Debian 11 it is not and this breaks everything.
If it is not supported fallback to znver2, znver1, skylake-avx512 then
skylake in that order.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
In the warning for detected translations source .pot changes, state that
the .pot will be automatically pushed to Transifex, instead of asking
the developer to do that, as they may not have access or the utilities.
The Transifex pull job has been updated to do this.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Make the wxvbam.pot output a top-level build target and the check and
warning message for developers a POST_BUILD command for it.
Broken by 60caad86.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Save the wxChoice* for the pixel filter name selection list in the XRC
and use it to display the filter name in the status message on pixel
filter cycle instead of the filter number.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Make translations.zip a dependency of the app and remove it as a
dependency of other commands/targets that do not use it as a source.
Silence the very spammy output of the zip program.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add static GetX11Display() function to get the app X11 Display* instead
of making the GDK/GTK calls in two places.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Pass DefaultScreen(display) as the screen number to
glXQueryExtensionsString(display, screen), this may work more reliably
for some configurations than always assuming screen 0.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Update doctest.h because the old version causes build failures on Linux.
Also move it from third_party/include/doctest to third_party/include.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Previously, wxJoyEvent surfaced the internal state of the joystick
changes, forcing consumers of this class to convert the values to the
mod and key values used in the rest of the code base. This streamlines
the wxJoyEvent API so the events sent to the consumers can be used
as-is. In particular, this allows us to remove manual generation of
"ghost" events in GameArea.
Breaking change: This has the side effect of disabling setting
diagonals from a joystick HAT as a discrete control. However, this only
ever worked with game controllers not compatible with the newer SDL
GameController API, since it handles HATs as 4 discrete buttons. For
compatibility purposes, these have been moved 1/8 turn
counter-clockwise - i.e. NE is now N.
Issue: #745
Fix the state of the File -> Play -> Start/Stop menu after playing a
movie by calling systemStopGamePlayback() when the playback stops.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add new format for recording VBA Movies that records inputs since the
time of the last input instead of the beginning of the movie.
Keep the extension `.vmv` the same, the format is determined from the
header of the file.
Make this the new default format for recording VBA Movies.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
On MSYS2, stop using the MINGW64 windres.exe Windows resource file
compiler instead of the CLANG64 provided one, because the CLANG64
windres.exe works correctly now, while using the MINGW64 windres.exe no
longer works.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Switch usage of std::optional to nonstd::optional for now because of an
error from the Mac builder script, I cannot reproduce the problem yet
but will try to fix it later, it may not be fixable when targeting 10.7.
The header is from:
https://github.com/martinmoene/optional-lite
.
Usage is about the same, to include:
`#include "nonstd/optional.hpp"`
Then use nonstd::optional and nonstd::nullopt instead of the std::
counterparts.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
This introduces abstractions for a game key (`wxGameKey`), a game
control (`wxGameControl`) and a common global handler for in-game
user input processing (`wxGameControlState`).
User configuration is changed from a vector to a map of `wxGameControl`
to a set of `wxUserInput`, which simplifies input configuration updates.
User input processing for in-game controls is now unified between
keyboard and joypad input, and is much faster in general since access
to game control state is now always logarithmic rather than linear.
This comes at the expense of slightly slower user input configuration
updates. However, in the worst case scenario, this is still done in
O(log(n)).
This removes all uses of `wxJoyKeyBinding`. However, some uses of the
key, mod, joy triplets remain and will be cleaned up in follow-up PRs.
Issue: #745
Previously, a manual polling of every joystick was performed every 25ms,
resulting in many CPU resources being wasted. This seems to have been
put in place to deal with issues in SDL where joysticks connected after
SDL was initialized did not fire SDL events properly. From manual
testing, this issue seems to have been fixed.
This also fixes a bug in handling of legacy joystick hats, where an
incorrect conversion for the event value was performed.
Finally, this fixes minor typoes and renames
`wxSDLJoyState::ProcessEvent()` to `wxSDLJoyState::ProcessSDLEvent()` to
suppress a warning about a method override.
This introduces a new abstraction for any user input. The long-term goal
is to replace every usage of "custom" {key, mod, joy} triplets in the
code base with this new class.
This class implements comparison operators, allowing for faster access
in a set or as a key in a map, compared to the vectors currently used.
Issue: #745
The actual package name for libsdl2 is libsdl2-2.0-0 not libsdl2-2.0 in
Debian/Ubuntu and probably others, and this only worked by accident
due to apt doing a regex search for packages.
Get the correct package for the latest version of libsdl2 from
apt-cache.
Also fix the other lib package searches via apt-cache to return the
latest version.
Resolve#882.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
* Add wxJoystick to abstract what was previously referred to as
|player_index|. This is a first step towards a larger refactor of
input handling.
* Remove "SDL" from types that are not directly SDL-related, namely
"wxSDLJoyEvent", "wxSDLControl".
* Rename "wxSDLJoy" into "wxJoyPoller". This clarifies the use of this
class.
Issue: #745
ccache supports MSVC now, so don't disable it for MSVC builds.
Remove the global RULE_LAUNCH_COMPILE property because it breaks
resource compilation on MSVC and just use CMAKE_CXX_COMPILER_LAUNCHER
etc..
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Thanks to @ZachBacon in 1e0eea3c (recording: fix ffmpeg5 compat, 2022-03-18) the build works with ffmpeg5 from brew.
Update build instructions from installdeps to not disable ffmpeg
anymore.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Replace wxmac obsolete package with wxwidgets.
Use brew install -f (--force) to install all deps.
Unlink and relink gettext, wxwidgets and ffmpeg for every invocation.
Add -DENABLE_FFMPEG=FALSE to cmake invocation instructions because brew
has ffmpeg 5 and we cannot build with it yet.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use file(GLOB ${lib_name}*.lib) to detect the appropriate suffixes for
wx dependency libs, because the suffix keeps changing, sometimes there
is a 'd' added for debug builds and sometimes it changes to not adding
the suffix, this will make the code more robust and lead to fewer build
failures.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Stop setting the build_prefix* variables as they are no longer used and
relying on build trees being available would break /installed caches
etc..
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Probably fixes this in other environments as well, or breaks it.
Move the wxWidgets_LIBRARIES paths conversion to the already existing
normalize_wx_paths() function that was using a different method that no
longer works. This converts the variable to the right format before the
tests run, fixing the Wx OpenGL test.
For the ABI checks, wrap the function pointers for the minhook
trampoline API in reinterpret_cast<LPVOID>(&fp), why this is necessary I
don't know, and it may break on other compilers. The trampoline is used
to catch message boxes opened by Wx for fatal errors.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Search for wx-config-static for static builds first, and wx-config
otherwise, before trying any config and version suffixes.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Update installdeps and cmake to use windres from gcc binutils from
MINGW64 on MSYS2 CLANG64, because llvm-rc doesn't work sometimes.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use jpeg.lib instead of jpegd.lib for jpeg debug lib, it no longer has
the "d" suffix.
Fix all CMAKE_BUILD_TYPE checks for debug builds to either also check
for RelWithDebInfo or match "Debug" exactly.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Turn off ccache for vcpkg builds (this is only relevant to MSVC, where
ccache does not work yet.)
Throw an error if CMAKE_BUILD_TYPE is not valid or does not match case
exactly (to make comparisons simple.)
Add SetCompilerLinkerFlags.cmake lib with the functions:
add_compiler_flags()
For each flag passed in, add it to CMAKE_CXX_FLAGS and CMAKE_C_FLAGS if
not already present. Also clears all build-specific flag variables on
every call, if using this functions you must set build-specific flags
yourself.
add_linker_flags()
For each flag passed in, add it to
CMAKE_(EXE|SHARED|MODULE|STATIC)_LINKER_FLAGS if not already present.
Add remove_dupes() function to VbamFunctions.cmake from:
https://stackoverflow.com/a/41416298/262458
This is used to remove duplicate flags in SetCompilerLinkerFlags.cmake
described above.
Use the new functions to set compiler and linker flags for MSVC.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Update installdeps to support CLANG64/CLANG32 MSYS2 targets.
cmake:
Set POLICY CMP0060 to NEW to not convert full lib paths, this is the
default.
Stop disabling ffmpeg on WIN32+i686.
On MSYS2+clang add windows import libs to CMAKE_PREFIX_PATH.
For static builds on MSYS2 append full paths for static libs for tiff,
jbig and lzma to FFMPEG_LIBRARIES.
Add -Wno-unused-command-line-argument to all CFLAGS/CXXFLAGS so that
clang does not warn about gcc-specific options.
Enable -march/-mtune optimizations by default instead of only for
UPSTREAM_RELEASE.
Update find_wx_util() to search suffixes for WIN32 and add the "static"
suffix for static builds.
Remove all linker flags from wxWidgets_LIBRARIES and translate all wx*
libs as well as jpeg, tiff, jbig lzma and expat to full .a paths for
static builds.
Disable strutil tests on MSYS2+clang, currently does not build.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use:
/Ot /Oy /Ob3 /GF /Gy
, instead of /O2 for x86, this makes it not crash on ROM load for the
OpenGL renderer.
Supposedly /O2 is equivalent to:
/Og /Oi /Ot /Oy /Ob2 /GF /Gy
, but the documentation states that /Og is automatically enabled when
any other optimizations are enabled automatically. So this should make
absolutely no difference, yet it does.
For x64 use:
/O2 /Ob3
, this overrides /Ob2 from /O2 to use more aggressive inlining, VS 2019
is required for this.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
For MSVC, add the optimization flags:
/fp:fast /Oi
, to favor speed for floating point operations and use intrinsic
operations where possible.
For release builds also add:
/O2
. Use sqrt() instead of std::sqrt() in XBRZ for MSVC x64 just in case to
make sure it uses the intrinsic version.
Test build is reported to run much faster.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Builds translations.zip and nothing else.
This is for the nightly builder when only translations are changed.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
This is used by some hacked ROMs like Metroid II DX.
Add a config variable to enable the already existent core support for
this.
This conflicts with using a GB BIOS file, add checks and error dialogs
for this.
Also move including "ConfigManager.h" into "wxvbam.h".
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use the X86_64 variable instead of AMD64 for this architecture in cmake.
For our upstream binary builds, use -march=core2 -mtune=rocketlake for
X86_64 on macOS, -march=core2 -mtune=znver3 for X86_64 on non-macOS (not
currently used) and -march=pentium-mmx -mtune=core2 for the future
Windows XP 32 bit MinGW build.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Instead of suffixing release zip files with 32bit or 64bit, add an
architecture suffix, which would be one of:
x86_32
x86_64
arm32
arm64
Allow codesign to fail on mac without aborting.
Disable the interactive pause for gpg signing because there is no
passphrase anymore.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
m4: 1.4.18 -> 1.4.19, remove patches.
libxml2: 2.9.12
wxwidgets: master (3.0.5.1 on mac for 10.7)
Run script with brew bash.
Unlink brew wxwidgets before build and relink after because it conflicts
with the built version, this needs to be fixed.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add indirect dependencies that cmake complains about and remove ccache
because it currently fails to build on NixOS unstable.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
The present ini variable is from vbam 1.x and is behaviourally backwards where setting disablemmx to true actually enables mmx, 2.x builds should not be using the ini from 1.x for various reasons.
I don't know if this is right or not, but I am running an Arch system and tried running `./installdeps` and nothing happened. So I went into the script and figured that it got stuck in the `elif [ -f /etc/os-release ];` block. This file exists on Arch as well, so the block is executed, but arch is not listed in the `case`, so the script exited without doing anything. And it's only checking for pacman after that, so it never ran `arch_installdeps`.
Don't know if this is the 100% correct fix, but it's working for me now and should also catch cases like that in the future.
Add commands to delete the ssh-agent service, otherwise the installer
throws an error.
Add instructions for setting permissions on authorized_keys and private
key.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
- Minor refactoring, some variable name and type changes
- Remove unnecessary checks in clock latch
- Fix stuck in whitescreen after Hudson startup logo
- Fix Gamepak error message at initial load of game without prior rtc
data available to load
- Save the bare-minimum variable needed for rtc (saves only
Basetime/lastTime)
Savestates are broken due to the change in savestate struct size for
HuC3. Since save/load function also includes save data for other
non-active mappers, the change in size breaks every savesfiles being
made.
This PR refactors the HuC3 clock data struct to be separate from the
main struct, and then only added to save/load functions when HuC3 mapper
is used. This still breaks previous HuC3 states but other mappers should
now not get affected
Solution:
Savestate/LoadState should only include mapper data of current active
running rom, not all mappers even if they are inactive. This will break
every savefile but it would be better for the long run when changes are
neede to be done.
- SRAM support is already available, but the battery-enabled flag was
not enable for 0xFE (HuC3) rom types.
- Hookup rtc support based on local time. This would allow time to sync
when starting the game. You need to initially set the time first
though on first bootup (RTC support was based on gambatte sources)
Fix https://github.com/libretro/vbam-libretro/issues/95
Previously, this function returned -1 or "true" but wxWidgets
defines constants for the returned values for FilterEvent()
overrides so use these instead.
Add a `default.nix` with the list of dependencies.
Detect NixOS in installdeps and display the `nix-shell` command to
build.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Remove keychain unlock for codesigning, that doesn't work anymore, the
key has to be in the system keychain.
Use `zip -9yr` instead of `zip -9r` to make the .zip file of the .app so
that symlinks are preserved, this was creating a corrupted .app.
Don't build zip in the mac builder, use the system zip instead.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Update to latest versions of cmake, libxml2 (and libxml2-python),
graphviz, python3, libgpg-error, libx265 and ffmpeg.
Downgrade wxWidgets to 3.0.5 because newer versions require a 10.10
target but we are still targeting 10.7.
python3 has fixed linking to static openssl and libiconv/libintl
upstream, the only thing necessary now is adding -liconv -lintl to
EXTRA_LIBS.
It was necessary to override -std=gnu++17 with -std=gnu++11 for some
sources because of issues like register variables not being allowed in
C++17. This was done in EXTRA_CXXFLAGS.
c2man and graphviz were removed from the mac build for now, there are
issues with them with the newest build tools and they are only
documentation tools.
Make some other minor adjustments to get everything to build. A trivial
patch for ffmpeg also needs to be sent upstream.
The next step is automated mac nightly builds.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Since SDL 2.0.14, KMOD_GUI is no longer a macro but an enum value:
https://hg.libsdl.org/SDL/rev/15a0bc9612e9
So this code broke as the enum value doesn't satisfy `defined()`.
This bug was responsible for audio on Windows not working without
forcefully setting the audio driver to DirectSound.
The problem was that WASAPI (or whatever API SDL2 was choosing)
defaults to an incompatible audio specification (possibly F32 sample
format - I didn't check).
Despite the `audio` struct requesting the S16 sample format, SDL2 was
granted permission to use whatever format it preferred because it was
given the `SDL_AUDIO_ALLOW_ANY_CHANGE` flag.
To fix this, I've removed that flag, effectively forcing SDL2 to use
the audio specification VBA-M requires.
Add to the loud notes at the top of the issue template and README.md
added in dfa97d8a to test the nightly to also do a factory reset.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Followup on 98b2fb6e.
To make a one element of empty string list in cmake, you have to set the
variable to `";"`.
If it is set to `""`, a subsequent `list(APPEND ...)` will consider the
variable unset.
With this fix, `/usr/bin/wx-config` is tried first on Gentoo, as was
intended in 98b2fb6e.
The rationale for this is that on Gentoo, app-eselect/eselect-wxwidgets
links `/usr/bin/wx-config` to the user's preferred version of wxWidgets,
while on other distributions such as Arch, we want to check for the 3.x
gtk3 variant explicitly first.
Also add a modeline to `VbamFunctions.cmake`.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add a note at the top of the issue template asking users to test the
nightly or master before reporting an issue.
Add a note to the top of the README.md as well.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Remove the `find_package(unofficial-gettext ...)` invocation for vcpkg
as it is no longer required, the normal `find_package(Gettext ...)`
mechanism works.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Some allocators return a non-null pointer when calling *alloc with
zero size, that will segfault upon access. Check for the size parameter
before allocating anything to ensure that the breakpoint and trace
fields will stay null when size >> 3 or size >> 1 is zero.
This is a major refactor of the wxSDLJoy class.
* Move handling of SDL objects creation and destruction to its own
class. This simplifies the lifespan of SDL-related objects.
* Re-add handling of HATs. This is necessary for DirectInput
controllers.
* Rename the public API for wxSDLJoy to be clearer.
* Add documentation for every class related to wxSDLJoy.
Update and rewrite the Windows Native Development Environment section of
the developer manual.
Update list of Chocolatey packages and give Chocolatey usage notes.
Update terminal setup instructions.
Add sample PowerShell `$profile` and `.vimrc`.
Rewrite and streamline the short PowerShell tutorial.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Default to latest, which is bionic, for earlier repositories, match all
intermediate release code names.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
I'm not sure what purpose this currently serves but I know that it
breaks the build when CMAKE_PREFIX_PATH is set to something nontrivial.
Stop doing that.
Adjust compiler flags to use `-std=gnu++17` for gcc/clang instead of
`-std=gnu++11` and `/std:c++17` for msvc.
Remove Ubuntu trusty job from travis (it's too old.)
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Stop setting the 4 plane data pointers in recording audio frames to the
sample stream. This confuses the converter and makes it write the right
channel to both channels.
- Fix#723.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Prefer the `wx-config` from PATH on Gentoo, because that points to the
eselected wxWidgets build.
This is already done for Win32 builds.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Hopefully fix various bugs caused by not differentiating between SDL
joystick_index and SDL_JoystickID (the joystick instance id.)
On controller disconnect, disconnect and reconnect all configured
devices because the SDL joystick index may change, and this will update
the mapping.
Also fix creating a state entry for the configured joystick even when
it's not connected, add the controller/joystick name to the connected
message and increase the poll time from 10ms to 25ms.
- Fix#718.
- Fix#726.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Assume an archlinux-like distribution based on the existence of
`/usr/bin/pacman` as the last test.
- Fix#710.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Start the joystick polling timer on pause and stop it on resume, so that
accelerators bound to joystick events are still processed.
Followup on def5d3e4.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Followup on 7031c1d1, which for some reason removed the calls to stop
the timer when a game is loaded and restart it when it is unloaded.
Add the calls back.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Remove the `evthandler` member and `Attach()` method from `wxSDLJoy`.
Add the `GetJoyEventHandler()` method to `MainFrame`, which returns the
window in focus, or the panel if the option for joystick background
input is enabled.
Remove the handler parameter in `wxSDLJoy::CreateAndSendEvent()` and
call `wxGetApp().frame->GetJoyEventHandler()` to get the handler.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
- Joystick background input.
Set as enabled by default.
- Linux: `X11` and `Wayland` done.
1. `Wayland` does not allow to listen for keypresses for security reasons.
Discussion here: https://github.com/albertlauncher/albert/issues/309
2. For `X11` we can use `XQueryKeymap` to check keyboard state.
- Windows: done.
We use `GetAsyncKeyState` most significant bit to check if the key
is being pressed.
Followup on ff03bcc1.
Running wxrc from the build directory turned out to be unnecessary,
because the dlls were not there anyway, and we added them to the PATH.
And using absolute paths for the xrc sources puts them into the gettext
pot comments which is not what we want.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
This adds the command-line option `-c` or `--config` to specify a custom
configuration file.
Co-authored-by: Fabrice de Gans-Riberi <steelskin+github@gmail.com>
Do not link `SDL2main` on any WIN32, not just MSVC.
Define `WIN32_CONSOLE_APP` for Debug mode builds on any WIN32, not just
MSVC.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Remove generated files that are now written to the build dir instead.
Match any build directory from root.
Stop listing submodule and vcpkg.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Fix vcpkg upgrades to work with the current vcpkg master.
When upgrading zlib, remove all optional deps first, because everything
depends on zlib and this can overrun the appveyor 1hr time limit.
Make SFML an optional dep too, like ffmpeg.
Reduce the vcpkg install time limit to 20 minutes, otherwise it may try
to build wxWidgets and ffmpeg and overrun the 1hr time limit.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Make sure git is part of the base package list for Win32 builds.
Move the `git submodule update` out of `check_cross()` and into the
Win32 build sections.
Allow it to fail, in case the user is not using a git clone, the cmake
checks will produce an error if the subtree does not exist.
This fixes the problem with the git submodule update failing because git
is not installed yet.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
When doing a dynamic build, the wxWidgets dlls are needed by the wxrc
executable.
Invoke wxrc with the target triplet debug and release bin directory
prepended to the PATH, this is where the dlls are.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add a function to check if libogg is installed but libvorbis isn't, this
means it failed to upgrade libvorbis because libogg wasn't upgraded to
the newest port revision supporting pkg-config, see:
https://github.com/microsoft/vcpkg/issues/13037
In this case, remove libogg recursively and allow the install action to
reinstall SFML and all deps.
This will also fix building link support on appveyor for the time being.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Make `speedup_frame_skip` and `speedup_throttle` independent settings,
with `speedup_frame_skip == 0` when `speedup_throttle` is not in effect,
and `speedup_throttle == 100` when `speedup_frame_skip` is in effect.
This fixes a previously introduced bug where `speedup == true &&
speedup_frame_skip = X` was never enabled.
This also allows `speedup_throttle == 0` for no throttle and no frame
skip during speedup.
Also set the upper bound on `throttle` and `speedup_throttle` to `450`
instead of `600`, as the DirectSound driver does not support values
higher than that.
In the DirectSound implementation of `setThrottle`, for `throttle == 0`
use a `throttle == 450` frequency multiplier, because a zero frequency
does nothing.
- Fix#719.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
The el_GR, Greek (Greece) translation is empty, while the el, Greek,
translation is 92% done.
Remove el_GR from git and from transifex.
- Fix#721.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Instead of just checking if the submodule has been cloned, always update
it when cmake runs if git is available.
This fixes the problem of users' dependencies submodule clone never
getting updated with new changes.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
When the wxrc installed by vcpkg into tools was made with the non-static
wxWidgets, and the build is static, it will not find the wxWidgets dlls
and fail.
Use our own wxrc.exe from the dependencies submodule for the time being.
This is a temporary fix, a proper fix would be adding the dlls, if they
are installed, to the PATH.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Rename the joystick polling timer accessors and add a predicate.
Check it and make sure the timer is running in the input and accelerator
config dialogs.
- Fix#711.
- Fix#716.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
- Removing mapperSeconds and mapperLSeconds since both of these can be
zero at any time since they are seconds timer, not seconds since
epoch.
- This leaves only mapperLastTime as this is the number of seconds since
last epoch. If this value is zero, then initialize rtc.
It is now installed as `libexpatMD.lib` for release and
`libexpatdMD.lib` for debug and not `expat.lib`.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Fix the problem with vcpkg installs including both wxWidgets and ffmpeg
overrunning the one hour time limit, by making ffmpeg optional and only
building it if the other builds are under 30 minutes.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use the vcpkg installed wxrc, from a tools subdirectory, instead of
copying it out of the build tree.
Except when running on appveyor, for some reason the vcpkg wxrc does not
work there, so use our own from the dependencies submodule.
Support vcpkg mingw triplets, they don't work yet however.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
- This is done so we can poll inputs from one place all at once for all
player ports instead of calling the function multiple times for each player port.
Stereo buffer is not remade in the case of audio plugin
switch (only affects GBA, not GB). This results in a crash.
We need to remake the stereo buffer and reinit the pointers
in Gba_Pcm.output or they will be dangling, and lead to a
crash. Also, cleaning up the Multi_Buffer class a bit.
Just a hack to fix a problem with vcpkg upgrades, in this case the
version of the zlib port being too old breaks another upgrade, so we
will check if zlib is in the list of packages to upgrade and upgrade it
before anything else.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Don't disable ccache for msys+ninja anymore, since the mingw ccache
works now and there is no reason to use the msys ccache anymore.
Use RULE_LAUNCH_COMPILE only on cmake versions < 3.4.0, because this
currently breaks resource compilation with visual studio and the windows
native ccache from chocolatey, this needs to be fixed in ccache.
On cmake 3.4.0 and greater, set the variables
CMAKE_<LANG>_COMPILER_LAUNCHER instead. This has the effect of using
ccache for C, C++ and nasm, but not for the resource file, avoiding the
problem with visual studio, which has a more recent cmake. This must be
done before the project() call.
TODO: Currently the Visual Studio build with ccache from chocolatey
works correctly, ccache is being invoked from ninja, but no cache files
are being created. This is being followed up with the chocolatey package
maintainer and upstream if necessary. The resource compiler issue also
needs to be fixed upstream.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add the Catch2 headers to third_party/include/catch2.
Add Catch.cmake and CatchAddTests.cmake to cmake/.
Add unit tests src/wx/tests/strutils.cpp using Catch2 to test
src/wx/strutils.cpp.
Make some code changes to strutils.cpp to make the tests pass.
See src/wx/tests/CMakeLists.txt for how to set up unit test files; they
plug into the normal CTest mechanism in cmake.
The test binaries are written to the tests/ subdirectory of the build
directory.
Building the tests and enabling the CTest support can be turned off by
passing -DBUILD_TESTING=OFF to cmake, the default is ON, this is the
standard mechanism.
Start running ctest on travis and appveyor.
Move stb to third_party/include where Catch2 is now as well.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Build on bionic with downloaded stow packages in /usr/local.
f51e1ee4 is actually a fix for a wx with --enable-utf8 and NOT for a wx
with --disable-stl, as it turns out.
FreeBSD uses --enable-utf8, while Linux distributions generally don't.
Tested by reverting f51e1ee4.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Followup on baa0341b.
Reintroduce checking if a key is actually pressed in the panel OnKeyDown
event with wxGetKeyState(key_code).
Introduced in b0ec846 and removed in baa0341b.
wxGetKeyState() does not work on Wayland and does not work for Unicode
keys, support for which was introduced in baa0341b, which is why the
call was removed.
Add two static functions is_key_pressed(ev) and is_key_released(ev) that
return true under Wayland or if the key is Unicode, and call
wxGetKeyState() otherwise.
The reason this call was introduced in b0ec846 was to work around a bug
in some Linux distributions that caused spurious keyboard events to be
generated. The bug apparently still persists, see #689.
Because the two additional checks were necessarily added, the bug may
persist on Wayland, if it exists there, and for Unicode keys, but will
be fixed in the more common case of Latin keys under Xorg.
Tested on Linux with both Latin and Unicode game input keyboard keys.
- Fix#689.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Followup on baa0341b.
Use ToStdWstring() instead of wc_str() to look up strings in the map,
the key for the map is std::wstring.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
- Allow some control chars to be used as input.
This is actually a regression, since our default config uses some of
these chars.
- Allow default keys bindings to be used elsewhere.
If we try to use keys such as `KP_ADD`, `KP_ENTER` as game input, we
actually execute a `NOOP` command accelerator (nothing done), as we
associate the key with it to disable the accel.
Due to this, we do not allow any further processing of this key, such
as game input.
- Allow key shortcuts to run with loaded game.
For example, when we set `CTRL+A` for `load most recent save state` and
use `A` for some input command, holding `CTRL` and then pressing `A`
will not execute the shortcut. Instead, the key press `A` will be used
only as the input and nothing else.
With this, we use both the input and shortcut key.
- Isolate function to get keyboard key codes.
As explained on [1]:
"Using `GetUnicodeKey()` is in general the right thing to do if you are
interested in the characters typed by the user, `GetKeyCode()` should
be only used for special keys (for which `GetUnicodeKey()` returns
`WXK_NONE`)."
We also allow special keys to be mapped, hence the requirement of using
both functions.
[1] https://docs.wxwidgets.org/3.1/classwx_key_event.html
- Allow use of unicode keys for input and shortcut.
Use format `KeyCode:Modifier` for saving/loading unicode keys.
`WxWidgets=3.{0,1}` does not create an accelerator from strings with
unicode keys such as `ç` (`FromString` function). It fails with an
assertion error and stops execution. At the same time, we use the keys'
strings that are known for WxWidgets, such as `A`, `CTRL+O`,
`PAGEUP` etc.
Use both `EVT_KEY_DOWN` and `EVT_CHAR`.
`EVT_CHAR` is better than `EVT_KEY_DOWN` here because it is where the
raw key events will have been cooked using whatever recipes are in
effect from the os, locale, international keyboard settings, etc.
- Enable SDL joysticks input as key shortcuts.
Start/Stop polling joysticks on Unload/load game.
Our main loop already polls the joystick, we don't need the timer
while a game is running.
- Create function `str_split_with_sep` and use it.
For when we parse strings that may include the sep string, such as
game input and key shortcuts.
It is not needed to set `throttle` on neither case. There is actually a
bug when using turbo/speedup and closing the emulator. The test case
is the following:
https://github.com/visualboyadvance-m/visualboyadvance-m/issues/627
On Windows:
1. use opengl;
2. load GBA game;
3. set throttle to `100%`;
4. set turbo throttle to `200%`;
5. enable turbo on menu;
6. save game;
7. close emulator && open emulator;
8. load GBA game;
==>
throttle is `200%`.
This is definitely not expected.
Before, if we tried changing the connection type without closing vbam,
we would get an error about a connection already existing. We needed
to restart vbam to change it.
Ignore mouse movements of less than 11 pixels, to avoid spurious events
from mice in high DPI mode etc..
- Fix#675.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
We are not going to release 32 bit mac builds anymore, because any mac
sold after 2007 will run a 64 bit binary. And since we are building for
10.7, which requires a 64 bit mac, and will run 64 bit binaries even on
a 32 bit kernel, the 32 bit binary was always pointless.
More on this here:
https://apple.stackexchange.com/questions/99640/how-old-are-macs-that-cannot-run-64-bit-applications/99644#99644https://apple.stackexchange.com/a/261793/206363
Remove references to 32 bit mac binary from the dev manual.
Builder updates:
- Bump cmake 3.13.0-rc1 -> 3.17.3. This is needed for the new
FetchContent feature in cmake, which we use for Sparkle (online
updates for mac.)
- Bump sfml to newer master commit.
- Add pre-build hook for libvpx on mac to set
-mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET in CFLAGS.
- Force C locale in all builder scripts, homebrew bash was erroring due
to some kind of locale bug with a non-English locale.
- Remove .app in build_project() before building, rebuilds were failing
due to reinstallation of frameworks (Sparkle.)
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Minor code improvements.
Do not suppress output of sudo invocation, this may cause it hang on an
invisible password prompt.
- Fix#676.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
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>
Followup on 07064c87.
Use codesign --deep to sign the .app before signing all the frameworks,
otherwise codesign will refuse to sign the app due to unsigned dylibs
when not making a static build.
The error is:
./visualboyadvance-m.app: code object is not signed at all
In subcomponent: ...libtheoraenc.1.dylib
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Create and enable auto-updater for MacOS using `Sparkle=1.23`. We need
to sign our app using an `Apple Developer Key` for it to work properly,
since we are not going to sign updates with the Sparkle key.
Add all auto-updater files to `gettext`'s pot.
Use `str_split` to always get related stable version. We do not want
to check for nightly builds.
For Windows, we create the flag `-DHTTPS` to select between using an
HTTPS or HTTP URL for the auto-updater checks. We use this to keep
support for Windows XP (HTTP only) while all others should be HTTPS.
Also, use `::FreeLibrary` to allow us to remove the temporary file
that stores the `WinSparkle.dll`. Previously, we could not get it to
work with `wine`.
We upgrade only the first listed package to upgrade for vcpkg to not
overrun the CI time limit.
Sometimes these packages are up-to-date but are listed for rebuild due
to depending on other packages that would be upgraded.
Find the first package in the upgrade list that is not up-to-date and
use that as the package to upgrade.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add support for non-GameController SDL Joysticks.
Add proxy class wxSDLJoyDev to support using either SDL_GameController*
or SDL_Joystick* values in joystate.dev.
Add pretty much identical SDL code to support SDL_Joystick* when the
device cannot be opened as an SDL_GameController*, without changing the
API. SDL_Joystick* devices operate almost identically to SDL_Controller*
devices with their own default mappings, for both events and polling.
Filter axis motion events in the bindings editor widget for subsequent
events within 300ms. This gets rid of the double binding for +1/-1 when
the stick is moved to a direction.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add ui/hideMenuBar boolean option, defaulting to on, which hides the
main menubar when the mouse is idle or outside the frame.
This is disabled on mac, because on macs the main menubar is not part of
the application window.
Fix pointer hiding/unhiding by connecting panel events to the gamearea
mouse event handler.
Clean up the pausing when menus are opened code, make it actually work
on Windows.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
When toggling "retain aspect ratio", destroy the drawing panel so it is
recreated with the desired aspect ratio settings.
Only add the vertical spacers when aspect ratio is on, they are not
needed when it's off.
Set the sizer priority of the DrawingPanel to 1 if aspect ratio is off
so that wxEXPAND always works.
Clear the GameArea sizer when attaching a new DrawingPanel, this is so
that the vertical spacers used when aspect ratio is on are not included
when aspect ratio is off.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
MBC30 is a variant of MBC3 with a 4MiB ROM size and a larger RAM size.
https://gekkio.fi/files/gb-docs/gbctr.pdf
Allow addressing 4MiB of the ROM in MBC3 ROM bank select if the ROM size
is 4MiB.
Fix provided by roytam1.
- Fix#652.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
We have some issues when trying to open files on Windows that contains
characters not included in the current codepage. Using `fopen` fails
when that happens.
One example is using the `pt_BR` codepage and then using a name with
japanese chars for the battery file.
The games and BIOS work since they use `blargg_open`. It converts a
`const char *` to `const wchat_t *` and uses `_wfopen` for windows.
(doing a multibyte to widechar conversion)
Since we want to avoid doing many code changes on our cores, we need
some `util*` functions for the matter.
Replace `mb_fn_str` by UTF-8 strings.
Replace all occurrences of `fopen` for `utilOpenFile` on GBA core.
Replace all occurrences of `fopen` for `utilOpenFile` on GBA e-reader.
Adjust e-readers calls on wx frontend.
Replace all occurrences of `fopen` for `utilOpenFile` on Patcher files.
Always apply UTF-8 when dealing with path strings.
On our wx frontend we should always send UTF-8 `char *` to our cores
functions. This way we can have consistency when dealing with them for
each platform.
On Windows, we will convert all multibyte to wide chars and use proper
functions for I/O operation.
Create function to deal with unicode calls of `gzopen`.
We use `gzopen_w` (`zlib>=1.27`).
Replace all occurrences of `fopen` for `utilOpenFile` on Config Manager.
Replace all occurrences of `fopen` for `utilOpenFile` on Cheat files.
Use proper functions for unicode on GB core.
Use function instead of macro for `UTF8()`.
Use `nullptr` instead of `NULL`.
Print wide char strings on status bar.
Fix throttle=0 (unlimited speed) settings for both the Speedup/Turbo
config panel and the general throttle setting and make 100 the default.
Replace the speedup frame skip option with a "Frame skip" checkbox,
which enables skipping the appropriate number of frames if vsync or very
low system performance is in effect. The systemFrameSkip (under video
config) is added to this value.
With speedup_throttle=100, the old speedup behavior is used with 9
frames skipped.
With speedup_throttle == 0 && speedup_throttle_frame_skip, skip 9
frames at full speed, which is exactly the same as the old behavior,
since throttle == 0 is equivalent to speedup == true.
Hopefully these changes will make the turbo config dialog more useful
for users, by default frame skipping to work around vsync will be
enabled, and users can uncheck the "Frame skip" checkbox for a smoother
experience.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Update openssl version, getopt URL and roll nasm back to stable, because
the snapshot hangs on Catalina.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Fix problem with the ZIP_SUFFIX option, which causes zip files to have a
suffix of "OFF" if the option is not set.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Since they share the filter function, but can change one from another
(setting on the GBA would apply to GB and vice-versa), we allow only
the proper setting to be toggled while a ROM is loaded.
If GB ROM, then `Options` > `Game Boy` > `LCD Filter` is enabled.
Likewise for GBA. If neither, then no option is enabled.
When we skip frames, we just don't draw them on our frontend. The
function `systemDrawScreen` also send the video frames to be recorded,
but only when called from the core.
Our solution creates a auxiliary `systemSendScreen` that only adds the
frame to the recording. It is called when the core decides to skip a
frame. This way we can get the video frame for recording, just like
audio ones are always sent.
The flag `wxST_NO_AUTORESIZE` does not behave well on our viewers. They
were being hidden due to not fitting the text box available.
On Windows, they were working as expected. It is unknown on MacOs.
XRC error: 131: vertical alignment flag `wxALIGN_BOTTOM` has no effect
inside a vertical box sizer, remove it and consider inserting a spacer
instead.
- Fix#517.
We already had `optFlashSize` for both SDL and WX ports. We assigned
this variable to replace all ocurrences of `winFlashSize`.
As a side note, this entire scope could/should be replaced by a better
auto-detect system for saving types. At the moment, it is only really
useful for the SDL port, since we have overrides for the WX port.
- Fix#585.
We offer a way to control the color saturation for GBA games such as
Fire Emblem Tactics Advance.
It will be enabled by default for GBA games and disabled for GB.
The user will be able to toggle both of them and these options
will be persistent by saving to `vbam.ini`.
- Fix#131.
Add a ZIP_SUFFIX option defaulting to "" that is added to the generated
.zip file with UPSTREAM_RELEASE before the .zip extension.
For example, for an experimental feature you could pass
-DZIP_SUFFIX=-timer_loop and the resulting .zip file would be
visualboyadvance-m-Win-64bit-timer_loop.zip or
visualboyadvance-m-Win-64bit-debug-timer_loop.zip for a debug build.
Also add a modeline to this cmake file because vim-sleuth always gets
the settings wrong. Or it could be the cmake filetype plugins.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
For the netlink dialog, leave the server IP text field enabled when the
server radio button is selected and bind it to the new option
gopts.server_ip which defaults to "*" for binding on all addresses,
which was the previous behavior.
Copy this value to the new GBALink global IP_LINK_BIND_ADDRESS and use
it when creating a listening socket.
SFML supports creating sf:IpAddress values from hostnames, consequently
no additional code is needed to support hostnames in the netlink dialog.
Change GetLinkServerHost to return the primary local address when the
value is "*", which was the previous behavior, and the set value
otherwise.
Remove the min/max macros from GBALink as they are unnecessary and
conflict with std headers.
Require at least SFML 2.4 instead of 2.x for the IP binding
functionality in cmake.
- Fix#632
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
- Remove forum link until it's back up.
- Add nightly builds link.
- Use ninja for build instructions instead of make.
- Note that wx 2.8 and non-stl builds are no longer supported.
- Mention fprintf(stderr, ...) in the debug messages section.
- Misc. minor edits.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
For the zip file containing the executable (and symbols for debug builds
on msvc) add the -debug suffix to the basename of the zip file for debug
builds.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
When UPSTREAM_RELEASE is set, only use gpg to make detached signatures
if the output of gpg -k is not blank. If it is not, the user has likely
installed a private key to sign with.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Quote variables containing the HOME or USERPROFILE, as they may have
spaces.
Check for both osslsigncode and signtool regardless of platform, and
prefer osslsigncode.
The reason for this being that osslsigncode is more reliable and does
not depend on system configuration in any way, while signtool can fail
under more conditions.
The other reason being that you can use either program on both windows
and linux. E.g. the mingw version of osslsigncode or the signtool from
mono distributions on linux.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
When we have a notebook with intel+nvidia, OpenGL sets both
`glXSwapIntervalSGI` (nvidia) and `glXSwapIntervalMESA` (intel) for
usage. That means that if the display is controlled by one, we may
disable vsync for the other card, therefore having no actual effect
on gameplay. With this, we check for all available functions and try
them all.
This may lead to some false warnings, but useful for debugging
purposes.
The vsync has to be {dis,en}abled before a ROM is loaded or we need to
restart the output module to apply it.
We also support MESA based installations (Intel HD Graphics, AMD/ATI and
Nouveau) on Linux.
Include the visualboyadvance-m.pdb file alongside the .exe for Visual
Studio debug builds.
Visual Studio generates this file with the debug symbols for debug
builds. The file is not generated for release builds. It is also
generated for RelWithDebInfo builds.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
soundInit() returns a bool to indicate success, and failure inevitably
leads to crashes as the emulator tries to use a NULL soundDriver.
On false, popup an error dialog saying that the sound driver failed to
initialize, this is at least better than crashes, which will also need
to be fixed.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Limit the utilLoad() function in src/Util.cpp to 32 MiB.
This function loads a file from disk and returns a memory image of it.
This is only used to load ROMs currently.
Fetch new set of tags from the origin remote explicitly rather than
whatever remote is associated with the current branch.
In this way, old tags on other remotes get overwritten as well.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Detect old badly formatted git tags we used in the user's git clone, and
if found delete all tags and fetch them from the origin.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Followup on 513af13d which replaces the use of libpng with the stb_image
headers.
- Remove the use of libpng in cmake.
- Remove libpng from list of vcpkg dependencies.
- Add libpng to list of wxwidgets link libraries when using vcpkg, since
it is no longer linked directly. This is necessary for static builds.
- Remove libpng from all package lists in installdeps.
- Remove libpng-dev from the debian control file.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
vcpkg upgrade is fixed via:
f6d52648ec
Use upgrade --no-dry-run again to install the first package to upgrade.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Start a developer manual for the project where we will keep policies,
guides and processes for the project in DEVELOPER-MANUAL.md.
Describe the policies for receiving and resolving github issues.
Describe the policy for git commit messages on pull requests and add git
notes for collaborating on a branch.
Describe the policy for commits from maintainers.
Describe how to set up a native windows powershell development
environment and some powershell tips.
Describe the requirements and steps for the current release process.
Replace the CONTRIBUTING section of the README.md with a link to this
manual.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Extract strings from all wx sources, not just the enabled ones.
Ignore comments in the generated pot when checking if it was updated, we
don't care about just changes in line numbers.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
gcc (mingw) does not allow converting a const char*[] to a char**
without -fpermissive. Make some adjustments to the string handling to
execute the cmd.exe command to delete the temp file.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Trying to delete the temp file for the winsparkle dll after unloading
the dll would still produce an access denied error, presumably because
for whatever reason not all resources used by the dll were freed.
Instead of trying to immediately delete the file, start an asynchronous
cmd.exe process to sleep for 2 seconds and delete the file. This gives
the app time to exit, after which the file can be deleted.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
When the feature was added in d93f6350, I did not adequately test for
the normal case when the pot is not updated.
This does not work because the pot has a timestamp in the
POT-Creation-Date: field.
Fix check-pot-update.cmake to ignore the pot timestamp and not report
the pot as changed when it has not been.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Remove po/update_pot.sh and generate the gettext .pot source
automatically in cmake on every build instead.
If the .pot is actually updated, print a loud message at the end of the
build to commit the result and push to transifex.
Fix the gettext tools and package loading block to only run when
ENABLE_NLS is enabled and find the xgettext and msginit binaries in the
Windows case as well. xgettext is used to generate the .pot.
Refactor the SRC_WX/HDR_WX/RES_WX/XRC_SOURCES handling to use only
relative paths and move all generated files into RES_WX. This was
necessary to generate the .pot from cmake.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Fix issues with {sav,load}ing e-Reader `Dot Code`.
If `Dot Code` file is not specified, it tries to continually read it and does not accept input.
In Japanese (very likely other languages as well), the path of `Dot Code` file is garbled
internally due to failing conversion to UTF-8.
Check for UPDATE_APPCAST being set before checking for TAG_RELEASE, as
the UPDATE_APPCAST script may be run in the same build directory where
TAG_RELEASE was just run.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add the -DUPDATE_APPCAST=TRUE option to invoke the UpdateAppcast.cmake
script, which clones the github pages repo and sets the version in the
appcast.xml to the last tag, presumably made with -DTAG_RELEASE.
The script prints out a final set of instructions to actually push the
change to git.
If the option -DUPDATE_APPCAST=UNDO is used, the clone is removed and no
changes are made.
Also use the correct method of splitting the tag list output into
multiple lines.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Remove snap build status since we are not using that anymore.
Use the png instead of the svg for the snap store badge as it's not as
large.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Default to ON on Windows for x64 or x86.
Set new appcast URL, this will be in the github pages repo.
We will need to get everything ready for the next release.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
vcpkg upgrade is currently broken, see:
https://github.com/microsoft/vcpkg/issues/9916
Use remove followed by install, which does practically the same thing,
as a workaround.
Hopefully fix current appveyor build failures.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Default the linkTimeout ConfigManager variable to 500 (milliseconds.)
Detect if the previous default is set, which 1, and set to 500, to
repair existing configurations.
This may reduce the amount of reports about link being broken, as some
people have certainly not checked this setting, and the default should
not be so wrong.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add field for the network port to the start link dialog, default is 5738
as before.
The port is stored in the user's options config.
Add TextCtrl support to UIntValidator for this.
Related: #594.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
This doesn't work to pick up changes from changed translations files
though, because git does not store file timestamps.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
We need to use proper documented behaviour when coding the
core, therefore this should be reverted until a proper
solution is done.
This reverts commit ca3b63d64c.
For some versions of the mxe ubuntu repositories, the compiler/ccache
packages have a bug where the compiler a broken symlink to ccache.
Make sure the expected symlink to ccache exists.
Add pre-build instructions to add /usr/lib/mxe/usr/bin to the PATH.
Amend the PATH for the mxe travis jobs as well.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
The current code is very messy as far as GFX goes. There are more
elegant ways of tackling this issue, but they are very difficult with
our current code.
The idea behind this issue is that the backgrounds are not switching
properly for the lcd. So we enable the layers accordingly to
`layerSettings & DISPCNT` on every `CPUUpdateRenderBuffers`.
The bits of `layerSettings` enconde each layer and objs.
We actually only need 2 of these, but I can't do much more here
unsupervised.
- Fix#376.
Search the lib-prefixed names of intl/iconv/charset libraries first to
avoid dlls being linked.
Update toolchain files to include the common source by full path, fixes
using them as toolchains for other projects broken in 3edd9ba7.
Update URL for nasm, use newer jpeg-turbo, tiff and wx.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use the 3.x wxwidgets mingw package in installdeps.
Add the win64 alias to installdeps for 64 bit mingw builds, like the
win32 alias for 32 bit mingw builds.
Check CROSS_ARCH in Architecture.cmake, set by our mingw toolchains.
Disable LTO by default for all mingw builds, not just amd64, because it
is unfortunately broken on i686 as well now.
Search for heuristically the most appropriate wx-config and set
wxWidgets_CONFIG_EXECUTABLE accordingly in the mingw toolchains.
Refactor the mingw toolchains somewhat, put common code into a common
file, add static toolchains.
For static toolchains, also search for a static zlib and set ZLIB_ROOT.
Change installdeps instructions to use ninja instead of make. Add ninja
to all target dependencies where it was missing, this may be incorrect
in a couple of the rarely used targets, if this is the case the affected
users are free to open an issue.
Also start using ninja on travis instead of make, except for libretro
which uses a GNU Makefile.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add macro fi_check_done() to set fi_done if leftover contents is empty,
use it in both fi_open_file() and fi_get_next_line().
This fixes the behavior when the opened file is empty and makes the code
cleaner.
Add a usage example to top comment.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Remove LDFLAGS from list of required variables for finding ffmpeg to
succeed. Both main and component LDFLAGS.
Added by f7f424ea.
This is necessary because of platforms lacking pkg-config, like vcpkg +
Visual Studio, no LDFLAGS are found.
Fixes finding ffmpeg in the vcpkg + Visual Studio configuration.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
This is a followup on 93f906e2.
Simplify the FileIterator interface by doing the eof check in
fi_get_next_line().
Add rollback instructions to final instructions message.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add a TAG_RELEASE cmake variable which engages a cmake script to
generate a signed release commit with changelog entries from git and
signed tag.
The value can be ON/TRUE/1 or a specific next version number, or UNDO to
rollback changes just made with this script.
The script tries to make sure all the preliminaries are in the right
state to do a release, the source is a git clone, on branch master, with
a clean working tree and gpg is available.
Also add a utility script FileIterator.cmake which is an OO-like line
iterator interface for text files, used by the release commit script.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Wrap the main body of code in Set-Toolchain-vcpkg.cmake in the
vcpkg_set_toolchain() function to not pollute the global variable
namespace with helper variables.
VCPKG_ROOT and toolchain variables are set in the cache.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
In order to not overrun the appveyor time limit of one hour, limit vcpkg
port upgrades to only the first port. This way the cache will be rebuilt
gradually instead of all at once, and the job won't fail due to
overrunning the time limit.
Also do a bit of refactoring and code improvements for
Set-Toolchain-vcpkg.cmake.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Although a length check is being performed on the imported GSA Codes file, `len` is both a signed int and attacker controlled.
With a specially crafted GSA Codes file, an attacker could specify a value for `len` that overflows the `int` type, rolling over into a negative number. By doing so, the attacker can bypass the conditional mentioned above.
The `fseek` length parameter is of type `size_t` which is an unsigned int, this will result in `len` being interpreted as a large unsigned int, allowing for a stack based buffed overflow in the desc char array.
By making `len` an unsigned integer, it will prevent the overflow. It ensures that the bounds check works as intended.
For Visual Studio, the static builds now require linking libcharset
explicitly, otherwise an `unresolved external symbol locale_charset`
error is thrown during linking.
This library is sometimes required on other platforms for iconv/gettext,
and checking for it and linking it should be harmless.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
BPS support and fix bug when patching rom.
Add support for BPS patch format (by @ArtiiP ).
Fix crash when patched rom new size is larger than original rom. This was bugged due
to the rom block in memory being less than required after the `realloc` of the patch.
- Fix#549.
Use GetIcons() to get the IconBundle and call GetIcon() on it to get a
32x32 icon with fallback.
For whatever reason this works while just GetIcon() does not.
Source:
https://forums.wxwidgets.org/viewtopic.php?t=44818
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Followup on f306cc63.
The icon name was changed from "vbam" to "visualboyadvance-m", so also
change the Icon field in the .desktop file.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Followup on e98d8931.
Set the BITS variable in Architecture.cmake even if
CMAKE_SYSTEM_PROCESSOR is not set, and it often isn't. This allows for
generating the right release zip for 32 bit MinGW builds.
When invoking zip to make the translations.zip, use `.` instead of `*`
as the argument, with the correct WORKING_DIRECTORY, so as not to rely
on shell globbing of any sort. This broke for the 32 bit MinGW cross
build.
Fix the keychain unlock command on mac, the keychain must be unlocked to
use the codesigning certificate.
Fix the translations.zip.asc signature overwrite prompt on Windows.
For the mac builder, automatically use Xcode 9 for 32 bit builds if
installed, this is necessary on 10.14 (Mojave) and later.
Add interactive-pause.cmake script to wait for the user to press enter
before continuing, invoke it before gpg commands so that waiting for the
passphrase does not time out. It will not run if ENV{CI} is set or
ENV{VBAM_NO_PAUSE} is set, this is so that later we can set up automated
builds.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add support for setting the <component>_LDFLAGS and FFMPEG_LDFLAGS cmake
variables based on pkg-config in FindFFmpeg.cmake.
The LDFLAGS can be necessary when linking FFmpeg statically, as is the
case for the mac builder script.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Call mainframe->PollJoysticks() on every pass through OnIdle, not just
when game is not paused.
Fix#582.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use ENV{MSYSTEM_PREFIX} instead of ENV{MSYSTEM} to check for msys2 as
that is more reliable.
Generate the translations.zip when building for Windows from the
generated .gmo files.
Add the UPSTREAM_RELEASE option to perform some additional release
automation steps:
- Codesign for Windows with either the Visual Studio signtool or
osslsigncode when using MinGW.
- On Windows zip up the .exe into the appropriate zip file for release.
- Generate the gpg signature .asc files for the translations zip and the
.exe zip on Windows.
- On Mac codesign the app, zip it and sign the zip.
- On all platforms try to strip the binary.
Remove the release automation steps from the builder script as they are
now in cmake.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Followup on 0577f8af.
When looping through configured joysticks, ignore ones that do not have
a valid open device pointer.
Also remove the use of std::get for the joystate map tuple and use
.first instead.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
For the SDL binary vbam when built with MSVC add /nodefaultlib:libcmt to
debug link flags, because in debug mode libcmtd is linked and libcmt
should not be.
This is the same as was done for the wx executable in cf9a88df.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Combine SDL events with polling the axes and buttons of controllers
every 10 milliseconds, this is necessary because of this bug in SDL:
https://bugzilla.libsdl.org/show_bug.cgi?id=4886
which causes SDL to not generation button and axes events after a
joystick is disconnected and then reconnected to the system.
Change the axes state from a unordered_map to an std::array because the
number of axes is fixed, add analogous buttons array.
Keep controller state synchronized between the event receiving code and
the polling code.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Rename all icon basenames and references to them from "vbam" to
"visualboyadvance-m".
Change app name in desktop file from "VBA-M" to "visualboyadvance-m" as
well.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Fix cross building glib with meson for 32 bit Windows, set cpu_family
correctly in the cross file.
Do not build ffmpeg for 32 bit Windows because it is not compatible with
Windows XP and it's better to have a smaller 32 bit binary.
Turn off LTO for 32 bit Windows because it is now broken too, in a
different way than for 64 bit Windows.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
This allows linux users that use snapd and for distro's like ubuntu that do not have vba-m in their repo's to install it to their system without having to compile their own releases.
Only check for ffmpeg if it's not explicitly turned off and the target
is not 32 bit Windows.
This is done because Windows XP does not have bcrypt.dll which ffmpeg
requires and the 32 bit builds are more likely to be used on older
systems which would also benefit from the smaller binary size.
Also add the X86 and X64 cmake architecture variable flags.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Followup on 49ca52ba.
Improve the code that shows a fatal error if the vcpkg target
architecture does not match the build environment, by showing both the
target architecture and the build environment architecture.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Fix the vcpkg root setting, which was trying to use CMAKE_PROJECT_DIR
before a project is defined by switching back to CMAKE_SOURCE_DIR. Also
check if the user has \vcpkg or c:\vcpkg and use those if found. Use
\vcpkg if ENV{CI} is set, e.g. on Appveyor.
Enable nasm for visual studio builds by using the nuget nasm2 package.
In Architecture.cmake check that the vcpkg arch matches the compiler
arch, and throw a fatal error otherwise.
When using GLOB to find the nuget package directory, use the package
name as the prefix, this is quite necessary when using multiple nuget
packages.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Default to ENABLE_NLS=ON for vcpkg builds too.
Check for libintl under both the names "intl" and "libintl", likewise
for libiconv. The vcpkg versions have the "lib" prefix.
Use the Gettext.Tools package from NuGet for the tools to build the
translation files. vcpkg does not yet have gettext-tools.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Now that the initial vcpkg cache has been populated in appveyor, we can
build ffmpeg to add to it without going over the job limit.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
sdlReadDesktopVideoMode() was apparently being called when the window
pointer is NULL.
Wrap the code in an `if (window) { ... }`.
SDL binary now launches correctly.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
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>
On Windows always link setupapi with SDL2, the find_library() call with
SetupAPI was failing on mingw because of case.
Update libpng 1.6.32 -> 1.6.37.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Only set CMAKE_GENERATOR_PLATFORM to "x64" for 64 bit toolchains for any
of the "Visual Studio" generators, which use msbuild.
For other generators such as Ninja or NMake (jom) set
CMAKE_C[XX]_COMPILER to "cl" to let cmake find the compiler in the
user's PATH and set up the toolchain appropriately. On the user's part,
all that is required is running the 64 bit dev tools command prompt, or
setting up the equivalent environment in powershell.
We are no longer restricted to msbuild, and other generators such as
Ninja will work correctly.
Switch the appveyor job to Ninja, this requires some wrangling because
the appveyor environment does not include ninja. I used this:
https://github.com/boostorg/hana/blob/master/.appveyor.yml
Also update the README.md instructions to use Ninja.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Followup on 02520fb6.
Add ConnectController() and DisconnectController() protected methods in
wxSDLJoy, use them to open or close and clear the device pointer
properly.
For controller add/remap events, call DisconnectController() first
before ConnectController() to make sure the right device is associated.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
On Windows (msys2) ninja may fail to work with -j 64 because it runs out
of open handles.
Limit jobs for ninja to 32 on Windows.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Followup on 02520fb6.
Versions of wxWidgets after 3.0 change the windows event loop in such a
way that using QueueEvent for joystick events no longer works, use
ProcessEvent instead. This has no effect on latency since the joystick
events only cause the emulator controller state to be updated.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
In the vcpkg module, call vcpkg update to update the portfiles and vcpkg
upgrade to upgrade any installed ports to make sure we are using the
latest versions.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add meson to core deps because glib requires it to build, and python is
much further in the dependency chain to build meson early enough.
Override the meson command to write and use a cross file for mingw cross
builds.
Add -DFFI_STATIC_BUILD to CPPFLAGS for glib.
Fix --env for the linux mingw cross script.
Add dist make args to the make install invocation.
Add --extra-libs=-liconv to ffmpeg ./configure invocation.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
A followup on 02520fb6.
In wxSDLJoy::Remove(n), which is the only API that needs to release a
game controller device from the application, actually call
SDL_GameControllerClose(dev) when a device is released.
This is used when the input config dialog is launched. First all sticks
are closed, and then all available sticks are added for the duration of
the dialog. Then they are closed again, and only the configured sticks
are open for the game, which is what happens generally.
The device ordering is determined by the OS.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use the SDL GameController API with SDL events instead of polling
manually. Run SDL_PollEvent() in the panel OnIdle().
The API to the GUI remains the same, the sending of wxSDLJoyEvent
events. Except there are no more hat events, we just use the
GameController buttons. Also the GUI now has to make arrangements for
wxSDLJoy::Poll() to be called periodically, for the config dialog this
is done with a timer.
All Xbox 360 controller buttons and axes are now in the defaults, and
the SDL GameController API will map them to the appropriate keys on
other controllers.
As a consequence of using SDL events, controller attach/detach from the
system is now also handled correctly. It is no longer necessary to have
the controller attached and turned on when the program launches.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
- Update to new version of icu and patches.
- Update to newer meson based glib.
- Support meson-installed dists.
- On msys2 use the distro ninja to build ninja, because there is some
kind of issue with building on windows now.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Accumulate link libraries for wxvbam in the VBAM_LIBS list variable
instead of listing every possible library variable in the
target_link_libraries() call.
This fixes the issue with trying to use OPENAL_LIBRARIES when it's set
to NOTFOUND which generates a cmake error.
Fix#563.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Test building on xenial with:
./installdeps --no-openal --no-ffmpeg
Will also need to add --no-sfml to this.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add support for the --no-openal and --no-ffmpeg command line options to
installdeps.
Implement them fully or partially depending on the code for that
distribution.
This will help with adding this variant of the build to the travis CI.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Detect and prefer the -gtk3 variants of the libwxgtk3.0 packages on
distros like kali-rolling.
Tested to work on newest kali-rolling and trusty.
Fix#564.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
- Make WinSparkleDllWrapper a real singleton.
Make the constructor private and add a static `GetInstance()` method
that constructs the single instance and/or returns it.
Make it encapsulate the function pointers and the wxDynamicLibrary
instance, with the API as friend functions.
- Make winsparkle API completely self-contained.
Make the instance of the WinSparkleDllWrapper a factory function local
static.
This way the calling program does not have to manage the life-cycle, the
singleton is initialized when the API is first invoked, and destroyed
during global destruction.
The destructor is now also private, because the singleton object is
destroyed during global destruction.
Found the solution here:
https://stackoverflow.com/a/46139631/262458
- Cmake improvements.
Only enable the ENABLE_ONLINEUPDATES option by default if we are going
to use winsparkle on 32 or 64 bit intel windows.
Do not inlclude winsparkle if the option is off.
- Disable for now.
Currently ENABLE_ONLINEUPDATES defaults to OFF even on intel/windows,
until we do more work on this feature.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Remove traces of previous update checker.
We use version 0.6.0 available here:
https://github.com/vslavik/winsparkle/releases
We only support on Windows at the moment using `winspakrle`. So remove
this item for other platforms or when disabled in compilation.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add cmake glue and necessary code to load WinSparkle.dll as a binary
resource that gets written out to a temp file and loaded with
wxDynamicLibrary.
Object lifetime of the dll wrapper is handled by the app.
The API is the same as the winsparkle API, the only change required is
changing:
`#include <winsparkle.h>`
to:
`#include "winsparkle-wrapper.h"`
and handle the lifetime of a WinSparkleDllWrapper object.
On destruction the temp file is removed.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Backing off the winsparkle-static approach for now because it will
require a substantial amount of work to use winsparkle from a static
binary that also uses wxWidgets.
Will try to pack the dll in as a resource, and write it out to a temp
file at runtime and load it with wxDynamicLibrary. This will require a
wrapper for the API as well, which is fortunately very small.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Do not copy the `wxrc.exe` from the vcpkg build tree if it has already
been copied, as in the case of the appveyor vcpkg installed cache.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
On appveyor we only cache the `vcpkg/installed` directory, so vcpkg
itself still needs to be pulled from git.
Also update vcpkg from git if it has already been cloned, and always
rebuild vcpkg itself.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Try to cache only the `vcpkg/installed` directory instead of the whole
vcpkg directory, which appveyor says is too large to cache.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
The end of standard support for trusty ended in April 2019 and
the end of life is April 2022. For xenial the end of standard
support is April 2021 and the end of life is April 2024.
Most users should have xenial or newer at this point.
Source: https://wiki.ubuntu.com/Releases
Only add the macro `-D_FORTIFY_SOURCE=2` if we are linking to libssp
with gcc, do not use it at all on clang.
For `HostCompile.cmake` add the macro `-Dmain=main` to redefine the
macro added by SDL2 to compile flags `-Dmain=SDL_main`.
Fix#548.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Only -fsanitize=address is needed for asan to work with both
gcc and clang.
[170/196] Building CXX object CMakeFiles/vbamcore.dir/src/Util.cpp.o
clang-9: warning: -lasan: 'linker' input unused [-Wunused-command-line-argument]
[171/196] Linking CXX static library libvbamcore.a
[172/196] Generating cmdtab.cpp, cmdhandlers.h, cmd-evtable.h
[173/196] Generating wxvbam.xrs
[174/196] Generating builtin-xrc.h
samu: job failed: cd /tmp/visualboyadvance-m/build/src/wx && /tmp/visualboyadvance-m/build/bin2c wxvbam.xrs builtin-xrc.h builtin_xrs
==4845==Your application is linked against incompatible ASan runtimes.
samu: subcommand failed
==15788== Conditional jump or move depends on uninitialised value(s)
==15788== at 0x5143A2: wxvbamApp::~wxvbamApp() (wxvbam.cpp:682)
==15788== by 0x5144BB: wxvbamApp::~wxvbamApp() (wxvbam.cpp:676)
==15788== by 0x739CD22: wxEntryCleanup() (in /usr/lib64/libwx_baseu-3.0.so.0.4.0)
==15788== by 0x739D02B: wxUninitialize() (in /usr/lib64/libwx_baseu-3.0.so.0.4.0)
==15788== by 0x739CE39: wxEntry(int&, wchar_t**) (in /usr/lib64/libwx_baseu-3.0.so.0.4.0)
==15788== by 0x50BD42: main (wxvbam.cpp:32)
v2: Initialize overrides as a nullptr.
The Clone function seem unused, the AcceptsFocus and HasFocus
functions are marked as const and Show is renamed to ShowAddr
to not conflict with unrelated functions.
[187/196] Building CXX object src/wx/CMakeFiles/visualboyadvance-m.dir/viewsupt.cpp.o
In file included from ../src/wx/viewsupt.cpp:1:
../src/wx/viewsupt.h:197:10: warning: 'Viewers::MemView::Show' hides overloaded virtual function [-Woverloaded-virtual]
void Show(uint32_t addr, bool force_update = false);
^
/usr/include/wx-3.0/wx/gtk/window.h:64:18: note: hidden overloaded virtual function 'wxWindow::Show' declared here: different number of parameters (1 vs 2)
virtual bool Show( bool show = true );
^
In file included from ../src/wx/viewsupt.cpp:1:
../src/wx/viewsupt.h:410:10: warning: 'Viewers::DispCheckBox::AcceptsFocus' hides overloaded virtual function [-Woverloaded-virtual]
bool AcceptsFocus()
^
/usr/include/wx-3.0/wx/window.h:724:18: note: hidden overloaded virtual function 'wxWindowBase::AcceptsFocus' declared here: different qualifiers ('const' vs unqualified)
virtual bool AcceptsFocus() const { return true; }
^
In file included from ../src/wx/viewsupt.cpp:3:
In file included from ../src/wx/wxvbam.h:14:
In file included from ../src/wx/widgets/wx/joyedit.h:9:
../src/wx/widgets/wx/sdljoy.h:115:14: warning: 'wxSDLJoyEvent::Clone' hides overloaded virtual function [-Woverloaded-virtual]
wxEvent* Clone();
^
/usr/include/wx-3.0/wx/event.h:1569:22: note: hidden overloaded virtual function 'wxCommandEvent::Clone' declared here: different qualifiers ('const' vs unqualified)
virtual wxEvent *Clone() const { return new wxCommandEvent(*this); }
^
In file included from ../src/wx/viewsupt.cpp:3:
../src/wx/wxvbam.h:286:10: warning: 'MainFrame::HasFocus' hides overloaded virtual function [-Woverloaded-virtual]
bool HasFocus()
^
/usr/include/wx-3.0/wx/window.h:715:18: note: hidden overloaded virtual function 'wxWindowBase::HasFocus' declared here: different qualifiers ('const' vs unqualified)
virtual bool HasFocus() const;
^
4 warnings generated.
[79/196] Building CXX object fex/CMakeFiles/fex.dir/fex/Zlib_Inflater.cpp.o
In file included from ../fex/fex/Zlib_Inflater.cpp:3:
In file included from ../fex/fex/Zlib_Inflater.h:7:
In file included from ../fex/fex/Data_Reader.h:7:
In file included from ../fex/fex/blargg_common.h:8:
In file included from /usr/include/assert.h:35:
/usr/include/features.h:382:4: warning: _FORTIFY_SOURCE requires compiling with optimization (-O) [-W#warnings]
^
1 warning generated.
Call `rtcEnableRumble(true);` always regardless of the `rtcEnabled`
option, because @negativeExponent points out that they are unrelated.
Check for at least SDL version `2.0.9` before using the
`SDL_JoystickRumble()` API, since it is not present in earlier versions.
Increase rumble duration to twice the poll time to keep the motors
running, subsequent poll events will cancel the rumble as necessary.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Call `rtcEnableRumble()` in the core if the rtc is enabled during ROM
loading.
On `systemCartridgeRumble(bool)` events from the core, set the state in
`wxSDLJoy` accordingly, to either rumbling or not rumbling based on the
boolean parameter.
On the `50ms` joystick poll events, use `SDL_JoystickRumble()` to enable
rumble on both the low and high frequencies at maximum for the poll time
of `50ms`, to be set or reset again on the next poll event.
Tested in Drill Dozer, rumbling is being activated. Will need testing
from users as well to see if this is implemented correctly.
Fix#522.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
All keys were being captured before being processed by any window of the
app to check for accelerators. This meant being impossible to use any
keys for input if they were saved for an accel.
- Fix#516.
The change to use an extern version variable in 24d83a12 produces a
linker error with Visual Studio due to the `version.c` source file being
compiled as C instead of C++.
Rename:
`version.c` -> `version.cpp`
`version_c.h` -> `version_cpp.h`
And update all references accordingly.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Make a `version.c` with `const char*` variables to store the version
strings used by other files, to make recompiles slightly faster when the
git state changes.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Pass `CC="$CC $CFLAGS"` to `make` for `libgsm`, so that the `-m32` is
passed for 32 bit builds.
For `mac_install_core_deps()` make sure brew is installed and install
brew perl, otherwise perl extensions cannot be built on Mojave for 32
bit.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use git master for `graphite2` and a better cmake patch, with these
`DIST_ARGS`:
```
-DGRAPHITE2_NFILEFACE=ON -DGRAPHITE2_TESTS=OFF -DGRAPHITE2_DOCS=OFF
```
Use `DIST_CONFIGURE_OVERRIDES` instead of `DIST_ARGS` for `libvpx` and
`ffmpeg` because their configure scripts error on the `--sysconfdir`
arg.
Change all other references to `libvpx` and `ffmpeg` `DIST_ARGS` to use
`DIST_CONFIGURE_OVERRIDES` instead.
Add `-j1` to `xvidcore` `MAKE_ARGS` because it sometimes fails parallel
builds.
Change the `mkdir` commands to `mkdir -p` in `mingw.sh` because
`core.sh` now also makes those directories.
In `mingw.sh` for `libvpx` extra `CFLAGS`, add `-mstackrealign` for 32
bit builds and `-fno-asynchronous-unwind-tables` for 64 bit builds. The
latter is necessary to build, taken from the msys2 `libvpx` mingw
package.
Also add the `stdint.h` `-include` option to `CFLAGS` for libtheora and
ffmpeg because they use the `libogg` headers.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Update the following dists:
bzip2, xz, libiconv, gettext, ninja, meson, libgcrypt, libsecret, sdl2,
flac, libogg, libvorbis, wxwidgets
and the following ffmpeg deps:
graphite2, xvidcore, libgsm, opus, libsoxr, libass, libbluray, libvpx,
libx264, libx265
Enable ffmpeg for vbam again as we now have working recording code
thanks to @denisfa.
Disable graphviz and libzvbi for the time being since we don't really
need them.
For mp3lame use the msys2 patch to remove posix code instead of linking
to catgets.
For libogg and libvorbis on mac, add `-include /path/to/stdint.h` to
`CFLAGS` when building.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
When using the command line options, we had a circular issue:
- using `LoadConfig()` before `ReadOpts()` would mean the `--config` is
ignored.
- using `ReadOpts()` before `LoadConfig()` would mean the command line
options were ignored in favor of the default ones.
If we want to use a custom `vbam.ini`, we need to load it with
`--config`. Now we only consider params order on command line.
All this code protected by `#if 0` is implemented already one way or
another. Hence the decision to remove it, instead of commenting.
This also removes the need of the branch `arthur/sdl2`.
It happens due to our wxRadioButtons having 3 options (indexed by 0, 1
and 2) but we trying to get the index 7 (due to want to check every 7
days).
We should still implement something like WinSparkle for Windows.
- Fix#499.
We assign the `NOOP` id for every command disabled by the user, but not
the command name (just `NOOP`). When updating the configuration file,
any command with `NOOP` id is valid, even if the label does not match
`NOOP`. Hence this weird issue.
- Fix#502.
Pause before `pass` asks for the `gpg` passphrase to retrieve the
password to unlock the windows codesigning certificate.
This is so that the user does not have `gpg` time out waiting for the
passphrase.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Merging some work I was doing on trying to make a working mostly static
linux binary a year ago, with some additional minor refactoring.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Hopefully this will speed up the appveyor builds at least a little bit.
We really need to switch to ninja at some point though.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add `-p:BuildInParallel=true` to the Visual Studio instructions for
`msbuild`, to build subprojects in parallel, without which the `-m`
option has no effect, both must be used.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Visual Studio 2017 only allows `/std:c++14` and higher, so remove the
`/std:c++11` option, we'll take the default of C++14 standard.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Check for the APPDATA environment variable if there is no LOCALAPPDATA
environment variable for things like reading the config file.
Fix#407.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
wxWidgets fails to translate some internal strings due to locale issues.
It is not clear how the current locale is detected, but it fails for
cases when the system is different from the set by the user. Eg: the
system is using `en_US`, but the user sets `LANG=pt_BR.utf8` for an
application. Some internal strings are translated because of `LANG`,
while others remain the same because `en_US`.
We could not use key shortcuts for this, since it was only checking if
the option was activated on menu. This only happens if you open the
menu and click it, so the key shortcut does not work.
We protect all code relevant to disabling this property with either
`BKPT_SUPPORT` or `NO_DEBUGGER`. This is mostly debugging options or
prints scattered around the code.
We also adjust cmake to ignore the specific files surround it, but
allowing the rest of the GUI to work.
- Fix#431.
For cmake, the dependency on `bin2c` when using `HostCompile.cmake` does
not work if it's set to `bin2c.exe`, for whatever reason, so remove the
suffix.
Add `-DCURL_STATICLIB` to `CPPFLAGS` etc. to link to `libcurl`
correctly, needed for `osslsigncode`.
Add `--without-brotli` to curl configure args, because it can try to
link to some existing version and fail.
Add a `gmake` symlink to the system `make` into the `PATH` because some
things like Strawberry Perl install their own copy of `gmake` into the
`PATH`.
Add `pass` to list of msys2 deps, needed to store the windows
codesigning cert password.
Use `$CMAKE_ARGS` instead of `$CMAKE_BASE_ARGS` for building vbam,
adding `-DCMAKE_INSTALL_PREFIX=/usr`, this is necessary for extracting
the locales correctly.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
We check if the compiler has asan support when the option is enabled.
If it does not, then we stop compiling with the proper message.
To test this, we use `gcc (GCC) 4.4.7` (no asan support) and
`gcc (GCC) 9.1.0` (asan is supported). Call cmake like this:
`cmake .. -DCMAKE_BUILD_TYPE=Debug -DENABLE_ASAN=On` and
`CXX=g++-4.4 cmake .. -DCMAKE_BUILD_TYPE=Debug -DENABLE_ASAN=On`
we then check that it fails for the older version and it works for
the newer gcc, like expected.
- Fix#409.
Check for the specific `ffmpeg` lib versions in `ffmpeg` `4.0.4` "Wu",
Do not pass `-DENABLE_FFMPEG=OFF` to the xenial travis job, as this is
detected automatically now.
Add a note about the required ffmpeg version to `README.md`.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Include xenial and bionic in the travis build matrix, alongside trusty.
In `installdeps` check for the existance of `libswresample-dev` before
installing it because trusty does not have it, it uses libav instead of
ffmpeg. For this reason, ffmpeg is not built on trusty.
Turn off the `xvfb-run` test on bionic and xenial because it fails for
some reason.
Use `-DENABLE_FFMPEG=OFF` for xenial because the ffmpeg code currently
fails to compile with that version.
Stop trying to cache `/usr/local` for the mac build, storing the build
archive takes longer than installing the homebrew packages.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Fix the cmake ffmpeg detection and make it not print the detection
messages twice.
Add `-D__STDC_FORMAT_MACROS` to compiler flags, some versions of ffmpeg
require this.
Redefine `static_assert(x)` to the `static_assert(x, msg)` form in
`xbrz.cpp`. This is a C++17 feature and some versions of gcc wrongly set
`__cpp_static_assert` even though they do not support it.
Also we want to stick to C++11 for the time being, until there is
consensus to support a newer a version.
For that reason, change the MSVC flag `/std:c++latest` to `/std:c++11`
as well.
Remove `-DENABLE_OPENAL=ON` and `-DENABLE_LINK=ON` from travis config,
as these are now automatic.
In `installdeps` remove the hacks for supporting the `https://` apt url
for mxe and use an `http://` url instead. This works perfectly on Ubuntu
14 (trusty).
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Replace the Windows instructions for deleting the config file with the
much simpler `Help -> Factory Reset` option, which does the same thing.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use `/std:c++latest` for Visual Studio because the XBRZ 1.7 code
requires at least C++17.
Replace the use of `bool++` in `GBALink.cpp` which is now apparently an
error with `bool = !bool` to flip the value.
Use `/W4` to enable a good amount of warnings in Debug mode, and `/W0`
to disable warnings entirely in release modes.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Get files from here `https://sourceforge.net/projects/xbrz/files/xBRZ/`.
Then, update the src to handle pitch params. For our case, the pitch
is necessary because we deal with borders (top and right) of our source
image. Normally, we would want to scale without it, and therefore we
need to adjust the pointers to skip the borders.
If we have a `width + 1 pixel border` per line, the we need to scale
a image with `width` line size, but advancing the pointer for each new
line processed including the border on the count.
Also, since our output pointer also allocates for the border, we need
to adjust the output moving pointer for each line in a custom way.
(output border in this case)
- Fix#164.
From my very superficial understanding, the `rom[]` resize happens
only when `rom_size` is greater than 0x2000000.
We should probably study this better for an actual explanation.
- Fix#487.
In cmake detect if the dependencies for link (sfml), recording (ffmpeg)
and openal are installed and default the features to `ON` if they are,
otherwise to `OFF`.
This simplifies the cmake usage.
Update the default column in the `README.md` table to `AUTO` as well.
Remove the cmake options from `installdeps` instructions, since they are
auto-detected.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
See #465
To compile the build tool `bin2c`, add a target with `add_executable()`
on visual studio instead of using `HostCompile.cmake` because running
`cl.exe` fails in the appveyor visual studio environment, see:
https://developercommunity.visualstudio.com/content/problem/325122/c1356-unable-to-find-mspdbcoredll.html
Also update the dependencies module to latest.
appveyor build now tested to work.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
LTO on 64 bit mingw still produces segfaulting binaries.
Turn off LTO for just that platform and leave it enabled for all other
platforms.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
We fix the wxWidgets error message when trying to open the dialog
via menu.
The scrollbar behaviour has been enhanced to adjust itself between
200 and 300 rows from GUI (0x6c0 memory to 0xf9ff - GB example).
Clicking on top or bottom line of the memory values now moves 1 row
position backwards and forward, respectively.
Arrow keys also functional for navigation.
* Remove clicking on top/bottom behaviour.
- default ENABLE_NLS to ON except for vcpkg, broken in e2f06210
- update zlib URL
- use openssl 1.1.1c instead of 1.0.2p, parallel build works now!
- add osslsigncode for mingw to codesign windows binaries, and
automatically sign in `build_project()`
- add curl (for osslsigncode, which needs libcurl)
- use current master for wxwidgets instead of 3.1.2
- make the `translations.zip` in `build_project()` for windows
- on mac, unlock the login keychain before codesigning (this is
necessary if using e.g. ssh.)
- do not fail if the user does not have codesigning or gpg keys
- fix wxwidgets configure options on mac (need to append to
`DIST_CONFIGURE_OVERRIDES` instead of `DIST_ARGS`.)
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
- As discussed at #cheats on discord, using the search engine will cause RetroArch to crash as
soon as you click on Start or Restart Cheat Search.
- This PR adds the missing break lines for the switch statements that is causing the core to crash
We do not allow to skip frames while recording. The resulting length
will be extended compared to using turbo/speedup modes, because the
recording will be normal time (as in running without turbo/speedup).
We create a namespace to deal with most of our recording solution.
Besides that, we also add some functions to remove the need of
including libavutil headers on other part of the code. This is meant to
isolate most of recording solution components on the proper files.
We will start with a limited number of codecs supported; slowly we
should add them as they are tested (the previous one did not work for
most codecs listed).
This should support `ffmpeg 4.1` and further, including removing
all compilation warnings related to versions discrepancy.
changes includes:
- append "options_" to core-related variables
- remove some unnecessary function calls
- change some float data types to double
- set max geometry width/height depending on max values for the system being emulated
- create advanced core options to minimize the number of options shown
- style nits
- Add core option to allow RTC to be enabled regardless of rom. This usuable for rom patches that requires the RTC to be enabled yet the RTC flag is not enabled. (aka Pokemon patches)
- minor n0n-functional changes
- cleanup gb built-in palette struct
- update retro_get_memory_data/size to directly use related variables for RAM and VRAM
and fix sizes (GB vs GBC pointers and pointer size) for proper cheat search support.
You can now access full 32K ram of GBC for example.
We set using the QWERT keyboard as a reference. These keys should
be located at fixed positions on most QWERT keyboards.
KEY | KEYBOARD
-------|----------
UP | W
DOWN | S
LEFT | A
RIGHT | D
A | L
B | K
R | O
L | I
SELECT | Backspace
START | Enter
- Fix#463.
Add option to remove all configuration related to checking for updates
online. Although it is not implemented at the moment, these options
appeared on our menu `Options` > `General ...`.
- Fix need of patch on #140.
It is not possible to pre-select a file with `wxFilePickerCtrl`. Hence,
we add a label to show the current gopts.{gba_bios,gb_bios,gbc_bios} is
being used, if any.
- Fix remaining of #196.
Several toggle options from the main menu could not be handled by the
key shortcuts. This was mainly because the code was only checking if
they were ticked or not.
When a key shortcut was pressed, the key itself did not trigger the
tick of the box from the menu, hence nothing was being done.
We are not setting the debug ones because they are not being missed
by the users (yet).
- Fix remaining of #88.
We use the following key input if the config `vbam.ini` does not exist:
input | keyboard
A | A
B | S
L | Q
R | W
SELECT | Z
START | X
We also set a joystick default, using the XBOX 360 controller as a
base.
- Fix#463.
The idea of these was to show them available in `Options` >
`Key shortcuts` and allow the user to rebind them. We want the users to
use the keys rather than trying to change the volume via menu actions.
Similar update to GBA which does the following:
- reduces input lag by 1 frame by reading user input at beginning of cpu loop
- audio and video timing update, which sends audio and video at every frame possible
- add missing sound state variable, soundTicks for gb and gba
Map initial state of axis to 0. This is sufficient for the time being
for the 360 triggers to work better.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Bump libgpg-error 1.27 -> 1.36 and add a patch to support gawk 5.0 from
gentoo.
Add meson to list of msys2 OS deps, this is not needed right now.
Remove glib `CreateFile` patch which has been removed from msys2
MINGW-packages master and add a couple of other patches.
Unfortunately using a newer glib release is not yet possible because of
weird linking errors with meson on mingw.
Add ninja to `host_dists` for `mingw.sh`, this is not needed currently.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Rewrite the `/bin/sh -c command` construct in `command()` correctly.
Update c2man url to the github mirror because it's dead.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
msys2 does not `/bin/command` or `/usr/bin/command`, check for these and
fall back to `/bin/sh -c "command $*"`.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Pass command-line arguments to `build_project()` for use in the cmake
command.
Make `$PROJECT_ARGS` override `$CMAKE_BASE_ARGS` for the project.
Override `command()` to call `/bin/command` to avoid the bash builtin
which has undesirable behavior when overriding commands.
Override `gpg` to invoke either the `gpg` or the `gpg2` binary,
whichever is available, or print a warning that gpg is not available.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
SDL APIs like `SDL_JoystickNumAxes(dev)` can return a negative error
code. Handle this case better.
This should fix the fatal exception from trying to allocate an array
with an illegal size (negative, due to the error.)
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
If the user pauses with the keybinding or the menu `Emulation` > `Pause`
while `Pause when inactive` is enabled, the game should not unpause when
the window receives focus again. It should wait for the user to trigger
the manual unpause.
- Fix#460.
Replace the vcpkg code with a newer and better version. In this version
the `vcpkg` directory is on the same level as the source directory, so
that IntelliSense does not get confused scanning for files.
The cmake variable `VCPKG_TARGET_TRIPLET` is required to activate vcpkg
support, it must be set to e.g. `x64-windows` or `x86-windows`.
Update `CMakeSettings.json` for the new code for the GUI.
Fix a problem copying the `SDL2.dll` file to the binary directory.
Update `README.md` with commandline instructions.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
It looks like that when we use the `Simple` output module, we get
weird errors when trying to load state for any game, most likely due to
memory corruption. AFAIK, it seems the frame buffer is not large enough
to render all components.
This issues does not appear when using OpenGL, or using the Simple with
any display filter available.
Add missing gettext calls for the game controls code.
Seems to work correctly in the Russian locale with special keys.
Also add CLion files to `.gitignore`.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
We use the same event for both keybinding and `Emulation` > `Pause`
actions. The issue here is that the menu item is checkable, meaning
that you toggle its value and then run the handler.
The handler checks the value of the menu item `Emulation` > `Pause`,
and toggle the game pause accordingly. Such thing does not happen when
using the keybinding. Hence, it did not toggle the pause as expected.
- Related to #454.
* Fix key shortcuts for save/load states.
We show the wrong description for these shortcuts, although it works
correctly for the keybinding.
* Use the proper labels for save/load states.
Check that SDL reports any available controls for a joystick, otherwise
mark it invalid and close it.
When processing events for joysticks, check that each one is valid.
Set initial value of controls to zero initially not after getting the
initial state, previously we were getting the initial state and
overwriting it with zeroes, defeating the purpose.
Fix memory leak, `curval` array of controls not being cleared.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Fix `homeDir` `ConfigManager` global pointing to freed memory.
Thanks to @FredericHamel for catching this.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Correct set WXK_NUMPAD_{ADD,SUBTRACT} for default volume controls and
enable users to change it via menu "Options > Key Shortcuts".
Also allow users to use both these buttons for other input.
Some keybindings were not handled by the frame. That includes some
wxAcceleratorEntry keys. On Linux, if you set a key shortcut using a key
with no modifier ("U" for "Input > Configure"), pressing the key would
not lead to anything.
This is very likely related to wxGTK, although it is not possible to
confirm this at the moment.
Whenever users try to remove the system keys shortcuts, the
configuration file is overwritten and only records the last erase.
For example, if we wish to remove all the auto{A,B,L,R} keys at once,
we get the following writes on the configuration file:
NOOP=ALT+1,ALT+2,ALT+3,ALT+4
NOOP=ALT+2,ALT+3,ALT+4
NOOP=ALT+3,ALT+4
NOOP=ALT+4
Only `NOOP=ALT+4` stays for the following execution.
Whenever there is a link connection for GBA, we check if "GBA/LinkHost"
is an empty string. If it is, we send this warning. This is unnecessary
because most connections are assumed to be for localhost, otherwise the
user would set a server ip address and not see this warning.
Currently, if we maximize the window, our windowPosition{X,Y} become 0.
When reopening the app, we have a window with the same size of a
maximized, but without this property toggled on. This is not intuitive
for users, since it is expected to have the last non-maximized size
to be restored.
If the status bar option is enabled or disabled, there is a trigger that
resizes the current window geometry to its zoom configuration. What
should happen instead is the size remain the same.
The default Mac OS environment on travis no longer has brew bottle
support, so jobs time out.
Add the `osx_image` key to specify Mac OS 10.14 and Xcode 10.2.1.
Also try to re-enable link support using SFML.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
In the `OnKeyDown` event handler, check if the key is actually pressed
using `wxGetKeyState()`, because for some reason on Ubuntu 18
spurious events are generated when the key is not actually pressed.
Also, if a game is paused by the frontend while a key is being pressed,
the key will remain active for the game when unpaused. This is an
issue because the key will likely be released outside of the game zone;
therefore, we would not process the key release for the game itself.
The same bug happens if clicking outside of the game zone while
holding a key.
For the case of a directional key, this means a continuous movement
in the direction of the key pressed before the pause until the key
is pressed and released.
Joysticks have their own set of {KEY,MOD,JOY}, what means that setting
everything for MOD=0 is a mistake. We need to deal only with keyboard
mappings here.
Currently the SFML brew does not compile in the travis mac environment,
so do not install SFML via `./installdeps` for brew if `$TRAVIS` is set,
and add `-DENABLE_LINK=OFF` to cmake options for the mac travis job.
Also try to cache the `/usr/local` directory, to make the brew installs
faster, if this even works.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
as a mapping key (#142).
When holding a key(W,A,S,D) and then pressing a modifier(SHIFT,CTRL,ALT),
we get two sets {MOD,MOD,0} and {KEY,MOD,0} with MOD > 0 after a
{KEY,0,0}. When releasing the initial key while holding the modifier,
we search for {KEY,MOD,0} instead of {KEY,0,0} to be removed.
Finally, when releasing the modifier, we remove {MOD,MOD,0} from our
stack. This means the {KEY,0,0} stays "pressed", although no input
is being taken from the keyboard.
Full example using WASD as movement keys and L_SHIFT as our B button.
1. Press and hold "A" --> add {A,0,0} to stack;
2. Press "L_SHIFT" --> add {L_SHIFT,4,0} and {A,4,0} to stack;
3. Release "A" --> remove {A,4,0} from stack (no effect);
4. Release "L_SHIFT" --> remove {L_SHIFT,4,0} from stack;
5. {A,0,0} still on stack.
No keyboard button is being pressed anymore, but there is a continuous
movement towards the direction mapped by "A" {A,0,0}. It is only fixed
when "A" is pressed two times in succession, because we don't add
duplicate sets to our stack, but try to remove them anyway.
Before trying to rename `vbam.conf` to `vbam.ini`, as we decided during
the XDG support work, first check if `vbam.ini` does not already exist.
If it already exists, use `vbam.ini` and do nothing with the
`vbam.conf`.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Black screen reported on linux with `LEGACY` OpenGL type, set it back to
`GLVND` and only use `LEGACY` on FreeBSD.
Broken in 2fedaa63.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Make some changes to support out-of-the-box builds on FreeBSD:
- set cmake OpenGL type to `LEGACY`, the new `GLVND` type produces
unusable binaries on FreeBSD
- on FreeBSD add -I/usr/local/include to compiler flags, why this is
necessary I don't know
- look for llvm tools such as `llvm-ar` in `/usr/local/llvm-devel/bin`,
LTO works
- improve the `find_wx_util()` cmake function to handle `wx-config`
scripts named in the form e.g. `wxgtk3u-3.1-config`
- add FreeBSD support to `installdeps`
- make some minor changes to included headers based on macros such as
`__FreeBSD__` to compile on FreeBSD, including adding a `BSD.h` header
with some defines for e.g. `fseeko64`
- move the cmake X11 detection to before the wx compile tests, because
otherwise the extra compile flags for the wx tests make the X11 tests
fail
- make some minor changes to fix wx 2.8 compatibilty again, we don't
actually use 2.8 for FreeBSD but I was testing it
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
description:If you experience a bug in the Emulator, please open an issue here and fill out the template.
title:"[Bug]: "
labels:["bug","triage"]
assignees:
-
body:
- type:markdown
attributes:
value:"## BEFORE REPORTING AN ISSUE"
- type:markdown
attributes:
value:|
Please try the nightly build from:https://nightly.visualboyadvance-m.org and factory resetting the emulator from the Help menu.
OnLinux build master from source or use the edge snap.
And last but not least, search for existing reports via the filters bar on the issues page.
- type:markdown
attributes:
value:"## If your joystick or gamepad isn't working in Linux"
- type:markdown
attributes:
value:|
Please try to troubleshoot using the information on this page:h ttps://wiki.archlinux.org/index.php/Gamepad **BEFORE** filing an issue.
We use SDL for joystick support, any problems will generally be an issue with SDL and **NOT** the emulator.
If relevant, the joystick you are using and the drivers you are using for it:
- type:textarea
id:what-should-happen
attributes:
label:Expected behavior?
description:How was the emulator supposed to behave
placeholder:Tell us what you expect to see!; use screenshots if necessary.
value:
validations:
required:true
- type:textarea
id:what-happened
attributes:
label:Actual behavior?
description:Describe the issue you encountered.
placeholder:Tell us what you see!; use screenshots if necessary.
value:
validations:
required:true
- type:textarea
id:repro
attributes:
label:Steps to reproduce the problem
description:"How do you trigger this bug? Please walk us through it step by step."
value:|
1.
2.
3.
4.
5.
...
validations:
required:true
- type:textarea
id:error-messages
attributes:
label:Error messages?
description:Was there an error message?
placeholder:List any exception messages here!; use screenshots if necessary.
value:|
If this is a crash bug, and you have the time and inclination, please provide a symbolic backtrace.
Instructions for doing so are [here](https://github.com/visualboyadvance-m/visualboyadvance-m/blob/master/README.md#reporting-crash-bugs).
validations:
required:false
- type:textarea
id:Rom_Details
attributes:
label:What game were you playing
description:"What is the specific rom that you encountered an issue with"
value:|
<Some of this information can be provided with a screenshot of Rom Information, SAVE TYPE for GBA titles can be obtained from Options > Game Boy Advance > Config>
Title:
GB, GBC or GBA:
ROM CODE:
BIOS Used?:(Share crc hash)
SAVE TYPE:(Attach Battery or Savestate here)
Clean, Intro'd or Hacked?:(Attach Patch here)
validations:
required:false
- type:textarea
id:Settings
attributes:
label:What settings are you using?
description:"Please list them"
value:|
Video driver (simple, opengl):
Sound driver (directsound, xaudio, openal, SDL):
Scale Filter Used?:
validations:
required:true
- type:textarea
id:SysInfo
attributes:
label:Specifications and Build details
description:"List your system information, you can obtain this from MSINFO32 and the emulators Titlebar."
value:|
VBA-M:(include commit version number and whether you are using the 32-bit or 64-bit version)
OS:(include version and OS build number using WinVer if on Windows):
If using Linux, specify if using xorg or Wayland:
CPU:
GPU:
RAM:
validations:
required:true
- type:checkboxes
id:Copyright_Compliance
attributes:
label:Copyright Compliance
description:Please do not attach any files that infringe on the copyright of Nintendo or its partners.
options:
- label:There are no infringing files attached to this bug report.
* 6dcf016d - GB: Allow support for colorizer patched games - a new core option is provided since enabling this support means allowing invalid access to vram and palette - works in GBC/GBA hardware mode only (3 months ago)
* 85bd86cf - GB: Send LCD interrupt only if there is no INT 48h signal (3 months ago)
- [Visual Boy Advance - M](#visual-boy-advance---m)
- [System Requirements](#system-requirements)
- [Building](#building)
- [Building a Libretro core](#building-a-libretro-core)
- [Visual Studio Support](#visual-studio-support)
- [Visual Studio Code Support](#visual-studio-code-support)
- [Dependencies](#dependencies)
- [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)
@ -14,69 +19,137 @@
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
[](https://gitter.im/visualboyadvance-m/Lobby)
message(FATAL_ERROR"Error updating vcpkg from git, please make sure git for windows is installed correctly, it can be installed from Visual Studio components")
- FINAL_VERSION: Defined for release versions, disables additional GBA logging and completely disables GB logging. Increases the amount of CPU cycles being emulated in one go.
- BKPT_SUPPORT
- VBAM_ENABLE_DEBUGGER: Enable remote debugging support
- MMX: Enable MMX instruction set
- NO_ASM: Use C++ version of hq3x/4x filters
- RGB555: Use 16bit colors with 5bit green instead of 6bit green in hq3x/4x filters (C++ version)
- NO_OGL: Exclude OpenGL code
- NO_D3D: Exclude Direct3D code
- NO_OAL: Exclude OpenAL code
- NO_XAUDIO2: Exclude XAudio2 code (the XAudio2 interface is DirectSound's successor)
- VBAM_ENABLE_XAUDIO2: Enable XAudio2 code (the XAudio2 interface is DirectSound's successor)
- VBAM_ENABLE_FAUDIO: Enable FAudio code (the FAudio interface is an open source multiplatform re-implementation of XAudio2)
You can find pre-built versions of zlib & libpng at:
http://spacy51.sp.funpic.de/VBA-M/libs/
Just extract them somewhere and point Visual C++ 2008 to the include & lib folders.
They are built with the static C runtime (this is what the release builds use).
###########################
# --- Build Systems --- #
###########################
===Win32/MFC===
This is the full-featured Windows build using the MFC GUI.
The project files are located in /project/vc2008_mfc (VBA2008.sln) and /project/vs2010_mfc (VBA2010.sln).
Anyone distributing builds should be using MSVC 2010 SP1, the unpatched release has a bug where it applies SSE2 updates to mov and other instructions resulting in illegal instruction errors on cpu's only supporting SSE.
You also have to install Microsoft's DirectX SDK for Direct3D, DirectInput & XAudio2.
If you want to enable OpenAL sound output, install the OpenAL SDK. If you do not want it, add NO_OAL to the VBA-M project's preprocessor definitions.
SubWCRev.exe is used to append the svn versioning to the output executable, this as of TortoiseSVN 1.7, is only available by installing TortoiseSVN.
All other dependencies for MSVC builds may be found in the ../dependencies directory (above /trunk).
Normally, Windows users will want to checkout the root of the repository instead of just the trunk directory. Afterwards, simply opening the .sln of choice, setting preprocessor definitions, and hitting build is all that's required.
===*nix/GTK===
===src/sdl===
This is the standard build configuration on non-Windows.
Running cmake will inform you of any packages you need to install.
===*/wxw===
The wxWidgets interface is an in-development frontend meant to be more cross-platform friendly than MFC and GTK.
===src/wx===
The wxWidgets interface is an in-development frontend meant to be more cross-platform friendly than MFC and SDL.
Running cmake will inform you of any packages you need to install.
NOTE: In addition to what cmake currently checks for, you will also need the wxrc tool and libgdiplus.
Try to install the dependencies needed for this project appropriately on the
host OS.
Try to install the dependencies needed for this project appropriately on the host OS.
This program may require [1;35msudo[0m.
A cross-compile target may be specified as the only parameter, of either
[1;35mm32[0m which targets the host in 32 bit mode (e.g. x86 on an amd64
host) or [1;35mwin32[0m, [1;35mMinGW-w64-i686[0m or
[1;35mMinGW-w64-x86_64[0m. [1;35mwin32[0m is an alias for
[1;35mMinGW-w64-i686[0m to target Windows via MinGW. Cross compiling for
Windows is only supported on Debian/Ubuntu, Fedora, Arch Linux and MSYS2.
A cross-compile target may be specified as the only parameter, of either [1;35mm32[0m which targets the host in 32 bit mode (e.g. x86 on an amd64 host) or [1;35mwin32[0m, [1;35mMinGW-w64-i686[0m or [1;35mMinGW-w64-x86_64[0m. [1;35mwin32[0m is an alias for [1;35mMinGW-w64-i686[0m to target Windows via MinGW. Cross compiling for Windows is only supported on Debian/Ubuntu, Fedora, Arch Linux and MSYS2.
On MSYS2 dependencies are installed for 32 or 64 bit native Windows targets
based on which shell you started (the value of $MSYSTEM) unless you specify one
or the other. You can specify a cross target of [1;35mm32[0m or
[1;35mm64[0m as aliases for the 32 bit or 64 bit targets respectively.
MSYS2 POSIX layer builds are not supported.
On MSYS2 the [1;35mMinGW-w64-clang-x86_64[0m target for CLANG64 and the [1;35mMinGW-w64-clang-i686[0m target for CLANG32 are also supported, as well as [1;35mMinGW-w64-ucrt-x86_64[0m for UCRT64.
On MSYS2 dependencies are installed for 32 or 64 bit native Windows targets based on which shell you started (the value of $MSYSTEM) unless you specify one or the other. You can specify a cross target of [1;35mm32[0m or [1;35mm64[0m as aliases for the 32 bit or 64 bit MinGW gcc targets respectively. MSYS2 POSIX layer builds are not supported.
[1m-h, --help, --usage[0m Show this help screen and exit.
[1m--no-openal[0m Do not install OpenAL dependencies.
[1m--no-ffmpeg[0m Do not install ffmpeg dependencies.
Examples:
[32m./installdeps[0m # install dependencies for a host build
[32m./installdeps [1;35mm32[0m # make a 32 bit binary for the host OS
[32m./installdeps [1;35mwin32[0m # cross-compile for 32 bit windows (Debian/Ubuntu, Arch Linux or MSYS2)
error "target must be one of 'm32', 'win32', 'MinGW-w64-i686' or 'MinGW-w64-x86_64'"
error "target must be one of 'm32', 'win32', 'win64', or one of the MinGW/clang/ucrt targets supported by MSYS2: mingw-w64-[clang|ucrt]-(x86_64|i686)."
error 'unknown cross target (this should not happen)'
;;
esac
# install static deps
for pkg in zlib gettext libpng SDL2 wxWidgets; do
for pkg in zlib gettext SDL2 wxWidgets3 openal-soft; do
set -- "$@" "${target}-${pkg}-static"
done
# install deps that are not available as static
for pkg in openal-soft; do
set -- "$@" "${target}-${pkg}"
done
# get the necessary win32 headers
git submodule update --init --remote --recursive
warning='SFML is required for LINK support, Fedora does not currently have a MinGW SFML package, if you want LINK support you will need to install it manually'
error 'unknown cross target (this should not happen)'
;;
esac
# install static deps
for pkg in zlib gettext libpng SDL2 wxWidgets; do
for pkg in zlib gettext SDL2 wxWidgets openal-soft; do
set -- "$@" "${target}-${pkg}-static"
done
# install deps that are not available as static
for pkg in openal-soft; do
set -- "$@" "${target}-${pkg}"
done
# get the necessary win32 headers
git submodule update --init --remote --recursive
warning='SFML is required for LINK support, RHEL/EPEL does not currently have a MinGW SFML package, if you want LINK support you will need to install it manually'
warning 'SFML is required for LINK support, the SFML package in AUR is currently broken, if you want LINK support you will need to install it manually'
fi
@ -902,9 +991,10 @@ solus_installdeps() {
check sudo eopkg -y update-repo
check sudo eopkg -y install -c system.devel
check sudo eopkg -y install git ccache
check sudo eopkg -y install git ccache ninja
set -- sdl2-devel wxwidgets-devel libgtk-2-devel libgtk-3-devel libglu-devel openal-soft-devel
set -- sdl2-devel openal-soft-devel wxwidgets-devel libgtk-2-devel libgtk-3-devel
if [ -n "$amd64" -a "$target" = m32 ]; then
info_msg 'Calculating dependencies, this will take a while..'
@ -958,8 +1048,6 @@ solus_installdeps() {
if [ -n "$amd64" -a "$target" = m32 ]; then
warning 'SFML is required for LINK support, there is no 32 bit SFML package in Solus currently, if you want LINK support you will need to install it manually'
warning 'ffmpeg is required for game recording, there is no 32 bit ffmpeg package in Solus currently, you may wish to install it manually'
for p in SDL2 ffmpeg openal sfml wxWidgets zlib binutils cmake crt-git extra-cmake-modules gcc gcc-libs gcc-libgfortran gdb headers-git make pkg-config tools-git windows-default-manifest libmangle-git nasm; do
for p in $pkgs; do
set -- "$@" "${target}-${p}"
done
# install
check pacman --noconfirm --needed -S git make zip ccache "$@"
case "$target" in
*clang*)
# We use gcc windres for now, llvm-rc is sometimes broken.
set -- "$@" mingw-w64-x86_64-binutils
;;
esac
cmake_flags="$cmake_flags -G 'MSYS Makefiles'"
# install
check pacman --noconfirm --needed -S git make zip "$@"