Compare commits

...

2494 Commits

Author SHA1 Message Date
Rafael Kitover
b499c2d58c Fix mem leak and wrong API use in Metal driver
Fix massive texture memory leak and some other things wrong with the
Metal driver as suggested by Claude.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-10-02 20:04:42 +00:00
Rafael Kitover
e8aa4467f1 build: disable default bundling of dylibs on macOS
Add CMake option `BUNDLE_DYLIBS` defaulting to `OFF` to bundle dynamic
libraries into the `.app` bundle. This was the default behavior for
`Release` previously.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-10-02 18:30:02 +00:00
Rafael Kitover
40c798ef99 "Claude Code Review workflow" 2025-10-02 14:13:51 +00:00
Rafael Kitover
63894ad3f7 "Claude PR Assistant workflow" 2025-10-02 14:13:51 +00:00
Rafael Kitover
68e7d98b85 Fix pause when inactive for new wxWidgets
Handle the Iconize event to pause when "pause when inactive" is enabled,
to work around a change in recent versions of wxWidgets that ignore this
unfocus event.

Fix #1494.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-10-01 17:05:39 +00:00
Rafael Kitover
ed1b7ff47c translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-09-30 16:00:34 +00:00
Rafael Kitover
ff7d1234ea translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-09-30 16:00:18 +00:00
Squall-Leonhart
e889e895f2 don't run Color Correct on SGB Hardware, Run GBA Color correct on GBC game run on GBA Hardware 2025-09-29 20:27:05 +00:00
Rafael Kitover
eb7c50017d Revert "SDL PixelArt test fix"
This reverts commit e0e639a02e.
2025-09-28 08:54:42 +00:00
Rafael Kitover
df66c6ff4a Revert "Check file size for GBA ROM and reduce memory footprint"
This reverts commit 56ea6456f5.
2025-09-28 08:54:26 +00:00
Squall Leonhart
e0e639a02e SDL PixelArt test fix 2025-09-28 15:29:17 +10:00
Brad Smith
ede668b712 Fixes for BSD build
- patch fixes for BSD handling
- OpenBSD/aarch64 has elf_aux_info()
- unrar build fix for FreeBSD/NetBSD/OpenBSD
- OpenBSD does not have librt

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-09-25 15:05:32 +00:00
Rafael Kitover
5bd8904746 build: fix check for SDL3 pixel art filter
Fix the CMake compile check for SDL_SCALEMODE_PIXELART to use
CheckSourceCompiles instead of CheckSymbolExists which does not work for
this purpose.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-09-21 19:33:29 +00:00
Rafael Kitover
46326939eb translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-09-19 05:00:21 +00:00
Brad Smith
3f005837dd Rename swap16/swap32 functions which conflict with OpenBSD macros 2025-09-19 01:28:30 +00:00
Rafael Kitover
2b3edb266a translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-09-18 14:00:23 +00:00
Rafael Kitover
8e5fc43dd6 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-09-18 13:00:23 +00:00
Rafael Kitover
362ca53cbe translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-09-18 02:00:23 +00:00
Rafael Kitover
9dc10ff6c4 translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-09-18 02:00:07 +00:00
Rafael Kitover
ab01be3373 Add option to enable SDL pixel art texture filter
Add a checkbox in display config to enable SDL_SCALEMODE_PIXELART when
it is available.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-09-18 01:22:47 +00:00
Rafael Kitover
6ec0ba0610 Apply bilinear option for SDL texture
Set the texture option for bilinear or nearest on the SDL texture
depending on the value of the bilinear checkbox.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-09-18 01:22:47 +00:00
Rafael Kitover
9fcc0ad7a8 build: fix finding static vcpkg x265 for FFmpeg
Fix finding static vcpkg x265 when it is named `x265-static.lib` as it
is right now.

Fix finding vcpkg host pkgconf on ARM64 Windows, which uses x64 host
binaries.

Remove build environment architecture check, which fails building x64 on
ARM64. That whole file needs to be rewritten to use the compiler target
architecture.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-09-13 20:59:08 -07:00
Rafael Kitover
32622efc1e translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-09-11 11:00:20 +00:00
Rafael Kitover
1dd5ba4567 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-09-04 08:00:21 +00:00
Rafael Kitover
2070f75934 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-09-03 18:00:30 +00:00
Rafael Kitover
89146a8597 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-09-03 17:00:21 +00:00
Rafael Kitover
043956753b translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-30 15:00:20 +00:00
Rafael Kitover
e0eb3b3dab translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-30 08:00:21 +00:00
Rafael Kitover
e3e14232f7 Set gba_darken opt default to 37
Set the GBA darken value default to 37 instead of 50, seems to look
pretty good.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-28 04:23:51 +00:00
Squall Leonhart
7565cac230 Update 2xSaI.cpp
The previous interpolation operator could cause the channels to bleed into the next when the LCD Color filter was enabled, on some starts, some settings.
2025-08-25 17:41:04 +10:00
Rafael Kitover
33c5aeb80e Default LCD Filter to enabled for GBA/GB
Set the defaults for GB and GBA LCD Filter to enabled and rewrite the
values in previous versions of the config to enabled as well.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-24 02:49:59 +00:00
Rafael Kitover
c5510ba28f ci: update install-nix-action to v31
Update the GitHub CI action install-nix-action to v31 and remove
references to apple_sdk from default.nix, they have been deprecated.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-23 22:04:19 +00:00
Rafael Kitover
96c23628ba Set default for gba_darken to 50
Set the default for the color correction option gba_darken to 50, which
is the nicest looking value.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-23 16:39:22 +00:00
Rafael Kitover
37fb449fc9 Remove gbafilter_pad/gbcfilter_pad, dead code
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-23 16:35:06 +00:00
Rafael Kitover
7519c9b818 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-23 01:00:20 +00:00
Rafael Kitover
24b779c09e translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-23 00:00:20 +00:00
Rafael Kitover
a17df26e52 build: fix Debian installdeps for current Ubuntu
Fix installdeps for Debian variants by checking for `libsdl3-dev` and
falling back to `libsdl2-dev` if not available.

Also add `libx264-dev` and `libx265-dev` to the list of FFmpeg packages
as we now require them.

Fix #1486

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-21 22:53:33 +00:00
Rafael Kitover
b2dd03c6cb build: guard cmake_policy() w if(POLICY)
Check if CMake policies being set exist to prevent errors on older CMake
versions.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-21 20:49:32 +00:00
Andy Vandijck
967426e2f0 Fix color change with previous check 2025-08-21 09:17:54 +02:00
Rafael Kitover
ee2678c13c translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-20 20:00:20 +00:00
Rafael Kitover
337e465741 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-20 19:00:19 +00:00
Andy Vandijck
5007977189 Add capital begin letter 2025-08-20 16:36:27 +02:00
Andy Vandijck
99f97138a2 Add LCD filter parameters and add GBC filter 2025-08-20 16:31:05 +02:00
Andy Vandijck
5b867c1483 Fix color name 2025-08-19 15:27:37 +02:00
Andy Vandijck
fe08f4d326 Remove quoted code 2025-08-19 15:26:12 +02:00
Andy Vandijck
c334e3ffca Fix PS2 colors for libretro 2025-08-19 15:20:49 +02:00
Andy Vandijck
35f8ba0b8f Add libretro PlayStation2 support 2025-08-18 16:12:29 +02:00
Andy Vandijck
fca5fae329 Check file size for GBA ROM and reduce memory footprint 2025-08-17 16:02:26 +02:00
Andy Vandijck
56ea6456f5 Check file size for GBA ROM and reduce memory footprint 2025-08-17 16:01:20 +02:00
Rafael Kitover
0510656ca3 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-13 00:00:20 +00:00
Squall-Leonhart
b92fcf7e31 prevent the zip program from being incompletely downloaded
\
2025-08-11 14:41:19 +00:00
Andy Vandijck
22f381a19e Update macOS SDL3 to 3.2.20 2025-08-08 10:01:06 +02:00
Andy Vandijck
e9fc6c8e13 Update macOS SDL3 to 3.2.20 2025-08-08 10:00:04 +02:00
Rafael Kitover
bd20c79013 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-07 10:00:21 +00:00
Andy Vandijck
203be42665 Fix typo 2025-08-07 11:45:40 +02:00
Andy Vandijck
d75072009b Set params when no image is loaded 2025-08-07 11:39:59 +02:00
Andy Vandijck
0e32b90002 Fix LCD color filter 2025-08-07 10:45:11 +02:00
Rafael Kitover
2640716496 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-07 07:00:20 +00:00
Rafael Kitover
b065db66d9 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-06 10:00:20 +00:00
Rafael Kitover
4d837fd739 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-05 21:00:19 +00:00
Rafael Kitover
1ef356c6f0 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-05 08:00:23 +00:00
Rafael Kitover
a8c82bb4a1 translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-05 08:00:07 +00:00
Rafael Kitover
1778d605f4 Add config for color correction
Add display config dialog and config file options for GBA and GBC color
correction.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-05 07:29:50 +00:00
Rafael Kitover
d6d2a83e7e translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-04 15:00:19 +00:00
Rafael Kitover
881667a5f8 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-04 13:00:24 +00:00
Rafael Kitover
b332aa693d translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-04 13:00:07 +00:00
Rafael Kitover
7f7035a07b translations: finish removing German
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-04 12:01:47 +00:00
Rafael Kitover
3e355509e9 build: restore FindFFmpeg.cmake
Restore `FindFFmpeg.cmake`, because FFmpeg does not come with CMake
import modules.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-04 11:56:18 +00:00
Rafael Kitover
e68681ffda translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-03 15:00:19 +00:00
Andy Vandijck
f83aa940d7 Fix GB reset
Fix GB reset
2025-08-03 13:27:26 +02:00
Andy Vandijck
a18559678c Fix MS compile
Fix MS compile
2025-08-03 13:09:59 +02:00
Andy Vandijck
d927594af2 Fix MS compile
Fix MS compile
2025-08-03 13:06:32 +02:00
Andy Vandijck
06507775e8 Replace nullptr with NULL
Replace nullptr with NULL
2025-08-03 11:52:14 +02:00
Andy Vandijck
b08ecd123d Fix libretro 24 bit color
Fix libretro 24 bit color
2025-08-03 10:44:43 +02:00
Andy Vandijck
d154a6abc8 Add games app category for macOS (optimisations)
Add games app category for macOS (optimisations)
2025-08-03 10:33:47 +02:00
Andy Vandijck
b134bacc45 Fix SDL audio on Windows
Fix SDL audio on Windows
2025-08-03 10:08:27 +02:00
Andy Vandijck
9ae1473f36 Fix 8 bit PNG recording
Fix 8 bit PNG recording
2025-08-02 11:27:21 +02:00
Andy Vandijck
9cd0c5c04c Fix 8 bit video recording
Fix 8 bit video recording
2025-08-02 11:10:00 +02:00
Andy Vandijck
9e41c5476a Fix 8 bit color
Fix 8 bit color
2025-08-02 10:20:05 +02:00
Andy Vandijck
e91171459d Fix policy in newer CMake 2025-08-02 09:49:22 +02:00
Andy Vandijck
16f008b448 Fix macOS build
Fix macOS build
2025-08-02 09:38:42 +02:00
Rafael Kitover
bad10342bd build: use pkg-config on UNIX for SDL3
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-02 06:20:37 +00:00
Squall Leonhart
06b3cb094e Merge pull request #1484 from Squall-Leonhart/Correct24bit
24bit was prone to corrupting g_pix on all renderers
2025-08-02 07:50:07 +10:00
Squall-Leonhart
82617ea75d correct memory alignment 2025-08-02 07:48:03 +10:00
Andy Vandijck
0561ef91a4 Fix CoreAudio stall
Fix CoreAudio stall
2025-08-01 09:48:58 +02:00
Rafael Kitover
afc6a1cc3a build: fix build, de translation removed
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-01 04:40:38 +00:00
Rafael Kitover
35df9d7647 translations: remove German, not German
Remove the `de` translation as it does not contain a German translation.
Also deleted from Transifex.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-01 03:10:01 +00:00
Rafael Kitover
031ae2ebf6 build: fix CMake slowness
Optimize the `find_wx_util` function to try the major and minor version
parsed from the lib file first, avoiding a very slow exhaustive search
of possible version numbers.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-01 03:05:55 +00:00
Squall Leonhart
6242679e23 initialise stereo_buffer to 0 to prevent a race condition 2025-08-01 12:12:44 +10:00
Rafael Kitover
537393a0ab translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-31 16:00:20 +00:00
Rafael Kitover
616f7abc4e translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-31 13:00:21 +00:00
Rafael Kitover
f1414000e6 doc: fix release commit instructions
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-30 11:49:27 +00:00
Rafael Kitover
e2a235768e release v2.2.2
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-30 11:46:32 +00:00
Rafael Kitover
1d54ee2135 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-30 07:00:21 +00:00
Rafael Kitover
013a9b87ac translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-30 03:00:20 +00:00
Rafael Kitover
a06d3ed1b4 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-30 01:00:22 +00:00
Rafael Kitover
b1bad9d53d translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-30 01:00:06 +00:00
Rafael Kitover
d2eed85c28 Move Languages menu to the top level
Move the new Languages menu to the top level after Help to make it
easier to find.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-30 00:09:05 +00:00
Rafael Kitover
d5a37e06aa translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-29 10:00:20 +00:00
Rafael Kitover
cea049161d translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-29 05:00:20 +00:00
Rafael Kitover
3eadc6e78f translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-28 16:00:19 +00:00
Rafael Kitover
4f3ed0dc8b translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-28 15:00:23 +00:00
Rafael Kitover
d38e1d0f89 translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-28 15:00:06 +00:00
Andy Vandijck
f870bf252d Merge branch 'master' of github.com:visualboyadvance-m/visualboyadvance-m 2025-07-28 16:46:15 +02:00
Andy Vandijck
536ea705ab Add option for external translations (windows) and fix retain of language selection
Add option for external translations (windows) and fix retain of language selection
2025-07-28 16:46:12 +02:00
Rafael Kitover
802162ad97 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-28 14:00:26 +00:00
Rafael Kitover
25895e8636 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-28 12:00:24 +00:00
Rafael Kitover
27e7aa6864 translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-28 12:00:07 +00:00
Andy Vandijck
dd7461103b Fix resource load for catalogs for Windows
Fix resource load for catalogs for Windows
2025-07-28 13:54:30 +02:00
Andy Vandijck
c892c269fa Merge branch 'master' of github.com:visualboyadvance-m/visualboyadvance-m 2025-07-28 13:14:10 +02:00
Andy Vandijck
dcf87c0a71 Implement refresh of GUI on language load
Implement refresh of GUI on language load
2025-07-28 13:13:57 +02:00
Rafael Kitover
6d1e7e8069 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-28 09:00:20 +00:00
Rafael Kitover
b8868fce37 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-28 08:00:18 +00:00
Rafael Kitover
d92c4e465f translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-27 16:00:20 +00:00
Andy Vandijck
bceb138961 Fix SDL crash on Windows
Fix SDL crash on Windows
2025-07-27 14:48:38 +02:00
Rafael Kitover
83aa80440e translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-27 12:00:25 +00:00
Rafael Kitover
4bd54ba128 translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-27 12:00:07 +00:00
Andy Vandijck
27acf80b80 Make language configurable (requires restart)
Make language configurable (requires restart)
2025-07-27 13:27:09 +02:00
Andy Vandijck
ae09ab7189 Embed translations for Windows
Embed translations for Windows
2025-07-26 15:19:45 +02:00
Andy Vandijck
ce8de563e3 Merge branch 'master' of github.com:visualboyadvance-m/visualboyadvance-m 2025-07-26 12:28:50 +02:00
Andy Vandijck
47a8e7e8ed Update wxWidgets for Mac builder to 3.3.1
Update wxWidgets for Mac builder to 3.3.1
2025-07-26 12:28:47 +02:00
Rafael Kitover
adbaeacf20 build: use OpenSSL for FFmpeg for Mac builder
Link FFmpeg to OpenSSL for the Mac builder for the TLS functionality it
needs.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-25 11:53:22 -07:00
Rafael Kitover
8d8ecd8dfa build: remove glib from Mac builder
Remove glib from the Mac builder, it is not a dependency of anything on
Mac.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-25 01:55:50 -07:00
Andy Vandijck
cfbfc9ecb0 Fix glib build
Fix glib build
2025-07-25 10:35:42 +02:00
Andy Vandijck
4445a20d9c Merge branch 'master' of github.com:visualboyadvance-m/visualboyadvance-m 2025-07-25 10:06:24 +02:00
Andy Vandijck
b83a7c8aa2 Add Wii U ARM instruction to the instruction table
Add Wii U ARM instruction to the instruction table
2025-07-25 10:06:21 +02:00
Rafael Kitover
66aabab61f build: yet another Mac builder fix
Remove header paths from flags, keep frameworks path.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-24 20:46:37 -07:00
Rafael Kitover
a5e6b57fd8 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-24 16:00:21 +00:00
Rafael Kitover
b9061ddafd translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-24 15:00:22 +00:00
Rafael Kitover
3c291ef3ac translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-24 14:00:21 +00:00
Andy Vandijck
e44c83e1d0 log Wii U VC opcodes and address
log Wii U VC opcodes and address
2025-07-24 13:09:42 +02:00
Andy Vandijck
8ce4848dd6 Fix Wii U VC opcodes
Fix Wii U VC opcodes
2025-07-24 13:06:09 +02:00
Andy Vandijck
34cba3bb2c Fix build for macOS
Fix build for macOS
2025-07-24 12:00:45 +02:00
Andy Vandijck
9b78b26010 Fix dependency build
Fix dependency build
2025-07-24 11:26:46 +02:00
Andy Vandijck
94f9df4baa Fix build for macOS
Fix build for macOS
2025-07-24 11:12:56 +02:00
Rafael Kitover
c726989d67 build: improve Metal toolchain detection on Mac
Use `xcrun -f metal` to set the path to the Metal compiler, falling back
to the `CheckLanguage` CMake module if that fails.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-23 17:29:58 -07:00
Rafael Kitover
3344e7cf71 build: add path to Metal compiler for Mac
Try to add the path to the Metal compiler on Mac to `CMAKE_PROGRAM_PATH`
to help it find the Metal compiler.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-23 13:12:51 -07:00
Rafael Kitover
3d69bde8cb build: fix adding/removing Mac SDK paths in flags
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-23 13:04:48 -07:00
Andy Vandijck
09984eed2f Fix path for metal
Fix path for metal
2025-07-23 21:42:25 +02:00
Andy Vandijck
69809ff556 Fix compile of flac
Fix compile of flac
2025-07-23 21:05:10 +02:00
Andy Vandijck
80dec6a38d Fix glib macOS frameworks
Fix glib macOS frameworks
2025-07-23 20:39:54 +02:00
Andy Vandijck
ea7b9e5049 Fix glib build
Fix glib build
2025-07-23 20:29:56 +02:00
Andy Vandijck
18701fc0a4 Fix glib patch
Fix glib patch
2025-07-23 20:10:54 +02:00
Andy Vandijck
6b596c7ad7 Fix patch for glib 2025-07-23 20:06:36 +02:00
Andy Vandijck
3c01643112 Fix glib build
Fix glib build
2025-07-23 20:00:54 +02:00
Rafael Kitover
0895c7a52e build: fix Intel zip name building on Mac ARM64
Try to set the architecture correctly when compiling for Intel on ARM64
Macs, this also sets the zip name correctly for our releases.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-23 09:21:53 -07:00
Andy Vandijck
1e52787078 Fix build on macOS
Fix build on macOS
2025-07-23 18:05:07 +02:00
Andy Vandijck
fc0e63d554 Fix libicu build
Fix libicu build
2025-07-23 17:32:35 +02:00
Andy Vandijck
9b573f4465 Update 7z to 2500 and fix 7zip build
Update 7z to 2500 and fix 7zip build
2025-07-23 16:14:51 +02:00
Rafael Kitover
51ae605850 build: fix -intel build for Mac builder
Make some adjustments to the Mac builder for the Intel build to build
with `-intel`.

Remove unzip and zip and replace with 7zip.

Remove `-mtune=generic` from the base flags.

Remove flex and swig and use them from brew.

Add giflib, needed by libwebp.

Add the `no_autotools_cross_options` and
`remove_arch_flags_from_build_ninja` dist flags.

Set intel macOS target to 10.10 when on an ARM64 host.

Add a patch for glib to build with an older macOS.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-23 06:31:36 -07:00
Andy Vandijck
ac4b39b6d8 Fix save/load state for matrixed ROMs
Fix save/load state for matrixed ROMs
2025-07-23 10:40:39 +02:00
Andy Vandijck
97ca69d050 Fix build
Fix build
2025-07-23 10:09:28 +02:00
Andy Vandijck
b1bcaed3a2 Remap matrix on load
Remap matrix on load
2025-07-23 10:07:32 +02:00
Andy Vandijck
2a1b41040d Fix matrix save state data and fix libretro 64MB ROM
Fix matrix save state data and fix libretro 64MB ROM
2025-07-23 09:57:46 +02:00
Andy Vandijck
930d0e282c A few extra fixes 2025-07-22 19:09:10 +02:00
Andy Vandijck
df23826721 Fix g_rom2 free
Fix g_rom2 free
2025-07-22 19:01:23 +02:00
Andy Vandijck
de46284747 Implement 64MB ROM files and fix ROM load
Implement 64MB ROM files and fix ROM load
2025-07-22 18:57:17 +02:00
Andy Vandijck
715f685447 Fix multi cart
Fix multi cart
2025-07-21 13:21:23 +02:00
Andy Vandijck
eabf319c9a Fix ROM load
Fix ROM load
2025-07-21 12:51:08 +02:00
Rafael Kitover
c98263603d build: fix Mac build
Followup on 9d46f8e6 (build: fix Mac builder regression, 2025-07-20) to
add this `DIST_FLAGS` flag for bison as well, because it also uses this
header file.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-20 18:41:14 +00:00
Rafael Kitover
9d46f8e6d1 build: fix Mac builder regression
Fix the Mac build, broken by 8c3d0f09 (build: fix regression in Mac
builder, 2025-07-19) due to the SDK paths conflicting with a gettext
header.

Fix this regression by introducing the `DIST_FLAGS` feature with a
`no_sdk_paths_in_flags` flag that `build_dist()` treats specially to
remove the include and lib SDK paths from `CPPFLAGS` and `LDFLAGS`.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-20 16:14:00 +00:00
Andy Vandijck
dab91fc8ca Fix bigger than 32MB ROM files
Fix bigger than 32MB ROM files
2025-07-20 15:44:39 +02:00
Andy Vandijck
d672d425be Get BZ2 uncompressed size
Get BZ2 uncompressed size
2025-07-20 14:45:01 +02:00
Andy Vandijck
53d60b726d Merge branch 'master' of github.com:visualboyadvance-m/visualboyadvance-m 2025-07-20 12:58:27 +02:00
Andy Vandijck
b6ce89bff8 Fix BZ2 max cart size
Fix BZ2 max cart size
2025-07-20 12:58:24 +02:00
Rafael Kitover
8c3d0f0984 build: fix regression in Mac builder
Fix the Mac builder, broken by 3d4c03d0 (build: fix Mac M1 build on my
Mini, 2025-07-19). Remove `-lintl -liconv` from `LDFLAGS` because they
are not available before they are built.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-19 17:23:18 +00:00
Rafael Kitover
3d4c03d0e6 build: fix Mac M1 build on my Mini
Fix the Mac builder on my M1 Mini.

Update glib and get it building.

Add command line tools include and lib directories to flags.

Add a necessary clang flag to fix vbam build with CoreAudio.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-19 17:16:20 +00:00
Rafael Kitover
92230e0003 release v2.2.1
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-19 10:23:56 +00:00
Rafael Kitover
88d58db0e9 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-19 02:00:23 +00:00
Rafael Kitover
4d4c06b26b build: fix bundled SFML includes for Win32
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-18 18:32:42 +00:00
Rafael Kitover
23a3d0b20f build: fix include paths for bundled SFML
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-18 01:30:16 +00:00
Rafael Kitover
53f5ec7b7d build: fix building with OpenAL enabled
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-16 16:26:38 +00:00
Rafael Kitover
61f93348ca build: make bundled SFML includes SYSTEM BEFORE
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-16 16:14:34 +00:00
Andy Vandijck
9a78ecbab3 src/wx/widgets/wxmisc.cpp from Squall-Leonhart/TaskbarFixWin
Several fixes for windows
2025-07-16 11:15:23 +02:00
Rafael Kitover
3ffbe7816a translations: remove ja_JP, 0% and ja exists
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-16 01:53:34 +00:00
Squall Leonhart
2064af05b4 comment for BindAppIcon change 2025-07-16 09:07:03 +10:00
Squall-Leonhart
ae8bfb4ab3 Several fixes for windows
improve on the fex type check, so it works on windows x86/64
move BindAppIcon from BindControls in guiinit.cpp to wxvbam to avoid a timing issue that see's the icon not populated on windows till late.
adds 3 more icon sizes to the icon on windows.
2025-07-16 07:56:24 +10:00
Rafael Kitover
1f3a1cb9dc build: fix re-downloading vcpkg binary packages
Fix re-installing binary packages on next cached run by clearing the
cache entries for `vcpkg list`. Also remove the binary packages
directory after installing.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-15 21:05:07 +00:00
Rafael Kitover
bbaf70c083 build: fix slow CMake vcpkg startup time
Set the CMake cache variables for `vcpkg list` in `CACHE` instead of
`PARENT_SCOPE`, because the parent scope is now a transient function and
nothing was being cached, causing very slow run speed.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-15 16:46:17 +00:00
Rafael Kitover
b96e0ad35c build: remove vcpkg update, it does nothing
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-15 15:25:39 +00:00
Andy Vandijck
96324ddb92 Fix load
Fix load
2025-07-15 10:47:07 +02:00
Andy Vandijck
dca119905a Fix GBA sound
Fix GBA sound
2025-07-15 10:11:51 +02:00
Andy Vandijck
6a702ad09b Fix type detection for file extractor
Fix type detection for file extractor
2025-07-14 13:58:00 +02:00
Andy Vandijck
796ecee8cf Fix type detection for file extractor
Fix type detection for file extractor
2025-07-14 13:57:40 +02:00
Rafael Kitover
c1d3d19d6b translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-13 21:00:19 +00:00
Rafael Kitover
f7a79bfe2e build: fix binpkg deps resolution yet again
Keep a list of already installed dependencies and use the count to
determine if any are not installed.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-13 18:12:37 +00:00
Rafael Kitover
f8c52377a3 build: fix binpkg hostdeps again
Followup on 357eccc6 (build: fix checking if bin pkg host deps
installed, 2025-07-13) keep a count of already installed host deps, and
when the host deps count is equal to it rather than zero, break out of
the loop. This fixes the infinite loop and hang caused by host deps
being required but already being installed.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-13 16:17:48 +00:00
Rafael Kitover
357eccc6eb build: fix checking if bin pkg host deps installed
Fix the check for host dependency packages being downloaded to not run
if the package is already installed.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-13 16:03:31 +00:00
Andy Vandijck
80f595c0b0 Fix debug build
Fix debug build
2025-07-13 15:18:00 +02:00
Andy Vandijck
1c73f0c7d3 Fix configure
Fix configure
2025-07-13 15:06:21 +02:00
Andy Vandijck
3aff3784cf Update BZ2 library for windows debug
Update BZ2 library for windows debug
2025-07-13 14:58:33 +02:00
Andy Vandijck
59fa419820 Reduce allocated memory after read for BZ2
Reduce allocated memory after read for BZ2
2025-07-13 14:13:46 +02:00
Rafael Kitover
b0820a28b6 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-13 10:00:19 +00:00
Andy Vandijck
a782c1c5fe Fix CI
Fix CI
2025-07-13 11:12:57 +02:00
Andy Vandijck
16a73fcbcf Fix LZMA MSVC build
Fix LZMA MSVC build
2025-07-13 10:24:00 +02:00
Andy Vandijck
9ff3b9e3b7 Merge branch 'master' of github.com:visualboyadvance-m/visualboyadvance-m 2025-07-13 10:11:06 +02:00
Andy Vandijck
379be68f69 Tar recognition
Tar recognition
2025-07-13 10:11:02 +02:00
Rafael Kitover
8bfb39b3ad translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-13 08:00:26 +00:00
Rafael Kitover
d97c8eabf5 translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-13 08:00:07 +00:00
Andy Vandijck
e42e6323e8 Merge branch 'master' of github.com:visualboyadvance-m/visualboyadvance-m 2025-07-13 09:39:50 +02:00
Andy Vandijck
d0463ddb5e Initial tar support
Initial tar support
2025-07-13 09:39:38 +02:00
Rafael Kitover
1da359ba22 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-12 16:00:19 +00:00
Andy Vandijck
15612c2bcc Add BZ2 and LZMA support options
Add BZ2 and LZMA support options
2025-07-12 17:32:28 +02:00
Andy Vandijck
11a941f33d Set max rom size (32MB) to BZ2 and fix block size
Set max rom size (32MB) to BZ2 and fix block size
2025-07-12 14:25:02 +02:00
Andy Vandijck
a808cfb6f5 Update macOS plist
Update macOS plist
2025-07-12 13:44:52 +02:00
Andy Vandijck
0266b9e4d1 Optimize LZ size detection
Optimize LZ size detection
2025-07-12 13:27:47 +02:00
Andy Vandijck
ef01f4c491 Fix bz2
Fix bz2
2025-07-12 13:14:37 +02:00
Andy Vandijck
d784b60aaa Fix BZ2 size
Fix BZ2 size
2025-07-12 13:11:59 +02:00
Rafael Kitover
67b17f50ec translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-12 09:00:22 +00:00
Rafael Kitover
be6addf034 translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-12 09:00:06 +00:00
Andy Vandijck
d9b58d683e Add .lz extension
Add .lz extension
2025-07-12 10:54:22 +02:00
Andy Vandijck
604f5412a6 Add LZIP support
Add LZIP support
2025-07-12 10:52:17 +02:00
Rafael Kitover
de64dfd9e9 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-12 07:00:23 +00:00
Rafael Kitover
024ae098e6 translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-12 07:00:06 +00:00
Andy Vandijck
3d7cce05aa Fix Linux build 2025-07-12 08:18:51 +02:00
Rafael Kitover
205459f7ae build: add bzip2 and liblzma[tools] to vcpkg ports
Add `bzip2` and `liblzma[tools]` to the vcpkg ports dependencies list
for the new `.bz2` and `.xz` support.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-11 19:31:20 +00:00
Andy Vandijck
3ac5aa4f27 Add .xz extension
Add .xz extension
2025-07-11 19:57:32 +02:00
Andy Vandijck
6fedbdc512 Add .xz support
Add .xz support
2025-07-11 19:55:09 +02:00
Andy Vandijck
996a827d8e Merge branch 'master' of github.com:visualboyadvance-m/visualboyadvance-m 2025-07-11 16:38:50 +02:00
Andy Vandijck
0c91d45627 Add .bz2 file support
Add .bz2 file support
2025-07-11 16:38:46 +02:00
Andy Vandijck
3cf6ac5a80 Optimize unrar for MinGW
Optimize unrar for MinGW
2025-07-11 15:56:47 +02:00
Rafael Kitover
c5d1862e4e build: fix x86-mingw build
Amend the cpp macro checks in the unrar code to fix the build for MinGW.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-11 06:33:10 +00:00
Andy Vandijck
c63469ac63 Fix warnings 2025-07-10 13:54:40 +02:00
Andy Vandijck
3e0541c639 Update unrar to V7.1.8
Update unrar to V7.1.8
2025-07-10 11:14:41 +02:00
Andy Vandijck
00e48e11e6 Fix RAR support
Fix RAR support
2025-07-10 11:03:05 +02:00
Rafael Kitover
07c6e3119e build: remove vcpkg pkgconf dep
Remove pkgconf from the list of vcpkg dependency packages, because it is
automatically installed as a host build dependency and an explicit
dependency on the target triplet package is not required.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-09 14:42:37 +00:00
Andy Vandijck
3d8ed512cf Use macOS 10.10 Sparkle 2025-07-09 16:14:06 +02:00
Andy Vandijck
e49cce5b9e Update win32-deps submodule to latest version
Update win32-deps submodule to latest version
2025-07-09 14:29:11 +02:00
Rafael Kitover
1dfd7ec121 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-09 07:00:24 +00:00
Rafael Kitover
f1beea9214 release v2.2.0
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-08 22:40:16 +00:00
Rafael Kitover
865add067d Adjust throttle limit 450 -> 1000
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-08 16:45:42 +00:00
Andy Vandijck
22c620967d Fix fullscreen window for SDL only 2025-07-08 14:51:43 +02:00
Rafael Kitover
8dfc9fa14b translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-08 11:00:19 +00:00
Andy Vandijck
20db98897d Add dark mode support
Add dark mode support
2025-07-07 20:44:54 +02:00
Rafael Kitover
8a2cec5790 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-07 14:00:20 +00:00
Andy Vandijck
78a1c42162 Fix crash when closing D3D9 window
Fix crash when closing D3D9 window
2025-07-07 15:13:19 +02:00
Andy Vandijck
469c8713b8 Merge branch 'master' of https://github.com/visualboyadvance-m/visualboyadvance-m 2025-07-07 13:19:15 +02:00
Andy Vandijck
ec3e46abc8 Fix indent
Fix indent
2025-07-07 13:19:10 +02:00
Andy Vandijck
f69ce0de0f Fix macOS FAudio linking
Fix macOS FAudio linking
2025-07-07 12:52:14 +02:00
Andy Vandijck
08027f0f38 Merge branch 'master' of https://github.com/visualboyadvance-m/visualboyadvance-m 2025-07-07 12:44:58 +02:00
Andy Vandijck
e018c1c41a Fix D3D window close
Fix D3D window close
2025-07-07 12:44:50 +02:00
Rafael Kitover
4b6454bac5 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-07 10:00:28 +00:00
Rafael Kitover
e36d436174 translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-07 10:00:06 +00:00
Andy Vandijck
d49e6a31e2 Fix fullscreen for DX9 and fix input for DX9 window
Fix fullscreen for DX9 and fix input for DX9 window
2025-07-07 11:50:57 +02:00
Andy Vandijck
08ffe49414 Find AVFormat first
Find AVFormat first
2025-07-07 10:41:50 +02:00
Andy Vandijck
c76edf74c6 Fix MinGW build
Fix MinGW build
2025-07-07 10:07:13 +02:00
Rafael Kitover
fac5d565aa build: use vcpkg host pkgconf when cross compiling
For vcpkg, set `PKG_CONFIG_EXECUTABLE` to the host `pkgconf.exe` when
the host is x64.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-06 21:05:56 +00:00
Rafael Kitover
5702bc5102 build: fix x64-mingw-static for MSYS2 CLANG64
Don't set the compilers to `gcc` for MinGW vcpkg triplets, because it
may be CLANG64 with MinGW.

Link FAudio using the `-static` target or the normal target only.

Use `ghc::filesystem::path::c_str()` to pass paths to `std::fstream` as
there is a conversion problem with this toolchain.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-06 19:11:41 +00:00
Andy Vandijck
99f2530d37 Include FAudio in macOS
Include FAudio in macOS
2025-07-06 15:06:24 +02:00
Andy Vandijck
adedc507cf Fix macOS link
Fix macOS link
2025-07-06 14:48:53 +02:00
Andy Vandijck
5745ed3d8d Use external libwebp and use built pcre2
Use external libwebp and use built pcre2
2025-07-06 14:46:12 +02:00
Andy Vandijck
5f866f8567 Revert beeping fix and fix again the previous way
Revert beeping fix and fix again the previous way
2025-07-06 14:20:13 +02:00
Andy Vandijck
7ce5b4940d wxFC_SAVE fix for wxWidgets
wxFC_SAVE fix for wxWidgets
2025-07-06 14:06:36 +02:00
Andy Vandijck
27dc60f2d1 Try to fix generic file dialog save
Try to fix generic file dialog save
2025-07-06 10:44:15 +02:00
Andy Vandijck
8002f91c1c Fix save dialog
Fix save dialog
2025-07-06 08:55:31 +02:00
Rafael Kitover
cc2bda6991 build: inst host deps for bins only if not
Before installing calculated host dependencies for binary packages,
check if they are already installed.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-05 17:14:49 +00:00
Andy Vandijck
e8eada5658 Merge branch 'master' of https://github.com/visualboyadvance-m/visualboyadvance-m 2025-07-05 14:35:16 +02:00
Andy Vandijck
1de7b60e5b Find AVFormat first
Find AVFormat first
2025-07-05 14:35:06 +02:00
Rafael Kitover
cdac9d445c translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-05 10:00:20 +00:00
Andy Vandijck
2a4697c04f Fix warning
Fix warning
2025-07-05 10:21:58 +02:00
Andy Vandijck
d7c6eb81cd Fix MinGW FFMpeg
Fix MinGW FFMpeg
2025-07-05 10:16:56 +02:00
Andy Vandijck
43a6a90a8c Fix FFMPEG for macOS 2025-07-04 15:59:30 +02:00
Andy Vandijck
54f56fc984 Fix libx265 build for macOS 2025-07-04 15:31:32 +02:00
Andy Vandijck
4bde911531 Set title as const char *
Set title as const char *
2025-07-04 11:29:24 +02:00
Andy Vandijck
31cfe30468 Fix MinGW compile with title of DX9 window
Fix MinGW compile with title of DX9 window
2025-07-04 10:28:42 +02:00
Andy Vandijck
2f8369c3c7 Merge branch 'master' of https://github.com/visualboyadvance-m/visualboyadvance-m 2025-07-04 10:10:12 +02:00
Andy Vandijck
2c17201cdd Separate window for SDL direct3d9 with background input
Separate window for SDL direct3d9 with background input
2025-07-04 10:10:06 +02:00
Rafael Kitover
6f5c785a35 build: add x264+x265 for ffmpeg for macOS
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-03 20:08:37 +00:00
Rafael Kitover
05d181849a build: rm FindFFmpeg for distro ver, fix x264/x265
Remove our copy of FindFFmpeg.cmake, as this module is included in
distributions now.

This also fixes the problem with finding x264 and x265 components and
libraries for FFmpeg.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-03 19:45:04 +00:00
Andy Vandijck
6505ca17df Add normal types for direct3d9
Add normal types for direct3d9
2025-07-03 13:35:45 +02:00
Rafael Kitover
856abf8067 build: add option VCPKG_BINARY_PACKAGES
Add CMake option VCPKG_BINARY_PACKAGES, defaulting to TRUE to download
and use binary packages for vcpkg dependencies.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-02 20:27:43 +00:00
Rafael Kitover
e8d4adaf12 build: always use pwsh vcpkg-list
Use the `vcpkg-binpkg-prototype` `vcpkg-list` implementation and never
`vcpkg list`, because the letter sometimes shortens package names and
may be breaking the package installed check.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-02 17:16:42 +00:00
Andy Vandijck
3a9124fecf Revert HWND pointer
Revert HWND pointer
2025-07-02 18:06:22 +02:00
Andy Vandijck
a3ebf1af41 Merge branch 'master' of https://github.com/visualboyadvance-m/visualboyadvance-m 2025-07-02 16:34:48 +02:00
Andy Vandijck
15619e9e43 Use HWND for Windows
Use HWND for Windows
2025-07-02 16:34:36 +02:00
Rafael Kitover
50aa85d909 build: update vcpkg ports list, drop gettext
Update the vcpkg ports list with the currently used ports and their
features.

Drop `gettext` for `gettext-libintl`, with the binary catalog creation
tools coming from a NuGet package.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-07-01 20:31:46 +00:00
Rafael Kitover
9c36ed6550 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-06-30 19:00:20 +00:00
Andy Vandijck
9b7dba5931 Get SDL error for renderer creation
Get SDL error for renderer creation
2025-06-30 19:26:58 +02:00
Andy Vandijck
db8e2279a5 Don't use D3D9Ex
Don't use D3D9Ex
2025-06-30 19:09:27 +02:00
Andy Vandijck
ce7aa3fae3 Fix FAudio crash on WIndows debug
Fix FAudio crash on WIndows debug
2025-06-30 19:08:07 +02:00
Andy Vandijck
4ba7796d46 Fix FAudio crash on MSVC 2025-06-30 11:54:13 +02:00
Rafael Kitover
179bec9d2b translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-06-30 06:00:20 +00:00
Andy Vandijck
d3a05166fd Fix crash
Fix crash
2025-06-29 17:07:14 +02:00
Andy Vandijck
e0cdf74b90 Fix XP auto updates
Fix XP auto updates
2025-06-29 15:50:24 +02:00
Andy Vandijck
0f863e45a3 Fix XP auto updates 2025-06-29 15:45:49 +02:00
Andy Vandijck
3e0ba6d5c1 Fix issue with conversion
Fix issue with conversion
2025-06-29 15:24:02 +02:00
Andy Vandijck
c7abd4e74e Fix double )) 2025-06-29 14:05:30 +02:00
Andy Vandijck
65e2706473 Fix issue
Fix issue
2025-06-29 14:04:06 +02:00
Andy Vandijck
9ea2360514 Fix double ) 2025-06-29 13:31:13 +02:00
Andy Vandijck
a5676b4b8b Fix indent 2025-06-29 13:08:22 +02:00
Andy Vandijck
4fa72ce721 Fix indent 2025-06-29 13:08:06 +02:00
Andy Vandijck
d91d7fd5e3 Fix else 2025-06-29 13:07:43 +02:00
Andy Vandijck
d1d2cd7ba7 Use SDL_GetRendererName for Direct3D9 check 2025-06-29 13:02:37 +02:00
Andy Vandijck
e36fc38eba Fix 16 bit for Direct3d9 2025-06-29 12:58:58 +02:00
Andy Vandijck
83707cf56c Fix Direct3D9 2025-06-29 12:27:50 +02:00
Andy Vandijck
00be6c96a2 Delete winsparkle dll
Delete winsparkle dll
2025-06-29 11:12:48 +02:00
Andy Vandijck
30d671f2f8 Fix warning
Fix warning
2025-06-29 09:54:51 +02:00
Andy Vandijck
c8205825ac Fix architecture for online updates 2025-06-29 09:48:09 +02:00
Andy Vandijck
8688e2351b Fix arch for online updates
Fix arch for online updates
2025-06-29 09:47:19 +02:00
Andy Vandijck
e352eb93b3 Fix online updates header 2025-06-29 09:43:53 +02:00
Andy Vandijck
5d1c84613c Update win32-deps 2025-06-28 22:20:44 +02:00
Andy Vandijck
90980741e2 Fix winsparkle
Fix winsparkle
2025-06-28 21:12:32 +02:00
Andy Vandijck
b82e7a3b66 Update wxvbam.rc 2025-06-28 20:47:21 +02:00
Andy Vandijck
72c4adae79 Merge branch 'master' of https://github.com/visualboyadvance-m/visualboyadvance-m 2025-06-28 20:21:32 +02:00
Andy Vandijck
e8fb9b7622 Add winsparkle includes for MSVC
Add winsparkle includes for MSVC
2025-06-28 20:19:09 +02:00
Rafael Kitover
89fd875b3c translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-06-28 14:00:21 +00:00
Andy Vandijck
bd9a7e45fc Revert vulkan props 2025-06-28 15:31:55 +02:00
Andy Vandijck
309fe49ed1 Fix window props 2025-06-28 15:29:02 +02:00
Andy Vandijck
f091a656ff Fix window props for Vulkan and OpenGL 2025-06-28 15:26:27 +02:00
Andy Vandijck
fa40f41866 Remove unused variable 2025-06-28 15:19:22 +02:00
Andy Vandijck
47b2785b74 Revert vulkan flags 2025-06-28 15:15:57 +02:00
Andy Vandijck
50bb818034 Vulkan props 2025-06-28 15:07:25 +02:00
Andy Vandijck
01991889d7 Revert pixel masks 2025-06-28 15:05:45 +02:00
Rafael Kitover
a570d21f35 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-06-28 13:00:24 +00:00
Rafael Kitover
8f66c79eea translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-06-28 13:00:07 +00:00
Andy Vandijck
647c007193 Use ARGB8888 with SDL renderer 2025-06-28 14:52:57 +02:00
Rafael Kitover
f0a30d45a1 build: fix installing host build dep bin pkgs
Calculate and install only build dependencies for a binary package set
instead of everything from the host triplet. This way we can support
binary packages for dynamic builds as well.

Also check that the vcpkg Git clone is writable if it does not exist.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-06-27 23:10:33 +00:00
Andy Vandijck
38c5267adb Alter comment 2025-06-27 11:47:56 +02:00
Andy Vandijck
70d6a1ac39 Make Sparkle framework optional 2025-06-27 11:45:49 +02:00
Andy Vandijck
77f49ac671 Clean up WinSparkle code
Clean up WinSparkle code
2025-06-27 09:57:59 +02:00
Andy Vandijck
e40c1e7140 Update macOS Sparkle 2025-06-27 09:30:57 +02:00
Andy Vandijck
afef36820c Set Sparkle to latest build 2025-06-27 09:18:19 +02:00
Andy Vandijck
a97a6879d9 Add 7z windows header 2025-06-26 13:44:55 +02:00
Andy Vandijck
8579e192af Check for kInputBufSize 2025-06-26 13:36:19 +02:00
Andy Vandijck
910ec06e47 Indent 2025-06-26 13:11:46 +02:00
Andy Vandijck
e795e9522c Fix 7z extractor 2025-06-26 13:11:00 +02:00
Andy Vandijck
e64a8b695a Update 7z_C to 2409 and update extractor 2025-06-26 11:55:18 +02:00
Rafael Kitover
3cd82d1f24 Merge remote-tracking branch 'libretro/master'
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-06-25 23:35:48 +00:00
Andy Vandijck
de426adf02 Switch to new win32-deps
Switch to new win32-deps
2025-06-25 13:51:03 +02:00
Andy Vandijck
0c8e09a029 No HTTPS for Windows XP
No HTTPS for Windows XP
2025-06-25 13:10:44 +02:00
Andy Vandijck
4b080c2e4e Fix winsparkle module load
Fix winsparkle module load
2025-06-25 12:32:35 +02:00
Andy Vandijck
917ed4014f Don't unpack WinSparkle DLL on Windows XP 2025-06-24 09:13:23 +02:00
Andy Vandijck
5d65a5b6e8 Don't use auto updates on Windows XP
Don't use auto updates on Windows XP
This requires Windows Vista or newer.
2025-06-23 17:28:32 +02:00
Andy Vandijck
e7de32ee18 Fix symbol import
Fix symbol import
2025-06-23 17:08:00 +02:00
Andy Vandijck
34218c25bf Update deps to latest push
Update deps to latest push
2025-06-23 15:22:14 +02:00
Andy Vandijck
8a1f4db62f Fix running of updates on Windows XP 2025-06-23 14:46:42 +02:00
Andy Vandijck
c31499ca10 Fix winsparkle dependency and update win32-deps to latest push 2025-06-23 13:03:46 +02:00
Andy Vandijck
41895eea36 Add option not to update vcpkg builds
Add option not to update vcpkg builds
2025-06-23 11:46:01 +02:00
Andy Vandijck
05f2cb7dea Fix auto updates 2025-06-23 10:58:10 +02:00
Rafael Kitover
61be54d3d9 build: avoid using VS vcpkg with elevation
Always use a parallel vcpkg directory instead of the Visual Studio
default vcpkg, because installing there requires elevation and doesn't
always work.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-06-22 17:26:15 +00:00
Andy Vandijck
48fc076cc2 Set WinSparkle to 0.9.1 2025-06-18 20:10:22 +02:00
Andy Vandijck
5e2e2ab4a9 Add MinGW WinSparkle support 2025-06-18 18:23:44 +02:00
Andy Vandijck
74528ccb30 Switch to SDL3 3.2.16 2025-06-11 12:47:01 +02:00
Andy Vandijck
3f5a89e5c4 Use wxWidgets 3.3.0 release 2025-06-11 09:46:11 +02:00
Rafael Kitover
2c2ee70109 build: minor improvements to the Mac builder
Remove explicit include and framework paths which were only there to
work around hidden code inserted by the NSA to break our build.

Adjust CMake dist builds to support flags in the `CC` and `CXX`
environment variables, which CMake does not like.

Fix the error in the build environment block caused by using a glob by
using `find` with a shell expansion instead.

Set the build root include path with `-isystem` as the first element of
`CPPFLAGS`.

Remove the doxygen dist, as it should not be needed anymore.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-06-10 09:58:19 +00:00
Rafael Kitover
6ddfdd615f translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-06-04 03:00:22 +00:00
Rafael Kitover
c3ad631f3a translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-06-02 21:00:22 +00:00
Rafael Kitover
21752425da translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-06-02 20:00:21 +00:00
Andy Vandijck
3a68f08bcf Fix macOS glib build 2025-06-02 13:19:18 +02:00
Rafael Kitover
90e17d86ad build: remove outdated wx patch for macOS
Remove the outdated patch to fix the alert sound in the override in
`macOS/builder`, the working patch is in `core.sh`.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-30 12:52:27 +00:00
Andy Vandijck
e4b2b5afb8 Fix wxwidgets beep 2025-05-30 13:41:33 +02:00
Andy Vandijck
f8626cf363 Fix wxwidgets beep 2025-05-30 13:34:22 +02:00
Andy Vandijck
d7135b782d Build fix for wxWidgets 3.3.0 RC1 2025-05-30 10:52:18 +02:00
Andy Vandijck
f6dacc887d Use wxWidgets 3.3.0-RC1 for macOS build 2025-05-30 10:35:35 +02:00
Andy Vandijck
3c048f178c Add alert fix 2025-05-30 09:25:28 +02:00
Andy Vandijck
1468caa494 Fix target build 2025-05-30 09:03:22 +02:00
Rafael Kitover
5972e73e37 build: patch wxWidgets on macOS for alert bug
Add a patch to our build of wxWidgets for macOS to fix the alert sound
bug, as described here:

https://github.com/wxWidgets/wxWidgets/issues/25262#issuecomment-2745905462

. Add a macro to disable our workaround for this bug when a CMake option
indicating that this patch was applied is `TRUE`.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-29 15:45:12 +00:00
Andy Vandijck
88302602ca Fix ffmpeg linkage
Fix ffmpeg linkage
2025-05-28 15:03:41 +02:00
Andy Vandijck
830c8ccd4d Add x264 and x265 to ffmpeg
Add x264 and x265 to ffmpeg
2025-05-28 13:17:49 +02:00
Andy Vandijck
c048f0c713 Fix find ffmpeg
Fix find ffmpeg
2025-05-28 13:08:57 +02:00
Andy Vandijck
7c1a6a44f7 Set avformat first to fix linking issue
Set avformat first to fix linking issue
2025-05-28 10:27:07 +02:00
Andy Vandijck
6b6e1f76cb Fix XAudio 2 build
Fix XAudio 2 build
2025-05-27 20:47:55 +02:00
Rafael Kitover
97894c7899 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-23 02:00:23 +00:00
Rafael Kitover
8a3e3841cf translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-23 02:00:07 +00:00
Rafael Kitover
39cad5feb8 build: fix build with -DENABLE_OPENAL=TRUE
Followup on 8ced18c2 (build: make OpenAL-Soft optional again,
2025-05-22), put the sources for OpenAL support in the right place in
the CMake file for the build to work.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-23 01:34:22 +00:00
Rafael Kitover
8ced18c22f build: make OpenAL-Soft optional again
Add the CMake option `ENABLE_OPENAL` which defaults to `ON` except for
32 bit Windows builds, because OpenAL-Soft uses `avrt.dll` which is not
available on Windows XP.

Update README.md.

Fix linking `libsamplerate` for the `x86-mingw-static` triplet which we
use for 32 bit Windows XP builds.

Make some minor fixes to SDL3 detection and SDL2 fallback.

Clean up the audio API selection code paths.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-22 23:42:36 +00:00
Andy Vandijck
fd2c767319 Don't set CoreAudio as default 2025-05-22 16:51:16 +02:00
Andy Vandijck
31ce5d1732 CoreAudio fix 2025-05-22 15:26:51 +02:00
Andy Vandijck
fdc7d05be0 Create timeline based queue for CoreAudio 2025-05-22 14:02:36 +02:00
Andy Vandijck
11e0b8b2f6 Fix issue 2025-05-22 13:54:35 +02:00
Andy Vandijck
18e626ae58 Optimize CoreAudio buffers 2025-05-22 12:50:33 +02:00
Andy Vandijck
532a6d345b Fix CoreAudio 2025-05-22 10:01:42 +02:00
Andy Vandijck
19705e0dcf Fix CoreAudio 2025-05-22 09:55:09 +02:00
Andy Vandijck
10195bff1a Fix CoreAudio bugs 2025-05-22 09:08:14 +02:00
Rafael Kitover
e0102f7242 Update win32-deps submodule
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-21 20:32:11 +00:00
Andy Vandijck
82fa5cab96 Fix deprecations for winsock2 2025-05-21 16:10:10 +02:00
Rafael Kitover
b699d809d9 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-21 14:00:28 +00:00
Andy Vandijck
48ba8fe197 Windows version fix 2025-05-21 15:48:22 +02:00
Andy Vandijck
020f20e494 Use SDL3 3.2.14 2025-05-21 10:17:56 +02:00
Rafael Kitover
3f436073be build: fix 32 bit build for Windows XP
Fix x86 32 bit build for Windows XP.

Set the `WINVER` and `_WIN32_WINNT` macros to the value for Windows XP.

Disable XAudio for these builds.

Add the missing `inet_pton()` and `inet_ntop()` functions for SFML.

Fix a FetchContent warning in the CMake as well.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-20 18:33:36 +00:00
Andy Vandijck
ac0dc48263 Fix SDL3 detection 2025-05-20 15:26:00 +02:00
Andy Vandijck
c065851616 Fix SDL3 detection 2025-05-20 15:24:49 +02:00
Andy Vandijck
e868bc959b Fix ccache build 2025-05-20 13:03:19 +02:00
Andy Vandijck
17cb394236 fix ccache build 2025-05-20 12:58:40 +02:00
Andy Vandijck
4a424c18a8 fix ccache build 2025-05-20 12:56:58 +02:00
Andy Vandijck
befdea4be1 fix ccache build 2025-05-20 12:51:48 +02:00
Andy Vandijck
3c5aa7b7bb Fix ccache build 2025-05-20 12:41:36 +02:00
Andy Vandijck
311b79e03a Fix ccache build 2025-05-20 12:39:41 +02:00
Andy Vandijck
cbbcea9c28 Install setuptools on python3 post 2025-05-20 12:26:13 +02:00
Andy Vandijck
6cf2400cba Remove sfml from builder list 2025-05-20 12:01:24 +02:00
Andy Vandijck
4693e6936f Fix ccache build 2025-05-20 11:59:08 +02:00
Rafael Kitover
5b9a26ba6c build: make some minor CMake improvements
Default `ENABLE_SDL3` to whether `find_package(SDL3)` can find it.

Only add libsamplerate for SDL2 with vcpkg.

Install gettext tools on Windows if they are not available, not just
under MSVC. This makes the `x86-mingw-static` triplet work as well.

Fix syntax error.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-20 01:36:14 +00:00
Andy Vandijck
c9ca85b839 Compile metal shaders early 2025-05-19 19:35:45 +02:00
Andy Vandijck
0037d61ad1 Fix metal shader build for x86_64 2025-05-19 16:16:09 +02:00
Andy Vandijck
8ac1b297f7 Fix for glib build 2025-05-19 15:07:59 +02:00
Andy Vandijck
06f0537619 Use generic file dialogs for builder build 2025-05-19 12:18:17 +02:00
Andy Vandijck
d89fb4846a Fix build 2025-05-19 10:49:30 +02:00
Andy Vandijck
4839a89f42 python3 build fix 2025-05-19 10:33:29 +02:00
Andy Vandijck
caf064e210 xmlto build fix 2025-05-19 10:21:38 +02:00
Andy Vandijck
a742d7f1dd Set libxml2 python to disabled 2025-05-19 10:10:48 +02:00
Andy Vandijck
d5ea803bb8 Set libxml2 python to None 2025-05-19 10:10:23 +02:00
Andy Vandijck
0d38117e83 build xmlto after docbooks 2025-05-19 10:08:23 +02:00
Andy Vandijck
39d5761181 Fix unzip build 2025-05-19 09:33:19 +02:00
Andy Vandijck
d9a392a69a Fix xmlto paths 2025-05-19 08:57:48 +02:00
Rafael Kitover
9712c424fd build: make some minor fixes to Mac builder
Make some minor updates and fixes to the Mac builder scripts:

- use Git master for libpsl.
- Bump libicu.
- Bump libxml2 and switch it to meson.
- Link brew m4 into build root for autotools.
- Make brew precede system paths in `PATH`.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-18 20:33:45 +00:00
Andy Vandijck
3625a1ad2d Fix metal compiler for builder 2025-05-18 18:46:04 +02:00
Andy Vandijck
6216a7b5d0 use system packages for wxWidgets 2025-05-18 18:28:08 +02:00
Andy Vandijck
e81f4cc6ed Fix builder build 2025-05-18 17:49:34 +02:00
Andy Vandijck
7f82fa0089 Fix ffmpeg build 2025-05-18 17:29:16 +02:00
Andy Vandijck
81dbe6de6e Fix wxwidgets build 2025-05-18 17:22:22 +02:00
Andy Vandijck
9abe3f46e3 glib fix 2025-05-18 16:55:39 +02:00
Andy Vandijck
3283bcad22 Fix python build 2025-05-18 15:28:51 +02:00
Andy Vandijck
7f192348de fontconfig fix 2025-05-18 15:23:23 +02:00
Andy Vandijck
1b466d7e38 fix expat build 2025-05-18 15:09:22 +02:00
Andy Vandijck
7ce3e4db00 Fix libxml build 2025-05-18 15:00:57 +02:00
Andy Vandijck
73fd7f260f Fix build for macOS builder 2025-05-18 14:33:20 +02:00
Andy Vandijck
2175bc6edf Fix xmlto build 2025-05-18 14:27:34 +02:00
Andy Vandijck
4f00ba9662 Update core.sh 2025-05-18 11:49:34 +02:00
Andy Vandijck
8e4651d819 Fix builder downloads 2025-05-18 11:40:09 +02:00
Andy Vandijck
05707bbd26 CURL macOS fix 2025-05-18 09:53:40 +02:00
Andy Vandijck
12f2d88c73 Update versions on macOS build script 2025-05-18 09:43:04 +02:00
Andy Vandijck
79d3453544 Implement CoreAudio driver 2025-05-18 07:28:51 +02:00
Squall Leonhart
ef85b71444 Update bug_report.yml 2025-05-12 22:16:39 +10:00
Squall Leonhart
a2515b3bbd Update bug_report.yml 2025-05-12 22:14:22 +10:00
Squall Leonhart
41bbb49f51 Update bug_report.yml 2025-05-12 22:08:18 +10:00
Squall Leonhart
209cb0e96a Update bug_report.yml 2025-05-12 21:58:38 +10:00
Rafael Kitover
375e31f6cc build: stop using Python 2.7 in the Mac builder
Remove code in the Mac builder to install Python 2.7 using pyenv. This
no longer works and it is no longer needed by anything.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-11 22:43:21 -07:00
Rafael Kitover
34e46945f9 build: generalize linking openal-soft to libfmt
Followup on the previous 3 commits to fix MSVC builds by linking libfmt
which openal-soft now needs.

Change the relevant CMake to link libfmt when it is found on all
platforms.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-11 18:10:55 +00:00
Rafael Kitover
5912be5a32 build: remove SDL3 samplerate feature, not feature
Change `sdl3[samplerate]` in the vcpkg ports lists to `sdl3` as that is
not a feature of the vcpkg SDL3 port, even if it was a feature of the
SDL2 port.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-11 17:36:58 +00:00
Andy Vandijck
aa0e95a968 Fix debug build 2025-05-11 10:05:50 +02:00
Andy Vandijck
a10c6b93bb Fix debug build 2025-05-11 09:58:10 +02:00
Andy Vandijck
f08443f307 Fix MSVC build 2025-05-11 09:47:17 +02:00
Andy Vandijck
5529797f10 Set directory path for generic file dialog 2025-05-11 08:11:46 +02:00
Rafael Kitover
bd0a59cc5f ci: fix shell syntax for Ubuntu runner
Fix the Install Dependencies section of the CI Ubuntu runner to use `|`
instead of `>-` for the command list block, which is necessary for
running multiple shell commands.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-10 16:50:00 +00:00
Rafael Kitover
d2762a95bf ci: add libsdl3-dev for Ubuntu runner
Add the libsdl3 backport PPA for the Ubuntu CI runner because the latest
Ubuntu image does not have it.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-10 16:27:11 +00:00
Andy Vandijck
10a4b5dc71 Fix warning
Fix warning
2025-05-10 16:11:53 +02:00
Rafael Kitover
001dd9548d translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-10 13:00:21 +00:00
Andy Vandijck
1c436f2dfe Add MSVC secure library functions 2025-05-10 14:11:26 +02:00
Andy Vandijck
8f47df28bf Add entitlements file for sandboxing 2025-05-10 10:24:06 +02:00
Andy Vandijck
db5c890e0d Add option for generic file dialogs 2025-05-10 09:35:41 +02:00
Rafael Kitover
7dbad8e85c translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-09 10:00:21 +00:00
Andy Vandijck
d3da049269 Update nixpkgs for SDL3 2025-05-09 10:12:58 +02:00
Rafael Kitover
bc0e406aba doc: update developer manual
Update the developer manual to clarify and expand upon the instructions
for collaborating on the project.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-08 23:42:41 +00:00
Rafael Kitover
eb6491ecb7 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-08 21:07:07 +00:00
Rafael Kitover
546ddfbc41 translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-08 21:06:50 +00:00
Rafael Kitover
ef46bb7e46 build: in installdeps for SUSE s/libSDL3/SDL3/
Change the package for SDL3 dev stuff from libSDL3-devel to SDL3-devel
which is what it is called for SDL3, that was the name for SDL2.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-08 20:59:56 +00:00
Rafael Kitover
a3b92a3348 build: update installdeps to SDL3
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-08 20:58:40 +00:00
Andy Vandijck
2f92dd73b1 Add MSVC 2022 libretro support 2025-05-08 17:18:41 +02:00
Andy Vandijck
07c7bb40a1 Fix AVCodec deprecations and fix warnings
Fix AVCodec deprecations and fix warnings
2025-05-08 14:58:53 +02:00
Andy Vandijck
ed013bd22c Fix SFML deprecations and fix SFML warnings
Fix SFML deprecations and fix SFML warnings
2025-05-06 13:45:01 +02:00
Andy Vandijck
aaf4e7c18c Fix SFML deprecations and fix SFML warnings
Fix SFML deprecations and fix SFML warnings
2025-05-06 10:29:02 +02:00
Rafael Kitover
116af5c6a8 build: replace sdl2 vcpkg port with sdl3
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-04 22:17:50 +00:00
Rafael Kitover
1788b366af build: default ENABLE_SDL3=ON in CMake
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-04 20:14:50 +00:00
Zach Bacon
0820ba587e BUILDER: Updated core.sh source packages required to build vba-m
Signed-off-by: Zach Bacon <zachbacon@vba-m.com>

mend
2025-05-04 14:00:33 +00:00
Andy Vandijck
f975809e3c Update to SDL3 APIs, fix bpps, add SDL audio/video, add Metal video, fix Quartz drawing
Implement SDL3 for the SDL port if the CMake definition ENABLE_SDL3 is
set.
Implement setting the color depth for both wxWidgets and the SDL port.
Fix the coloring issues in the SDL port for OpenGL.
Implement 8 bit color support.
Update and fix the wx port SDL sound driver.
Implement SDL video in the wx port.
Silence GL deprecations on macOS.
Add SDL renderer selection.
Fix filter for bit depths other than 32 bit.
Fix GDK backend for Linux.
Add Metal renderer for macOS.
Fix Quartz drawing.
2025-05-04 13:57:49 +00:00
Rafael Kitover
3a1780145c ci: disable Libretro Ubuntu and Switch builds
The Libretro Switch build uses some kind of libtransistor without which
the build fails.

Disable the Ubuntu Libretro build for now because it uses a linker
script from libretro.

The Libretro people are using GitLab CI anyway, so we will not deal with
this and disable these builds for now.

Also fix a couple of minor issues with the header-only `INTERFACE`
libraries in CMake.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-04 01:12:56 +00:00
Andy Vandijck
18c3c3bd51 build: fix link error on MSVC for SFML port
Change two `constexpr` declarations to `inline` to fix a link error on
MSVC.

Also remove the C++14 override that was used for testing on MSVC, the
project being defined as C++17 in CMake.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-03 23:51:32 +00:00
Rafael Kitover
0aecfb5d1b build: make minor improvements to the Mac builder
Refactor the code a bit in the Mac builder.

Get `getopt` from brew, and symlink it to the build root because it is
keg-only.

Include latest Command Line Tools `clang` includes with `-isystem`
before the SDK.

Use the latest SDK instead of the oldest one from the Command Line
Tools.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-03 03:44:00 +00:00
Rafael Kitover
44b274c9fa builder: use cmake from brew for Mac builder
Use `cmake` from Homebrew instead of building it due to a compilation
error.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-03 00:13:37 +00:00
Rafael Kitover
491bc1c009 build: set framework search path in Mac builder
Use `-F` to pass the `Frameworks` path of the selected SDK to clang.

Also remove things already in `CPPFLAGS` from `CFLAGS`, `CXXFLAGS` and
`OBJCXXFLAGS`.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-02 23:51:26 +00:00
Rafael Kitover
24643675c5 build: find oldest macOS SDK for Mac builder
In the macOS builder script, find the oldest macOS SDK included in the
Command Line Tools and use its C and C++ header directories in
`CPPFLAGS` with `-isystem`.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-02 23:11:45 +00:00
saulfabreg Wii VC Project
0c6617e920 Fix GameCube builds of VBA-M Libretro too
GameCube is a big-endian system too, so let's fix it too and include it on the nightly buildbot for GCN.
2025-05-02 22:27:39 +00:00
Ploggy
864cc69061 Update WiiU Makefile 2025-05-02 22:27:11 +00:00
Rafael Kitover
dae4397dff build: lower bundled SFML C++17 to C++14
Convert the C++17 code in the bundled SFML code to C++14 to hopefully
allow for targeting macOS 10.10 (Yosemite) instead of 10.15 (Catalina.)

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-05-02 21:41:39 +00:00
Rafael Kitover
4cf6cccbaf build: bundle SFML 3.x sys/network in third_party
Remove the SFML external dependency, include the SFML 3.0.1 system and
network libraries in third_party and adjust the build code, tools and
documentation accordingly.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-04-24 16:34:42 +00:00
Rafael Kitover
9e724ea4b8 build: support building ARM64 binary for Mac
Make some adjustments to the Mac build scripts to support building an
ARM64 binary for Apple Silicon.

Also support cross-compiling for Intel on Apple Silicon.

Also prefer using Ninja for CMake ports.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-04-22 05:55:19 +00:00
Rafael Kitover
eb26ec2ef6 Enable Hide Status Bar in UI Settings for macOS
Enable Hide Status Bar in UI Settings for macOS, it was previously
missing because the whole UI Settings submenu was removed on macOS.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-04-22 05:29:51 +00:00
Zach Bacon
6a9eeeaece core.sh Switched to github source for nasm
Nasm.us is down currently and unable to pull the tarball
down from that source.

Signed-off-by: Zach Bacon <zachbacon@vba-m.com>
2025-04-21 00:00:19 -04:00
Squall Leonhart
9f6285842d initialize sound_buffer_len_ to silence a warning. 2025-04-16 02:20:53 +10:00
Rafael Kitover
e5ad7b3403 build: find_package(nanosvg) w/ vcpkg
When using vcpkg wxWidgets, call `find_package(nanosvg)` so that
`NanoSVG::` link target is available.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-04-12 22:47:55 +00:00
Squall Leonhart
94752f8314 [FAudio]Correct the behavior of device_changed check
Fixes the behavior to take the timeout into account properly, fixing the throttled behavior so that it matches (or strives to) the configured value instead of being stuck at <90%
2025-04-13 03:58:40 +10:00
Rafael Kitover
3c32bad886 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-04-12 08:00:19 +00:00
Rafael Kitover
8936feaa71 build: add libtiff to Nix derivation
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-04-11 22:43:18 +00:00
Rafael Kitover
f93a32ab0b build: add libtiff to brews on macOS
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-04-11 21:52:08 +00:00
Rafael Kitover
3fa850c15d build: capitalize ARCH_NAME in CMake
Use capitalized `ARM` instead of `arm` for ARCH_NAME in
Architecture.cmake so that the Mac Apple Silicon zip releases are
suffixed `ARM64` not `arm64`.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-04-07 01:43:00 -07:00
Rafael Kitover
364776b833 build: s/-Ofast/-O3 -ffast-math/
Use `-O3 -ffast-math` instead of `-Ofast`, which is deprecated by the
latest clang. In both our options and for libretro.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-04-07 01:28:45 -07:00
Rafael Kitover
2d439f7ba6 build: fix link error on macOS
Add `tiff zstd deflate` to link libs for macOS to fix a link error
caused by libzstd and libdeflate not being linked for libtiff which is
linked by wxWidgets.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-04-07 01:24:02 -07:00
Rafael Kitover
11a6068a03 build: update vcpkg install command to new form
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-04-06 12:21:47 -07:00
Rafael Kitover
6139428207 translations: remove dup Chinese translations
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>
2025-04-02 13:45:14 +00:00
Rafael Kitover
5a5579d27f build: minor followup on SFML 3.x API change
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>
2025-04-02 09:07:54 +00:00
Rafael Kitover
29e85e5d87 build: update Link SFML usage to SFML 3.x APIs
Make some changes for the SFML Network library for the 3.x APIs.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-04-01 23:34:58 +00:00
Fabrice de Gans
e228394656 [Input] Process key down event for some controls
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
2025-04-01 18:57:26 +02:00
Rafael Kitover
d5ac2a853b Revert "Update Link SFML usage to SFML 3.x APIs"
This reverts commit e82ae7bb13.

Sorry, somehow I pushed to the wrong branch.
2025-03-29 19:40:59 +00:00
Rafael Kitover
e82ae7bb13 Update Link SFML usage to SFML 3.x APIs
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-03-29 18:54:53 +00:00
Rafael Kitover
20b82d8ab7 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-03-29 04:00:24 +00:00
Rafael Kitover
8d26b4f49f translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-03-25 23:00:22 +00:00
Fabrice de Gans
3fdc30f7d7 Mark wxEVT_KEY_DOWN as processed in wxvbamApp (#1424)
This prevents wxWidgets from triggering the alert sound on macOS.
There should be no side effect from this.

Fixes #1384
2025-03-22 16:24:14 -07:00
Rafael Kitover
57211ddc77 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-03-20 19:00:21 +00:00
Squall Leonhart
2de7efd9eb Reallocate GBA ROM to the the new size(#1422)
The GBA ROM was erroneously reallocated to the constant `ROM_SIZE`.

Closes #1421
2025-03-15 13:39:57 -07:00
Rafael Kitover
5b4559f4ee translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-03-07 13:00:21 +00:00
Rafael Kitover
6178526cd9 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-03-06 09:00:20 +00:00
Rafael Kitover
c8a1d8eb2e translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-02-28 23:00:26 +00:00
Rafael Kitover
6e3883937b translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-02-28 22:00:21 +00:00
Rafael Kitover
8dd647914a translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-02-20 17:00:21 +00:00
Rafael Kitover
0dae126a29 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-02-20 16:00:22 +00:00
Rafael Kitover
5038cd7ba5 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-02-16 23:00:22 +00:00
Rafael Kitover
ddd8fca044 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-02-11 19:00:21 +00:00
Rafael Kitover
25c85a83d9 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-02-11 18:00:21 +00:00
Fabrice de Gans
32dd410954 [build] Disable link (#1411)
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.
2025-02-08 15:13:10 -08:00
Fabrice de Gans
e4f17d33ce [Sound] Set volume on game startup (#1410)
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.
2025-02-08 12:57:12 -08:00
Rafael Kitover
2ab707c0ca build: update default.nix
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>
2025-02-02 09:42:05 +00:00
Rafael Kitover
4dba928765 build: update installdeps for OpenSUSE
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>
2025-01-29 20:21:32 +00:00
Rafael Kitover
3d6550d161 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-01-25 18:00:22 +00:00
Rafael Kitover
3cf12f2594 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-01-15 15:00:25 +00:00
Rafael Kitover
de1ec01c78 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-01-13 18:00:26 +00:00
Rafael Kitover
295abb9cd0 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-01-13 15:00:26 +00:00
Rafael Kitover
8260b62482 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-01-13 13:00:22 +00:00
Rafael Kitover
d18c6f115f Use faster sqrt() for xBRZ for XP builds
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>
2025-01-12 15:50:29 +00:00
Squall Leonhart
d36f80b5e6 Add fast-inverse SSE1 sqrt() from Quake 3 Arena
Add the Quake 3 Arena fast-inverse `sqrt()` using SSE1 intrinsics to
third_party.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-01-12 15:50:02 +00:00
Rafael Kitover
44aa859e6d build: add cmake var and cpp macro for XP builds
Add the WINXP CMake variable and WINXP CPP macro for MinGW 32 bit
Windows XP builds.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-01-12 15:04:14 +00:00
Rafael Kitover
5a2d3a6f95 build: set arch to pentium3 not -mmx for XP builds
Set the gcc architecture to pentium3 not pentium-mmx for Windows XP 32
bit builds.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-01-12 10:04:07 +00:00
PunkPangolin
d6b939c428 Set developer id/component type in metainfo.xml
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>
2025-01-09 20:07:45 +00:00
Rafael Kitover
8b8be7d4a8 Revert "Change domain to temporary"
This reverts commit 72364fd1a4.
2025-01-08 13:12:40 +00:00
Rafael Kitover
72364fd1a4 Change domain to temporary
Domain has expired, change links to temporary domain.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-01-08 13:09:49 +00:00
Rafael Kitover
c6da07feb3 build: link avrt for OpenAL on WIN32
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>
2024-12-16 13:47:48 +00:00
Rafael Kitover
94979eff97 build: initialize GTest submodule in CMake
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>
2024-12-16 13:09:02 +00:00
Rafael Kitover
e8494b56d1 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-12-13 05:08:59 +00:00
Fabrice de Gans
c85397518b [win32-deps] Update win32-deps (#1375) 2024-11-24 22:03:05 -08:00
Fabrice de Gans
cf2339822d [win32-deps] Use specific commit in submodule (#1374)
This will help make older builds reproducible.
2024-11-24 21:37:11 -08:00
Fabrice de Gans
dcb9ccca90 [gtest] Use googletest as a submodule (#1373)
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.
2024-11-24 12:39:10 -08:00
Fabrice de Gans
a8ec85d536 [GB] Add support for per-game overrides (#1370)
* [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
2024-11-24 12:15:26 -08:00
Rafael Kitover
611f3a3409 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-11-04 02:00:27 +00:00
Rafael Kitover
b6da6c490c translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-11-04 01:00:23 +00:00
LibretroAdmin
379dd97301 Merge pull request #119 from warmenhoven/warmenhoven/pr/old-ios-tvos
ios/tvos: properly set min supported version
2024-10-21 12:00:29 -05:00
Eric Warmenhoven
60b48a3a4a ios/tvos: properly set min supported version 2024-10-21 12:51:02 -04:00
Fabrice de Gans
9d20ce9b59 [Input] Reset keyboard tracking on focus loss (#1357)
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.
2024-10-08 18:22:17 -07:00
Squall Leonhart
709a322337 cherry pick d5d01a8b68 2024-10-07 00:26:31 +11:00
Rafael Kitover
cdfd37fc4e build: rename dependencies submodule -> win32-deps
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>
2024-10-04 20:05:52 +00:00
Rafael Kitover
4f8d0a8867 build: update harfbuzz for macOS builder
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>
2024-10-03 13:50:16 +00:00
Fabrice de Gans
b22e9fb709 Ignore illegal opcodes used by Wii U VC (#1351)
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.
2024-09-29 23:13:11 -07:00
Rafael Kitover
4e2799b582 build: don't hardcode Windows certificate password
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>
2024-09-29 20:59:40 +00:00
Fabrice de Gans
7fa90531e6 Disable open menu tracking outside of Windows (#1350)
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
2024-09-29 13:59:19 -07:00
Fabrice de Gans
e1c2ecc584 [dialogs] Display all controls in AccelConfig on Mac (#1349)
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
2024-09-28 10:38:28 -07:00
Rafael Kitover
4c450ab360 build: fix linking FAudio statically on MINGW
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>
2024-09-19 09:22:38 +00:00
Fabrice de Gans
d5e1a1f36b [GB] Properly set OPRI on startup
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.
2024-09-17 18:52:35 -07:00
Rafael Kitover
821b9176bd build: do not use debug libs for RelWithDebInfo
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>
2024-09-17 18:35:39 +00:00
Rafael Kitover
9031103c9a build: fix linking non-debug pcre for debug wx
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>
2024-09-15 19:53:27 +00:00
Rafael Kitover
557f897ead build: fix using host pkgconf for ARM64 cross bld
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>
2024-09-15 15:47:28 +00:00
Rafael Kitover
c8a4f66cf8 build: fix UpdateAppcast.cmake
Hardcode `git` instead of using `${GIT_EXECUTABLE}` which we are not
using anymore.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-09-15 12:50:00 +00:00
Zach Bacon
ddc93ec6e1 release v2.1.11
Signed-off-by: Zach Bacon <zachbacon@vba-m.com>
2024-09-15 01:48:38 -04:00
Rafael Kitover
ab38ae8f24 doc: add keychain/notarization for Mac in dev man
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>
2024-09-14 08:38:02 +00:00
Rafael Kitover
d337688fa7 build: use ccache correctly in the macOS builder
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>
2024-09-14 07:53:34 +00:00
Rafael Kitover
3eea90afb6 build: set BUILD_TESTING=OFF when not git checkout
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-09-13 16:29:25 +00:00
Rafael Kitover
b3952d74a8 build: fix ENABLE_LIRC=ON
Fix the `ENABLE_LIRC` cmake option, pass an interface specifier to
`target_compile_definitions()`.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-09-13 15:29:16 +00:00
Fabrice de Gans
be09125d52 Use relative paths for installation
The CMake documentation [1] advises against using `CMAKE_INSTALL_FULL_*`
in `install()` commands.

[1] https://cmake.org/cmake/help/v3.30/module/GNUInstallDirs.html#result-variables
2024-09-13 01:05:38 +00:00
Rafael Kitover
f264e7f807 Fix Help -> Translations URL
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>
2024-09-12 17:35:40 +00:00
Rafael Kitover
fe0791762a build: update Windows dependencies submodule
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-09-12 14:17:16 +00:00
Fabrice de Gans
61f427dec1 Write shortcuts in the proper section (#1335)
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
2024-09-11 22:48:06 -07:00
Rafael Kitover
d619ee2bb1 build: fix installing GoogleTest
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>
2024-09-09 14:43:34 +00:00
Rafael Kitover
7128e6dd08 build: update wxWidgets for macOS builder to 3.2.6
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-09-09 12:40:27 +00:00
Rafael Kitover
0decffea8d build: update macOS builder dists
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-09-09 11:42:26 +00:00
Rafael Kitover
9b60e17746 build: default to ENABLE_FFMPEG=OFF for MinGW32
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-09-09 11:20:02 +00:00
Rafael Kitover
26207038c9 Update WinSparkle to 0.8.1 and add ARM64
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>
2024-09-09 11:07:19 +00:00
Rafael Kitover
90867bc802 doc: update developer manual release steps
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>
2024-09-09 10:10:13 +00:00
Rafael Kitover
7f49cd33ad build: rm FAudio from installdeps MINGW32 target
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>
2024-09-09 09:23:27 +00:00
Rafael Kitover
d8342d3d67 doc: add ENABLE_FAUDIO to CMake opts in README.md
Describe `ENABLE_FAUDIO` in the table of CMake options in `README.md`.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-09-09 08:59:26 +00:00
Rafael Kitover
12e840a8fa Remove non-user-facing changes from CHANGELOG.md
Remove non-user-facing changes from `CHANGELOG.md` for 2.1.10.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-09-09 08:52:12 +00:00
Zach Bacon
6ca609ac7e release v2.1.10
Signed-off-by: Zach Bacon <zachbacon@vba-m.com>
2024-09-08 22:55:37 -04:00
Fabrice de Gans
2b8f9f71ff Copy string options rather than referencing them
This can lead to dandling references, though this is very unlikely. This
commit also removes a useless check.
2024-09-09 02:29:11 +00:00
Fabrice de Gans
e76cef79d2 Remove cast for UTF-16 -> UTF-8 conversion
Add convenience functions to call `config::utf16_to_utf8()` without a
cast.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-09-09 02:29:11 +00:00
Fabrice de Gans
7f06428df8 Disable dialog position save/restore on wxGTK (#1331)
This is currently broken on Wayland, resulting in dialogs showing up in
random locations.
2024-09-08 16:56:30 -07:00
Rafael Kitover
e4a9340409 Update README.md and Developer Manual
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>
2024-09-08 05:42:34 +00:00
Rafael Kitover
5d7023a5d6 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-09-07 18:00:22 +00:00
Rafael Kitover
3bd7c918cc build: fix cmake -DTAG_RELEASE functionality
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>
2024-09-07 06:30:14 +00:00
Rafael Kitover
67e4944cdb translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-09-01 10:00:23 +00:00
Rafael Kitover
df4ff16e2c translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-09-01 09:00:24 +00:00
Rafael Kitover
d4805065b3 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-08-31 14:00:23 +00:00
Rafael Kitover
e39b1f2c53 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-08-28 01:00:24 +00:00
Rafael Kitover
73b65a6553 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-08-28 00:00:23 +00:00
Rafael Kitover
9e556e6a56 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-08-21 14:00:34 +00:00
Rafael Kitover
11e73f2c61 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-08-21 13:00:24 +00:00
Rafael Kitover
e97b0448b7 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-08-20 17:00:22 +00:00
Fabrice de Gans
aa6ed14b2a [FAudio] Always convert UTF-16 names (#1328)
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.
2024-08-17 21:02:01 -07:00
Rafael Kitover
2ce20c4f59 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-08-16 06:00:25 +00:00
Fabrice de Gans
e4ef4aa625 Propagate key events (#1323)
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.
2024-07-28 15:19:19 -07:00
Rafael Kitover
cf5cb40cb9 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-07-26 09:00:24 +00:00
Rafael Kitover
c450d14311 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-07-26 08:00:24 +00:00
Rafael Kitover
41572be3f2 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-07-24 11:00:23 +00:00
Rafael Kitover
4f8da1c574 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-07-24 09:00:24 +00:00
Rafael Kitover
32091669d4 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-07-23 12:00:29 +00:00
Rafael Kitover
abd72a5b2e translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-07-23 02:00:23 +00:00
Rafael Kitover
7e6349b19f translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-07-22 13:00:22 +00:00
Rafael Kitover
0782be749e translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-07-22 12:00:24 +00:00
Rafael Kitover
a7b545ab1a translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-07-15 03:00:22 +00:00
Rafael Kitover
1a564f900c translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-07-13 10:00:25 +00:00
Rafael Kitover
3d4e03f85f translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-07-08 12:00:23 +00:00
Rafael Kitover
fc17209ac7 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-07-06 05:00:23 +00:00
Rafael Kitover
38877ef209 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-07-05 21:00:24 +00:00
Rafael Kitover
8691a15be8 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-07-05 20:00:32 +00:00
Rafael Kitover
961fd0304c translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-07-05 20:00:15 +00:00
Rafael Kitover
e2cf6ecba6 Add option to mute sound during speedup
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>
2024-07-05 12:14:58 -07:00
LibretroAdmin
b5a4788747 Merge pull request #117 from saulfabregwiivc/ngc-fix
Fix GameCube builds of VBA-M Libretro too
2024-06-28 17:55:25 -05:00
LibretroAdmin
e63acb9545 Merge pull request #118 from Ploggy/master
[WiiU] Aroma CFW Compatibility
2024-06-28 17:55:11 -05:00
Avindra Goolcharan
7a0826a60c Migrate vba-m.com links in .github folder 2024-06-21 18:02:38 -04:00
Ploggy
1c7db77192 Update WiiU Makefile More 2024-06-18 13:46:09 +01:00
Ploggy
02f3bd6765 Update WiiU Makefile 2024-06-18 13:43:25 +01:00
Rafael Kitover
d516683a77 build: fix for wx using GTK2
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>
2024-06-14 11:10:00 +00:00
Rafael Kitover
834c7de86c build: update macOS builder dists
Update sdl2, faudio, wxWidgets and ffmpeg to the latest versions for the
macOS builder.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-06-06 05:32:51 +00:00
Fabrice de Gans
4f1a5dd726 [Test] Add tests for widgets code
This creates a vbam-wx-widgets target for the custom widgets code and
adds tests for them.
2024-05-29 19:30:35 -07:00
Rafael Kitover
5766b9b9c7 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-05-27 10:00:25 +00:00
Rafael Kitover
5d8426d317 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-05-27 09:00:26 +00:00
Rafael Kitover
63ec3528f1 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-05-26 07:00:24 +00:00
Fabrice de Gans
f646c3848c [Test] Change assert to custom CHECK macros
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.
2024-05-21 18:47:50 +00:00
Fabrice de Gans
09433875bc [CI] Remove workaround for MSVC CI
Upstream GitHub actions now uses a single toolchain version.
Fixes #1297
2024-05-19 16:14:22 -07:00
Fabrice de Gans
05c09ff506 [Build] Add devkitpro-based libretro targets to CI 2024-05-10 13:36:05 -07:00
Rafael Kitover
7f78fbb3c5 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-05-10 03:00:24 +00:00
Rafael Kitover
261e26f488 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-05-10 02:00:25 +00:00
Rafael Kitover
ed820708af translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-05-10 01:00:27 +00:00
Fabrice de Gans
5b8b6a0b47 [Test] Add tests for the EmulatedGamepad class 2024-05-09 17:48:48 -07:00
Fabrice de Gans
8809ce26b3 [Test] Add tests for the Bindings class
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.
2024-05-09 13:15:16 -07:00
Fabrice de Gans
a48625855b [Build] Share wx-related targets configuration
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.
2024-05-09 12:28:05 -07:00
Rafael Kitover
55c1477d69 build: disable FAudio for 32 bit Windows builds
Disable FAudio for 32 bit Windows builds because it uses libraries that
Windows XP does not have.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-05-09 02:34:25 +00:00
Rafael Kitover
2d7a1ea25b build: fix faudio linkage regression on MSVC+vcpkg
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>
2024-05-09 01:38:44 +00:00
Rafael Kitover
244149c00e build: fix faudio static linkage
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>
2024-05-09 01:25:05 +00:00
Fabrice de Gans
c0bcf3bfdf [Test] Add tests for many config classes
This also fixes a coupld of minor issues that were found while adding
tests.
2024-05-08 13:08:07 -07:00
Fabrice de Gans
13756bcbf9 [Test] Replace doctest with googletest
* 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.
2024-05-08 13:00:56 -07:00
Rafael Kitover
fc82e06270 build: do not build SDL bin on Windows or macOS
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>
2024-05-08 12:53:52 +00:00
Rafael Kitover
df89beb256 build: disable gpg signatures by default
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>
2024-05-07 02:59:17 +00:00
Rafael Kitover
82eda48e8f translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-05-06 06:00:30 +00:00
Rafael Kitover
b47787b317 translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-05-06 06:00:12 +00:00
Fabrice de Gans
c9668d9a88 [config] Create the vbam-wx-config target
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.
2024-05-05 22:57:47 -07:00
Fabrice de Gans
90a56c6937 [config] Move strutils to src/config/
This removes circular dependencies between the main wx target and the
config/ sub-directory.
2024-05-05 21:38:14 -07:00
Fabrice de Gans
d377f7abff [CI] Install only one MSVC toolchain
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
2024-05-05 14:54:58 -07:00
Rafael Kitover
1fac129746 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-05-05 15:00:20 +00:00
Rafael Kitover
af7d5f7b89 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-05-05 14:00:21 +00:00
Rafael Kitover
28f7c2010b translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-05-05 10:00:20 +00:00
Rafael Kitover
486330f23d Activate GitHub Sponsors
Add .github/FUNDING.yml with my username to activate GitHub Sponsors for
this repository.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-05-05 01:27:11 +00:00
Rafael Kitover
1ae78a04a8 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-05-05 00:00:26 +00:00
Rafael Kitover
c776da7120 translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-05-05 00:00:08 +00:00
Fabrice de Gans
d543784a3d [UserInput] Filter key events globally
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.
2024-05-04 16:07:25 -07:00
Fabrice de Gans
902c6c8e4b [UserInput] Only process shortcut commands once
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.
2024-05-04 13:38:43 -07:00
Fabrice de Gans
d32be9ddbe Move cmdtab and command enable flags to config/
* 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.
2024-05-04 10:44:06 -07:00
Fabrice de Gans
b776509287 [bindings] Set default shortcut for recent file 3
This was lost in translation between 2 refactors.
2024-05-03 17:30:51 -07:00
Rafael Kitover
56eb97c846 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-29 13:00:23 +00:00
Rafael Kitover
9f46c575fd translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-29 10:00:21 +00:00
Rafael Kitover
e0402a9b0b translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-28 20:00:23 +00:00
Rafael Kitover
3e30f54d5f translations: fix strings starting with lowercase
Fix translated strings that start with lowercase to start with
uppercase.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-28 19:16:26 +00:00
Rafael Kitover
d73085a88c translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-25 08:00:21 +00:00
Rafael Kitover
8eb6a6900f translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-25 04:00:20 +00:00
Rafael Kitover
3615137c12 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-24 19:00:20 +00:00
Rafael Kitover
bbd5b76f2a translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-24 02:00:25 +00:00
Rafael Kitover
bb3604f333 translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-24 02:00:07 +00:00
Fabrice de Gans
18a0067ca7 [Input] Unify command handling
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
2024-04-23 18:02:25 -07:00
Fabrice de Gans
cfdbdc4ec2 [Input] Move input configuration objects to app
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
2024-04-23 15:38:39 -07:00
Rafael Kitover
32ca2ae42f translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-23 22:00:25 +00:00
Rafael Kitover
bad96cf91e translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-23 22:00:07 +00:00
Fabrice de Gans
62294702e4 [Input] Remove transitional key, mod, joy triplet
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
2024-04-23 14:26:59 -07:00
Rafael Kitover
72c4f33d63 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-23 19:00:27 +00:00
Rafael Kitover
3fe57f540d translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-23 19:00:07 +00:00
Fabrice de Gans
1e1a369c8d [Input] Unify UserInput event handling
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
2024-04-23 11:30:20 -07:00
Squall Leonhart
cc65ef2849 doc: add system requirements to README.md
Add system requirements and a link to the DirectX redist for Windows to
the README.md.
2024-04-18 09:13:39 +00:00
Fabrice de Gans
32627f6b85 [Dialogs] Save and restore dialog positions
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.
2024-04-18 09:02:08 +00:00
Rafael Kitover
41952d0625 build: update macOS linker tool to 1.5
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-18 08:02:51 +00:00
Rafael Kitover
0c39a5ba7a build: override FindGettext to not update po files
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>
2024-04-16 22:12:46 +00:00
Rafael Kitover
1b77d6594c build: update macOS build to ffmpeg 7.0
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-16 16:59:28 +00:00
Rafael Kitover
8d08223dbc build: fix compatibility with older ffmpeg
Check LIBAVCODEC_VERSION_MAJOR and use the older channel_layout API if
it's below 60.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-16 16:19:12 +00:00
Rafael Kitover
af6028a9dd build: fix build for nix on macOS
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>
2024-04-16 15:30:30 +00:00
Rafael Kitover
ff3b5ee042 build: update mac link tool to 1.4
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-16 02:13:37 +00:00
Rafael Kitover
b52edf52ff build: fix building on macOS with Homebrew
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>
2024-04-15 23:30:34 +00:00
Rafael Kitover
6766b9ca54 build: fix ffmpeg 7.x compat
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>
2024-04-15 23:28:56 +00:00
Rafael Kitover
8eae2e5b90 build: add FAudio to nix deps
Add faudio to nix dependencies for both macOS and Linux.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-14 10:15:54 +00:00
Rafael Kitover
50d17363ea build: fail finding FAudio silently
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>
2024-04-14 10:09:37 +00:00
Rafael Kitover
795f25bb85 build: fix nix deps for OpenGL
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>
2024-04-14 10:06:54 +00:00
Ruben
647be137f6 gba: set cpsr=spsr when switching to FIQ mode
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].
2024-04-12 15:49:45 +00:00
Rafael Kitover
8abe3e79da build: remove -lgcc from static link flags
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>
2024-04-12 15:44:27 +00:00
Rafael Kitover
710ffeb1b2 build: update mac build
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>
2024-04-10 22:52:35 +00:00
Rafael Kitover
a855ff54f4 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-10 16:00:21 +00:00
Rafael Kitover
dbb5e534e4 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-10 00:00:21 +00:00
Rafael Kitover
753956963c translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-09 07:00:21 +00:00
Rafael Kitover
b00e23f5b5 build: enable FAudio on non-Windows
Enable FAudio on non-Windows too if the cmake support is found.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-08 04:02:48 +00:00
Fabrice de Gans
8ef9a66b74 [FAudio] Switch to portable condition_variable
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.
2024-04-07 16:33:22 -07:00
Rafael Kitover
0e503a525e translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-07 11:00:30 +00:00
Rafael Kitover
b4b020401c translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-07 11:00:07 +00:00
Fabrice de Gans
f4835674ed [Audio] Rework audio devices enumeration
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.
2024-04-07 03:51:39 -07:00
Rafael Kitover
4104a3d179 build: fix codesigning Windows bins with signtool
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>
2024-04-06 23:45:14 +00:00
Rafael Kitover
1e1ec2e330 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-06 18:00:20 +00:00
Rafael Kitover
ff21f8da21 build: enable FAudio sound driver on Windows
Enable FAudio on Windows if cmake can find it.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-06 11:22:20 +00:00
Rafael Kitover
775a571f75 build: fix detecting Visual Studio default vcpkg
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>
2024-04-06 11:09:34 +00:00
Fabrice de Gans
64abd3e8dc [Audio] Remove manual memory allocations
* Remove explicit calls to new or malloc in favor of owned objects.
* Move AudioSdl to the sdl frontend, it is no longer used by the wx
  frontend.
2024-04-06 03:42:33 -07:00
Rafael Kitover
56320ec6d1 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-06 08:00:20 +00:00
Zach Bacon
311b232ee5 FAudio: Implement and have functional FAudio output
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>
2024-04-05 15:37:39 -07:00
Rafael Kitover
0e13cc9346 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-05 02:00:21 +00:00
Rafael Kitover
b455de01c6 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-04 22:00:27 +00:00
Rafael Kitover
c3053d3819 translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-04 22:00:08 +00:00
Fabrice de Gans
c8106573d8 [Dialogs] Move SoundConfig dialog to its own class
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.
2024-04-04 14:22:23 -07:00
Fabrice de Gans
047ad27777 [Dialogs] Prevent viewers from causing a crash
Some of the viewers dialogs were not properly set up and were causing a
crash at runtime.
2024-04-04 12:10:44 -07:00
Rafael Kitover
ecd16a21dc translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-03 14:00:25 +00:00
Rafael Kitover
1594fda1b6 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-03 13:00:22 +00:00
Rafael Kitover
de9b3a211b translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-03 12:00:22 +00:00
Rafael Kitover
045c98d8fa build: only use -Werror=lto-type-mismatch on gcc
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>
2024-04-03 10:30:04 +00:00
Fabrice de Gans
4ace296b3a [Build] Improve the TRANSLATIONS_ONLY build speed
* Move CMake dependencies checkout to `cmake/Dependencies.cmake`.
* Disable most dependencies checkout from the `TRANSLATIONS_ONLY` build.
* Remove the debug/translations_only GitHub Action.
2024-04-02 11:56:19 -07:00
Rafael Kitover
011adce23e translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-02 17:00:21 +00:00
Rafael Kitover
cc99ec0c14 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-02 13:00:37 +00:00
Rafael Kitover
1d652edf83 translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-04-02 13:00:07 +00:00
Fabrice de Gans
db08ca93af [Build] Improve CI build coverage
This reworks the CI coverage to add `TRANSLATIONS_ONLY=ON` and libretro
builds to GitHub Actions.
2024-04-01 23:28:20 -07:00
Rafael Kitover
3518dc6a05 build: fix LTO on Linux
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>
2024-04-01 21:40:35 -07:00
Rafael Kitover
cc9a03ce48 Add toggle: SDL GameController mode for joysticks
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>
2024-04-01 21:21:53 -07:00
Fabrice de Gans
8576733c0d [Build] Remove lingering references to OpenAl
OpenAl is now required to build.
2024-04-01 21:14:51 -07:00
Rafael Kitover
c6da7e384e build: add faudio to list of optional vcpkg deps
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>
2024-04-01 14:17:48 +00:00
Rafael Kitover
98abb8c2e8 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-03-31 02:00:22 +00:00
Rafael Kitover
0556192238 build: fix MSYS2 check
Fix cmake logic for detecting MSYS2 "$ENV{MSYSTEM_PREFIX}".

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-03-31 01:16:36 +00:00
Rafael Kitover
d9432ebb14 build: fix build on MINGW{64,32}/UCRT64 on MSYS2
Pass -Wno-deprecated-copy only for C++, gcc gives a warning for C.

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

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

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

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

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

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

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-03-30 20:14:32 +00:00
Rafael Kitover
f57cad67c4 build: fix static linking on MSYS2 CLANG64
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>
2024-03-30 18:06:25 +00:00
Rafael Kitover
ce7cc4e223 build: add FAudio to MSYS2 deps
In preparation for FAudio support, add the dependency to ./installdeps
for MSYS2 toolchains.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-03-30 17:37:20 +00:00
Rafael Kitover
8183a005af translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-03-29 02:00:21 +00:00
Rafael Kitover
75a34cd098 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-03-28 02:00:21 +00:00
Rafael Kitover
23e1573442 build: set wxWidgets_DIR with vcpkg
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>
2024-03-27 03:02:33 +00:00
Fabrice de Gans
98b51910eb [Build] Remove ENABLE_NLS, fix TRANSLATIONS_ONLY
* Remove the ENABLE_NLS option, it is now always enabled.
* Fix the TRANSLATIONS_ONLY build to properly build the zip file.
2024-03-26 17:38:12 -07:00
Rafael Kitover
c3f0aa2edf translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-03-26 22:18:10 +00:00
Rafael Kitover
ea596e4cb0 translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-03-26 22:17:52 +00:00
Fabrice de Gans
68adb14b07 [Build] Use Toolchain-gcc-clang for non-MSVC
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.
2024-03-18 17:12:51 -07:00
Fabrice de Gans
a565cea8e9 [Build] Remove the OpenGL check
This is no longer necessary with modern CMake.
2024-03-18 23:56:22 +00:00
Fabrice de Gans
6ac95d373f [Build] Rework wx/CMakeLists.txt
* 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.
2024-03-18 23:56:22 +00:00
Fabrice de Gans
d4430ca440 [Build] Move SDL build configuration to sdl/
* Clean up SDL includes and include guards.
* Add the sdl target to `sdl/CMakeLists.txt`.
2024-03-17 14:41:07 -07:00
Fabrice de Gans
000c7f854c [Build] Move non-core common code to components/
* 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.
2024-03-16 17:32:09 -07:00
Fabrice de Gans
047bd935ea [Build] Move the core emulator to src/core/
* 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.
2024-03-16 14:35:36 -07:00
Fabrice de Gans
33cb9a66d4 [Build] Move System.h and most of Util.h to core/
* Move System.h to core/base.
* Move most of the functionality out of Util.h to core/base.
* Fix corresponding headers.
2024-03-15 20:43:57 -07:00
Fabrice de Gans
f8374b52a8 [Build] Move more of src/common to src/core/base
* 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.
2024-03-15 19:51:52 -07:00
Fabrice de Gans
2f10e71f1d [Build] Cleanup files in src/common
* Remove unused files.
* Move files used only by the SDL frontend to the sdl folder.
* Remove contains.h in favor of manual iterator parsing.
2024-03-15 17:05:16 -07:00
Fabrice de Gans
8f92d99968 [Build] Move file-related utilities to core/base
* 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.
2024-03-15 16:04:45 -07:00
Fabrice de Gans
ce12db1e06 [Build] Move fex/ to src/core/fex/
* 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.
2024-03-15 12:16:40 -07:00
Fabrice de Gans
d8a1886ccb [Build] Use new way of setting /Z flag with MSVC
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.
2024-03-15 11:32:38 -07:00
Fabrice de Gans
1d051d0e6e [Build] Make powershell optional on non-Windows (#1248)
Fixes: #1247
2024-03-15 11:32:24 -07:00
Fabrice de Gans
f96e42fe04 build: cmake refactor and improvements
* Use add_compile_definitions everywhere.
* Remove unused intermediate target.
* Add ASAN support for MSVC.
* Remove duplicate option definitions.
* Configure MinGW separately from the toolchain
2024-03-15 16:19:01 +00:00
Fabrice de Gans
aa59d94490 [Build] Add toolchain-specific files (#1244)
* 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.
2024-03-13 11:13:55 -07:00
Fabrice de Gans
07e490254c Fix most remaining release warnings (#1243)
Bug: #1003
2024-03-11 18:56:01 -07:00
Fabrice de Gans
18b97b4342 Fix various build warnings (#1242)
* Mass-rename some global variables with clangd
* Fix various int conversion issues

Bug: #1003
2024-03-11 16:47:45 -07:00
Rafael Kitover
b45a4066b1 ci: add clang+bintools for macOS, disable LTO
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>
2024-03-11 08:53:47 +00:00
Fabrice de Gans
1fff5cb1f7 Move build options to their own file
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.
2024-03-11 01:38:25 +00:00
Fabrice de Gans
13a16eb79c Fix various warnings in filters and headers (#1241)
Bug: #1003
2024-03-10 17:33:11 -07:00
Fabrice de Gans
69769c1bef [CI] Use proper POWERSHELL variable casing
The POWERSHELL cmake variable was sometimes used lowercase.
2024-03-10 16:24:02 -07:00
Fabrice de Gans
e998a4016a [CI] Properly inclue SDL2 directories for vbamcore (#1240)
The variable name should have been changed to SDL2_INCLUDE_DIRS
2024-03-10 16:14:52 -07:00
Fabrice de Gans
f17a9855f3 [CI] Look for pwsh in addition to powerhsell (#1239)
Newer github actions bot setup no longer include a powershell.exe
binary, only pwsh.exe
2024-03-10 15:58:25 -07:00
Rafael Kitover
85b7cf7aec translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-03-10 02:00:30 +00:00
Rafael Kitover
f46da1c525 build: remove our version of FindSDL2.cmake
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>
2024-03-08 23:41:26 +00:00
Rafael Kitover
404e9a1a55 build: add clang to ./installdeps for MSYS2
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>
2024-03-08 23:13:32 +00:00
Rafael Kitover
3ec8960f1a translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-03-08 02:00:29 +00:00
Weiran Wu
613bd4038a Make menu more reasonably organized (#1230)
* Make menu more reasonably organized
* Revert name and order change of configs

---------

Co-authored-by: wuweiran <wwrnfls@126.com>
2024-03-06 18:25:42 -08:00
Rafael Kitover
ecb69a240a build: add pthreads w/vcpkg, link FAudio target
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>
2024-03-06 21:58:43 +00:00
Rafael Kitover
215e3c5ae9 build: use find_program() to find powershell
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>
2024-02-28 13:44:22 +00:00
Rafael Kitover
e5aa685f70 build: don't use wx utils as UNIX cmds on Windows
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>
2024-02-28 13:11:23 +00:00
Rafael Kitover
53e1f44a69 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-02-26 02:00:28 +00:00
beef
9e4c8e1753 build: fix gentoo dependency namespaces
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>
2024-02-20 06:20:07 -08:00
Jhonny Oliveira
5f853b99ad Update metainfo.xml to new standards
Update metainfo.xml to new standards.

Fix #1221
2024-02-20 06:15:17 -08:00
Rafael Kitover
e7d135dbf1 Update links to new domain visualboyadvance-m.org
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>
2024-02-06 15:55:19 +00:00
Rafael Kitover
60fc096f1a build: add libglu-devel for solus in installdeps
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>
2024-02-05 17:32:45 +00:00
Rafael Kitover
32bc9c9dc7 release v2.1.9
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-02-03 21:15:24 +00:00
Rafael Kitover
84b0a3e366 Remove SDL sound driver
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>
2024-02-03 20:59:37 +00:00
Rafael Kitover
418b7b64dc translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-02-01 02:00:29 +00:00
Ruben
2ad7dd1a79 Fix wav audio recording
Always use `av_wrte_trailer()` even for audio recordings, because an
invalid wav file was generated otherwise.
2024-01-24 00:39:48 +00:00
Rafael Kitover
f915ec5972 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-01-19 02:00:47 +00:00
Rafael Kitover
37acfc8d50 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-01-17 02:00:31 +00:00
Rafael Kitover
9202bfd55e translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-01-16 02:00:33 +00:00
Zach Bacon
23ef8ef0f9 Dialog appearance improvements + link warning
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>
2024-01-15 16:19:52 -08:00
Rafael Kitover
390482a719 build: use libsamplerate with vcpkg sdl2 port
Enable the samplerate feature for the vcpkg sdl2 port to use
libsamplerate for resampling.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2024-01-02 02:57:09 +00:00
Rafael Kitover
d1aa4eb23d build: detect vcpkg host triplet for build deps
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>
2023-12-31 16:06:41 +00:00
Rafael Kitover
7dc95076e5 build: fix vcpkg binary package list parsing
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>
2023-12-31 15:41:05 +00:00
Rafael Kitover
92d9230e2c translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-12-30 02:00:36 +00:00
Rafael Kitover
6e2f1f1103 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-12-29 14:48:16 +00:00
Rafael Kitover
fa720aea07 translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-12-29 14:47:50 +00:00
Stanley Kid
e70e57a5c0 translations: remove strings to not translate
Mark some strings that don't need to be translated as such to remove
them from the catalog.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-12-29 14:23:16 +00:00
Rafael Kitover
9e2a9b479a doc: update commit message guide in dev manual
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>
2023-12-25 15:20:21 +00:00
Zach Bacon
3ab048bebf translations: remove < 50% done translations
Remove all translations that are less than 50% done from Transifex and
the repo.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-12-25 14:28:48 +00:00
Rafael Kitover
a045270164 build: don't fseeko64()/ftello64() on musl libc
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>
2023-12-23 10:23:25 +00:00
Rafael Kitover
3c5348983b build: add Alpine Linux support to installdeps
Add basic support for Alpine Linux to installdeps.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-12-23 09:46:47 +00:00
Zach Bacon
db355126d3 README.md: Minor spelling corrections
Signed-off-by: Zach Bacon <zachbacon@vba-m.com>
2023-12-22 13:38:09 -05:00
Zach Bacon
eea649ae16 README.md: Added a link to the flathub page to install vba-m as a flatpak
Signed-off-by: Zach Bacon <zachbacon@vba-m.com>
2023-12-22 13:35:18 -05:00
Zach Bacon
9e9fe812d2 visualboyadvance-m.metainfo.xml: add screenshots to the metainfo
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>
2023-12-20 22:06:21 -05:00
Rafael Kitover
c0e71b0cb4 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-12-20 02:00:59 +00:00
Rafael Kitover
ddc6fd7080 release v2.1.8
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-12-13 15:06:53 +00:00
Rafael Kitover
8184522c6d build: don't use vcpkg on non-WIN32 w/o triplet
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>
2023-12-13 14:50:54 +00:00
Rafael Kitover
e955501f61 build: update macOS dependencies
Update sdl2, sfml, wxwidgets and ffmpeg dependencies to the latest
versions in the macOS builder.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-12-13 13:49:54 +00:00
Rafael Kitover
ef09fca4d1 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-12-07 02:00:59 +00:00
Rafael Kitover
78b99d8b23 build: fix wrong syntax in vcpkg cmake
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>
2023-12-04 00:13:29 +00:00
Rafael Kitover
717ac7ed74 build: fix inst check for VS default vcpkg
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>
2023-12-03 16:50:44 +00:00
Rafael Kitover
59d67fe703 build: fix check for vcpkg ports in vcpkg clones
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>
2023-12-01 10:38:20 +00:00
Rafael Kitover
de1f4dffba build: prefer user vcpkg root over VS system-wide
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>
2023-12-01 09:54:51 +00:00
Rafael Kitover
491f104b89 build: better binpkg support for default VS vcpkg
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>
2023-11-30 17:53:24 +00:00
Rafael Kitover
244ee8ebfa translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-11-30 02:00:59 +00:00
Rafael Kitover
3683938ec7 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-11-22 02:01:02 +00:00
Rafael Kitover
64d8cfffc2 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-11-17 02:01:00 +00:00
Rafael Kitover
18f3449c31 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-11-16 02:01:01 +00:00
Rafael Kitover
8db618625d translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-11-15 02:01:01 +00:00
Rafael Kitover
a262a2facf build: make inferred vcpkg triplet default static
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>
2023-11-14 08:40:10 +00:00
Fabrice de Gans
beab088139 Store the PC register at the appropriate offset
In ARM mode, the GBA CPU stores the PC (r15) register with an offset of
4. This was not handled correctly by the core emulator.

Fixes #1200
2023-11-10 15:55:41 -08:00
Rafael Kitover
215e9b1ac2 build: fix vcpkg support for Linux
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>
2023-11-10 09:50:50 +00:00
Rafael Kitover
0e68a2340c build: compare vcpkg bin pkg revisions explicitly
Compare port revisions explicitly instead of appending to version
string.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-11-10 06:48:33 +00:00
Rafael Kitover
0eb65a0eb3 build: fix finding vcpkg binary packages on server
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>
2023-11-07 18:32:02 +00:00
Rafael Kitover
1af7aa2333 build: install vcpkg binary packages in dep order
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>
2023-11-07 15:36:40 +00:00
Rafael Kitover
e9162a0d28 build: handle revisions for vcpkg binary packages
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>
2023-11-02 18:01:18 +00:00
Rafael Kitover
99923dd126 ci: add Visual Studio workflow
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>
2023-10-28 14:44:02 +00:00
Rafael Kitover
3a1b577d0a build: prototype binary packages for vcpkg
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>
2023-10-27 06:41:32 +00:00
Fabrice de Gans
bf2452aab9 Resize GameArea after MainFrame initialization
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
2023-10-24 12:49:34 -07:00
Fabrice de Gans
71ca0fb270 Properly hide the status bar at startup
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.
2023-10-24 17:51:02 +00:00
Rafael Kitover
e19e13fa0a build: use std:: proxy for nonstd:: on non-macOS
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>
2023-10-24 17:22:47 +00:00
Zach Bacon
1c76e3b0f4 snapcraft.yml: Rebuilt the snapcraft yaml to utilize core22
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>
2023-10-23 14:14:35 -04:00
Rafael Kitover
c36c3e0250 doc: simplify vscode instructions
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>
2023-10-23 15:16:34 +00:00
Rafael Kitover
6c38eaa2a5 build: rm gone ffmpeg deps in link flags for macOS
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>
2023-10-20 23:25:14 +00:00
Rafael Kitover
7e1afcd37c Fix reading joystick hat config values
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>
2023-10-20 17:45:54 +00:00
Rafael Kitover
d8d3ee2b48 build: remove unneeded ffmpeg/sfml deps for macOS
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>
2023-10-20 10:40:58 +00:00
Rafael Kitover
df83b4ba80 build: macOS builder updates
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>
2023-10-18 23:40:22 +00:00
nuive
32581966ae Link: Fix menu not refreshing correctly
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.
2023-10-15 03:36:38 +00:00
Rafael Kitover
67af67278e ci: use nix instead of brew for macOS workflow
Since brew has been failing frequently lately, use the nix action
instead.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-10-04 20:26:15 +00:00
Rafael Kitover
e17d2cbaf5 build: fixes for nix on macOS
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>
2023-10-04 13:19:44 -07:00
Rafael Kitover
7e46939826 build: add pcre2 and openal to default.nix
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>
2023-10-04 16:26:46 +00:00
Rafael Kitover
0501f985a3 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-09-22 02:00:59 +00:00
Rafael Kitover
cee1789259 release v2.1.7
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-09-11 05:05:56 +00:00
Rafael Kitover
aca206a721 Launch on xwayland under Wayland if no EGL
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>
2023-09-10 21:14:45 -07:00
Rafael Kitover
93a24bee3c Disable mirroring for ROMs > 32MB
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>
2023-09-06 18:52:35 +00:00
Rafael Kitover
ea5cbba016 build: update default.nix for macOS and new wx
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>
2023-09-05 16:49:21 +00:00
Rafael Kitover
f6e3daf9d8 ci: use matrix, disable macos for now
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>
2023-09-04 22:55:51 +00:00
Fabrice de Gans
0f4ec57557 [Build] Fix the NO_LINK build
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
2023-09-04 13:46:29 -07:00
Rafael Kitover
7a7778c644 build: fix installdeps for new Debian wx packages
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>
2023-09-04 20:41:17 +00:00
Fabrice de Gans
803ab35269 [GB] Save MBC7 EEPROM data to gbRam
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
2023-08-27 17:08:09 -07:00
Fabrice de Gans
24b6ac5a28 [GBA] Implement missing Thumb instruction
The CMP Thumb instruction was missing one variant. This is used in the
Chinese fan translation of Mega Man Battle Network 2.

Fixes #889
2023-08-27 16:52:36 -07:00
Rafael Kitover
0e5d63cd9a build: update to Mac third_party_libs_tool 1.3
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-08-27 17:19:08 +00:00
Rafael Kitover
cd8d65bddd build: set cmake C++ version to 17, fix Mac build
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>
2023-08-27 08:04:57 +00:00
Rafael Kitover
2407923fc0 build: fix cmake version warnings
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>
2023-08-26 02:32:50 +00:00
Rafael Kitover
37f4affe55 Merge remote-tracking branch 'libretro/master' 2023-08-26 02:26:44 +00:00
saulfabreg Wii VC Project
76cb71464d Fix GameCube builds for VBA-M Libretro too
The GameCube, like the Wii and Wii U, is also big-endian, so let's fix VBA-M for GCN too.
2023-08-19 15:26:08 +00:00
saulfabreg Wii VC Project
0cd79a96f5 Add VBA-M to Wii/Wii U nightly buildbot. 2023-08-19 15:26:08 +00:00
saulfabreg Wii VC Project
3745eea419 Fix Wii & Wii U builds of VBA-M for Libretro (Ploggy)
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.
2023-08-19 15:26:08 +00:00
saulfabreg Wii VC Project
3c16671e39 Fix GameCube builds of VBA-M Libretro too
GameCube is a big-endian system too, so let's fix it too and include it on the nightly buildbot for GCN.
2023-08-18 15:51:12 -05:00
LibretroAdmin
a2378f05f6 Merge pull request #116 from saulfabregwiivc/wii-wiiu-fix
Fix VBA-M Libretro builds on Wii/Wii U. (Ploggy)
2023-08-18 12:39:10 -07:00
saulfabreg Wii VC Project
f7d4370789 Add VBA-M to Wii/Wii U nightly buildbot. 2023-08-18 14:17:16 -05:00
saulfabreg Wii VC Project
46de99a0da Fix Wii & Wii U builds (Ploggy)
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.
2023-08-18 14:12:25 -05:00
Rafael Kitover
5583175559 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-08-15 02:00:58 +00:00
Fabrice de Gans
14a4b6f820 [dialogs] Move JoypadConfig to its own class. 2023-08-13 16:07:31 -07:00
Rafael Kitover
5f421b53c0 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-08-08 02:00:57 +00:00
Rafael Kitover
32d273ad78 build: notarize mac release binary
Notarize the mac release binary from cmake as described here:

https://developer.apple.com/documentation/security/notarizing_macos_software_before_distribution/customizing_the_notarization_workflow?language=objc

. This involves adding `--options runtime` when codesigning to enable
the hardened build.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-07-22 20:51:48 +00:00
Rafael Kitover
774fbab7cc build: write version to macOS plist
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>
2023-07-12 06:24:20 +00:00
Rafael Kitover
00645906a5 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-07-11 02:01:00 +00:00
Rafael Kitover
bde372bc72 build: fix codesigning arm64 release binaries
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>
2023-07-10 01:37:55 +00:00
Rafael Kitover
d0194d9a75 release v2.1.6
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-07-09 15:44:48 +00:00
Squall-Leonhart
7561ca97c1 Fix Discord streaming for OpenGL
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 #643
Fix #767
Fix #840
Fix #843

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-07-06 20:40:54 +00:00
Rafael Kitover
24b92462f9 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-07-03 02:02:24 +00:00
Rafael Kitover
ffec5aba5e translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-06-30 02:01:01 +00:00
Rafael Kitover
882957a2d3 Override SetCurrent() in GLDrawingPanel
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>
2023-06-28 21:12:01 +00:00
Rafael Kitover
5b65066bf8 build: on mac install trans into debug builds too
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>
2023-06-27 22:14:37 +00:00
Rafael Kitover
790618102d builder: bump SDL2 2.24.0 -> 2.28.0
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-06-23 00:56:37 +00:00
Rafael Kitover
9331dbf9c8 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-06-04 02:01:00 +00:00
Fabrice de Gans
6f68bfcf71 Create the config directory at first launch
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.
2023-06-01 18:28:14 +00:00
Rafael Kitover
7b8c4242fb builder: macOS build updates
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>
2023-05-31 13:38:44 +00:00
Rafael Kitover
df84f2b005 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-05-31 02:01:00 +00:00
Rafael Kitover
d08c9137c1 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-05-29 02:01:01 +00:00
Rafael Kitover
7aafce0665 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-05-28 02:01:01 +00:00
Fabrice de Gans
e26f807355 [bios] Fix lz77 and add BIOS_SndDriverVsyncOn
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
2023-05-27 22:51:39 +00:00
Rafael Kitover
4c8b54de89 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-05-26 03:28:10 +00:00
Fabrice de Gans
bad388e0aa Move the GB ROM Info dialog to its own class
* Move the Game Maker information to a separate helper method.
* Make the dialog strings more localizable.
2023-05-23 15:19:39 -07:00
Fabrice de Gans
d1f6500098 Refactor accelerator / global shortcuts handling
* 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.
2023-05-23 11:56:32 -07:00
Fabrice de Gans
fda429fc64 [GBA] Do not draw BG tiles from outside of BG VRAM
This was fixed by endrift in mGBA in commit
4ce9b83362
2023-05-09 17:12:30 -07:00
Fabrice de Gans
b139572424 Convert wxJoyKeyCtrl to UserInputControl
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.
2023-05-08 01:42:39 +00:00
Rafael Kitover
b9694e1900 build: fixes for mac Homebrew
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>
2023-05-07 23:41:51 +00:00
Fabrice de Gans
5aa3ea92b9 Properly initialize wxAcceleratorTable
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.
2023-04-24 18:04:43 -07:00
Fabrice de Gans
7b5d4a82d7 Remove unused code and use explicit type coercions 2023-04-24 18:04:32 -07:00
Fabrice de Gans
1f57d5f797 Remove global variables for ROM data
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.
2023-04-24 13:52:12 -07:00
Fabrice de Gans
0e29be8735 Support multiple RAM sizes for MBC7
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.
2023-04-17 17:07:18 -07:00
Fabrice de Gans
75b79d91f1 Change MBC7 reported RAM size to 512 bytes
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.
2023-04-17 17:07:18 -07:00
Fabrice de Gans
52c05c7147 Simplify battery save / load
* 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.
2023-04-17 17:07:18 -07:00
Fabrice de Gans
d8d6991c4b Refactor the save/load state and battery code
* 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.
2023-04-17 17:07:18 -07:00
Rafael Kitover
36e88fafb6 Fix dsound looping when moving/resizing window
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>
2023-04-13 13:47:17 +00:00
Rafael Kitover
93fbb5618d build: add arm64 VS build configs
Add arm64 configurations to CMakeSettings.json for Visual Studio.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-04-12 03:01:25 +00:00
Rafael Kitover
6a1be5d4ad build: update VS build configs
Update the Visual Studio build configurations in CMakeSettings.json to
remove dynamic builds and add RelWithDebInfo.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-04-12 02:52:02 +00:00
Rafael Kitover
23aa083cd4 build: support RelWithDebInfo for vcpkg
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>
2023-04-12 02:43:13 +00:00
Rafael Kitover
40711fa5c9 build: lowercase vcpkg package names
vcpkg now requires that package names be lowercase, change all package
names to lowercase.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-04-11 23:17:06 +00:00
Fabrice de Gans
86bef62faf Move more options to g_owned_opts
* Moves most remaining options toggled by menu items to g_owned_opts and
  modifies associated usage.
* Adds more obervers to handle option changes.
2023-04-07 15:36:45 -07:00
Fabrice de Gans
928a61704f Move directory options to g_owned_opts
* 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.
2023-04-06 00:49:55 -07:00
Fabrice de Gans
019fcda9c1 Sanitize and improve the GB header parsing (#1109)
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.
2023-04-06 00:49:08 -07:00
Fabrice de Gans
7005b92840 Sanitize allocations in the Game Boy emulator (#1105)
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.
2023-04-03 12:47:55 -07:00
Fabrice de Gans
e91e4dcf17 Add nanosvg library dependency for vcpkg static builds
nanosvg is now a required dependency with recent wxWidgets builds.
2023-04-01 17:15:22 -07:00
Rafael Kitover
88b07df394 build: add pkgconf to vcpkg deps
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>
2023-03-31 00:08:15 +00:00
Rafael Kitover
3cef52b72d Fix pause/next-frame
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 #788
Fix #1077

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-03-30 00:22:54 +00:00
multiSnow Liu
d3f8cc1714 Option to suspend the X11 screensaver when running
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>
2023-03-28 16:28:36 +00:00
Rafael Kitover
df81959825 builder: update macOS build to 10.10, Wx 3.2.2.1
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>
2023-03-27 14:59:10 +00:00
Fabrice de Gans
0132c76100 Move GB/GBC header parsing to gbCartData
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.
2023-03-27 10:55:00 +00:00
Rafael Kitover
e505236ec4 Merge remote-tracking branch 'libretro/master'
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-03-25 12:23:58 +00:00
Rafael Kitover
785af394f6 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-03-24 02:01:03 +00:00
Rafael Kitover
f15b09f8e5 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-03-20 22:43:31 +00:00
Fabrice de Gans
1ab46f704f Update SIOCNT when the link driver is disconnected
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.
2023-03-19 22:22:43 +00:00
Fabrice de Gans
9889ef4fa8 Move GameBoyConfig dialog to its own class
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.
2023-03-15 00:45:22 +00:00
Rafael Kitover
1d7e8ae4ed build: fix build with new OpenAL
Remove the AL_NO_PROTOTYPES #define, it breaks the build with new
versions of OpenAL.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-03-12 15:06:42 +00:00
Fabrice de Gans
892527e53b Move ConfigManager to SDL
This removes ConfigManager from common source and header files and moves
it to be only used by the SDL frontend.
2023-03-07 14:11:52 -08:00
Fabrice de Gans
bd7eac6c4b Add options shared with sdl to wx g_owned_opts
This removed the dependency on ConfigManager from the wx frontend.
Next: Move ConfigManager to be only used by the SDL frontend.
2023-03-07 13:38:46 -08:00
Zach Bacon
efffe7c333 Add the repology badge to the readme.
Signed-off-by: Zach Bacon <zachbacon@vba-m.com>
2023-02-27 21:07:25 -05:00
Squall Leonhart
a529ddfe49 remove non-working override. 2023-02-27 20:31:02 +00:00
Squall Leonhart
9a8a077443 Lets fix Stuart Little 2 properly (maybe?)
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.
2023-02-27 20:31:02 +00:00
Squall Leonhart
a9284b3d66 workaround for Stuart Little 2 crashing when set to none
despite not having backup ram.
2023-02-27 17:17:28 +00:00
Squall Leonhart
166299cda6 Implements Read/Writes for HUC3
Also seperates HUC1 from MBC1
2023-02-27 02:18:27 +00:00
Rafael Kitover
1a63a27c62 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-02-27 02:01:01 +00:00
libretroadmin
640ce45325 Change SOUND_CLOCK_TICKS to 280896 cycles - ~1074 samples per frame 2023-02-27 00:14:05 +01:00
Rafael Kitover
83d24828df build: fix default debug build for vscode
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>
2023-02-21 20:53:20 +00:00
Fabrice de Gans
f1d3f631d2 Fix automatic dynamic frame skipping
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.
2023-02-15 13:52:16 +00:00
Fabrice de Gans
d1733c4505 [ConfigManager] Move wx options to g_owned_opts
This is a preliminary change towards removing ConfigManager from the wx
build. Usage of these options has also been modified in the wx frontend.
2023-02-14 18:06:41 -08:00
Fabrice de Gans
d37a3a32e1 Move remaining options used by core to CoreOptions 2023-02-14 16:33:03 -08:00
Rafael Kitover
3f507b6c6a translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-02-14 02:01:02 +00:00
Rafael Kitover
e560efb08f translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-02-12 02:00:57 +00:00
Rafael Kitover
ca841e9bae translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-02-11 02:00:59 +00:00
Rafael Kitover
4b605b4b1a translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-02-10 05:53:02 +00:00
Stanley Kid
d756f6716f translations: fix some source strings
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>
2023-02-10 05:50:20 +00:00
Rafael Kitover
49140fe5dd translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-02-10 02:01:01 +00:00
Rafael Kitover
5d4f1bd0d9 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-02-09 16:18:49 +00:00
Fabrice de Gans
91873254d3 Add INI file versioning
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.
2023-02-08 01:31:40 +00:00
Rafael Kitover
ae09ae7d59 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-02-07 02:01:00 +00:00
Fabrice de Gans
950a4070c1 Move display options to owned_opts
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.
2023-02-06 04:49:36 +00:00
Fabrice de Gans
216bf4d7e4 Restore "Fullscreen at startup" handler
This was mistakenly removed.
2023-02-05 20:29:14 -08:00
Rafael Kitover
f0fd9208b7 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-02-06 03:27:56 +00:00
Fabrice de Gans
31e17c1ba4 Add less verbose proxy object accessor
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.
2023-02-06 03:25:37 +00:00
Fabrice de Gans
2b950e282f [Option] Add Proxy template class for Option
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.
2023-02-06 03:25:37 +00:00
Rafael Kitover
f84a164072 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-02-06 02:00:59 +00:00
Fabrice de Gans
60568d26e0 Move core options to a struct
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.
2023-02-06 01:22:19 +00:00
Stanley Kid
64921c6535 translations: fix some source strings
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>
2023-02-05 19:55:06 +00:00
Rafael Kitover
257150f46b translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-02-05 17:29:58 +00:00
Rafael Kitover
61046c76bf translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-02-05 17:29:14 +00:00
Fabrice de Gans
fad2e7a310 Fix issues with the DisplayConfig dialog (#1066)
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.
2023-02-04 21:59:04 -08:00
Fabrice de Gans
2cec46f825 Clean-up ConfigManager options (#1067)
* 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.
2023-02-04 21:39:13 -08:00
Rafael Kitover
dc6659857c translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-02-05 02:01:03 +00:00
Rafael Kitover
1c2a62f055 Include cstdint for wx
Close #1065

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-02-04 06:51:34 +00:00
Rafael Kitover
7d9cb2b5f0 Default GBA LCD filter to off.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-02-04 01:46:38 +00:00
Rafael Kitover
5385b477da translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-02-02 02:01:02 +00:00
Rafael Kitover
aabb70cb85 Followup on be1e5ca1, wrong ref var declaration
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>
2023-02-01 13:27:22 +00:00
Rafael Kitover
266512fbbc translations: move ru trans to ru_RU, delete ru
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>
2023-02-01 05:06:35 +00:00
Rafael Kitover
be1e5ca18c Check for wx < 3.2.2 for EGL move fix backport
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>
2023-02-01 04:58:56 +00:00
Lars Wendler
1fb18b320f Rename appdata to metainfo
See https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html
chapter 2.1.2 "Filesystem locations"

Signed-off-by: Lars Wendler <polynomial-c@gmx.de>
2023-01-20 06:14:56 -08:00
Rafael Kitover
561d6e1ab0 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-01-17 02:01:00 +00:00
Rafael Kitover
78724bc893 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-01-16 02:01:00 +00:00
Fabrice de Gans
addd53b69d Remove all warnings in gba/bios.cpp
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
2023-01-14 16:32:58 -08:00
Rafael Kitover
2e3ce863c7 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-01-14 02:01:01 +00:00
Rafael Kitover
4c4ce3cf37 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-01-13 02:01:00 +00:00
Squall Leonhart
ca7ae3363e Fix regression in bios, port DMA fix from libretro 2023-01-10 06:29:40 +00:00
Rafael Kitover
25bcf2e42d translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-01-10 02:00:59 +00:00
Squall Leonhart
b34448c9eb Fix record/play dialogs for native recordings
Resolves assertions when opening the file selection dialog windows for
recordings.
2023-01-08 14:17:07 +00:00
Rafael Kitover
3989146fa5 build: enable severe warnings for MSVC release
Enable severe warnings for MSVC release builds with /W1.

Disable macro redefinition warnings explicitly with /wd4005.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2023-01-06 16:58:52 +00:00
Rafael Kitover
0a96d84581 build: make release build quieter
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>
2023-01-06 16:24:12 +00:00
Rafael Kitover
6a4115ca45 ci: fix macOS runner
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>
2022-12-29 20:29:53 -08:00
Rafael Kitover
6307348cbc build: support MSVC arm64 cross build on x86
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>
2022-12-29 20:29:53 -08:00
Rafael Kitover
77f1235a95 build: update Windows dependencies submodule
Update contains wxrc.exe for cross builds.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-12-29 20:29:53 -08:00
Rafael Kitover
9963b81506 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-12-30 02:04:11 +00:00
Rafael Kitover
7a45c16539 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-12-29 02:04:08 +00:00
Rafael Kitover
87bdc93e15 Revert "translations: use %% instead of percent"
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>
2022-12-28 18:51:37 +00:00
Rafael Kitover
ab4ae96e05 Clarify/set condition: wayland && !wayland_egl
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>
2022-12-28 18:27:04 +00:00
Rafael Kitover
8e4acfc91d Fix build w/wxUSE_GLCANVAS_EGL=0, on Fedora
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>
2022-12-28 17:24:08 +00:00
Fabrice de Gans
3c41b68d51 Fix the Windows ARM64 build
* Remove arch constraints in a CMake block.
* Convert some tab identation to spaces.
2022-12-27 21:59:33 +00:00
Rafael Kitover
e10bf7bc4b installdeps: check for newest wx on Fedora
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>
2022-12-24 06:41:00 +00:00
Rafael Kitover
8329ba9646 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-12-22 02:02:15 +00:00
Rafael Kitover
7aa1f59128 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-12-21 02:01:00 +00:00
Rafael Kitover
a16dd2c9f7 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-12-20 02:01:00 +00:00
Rafael Kitover
26818177e8 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-12-19 02:01:02 +00:00
Rafael Kitover
22578d02eb Increase MAX_CART_SIZE from 32MiB to 128MiB
Some ROM hacks are larger than 32MiB.

Fix #1046

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-12-16 16:35:15 +00:00
Rafael Kitover
f8c1d31294 release v2.1.5
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-12-15 11:58:01 +00:00
Rafael Kitover
fd2df853b6 build: turn off Sparkle on macOS
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>
2022-12-15 10:03:02 +00:00
Rafael Kitover
cf600890bf translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-12-08 02:00:59 +00:00
Rafael Kitover
0ca1771a49 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-12-05 02:01:02 +00:00
Rafael Kitover
1ac7ac999b translations: use %% instead of percent
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-12-04 15:55:42 +00:00
Rafael Kitover
77e9ea6a2f translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-12-04 02:01:01 +00:00
Rafael Kitover
ccb9af2c64 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-12-02 22:50:51 +00:00
Rafael Kitover
dcc5ae07d0 translations: update .tx/config to new format
Re-run `tx init` and `tx add` to rewrite the .tx/config file to the new
required format.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-12-02 22:48:44 +00:00
Rafael Kitover
ea10306daa translations: minor additions/adjustments
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>
2022-12-02 22:21:13 +00:00
Rafael Kitover
a42e166e94 build: fix syntax and rm dbg prints from 2a65e92d
Remove two debug messages and add a missing paren to the cmake source.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-11-28 18:34:48 +00:00
Rafael Kitover
2a65e92da2 build: remove StrawberryPerl from ENV{PATH}
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>
2022-11-28 10:27:06 -08:00
Rafael Kitover
6d8ca723d0 build: restrict MSVC static libs to .lib only
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>
2022-11-28 10:23:33 -08:00
Rafael Kitover
5807376fba build: fix finding SDL2 on vcpkg (again)
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>
2022-11-27 19:34:29 +00:00
Rafael Kitover
1a687e564b translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-11-24 02:02:13 +00:00
Rafael Kitover
8f1b5dae90 Merge remote-tracking branch 'libretro/master'
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-11-18 00:24:23 +00:00
Fabrice de Gans
0483524870 [build] Add VS Code integration
* Infer the VCPKG triplet for MSVC-like environments.
* Add recommended VS Code settings.
* Add instructions for using clangd.
2022-11-12 13:26:23 +00:00
Rafael Kitover
61b503ada4 builder: update core dists and macOS build
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>
2022-11-12 13:23:54 +00:00
Rafael Kitover
d6aa168718 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-11-08 02:03:11 +00:00
Benjamin Siskoo
364dad84a9 Fixed typos and translated strings... 2022-11-07 02:21:39 +00:00
Fabrice de Gans
02f516f646 Set wxWS_EX_VALIDATE_RECURSIVELY style for dialog
This is no longer required since wxWidgets 3.1.0 but is needed for
prior versions.
2022-10-31 17:57:10 +03:00
Rafael Kitover
f138b44a50 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-10-27 02:02:19 +00:00
Fabrice de Gans
080be1a325 [config] Make usage of Option less verbose
* 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.
2022-10-26 12:28:14 +00:00
Rafael Kitover
0a104a9a9d translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-10-26 02:02:20 +00:00
Rafael Kitover
0bfb88d0e3 Fix regression in ea2a929f, check for Wayland
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>
2022-10-25 19:17:40 +00:00
Rafael Kitover
873de5f667 build: update default.nix
Change dbus_libs to dbus, which is the new package name.

This is for `nix-shell` to build on NixOS.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-10-25 19:14:38 +00:00
Rafael Kitover
9bf6a25048 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-10-24 02:02:24 +00:00
Rafael Kitover
ea2a929f5e Backport 800d6ed69b from wx to fix Wayland EGL pos
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>
2022-10-23 13:14:03 -07:00
Fabrice de Gans
0ca5184dda [option] Convert all uses of geometry options to use config::Option
Moving and resizing the window no longer updates the entire option
set, reducing jank on move and resize.
2022-10-23 11:42:08 +00:00
Rafael Kitover
d2d070b52f translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-10-23 02:03:18 +00:00
Rafael Kitover
c40a141792 Write vsync toggle msg to debug log not OSD
Write vsync enable/disable messages to debug log and not the OSD, they
are kind of annoying.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-10-22 11:55:56 +00:00
Rafael Kitover
5d2dd01e85 Call Layout() after DrawingPanel OnSize event
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>
2022-10-22 11:51:13 +00:00
Rafael Kitover
00344ca8f1 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-10-22 02:02:19 +00:00
Fabrice de Gans
af4951511e [config] Add Observers for Options
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
2022-10-22 01:47:39 +00:00
Rafael Kitover
da686a4827 Reinit panel on vsync toggle.
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>
2022-10-21 21:43:13 +00:00
Rafael Kitover
ec27885c36 Support EGL VSync on Wayland.
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>
2022-10-21 19:19:28 +00:00
Rafael Kitover
c27d384a53 Enable GL on Wayland for wx 3.2+, no vsync.
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>
2022-10-21 17:24:46 +00:00
Rafael Kitover
75e46b7117 build: update macOS third_party_libs_tool from git
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-10-19 00:00:59 +00:00
Rafael Kitover
c249115b7a build: set -mtune=generic
Nach explained that this is the safest and best option.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-10-16 18:37:03 +00:00
Rafael Kitover
d23b374fbf ci: add basic macos-latest runner
Add basic macos-latest build to have one macOS runner.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-10-16 18:22:37 +00:00
Rafael Kitover
2985b46926 ci: add ubuntu-latest workflow
Add basic build on ubuntu-latest to have at least one ci build on Linux.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-10-16 14:18:13 +00:00
Adam Sampson
54b8192d30 Fix prototype for main.
A typo in 297d7c06c4 meant main had the
wrong prototype on non-Windows systems, breaking the build.
2022-10-16 13:08:25 +00:00
Rafael Kitover
927ccf0bc8 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-10-16 02:02:40 +00:00
Fabrice de Gans
8c1bd84f40 [config] Move VbamOption and wxGameControl to config namespace 2022-10-15 23:11:41 +00:00
Fabrice de Gans
297d7c06c4 [hidpi] Use wxWidgets 3.2 on Windows
* 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.
2022-10-15 22:25:54 +00:00
Fabrice de Gans
0d86432a31 [hidpi] Implement full HiDPI support
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.
2022-10-15 22:25:54 +00:00
Fabrice de Gans
95337da558 [build] Add basic clang-cl support
XAudio2 is disabled because the included header needs to be updated to
be parseable by clang.
2022-10-15 22:25:34 +00:00
Rafael Kitover
d6331ff92e translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-10-14 02:02:29 +00:00
Rafael Kitover
69a4061ab9 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-10-13 02:02:23 +00:00
Rafael Kitover
8f27869715 build: fix finding static vcpkg SDL2
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>
2022-10-09 04:00:26 +00:00
LibretroAdmin
7e30b03889 Merge pull request #109 from negativeExponent/silence_bios_sign_compare_warnings
HLE: Fix sign-compare warnings
2022-10-07 10:59:16 +02:00
LibretroAdmin
09bb3c3acf Remove fallthrough - breaks Clang on Mac/iOS 2022-10-07 10:58:00 +02:00
LibretroAdmin
655cfb929d Merge pull request #111 from negativeExponent/fix_warnings
Fix warnings and more cleanups
2022-10-07 10:57:48 +02:00
negativeExponent
e2f3a64143 Cleanup more libretro-specific branches 2022-10-07 15:28:31 +08:00
negativeExponent
1c95df1212 Simplify save state handling
- size and version parameters are unused in the libretro implementation,
  so remove them
2022-10-07 14:46:29 +08:00
negativeExponent
3158b73d69 Wrap functions unused by LIBRETRO 2022-10-07 14:21:29 +08:00
LibretroAdmin
62671753a9 Merge pull request #108 from negativeExponent/fix_implicit-fallthrough
Fix implicit fallthrough and other warnings
2022-10-07 08:21:19 +02:00
LibretroAdmin
cb3fc44789 Merge pull request #110 from negativeExponent/fix_missing_field_initializers
Fix missing-field-initializer warnings
2022-10-07 08:20:51 +02:00
negativeExponent
ac2a56be7f Silence other warnings 2022-10-07 13:41:06 +08:00
negativeExponent
ba2513b511 Fix missing break statements 2022-10-07 13:23:02 +08:00
negativeExponent
0594fa2a2c Silence implicit-fallthrough warnings
Used [[fallthrough]]; to mark affected areas. Such keyword should be
available since C++11
2022-10-07 13:21:49 +08:00
negativeExponent
9864dc2853 Fix missing-field-initializer warnings 2022-10-07 12:52:29 +08:00
negativeExponent
12f39b86b1 HLE: Fix sign-compare warnings 2022-10-07 12:34:32 +08:00
Rafael Kitover
eed171aac0 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-10-02 02:02:17 +00:00
Rafael Kitover
603d6a3872 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-10-01 02:02:18 +00:00
Fabrice de Gans
f8974d8870 Merge pull request #1012 from Ds886/fix-missing-header
* adds missing header to memgzio ("stdint")
2022-09-30 13:11:50 -07:00
Ds886
6be626d4c7 * adds missing header("stdint") 2022-09-30 22:56:58 +03:00
Rafael Kitover
8771172d19 build: silence cmake warning on macOS for Sparkle
Silence cmake policy set warning for FetchContent
DOWNLOAD_EXTRACT_TIMESTAMP by setting it to TRUE.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-09-29 23:04:27 +00:00
Rafael Kitover
85a95dcde0 build: macOS C++ compatibility fixes
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>
2022-09-29 22:34:59 +00:00
Rafael Kitover
343eafc477 build: add variant-lite as nonstd::variant
From:

https://github.com/martinmoene/variant-lite

. Needed for macOS build.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-09-29 22:34:59 +00:00
Rafael Kitover
1425248072 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-09-29 02:02:19 +00:00
Rafael Kitover
4bdd3798f1 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-09-28 02:02:21 +00:00
LibretroAdmin
7c25d64d69 Merge pull request #106 from ds22x/master
Update to core options v2 interface
2022-09-28 00:02:59 +02:00
Fabrice de Gans
69d24fb53e [build][msvc] Fix debug information and set hidpi support
* Add /ZI compiler flag in Debug mode to get proper debug symbols.
* Specify hidpi support in the app manifest.
2022-09-27 01:25:20 +00:00
Fabrice de Gans
b027e64753 [config] Move wxUserInput to the config namespace
* 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.
2022-09-26 02:20:12 +00:00
Fabrice de Gans
1d4eb48a68 [build] Fix all warnings in src/gba/bios.cpp
This adds some helper methods to safely downcast integer types.

Bug: #1003
2022-09-26 02:17:26 +00:00
Fabrice de Gans
1e1451c57f [build] Fix warnings in src/common
Bug: #1003
2022-09-26 02:14:53 +00:00
Fabrice de Gans
b2ec1544be [build] Regenerate lex and yacc files
The source grammar files were also updated. This fixes compiler
warnings for these files.

Bug: #1003
2022-09-26 02:13:12 +00:00
Fabrice de Gans
239b244640 [build] Fix warnings in memgzio.c
Bug: #1003
2022-09-26 02:11:52 +00:00
Rafael Kitover
9cc45c355b translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-09-26 02:02:20 +00:00
Fabrice de Gans
4a056c7720 [options] Remove duplicate string constants
* 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.
2022-09-25 05:47:34 +00:00
Fabrice de Gans
c4d46a713f [options] Refactor INI options
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
2022-09-25 05:47:34 +00:00
Rafael Kitover
dd6071e5cb translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-09-25 02:02:21 +00:00
Rafael Kitover
c10338a854 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-09-24 02:02:22 +00:00
Fabrice de Gans
a92c448405 Merge pull request #1002 from visualboyadvance-m/interframe-blending-changer
Interframe blending changer OSD improvement
2022-09-23 16:55:41 -07:00
Rafael Kitover
90fc3e12e2 Default CTRL+I to change interframe blender
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>
2022-09-23 23:44:37 +00:00
Rafael Kitover
a57d81e1af Show name of interframe blender not num in OSD
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>
2022-09-23 23:44:36 +00:00
Rafael Kitover
97c24ec2d2 Minor refactor of strutils and add 3 new functions
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>
2022-09-23 23:43:31 +00:00
Rafael Kitover
2d3610b5c6 translations: remove Hebrew he locale, use he_IL
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-09-23 22:12:34 +00:00
Rafael Kitover
adb9f62080 Copy Hebrew translation from he to he_IL locale
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-09-23 21:59:26 +00:00
ds22x
67e7cfc200 Update to core options v2 interface 2022-09-17 17:37:51 +02:00
Rafael Kitover
bad9538ed4 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-09-12 02:02:22 +00:00
Rafael Kitover
8e83209121 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-09-06 02:02:22 +00:00
Rafael Kitover
13c558ac9f Disable wireless link type
Always disable wireless link type as it has never worked.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-09-04 03:17:35 +00:00
Fabrice de Gans
3eb9fbdb7e [snap] Fix snapcraft build for core20 2022-09-03 19:01:17 -04:00
Rafael Kitover
e140ba816c installdeps: remove wxgtk2 for Arch on failure
The wxgtk2 package being installed may prevent the installation of the
newer wxwidgets-gtk3 package, remove it on pacman failure and try again.

See:

https://archlinux.org/news/wxwidgets-32-update-may-need-manual-intervention/

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-09-03 09:34:05 +00:00
Squall Leonhart
355c8efeb4 change invite code
resolves expired code error
2022-09-02 17:57:38 -04:00
Squall Leonhart
7d606f7065 fix it better 2022-09-02 17:47:42 -04:00
Squall Leonhart
ec90072c28 Fix discord link 2022-09-02 17:47:42 -04:00
Rafael Kitover
0fd1daae54 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-08-27 02:02:26 +00:00
Rafael Kitover
913db72d12 build: check that -mtune=znver3 is supported
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>
2022-08-26 17:12:09 +00:00
Rafael Kitover
2da9696a50 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-08-26 02:02:22 +00:00
Rafael Kitover
b1c7476f2c build: update finding vcpkg wxWidgets for 3.2
Use a glob instead of hardcoding '31' in lib name.

Fix #992.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-08-26 00:59:38 +00:00
Rafael Kitover
cf57af4a83 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-08-25 02:02:21 +00:00
Rafael Kitover
e0ae114f2e translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-08-24 02:02:25 +00:00
Rafael Kitover
6b8b6b6450 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-08-23 02:02:24 +00:00
Rafael Kitover
7f1d49d3d0 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-08-21 23:23:23 +00:00
Rafael Kitover
9bda107d3c build: update dev msg for translations .pot update
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>
2022-08-18 15:00:40 +00:00
Rafael Kitover
dd10b8075f translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-08-18 14:53:25 +00:00
Rafael Kitover
2d5fdf8e79 translations: rebuild source .pot
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-08-18 14:46:00 +00:00
Rafael Kitover
f68492cbbf build: fix deps from/to translations source .pot
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>
2022-08-18 14:31:19 +00:00
Rafael Kitover
639003a8b6 Show pixel filter name not number on cycle
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>
2022-08-18 13:52:13 +00:00
Rafael Kitover
a3b2a35395 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-08-18 11:49:19 +00:00
Rafael Kitover
60caad8666 build: improve translations.zip creation
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>
2022-08-10 15:29:20 +00:00
Rafael Kitover
a87a6a2cc1 refactor: add static GetX11Display() in panel.cpp
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>
2022-08-10 13:31:22 +00:00
Rafael Kitover
236cffb42b Make another adjustment to glXQueryExtensions
Use GDK/GTK to get the X display instead of glXGetCurrentDisplay().

For #985.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-08-09 22:27:07 +00:00
Rafael Kitover
643ec0f7b6 Pass DefaultScreen(display) to glXQueryExtensions
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>
2022-08-09 14:45:11 +00:00
Rafael Kitover
395ed0eb2a build: fix tests build on Linux by doctest update
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>
2022-08-09 14:18:40 +00:00
Fabrice de Gans
50a1391232 Simplify Hat handling
* Parse the hat bitfield directly rather than going through an
  intermediate enum state.
* Clean up some of the sdljoy code to use less vertical space.
2022-08-09 11:00:34 +00:00
Fabrice de Gans
a56ea0225a Revamp wxJoyEvent to simplify handling of joystick events
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
2022-08-09 11:00:34 +00:00
laqieer
60d7ead565 Fix menu state after playing a movie
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>
2022-08-08 04:01:45 +00:00
laqieer
d2fee771fd Add VBA Movie Version 2
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>
2022-08-08 04:01:45 +00:00
Rafael Kitover
5008ffbacf Stop using MINGW64 windres rc compiler for CLANG64
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>
2022-08-07 21:13:52 +00:00
Rafael Kitover
e29032d48a Switch to nonstd::optional due to mac build issues
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>
2022-08-06 12:59:10 +00:00
noabody
fb99a07625 error typedef Status fix for #904 2022-08-06 12:19:45 +03:00
Fabrice de Gans
51473a7c53 Refactor game controls bindings
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
2022-08-06 12:18:35 +03:00
Fabrice de Gans
3f2d3c139d Remove manual joystick polling
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.
2022-08-06 12:17:35 +03:00
Rafael Kitover
1cfe275012 doc: add Discord/IRC links to README.md
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-07-25 07:12:24 +00:00
Fabrice de Gans
4aebd0b802 Introduce wxUserInput class
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
2022-07-12 18:20:09 +00:00
Colton G. Rushton
d7abc27438 doc: remove travis and appveyor from README.md
We are using GitHub actions now.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-07-06 23:34:33 +00:00
Deen O'Connor
76bf554161 installdeps: use correct package name for libsdl2
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>
2022-07-04 19:32:09 +00:00
Fabrice de Gans-Riberi
f132e15511 Abstract player_index into wxJoystick
* 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
2022-07-04 13:58:28 +03:00
Rafael Kitover
37dc95b930 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-06-16 21:02:11 +00:00
Rafael Kitover
941eef918b translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-06-15 21:02:08 +00:00
Rafael Kitover
94627c1e8e build: link pcre2 with vcpkg wxwidgets
wxregex uses pcre2, link it when using static vcpkg wxwidgets.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-06-15 20:52:29 +00:00
Rafael Kitover
3e224bab40 build: enable ccache for MSVC
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>
2022-06-15 01:00:13 +00:00
Squall Leonhart
72d772189a Add before creating request to feature.yml
and encourage searching
2022-06-05 02:10:54 -04:00
Zach Bacon
a413eb048c switch from wxmsw3.1 to wxWidgets 3.0 and pkg-config to pkgconf
Signed-off-by: Zach Bacon <zachbacon@vba-m.com>
2022-06-05 01:22:24 -04:00
Zach Bacon
fed8c3697e Yeah... one last tweak to get submodules pulled
Signed-off-by: Zach Bacon <zachbacon@vba-m.com>
2022-06-05 01:08:34 -04:00
Zach Bacon
3abf084f2f last tweak to the CI build system
at least till clang is fixed for windows targets

Signed-off-by: Zach Bacon <zachbacon@vba-m.com>
2022-06-05 00:57:20 -04:00
Zach Bacon
05e58ba0a7 update the workflow script 2022-06-05 00:49:02 -04:00
Rafael Kitover
c9994c284a translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-06-03 21:02:14 +00:00
Rafael Kitover
595a9e49c0 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-05-23 21:02:05 +00:00
Rafael Kitover
732524a77b translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-05-21 21:02:10 +00:00
Rafael Kitover
f7ce25f496 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-05-14 21:02:10 +00:00
Zach Bacon
61d494af4e Merge pull request #951 from Squall-Leonhart/patch-1
encourage users to search for existing issues in bug report template
2022-05-14 09:49:56 -04:00
Squall Leonhart
17038c27d1 Update bug_report.yml
encourage users to search for existing issues
2022-05-14 23:46:05 +10:00
Rafael Kitover
75f0a061be translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-05-04 21:02:23 +00:00
Rafael Kitover
27a0d41ad8 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-05-01 21:02:05 +00:00
Rafael Kitover
4f9d161c02 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-04-26 21:02:11 +00:00
Rafael Kitover
571d42d2fa translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-04-20 21:02:07 +00:00
Rafael Kitover
1bd2f049cb cmake: default VBAM_STATIC=ON for MinGW/MSYS2
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-04-19 04:07:30 +03:00
Rafael Kitover
b28982a89a installdeps: support UCRT64 on MSYS2
Same as MINGW64, works fine.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-04-19 03:58:01 +03:00
Rafael Kitover
d91e5db524 cmake: fix static linking winpthread on MINGW
Include linker flags to link winpthread statically on MINGW when static
build is on.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-04-13 21:26:27 +00:00
Rafael Kitover
cbd7d7d2d1 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-04-09 21:02:01 +00:00
Rafael Kitover
570596266f translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-04-05 21:02:08 +00:00
Rafael Kitover
cf39d9bbd1 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-04-04 21:02:11 +00:00
Rafael Kitover
d014ebd2b2 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-03-27 21:02:06 +00:00
Rafael Kitover
8483fde365 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-03-26 21:02:08 +00:00
Rafael Kitover
ad7dbf253c translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-03-25 21:02:34 +00:00
Rafael Kitover
461c4a7bd4 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-03-24 21:01:40 +00:00
Rafael Kitover
1fc449b2c7 installdeps: don't link mac brew ffmpeg
Stop linking brew ffmpeg, it links itself by default.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-03-20 18:10:37 +00:00
Rafael Kitover
1a6f40a79c installdeps: re-enable ffmpeg for mac brew
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>
2022-03-20 13:53:32 +00:00
Zach Bacon
1e0eea3c08 recording: fix ffmpeg5 compat
Include avcodec.h and change AVCodec* and AVOutputFormat* to const.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-03-20 12:01:59 +00:00
Rafael Kitover
9a325f086e issues: fix nightly URL in bug_report template
We're at https://nightly.vba-m.com now.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-03-19 07:46:27 +00:00
Rafael Kitover
2810f4b228 installdeps: update for mac brew
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>
2022-03-18 19:19:23 +00:00
Rafael Kitover
8caea3ae6c installdeps: add -DCMAKE_BUILD_TYPE=Release
Add -DCMAKE_BUILD_TYPE=Release to cmake invocation in build instructions
in installdeps.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-03-18 19:18:08 +00:00
Rafael Kitover
8c1ebf4d59 builder: update automake 1.15.1 -> 1.16.5
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-03-18 18:57:58 +00:00
Rafael Kitover
715c66b52c builder: update gettext 0.19.8.1 -> 0.21
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-03-18 18:51:35 +00:00
Rafael Kitover
dedfb615d5 build: use GLOB to detect wx dep lib suffixes
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>
2022-03-18 14:47:50 +00:00
Rafael Kitover
ec434a7c2f build: rm vcpkg build_prefix* in vcpkg wx setup
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>
2022-03-18 14:37:08 +00:00
Rafael Kitover
a6affd3807 build: remove d suffix from lzmad.lib for vcpkg
The debug build of lzma.lib is no longer called lzmad.lib in vcpkg,
remove the 'd' suffix.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-03-17 21:16:43 +00:00
Rafael Kitover
7f4b5b6f93 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-03-17 19:03:19 +00:00
Zach Bacon
287bb5f3a2 Merge pull request #931 from Squall-Leonhart/master
Updates the Feature Request form from MD to YML
2022-03-10 05:16:52 -05:00
Squall Leonhart
50f64b0e8b we don't use plugins
so remove reference
2022-03-09 14:41:53 +11:00
Squall Leonhart
e7924caca0 cleanups 2022-03-09 14:41:28 +11:00
Squall Leonhart
f16d1d0725 convert feature request into a yml
copying @DerekTurtleRoe homework
2022-03-09 14:17:04 +11:00
Zach Bacon
8ea020d373 Merge pull request #929 from Squall-Leonhart/master
fix x86 builds crashing when /Gs set by Optimizations, turns on full optimizations for x86
2022-03-08 06:49:22 -05:00
Squall Leonhart
7726d26f9c Enable full optimizations and fix x86 builds
a bool isn't a BOOL and wglGetExtensionsStringEXT returns a const char*
2022-03-08 13:23:54 +11:00
Zach Bacon
252b65b13c Merge pull request #927 from Squall-Leonhart/master
Adding Forum link to config.yml, fixes title and a typo in feature.md
2022-03-07 10:26:07 -05:00
Squall Leonhart
56ffb12758 typo fixed 2022-03-08 02:20:58 +11:00
Squall Leonhart
66c224e122 change title template to [Feature request] 2022-03-08 02:18:45 +11:00
Squall Leonhart
dc4d431d7a Merge branch 'visualboyadvance-m:master' into master 2022-03-08 02:14:45 +11:00
Squall Leonhart
09eb6628e8 Update config.yml 2022-03-08 02:06:36 +11:00
Squall Leonhart
9b84396adb Update config.yml 2022-03-08 02:05:51 +11:00
Zach Bacon
bb1d44ae0a Merge pull request #925 from Squall-Leonhart/master
Updating to YML Issue form for Bug, adding Feature request form, link to IRC and disbling blank issues.
2022-03-07 09:01:22 -05:00
Squall Leonhart
df991bae0a remove required flag for "What game were you playing"
Some issues occur before a rom is even in use
2022-03-08 00:47:47 +11:00
Squall Leonhart
a00e4345d0 remove required flag for Error Messages
Not all issues reporte will have an error message.
2022-03-08 00:46:09 +11:00
Squall Leonhart
be7b1ef1d2 updating rom details
clarifying how to obtain information for rom and save types of gba titles
2022-03-08 00:44:57 +11:00
Squall Leonhart
f7633ca274 move the SDL block to the top
so that people don't waste their time filling out the form only to find out we don't take sdl related controller issues.
2022-03-08 00:39:17 +11:00
Squall Leonhart
03d962dfea clarification on filter, and capital letter.
some more small cleanup
2022-03-08 00:20:51 +11:00
Squall Leonhart
c1c4daf5e3 further template changes
just cleaning up
2022-03-08 00:20:51 +11:00
Squall Leonhart
a9e594a38a add some missing tidbits
from the present issue template
2022-03-08 00:20:51 +11:00
Squall Leonhart
18a84e5cad Update feature.md 2022-03-08 00:20:51 +11:00
Squall Leonhart
bd1adc87e0 Update feature.md 2022-03-08 00:20:51 +11:00
Squall Leonhart
2d6457c0f4 Update feature.md 2022-03-08 00:20:51 +11:00
Squall Leonhart
85e991a0e8 Update feature.md 2022-03-08 00:20:51 +11:00
Squall Leonhart
265342135d Update bug_report.yml 2022-03-08 00:20:51 +11:00
Squall Leonhart
d729ac3ff2 Update bug_report.yml 2022-03-08 00:20:50 +11:00
Squall Leonhart
8688d9f8e7 Update feature.md 2022-03-08 00:20:50 +11:00
Squall Leonhart
256008dffc Create config.yml 2022-03-08 00:20:50 +11:00
Squall Leonhart
a1f2ac8caf Delete ISSUE_TEMPLATE.md 2022-03-08 00:20:50 +11:00
Squall Leonhart
32503fd03a Create feature.md 2022-03-08 00:20:50 +11:00
Squall Leonhart
fd3029c858 Update bug_report.yml 2022-03-08 00:20:50 +11:00
Squall Leonhart
27213d9626 Update bug_report.yml 2022-03-08 00:20:50 +11:00
Squall Leonhart
b198c6b549 Update bug_report.yml 2022-03-08 00:20:50 +11:00
Squall Leonhart
5961c1480b Update bug_report.yml 2022-03-08 00:20:50 +11:00
Squall Leonhart
961b27f21d Update bug_report.yml 2022-03-08 00:20:50 +11:00
Squall Leonhart
738b6406b8 Update bug_report.yml 2022-03-08 00:20:50 +11:00
Squall Leonhart
5583effa89 Update bug_report.yml 2022-03-08 00:20:50 +11:00
Squall Leonhart
ef8efd3187 Update and rename bug_report.md to bug_report.yml 2022-03-08 00:20:50 +11:00
Squall Leonhart
6c9c53a119 Update issue templates 2022-03-08 00:20:50 +11:00
Squall Leonhart
12ec072b25 add colorization hack support to Wx
Revert "add colorization hack support to Wx"

This reverts commit c676333c7157698657b774bdf8e068824e0fc43e.
2022-03-08 00:20:49 +11:00
Rafael Kitover
cdeb1027cc Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-02-07 12:19:59 +00:00
Rafael Kitover
796dfe78f9 Fix Wx OpenGL and ABI checks for MSYS2 CLANG64.
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>
2022-02-05 01:00:25 +00:00
Rafael Kitover
87e41300f1 Speedup wx-config search on MSYS2.
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>
2022-02-04 04:45:07 +00:00
Rafael Kitover
7853718627 Add winmm to SDL2 libs for WIN32.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-02-04 04:44:14 +00:00
Rafael Kitover
a7eeb17645 Use gcc binutils for rc compiler on MSYS2 CLANG64.
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>
2022-02-04 04:18:36 +00:00
Rafael Kitover
347df44497 Add ccache to pkg list in installdeps for MSYS2.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-02-04 04:16:26 +00:00
Rafael Kitover
8bd09c9012 Revert "Use MSVC intrinsic sqrt() on x86 for XBRZ"
This reverts commit 55a0a52a39.

Does not make any difference, the performance issue is elsewhere.
2022-02-03 07:57:51 +00:00
Rafael Kitover
55a0a52a39 Use MSVC intrinsic sqrt() on x86 for XBRZ too.
Instead of the inline asm fsqrt instruction.
Already being used on x64.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-02-03 07:22:05 +00:00
Rafael Kitover
4af78f6482 Fix MSVC VCPKG build and Debug build type checks.
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>
2022-02-03 00:18:08 +00:00
Rafael Kitover
7d454e054a Fix MSVC compiler/linker flags.
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>
2022-02-02 22:27:39 +00:00
Zach Bacon
5ed544aad3 [Workflow] Ensure checkout is autocrlf for github actions 2022-02-02 09:43:52 -05:00
Rafael Kitover
9ba5645964 Fix Win32 build regression in fa562426.
Move list of media libs ffmpeg depends on to the right cmake file.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-02-02 00:44:41 +00:00
Rafael Kitover
fa56242669 Add MSYS2 CLANG64/32 support.
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>
2022-01-31 03:26:52 +00:00
Rafael Kitover
65b5affe7d Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-01-30 02:39:02 +00:00
Rafael Kitover
c4733bcf03 Fix x86 build, tweak MSVC opt flags.
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>
2022-01-18 03:01:13 +00:00
Rafael Kitover
73223445d6 MSVC opt /fp:fast /Oi, intrinsic sqrt() w/ XBRZ.
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>
2022-01-16 15:55:02 +00:00
Rafael Kitover
2eb45cd967 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-12-22 15:02:48 +00:00
Rafael Kitover
a5b2d070dc Add cmake TRANSLATIONS_ONLY for translations.zip.
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>
2021-12-19 13:57:05 +00:00
Rafael Kitover
ea9d95dfa0 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-12-19 12:26:39 +00:00
Rafael Kitover
21ccbcb120 Minor fix in builder script.
Delete build directories prior to build in build_project().

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-12-19 12:04:18 +00:00
Zach Bacon
a33695cd55 Update the snapcraft yaml to core20
Signed-off-by: Zach Bacon <zachbacon@vba-m.com>
2021-12-16 07:51:37 -05:00
Rafael Kitover
94b4a7982c Update nightly builds URL in README.md.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-12-14 08:55:48 +00:00
Squall Leonhart
972f151310 Enable GB colorization hack support in GUI.
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>
2021-11-24 21:30:37 +00:00
Rafael Kitover
89028de852 Regenerate dev guide TOC.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-11-10 23:08:25 +00:00
Rafael Kitover
b9fb76043e Move Windows dev guide to its own repository.
It is now at:

https://github.com/rkitover/windows-dev-guide

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-11-10 22:37:15 +00:00
Rafael Kitover
35d4d44a9b Update Windows Terminal settings in dev guide.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-11-10 18:56:15 +00:00
Rafael Kitover
b3cc663344 Minor architecture/optimization improvements.
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>
2021-10-31 18:23:34 -07:00
Rafael Kitover
b6837cea05 Support Debug builds for mac.
Allow codesigning frameworks to fail.

Use ninja to build project in the builder instead of make.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-10-31 17:10:22 -07:00
Rafael Kitover
414cacbf28 Suffix zip files with arch + minor cmake fixes.
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>
2021-10-31 08:55:48 -07:00
Rafael Kitover
a45d8214c1 Update builder for mac build.
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>
2021-10-30 22:24:40 -07:00
Rafael Kitover
173512f65a Revert DMA:Linger last DMA on bus ...
Pulled in from merge of libretro fork, causes a regression in Croket 2.

This reverts commit a9f35645b7.
2021-10-23 22:34:35 +00:00
Rafael Kitover
c37c472996 Fix merge in b3153dcf breaking build.
The merge conflict was resolved incorrectly, replace with source file
from the libretro fork.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-10-20 13:08:38 +00:00
Rafael Kitover
3f571fb930 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-10-20 05:49:36 +00:00
Rafael Kitover
b3153dcf35 Merge remote-tracking branch 'libretro/master'
Includes some GB and GBA fixes.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-10-20 05:42:27 +00:00
Rafael Kitover
2ecfe09c6a Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-10-05 20:16:53 +00:00
Zach Bacon
4223c39c4c disable online updates for github workflow 2021-10-03 16:38:43 -04:00
Zach Bacon
459de4ba78 aaaand I forgot to append the -D to enable the sdl static stuff 2021-10-03 16:24:54 -04:00
Zach Bacon
9a5406f824 enable several configuration options, the static I'm sure won't work though 2021-10-03 16:18:46 -04:00
Zach Bacon
859359e5ef Add ffmpeg to the build 2021-10-03 16:05:26 -04:00
Zach Bacon
ab1ff4191d add zip to the build process 2021-10-03 16:02:59 -04:00
Zach Bacon
e8383447a8 This should fix the basic build, I'll add proper configure options later 2021-10-03 15:56:31 -04:00
Zach Bacon
bdc79bbe20 I'm still learning github actions it seems 2021-10-03 17:08:07 -04:00
Zach Bacon
227c1d69b3 add git 2021-10-03 17:01:51 -04:00
Zach Bacon
2011a5cc9c Let's run the git submodule command 2021-10-03 16:57:32 -04:00
Zach Bacon
24ecb82fb1 let's try this bit for the workflow 2021-10-03 16:52:35 -04:00
Zach Bacon
dd2e837310 let's set the build environment for github actions 2021-10-03 16:45:22 -04:00
Zach Bacon
0db7eab66c add github actions workflow 2021-10-03 16:37:11 -04:00
Zach Bacon
dc24eac896 Merge pull request #877 from Squall-Leonhart/master
Fix autosaveloadcheats and rename pref to autosaveloadcheats
2021-09-23 22:21:57 -04:00
Squall Leonhart
1741fa32db Fix autosaveloadcheat and rename pref 2021-09-23 18:56:32 +10:00
Rafael Kitover
c503c9adb8 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-09-07 23:10:12 +00:00
Rafael Kitover
7a550f4348 Update default.nix.
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>
2021-09-07 23:05:31 +00:00
Zach Bacon
3529826bcc begin the support of arm64 support in the m1 mac variants,
not sure if this will work however, but I'll keep tweaking
until it is ready
2021-09-05 13:25:11 -04:00
Zach Bacon
0ea8ce8dd9 Merge pull request #855 from laqieer/fix/flash_erase
Fix Flash chip's erase operation
2021-08-30 23:51:53 -04:00
Zach Bacon
59fd820e7a homebrew moved from /usr/local to /opt/homebrew, adjust accordingly 2021-08-23 23:47:40 -04:00
Zach Bacon
1426358da4 Merge pull request #866 from Squall-Leonhart/master
in Wx, the Option is Enable MMX, make the variable also enableMMX and…
2021-08-19 09:44:30 -04:00
Squall Leonhart
41d8ab5d26 remove unnecessary dictionary preference change 2021-08-14 02:35:54 +10:00
Squall Leonhart
a31a7a3086 in Wx, the Option is Enable MMX, make the variable also enableMMX and set its default to on.
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.
2021-08-13 13:28:56 +10:00
Zach Bacon
157277e028 Merge pull request #838 from Steelskin/fix-ret-value-filter-event
Use constant aliases in MainFrame::FilterEvent()
2021-08-10 23:41:52 -04:00
Zach Bacon
93e15f5b34 Merge pull request #862 from leontepe/patch-1
Fix Arch installdeps
2021-08-10 23:35:43 -04:00
Leon Tepe
276689edda Fix Arch installdeps
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.
2021-08-08 12:33:19 +02:00
Rafael Kitover
96ce316bcd Update openssh instructions for windows env.
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>
2021-07-22 16:14:48 +00:00
Rafael Kitover
f23fae6559 Add nuget package source for Windows build.
This fixes the "Unable to find package ..." error.

Thanks to:

https://stackoverflow.com/a/65012088/262458

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-07-21 12:55:15 +00:00
Autechre
254f6effeb Merge pull request #105 from negativeExponent/flash_erase_ff
Flash : Erased memory is FFh-filled
2021-07-04 19:36:43 +02:00
negativeExponent
983ea451d0 Flash : Erased memory is FFh-filled
https://akkit.org/info/gbatek.htm#gbacartbackupflashrom
2021-07-05 00:02:02 +08:00
laqieer
18e387d165 Fix Flash chip's erase operation: erased memory is FFh-filled, not zero-filled. 2021-07-03 21:38:46 +08:00
Rafael Kitover
c08bb6bdb0 Minor updates to win dev manual.
Add instructions for setting up sshd and gpg plus minor edits.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-07-03 01:08:53 +00:00
Rafael Kitover
9b6740c0e5 Minor updates to Windows section of dev manual.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-06-30 14:04:25 +00:00
Rafael Kitover
26cfbee696 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-06-29 11:06:23 +00:00
Autechre
eb6c434e29 Merge pull request #104 from negativeExponent/libretro
update
2021-05-28 01:56:31 +02:00
negativeExponent
c05056ab91 HuC3: Update
- 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)
2021-05-27 13:56:21 +08:00
Autechre
6dca6fe8df Merge pull request #103 from negativeExponent/huc3
HuC3: Refactoring to avoid breaking savestates
2021-05-25 06:36:40 +02:00
negativeExponent
93084990b2 HuC3: Refactoring to avoid breaking savestates
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.
2021-05-25 12:14:33 +08:00
Autechre
5187d70e30 Merge pull request #102 from negativeExponent/huc3
HuC3 Enable save support and update RTC
2021-05-25 05:30:51 +02:00
negativeExponent
ab7f7baab0 Libretro: Only enable RTC save if gbRTCPresent=1 2021-05-25 09:52:44 +08:00
negativeExponent
05a046e7ed HuC3: Enable battery save, update RTC support
- 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
2021-05-25 09:46:31 +08:00
Autechre
685a495d5c Merge pull request #101 from negativeExponent/patch-1
android: Fix build
2021-05-23 03:16:04 +02:00
negativeExponent
fcc8b273c3 android: Fix build 2021-05-23 08:58:43 +08:00
Autechre
501909c57b Merge pull request #99 from negativeExponent/libretro_updates
update
2021-05-22 05:15:30 +02:00
negativeExponent
bdb65596ce Libretro: Remove serial emulation workaround
These are not needed anymore due to previous 2 commits.
2021-05-22 08:29:16 +08:00
negativeExponent
70477dcd9b GBA:Fix serial emulation if compiled with NO_LINK 2021-05-22 08:26:19 +08:00
negativeExponent
15bcad1351 GB:Fix serial emulation when compiled with NO_LINK
Fix https://github.com/libretro/vbam-libretro/issues/83
2021-05-22 08:17:11 +08:00
Autechre
e38b4c40c9 Merge pull request #98 from negativeExponent/libretro_updates
Libretro updates
2021-05-21 18:39:52 +02:00
negativeExponent
a9f35645b7 DMA:Linger last DMA on bus (Backport 511e58c849) 2021-05-21 17:37:58 +08:00
negativeExponent
025f3079b1 GBA:Fix a few memory read/write issues
- Affects both aligned and unaligned in unsigned 8/16/32 and signed 16
  reads/writes
- Rom out-of-bounds reads
- SRAM r/w access
- etc
2021-05-21 14:54:54 +08:00
negativeExponent
4e5b61f220 Backport fix e560db692f 2021-05-21 12:49:47 +08:00
negativeExponent
19aae231c0 Wrap these with #ifdef BKPT_SUPPORT 2021-05-20 15:06:50 +08:00
negativeExponent
21c08e9d9f Cleanup unused variables 2021-05-20 15:01:40 +08:00
negativeExponent
11bd3e0eee Silence warning [-Wsign-compare] 2021-05-20 14:46:26 +08:00
negativeExponent
6afbc9a09c Remove unused files and folders 2021-05-20 14:46:26 +08:00
negativeExponent
25fefc1b3d Implement libretro input bitmask 2021-05-20 14:12:08 +08:00
Fabrice de Gans-Riberi
e91b5e1eac Use constant aliases in MainFrame::FilterEvent()
Previously, this function returned -1 or "true" but wxWidgets
defines constants for the returned values for FilterEvent()
overrides so use these instead.
2021-04-28 16:06:38 -07:00
Autechre
109573dea6 Merge pull request #97 from ds22x/master
Add descriptions for the 'Interframe Blending' and 'LCD Color Filter' options
2021-03-16 02:09:53 +01:00
ds22x
210e79bb74 Add descriptions for the 'Interframe Blending' and 'LCD Color Filter' options 2021-03-16 00:17:19 +01:00
twinaphex
f355646fb8 Add ios-arm64/tvos-arm64 2021-03-14 11:50:23 +01:00
Rafael Kitover
e55ed5c0f4 installdeps: Support NixOS.
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>
2021-02-27 05:10:55 +00:00
Rafael Kitover
544715ddaa Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-02-11 03:08:30 +00:00
Rafael Kitover
31789aafba Merge remote-tracking branch 'libretro/master'
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-02-11 02:13:55 +00:00
Rafael Kitover
8a3456f823 Default to not change battery on state load.
This is a more reasonable and less destructive default.

Fix #781.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-02-09 15:01:22 +00:00
Rafael Kitover
1b6d9557a2 docs: Specify that nightlies are Windows and Mac.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-02-02 01:55:22 -08:00
Rafael Kitover
ab68794361 cmake: Fix mac app zip + misc..
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>
2021-02-02 01:49:16 -08:00
Rafael Kitover
eaf4785915 builder: Update for mac builds on Big Sur 11.1.
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>
2021-02-01 09:39:48 -08:00
twinaphex
c13de4518c (macOS) Add 64bit ARM MacOS support 2021-01-29 19:25:53 +01:00
Squall Leonhart
b50ff8584c add a missing break in half word reads
Fixes illegal halfword and byte reads (Croket! 2 slowdown)
2021-01-27 05:35:48 +00:00
Clownacy
b0c029a389 SDL: Fix more indentation mistakes 2021-01-24 06:09:13 +00:00
Clownacy
524c594a73 SDL: Use sizeof to determine buffer sizes
I think the use of 2048 was a typo, so this prevents one like that
from happening again.
2021-01-24 06:09:13 +00:00
Clownacy
d464bc4dfe SDL: Fix Windows build never searching PATH
Some local variable was blocking the global variable.
2021-01-24 06:09:13 +00:00
Clownacy
2a237aea6b SDL: Mark some parameters as const 2021-01-24 06:09:13 +00:00
Clownacy
d412711465 SDL: Silence a warning and optimise some logic 2021-01-24 06:09:13 +00:00
Clownacy
fd445481a0 Minor cleanup to SDL.cpp
Just a typo and some inconsistent indentation
2021-01-24 06:09:13 +00:00
Rafael Kitover
1fb37d3370 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-01-12 02:50:18 +00:00
Autechre
1f99ed712d Update .gitlab-ci.yml 2021-01-09 19:13:49 +01:00
Rafael Kitover
e1a728b7ac Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2021-01-04 10:11:33 +00:00
Autechre
ab9f756bf8 Update .gitlab-ci.yml 2021-01-02 01:28:36 +01:00
Rémi Verschelde
619a5cce68 SDL: Fix build with SDL 2.0.14 after KMOD_GUI change to enum
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()`.
2020-12-31 00:59:50 +00:00
Rafael Kitover
ea2c9363f1 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-12-29 12:19:38 +00:00
twinaphex
331ba35aeb Update 2020-12-20 19:35:08 +01:00
Clownacy
064fa7b067 Fix SDL audio delay
Fixes #647

300ms is just too big, and produces an audible delay. 100ms sounds
much better.
2020-12-18 14:29:21 +00:00
Clownacy
7db3c817eb Fixed SDL audio using the wrong audio specification
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.
2020-12-18 14:29:21 +00:00
Rafael Kitover
bb903e5e08 Transifex push/pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-12-17 05:14:46 +00:00
Rafael Kitover
81d3b71cd7 Ask for factory reset in README, issue template.
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>
2020-12-14 12:58:44 +00:00
Clownacy
8455e7add0 Remove unintended semicolon from CPACK_PACKAGE_VERSION_PATCH
I noticed this while trying to install a CPack-generated Debian package, since `dpkg` complains about the semicolon being an invalid character.
2020-12-14 12:41:28 +00:00
twinaphex
2cdd1fafb6 Update osx target 2020-12-09 08:20:42 +01:00
Autechre
e6da5ee86c Update .gitlab-ci.yml 2020-12-09 04:42:55 +01:00
Rafael Kitover
c9595c3668 Fix checking for wx-config first on Gentoo.
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>
2020-12-05 11:37:40 +00:00
Rafael Kitover
c18653d27e Merge remote-tracking branch 'libretro/master'
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-12-05 10:42:49 +00:00
Autechre
960e8d4bc0 Merge pull request #93 from webgeek1234/master
libretro: Update gitlab ci extends ordering
2020-12-04 18:35:18 +01:00
Aaron Kling
aaa61676f4 libretro: Update gitlab ci extends ordering 2020-12-01 23:50:32 -06:00
Rafael Kitover
7aa0509e0e Update copyright year in about dialog to 2020.
- Fix #783.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-11-29 18:40:51 +00:00
Rafael Kitover
dfa97d8a91 Ask to test nightly in README and issue template.
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>
2020-11-27 06:15:10 +00:00
Rafael Kitover
ecdaf6df23 MSVC+vcpkg build update.
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>
2020-11-25 15:44:10 +00:00
Koakuma
4fc3b4297d Handle allocation quirk on non-null-returning allocators
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.
2020-11-21 06:41:02 -08:00
Fabrice de Gans-Riberi
edc34942a8 Refactor wxSDLJoy
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.
2020-10-19 08:11:38 +00:00
Rafael Kitover
a00f258588 Rewrite Windows dev env guide in dev manual.
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>
2020-10-15 21:43:18 +00:00
Rafael Kitover
e1fd75629f Link Windows Media Foundation libs with ffmpeg.
Link some Media Foundation libs required by newer versions of FFmpeg on
Windows.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-10-13 12:51:26 +00:00
Rafael Kitover
a078dd2487 Add -D__STDC_LIMIT_MACROS for Visual Studio 2017.
Fixes a problem with `INT64_MAX` etc. being undeclared.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-10-12 21:23:47 +00:00
Rafael Kitover
3a6e4b3c27 Merge remote-tracking branch 'libretro/master' into master
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-10-12 16:40:19 +00:00
twinaphex
26e9a6e3d9 (iOS/tvOS) fix building for iOS; add tvOS support 2020-10-10 03:23:59 +02:00
twinaphex
dc9422c479 if not defined, define it 2020-10-08 05:41:56 +02:00
twinaphex
7b3c721f64 Add .gitlab-ci.yml 2020-10-08 05:35:51 +02:00
Rafael Kitover
0ddd50273c Fix mxe apt repo selection.
Default to latest, which is bionic, for earlier repositories, match all
intermediate release code names.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-09-29 21:51:32 +00:00
Rafael Kitover
13854135a9 Write CFBundleShortVersionString to Info.plist.
CFBundleVersion is already being written since denisfa's Sparkle
changes.

- Fix #750.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-09-29 14:13:26 -07:00
Joseph Griego
65a67f219a Don't set wx-config prefix from CMAKE_PREFIX_PATH
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.
2020-09-28 23:25:19 +00:00
Rafael Kitover
890f560553 Switch to C++17 for GUI.
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>
2020-09-28 12:09:54 +00:00
Rafael Kitover
cb0933bf44 Stop changing plane ptrs in rec. audio frames.
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>
2020-09-28 01:33:58 +00:00
Rafael Kitover
98b2fb6ebb Fix finding wxWidgets on Gentoo.
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>
2020-09-24 01:33:45 +00:00
Brian Searls
80634683b1 Force a panel update when configuring bilinear.
- Fix #727
2020-09-05 21:45:17 +00:00
Rafael Kitover
87fac44fdb Transifex push/pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-09-05 19:39:52 +00:00
Rafael Kitover
6a7142813d Differentiate between SDL joy index/instance_id.
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>
2020-09-05 19:06:48 +00:00
Rafael Kitover
11693d8381 Clean up GB MBC30 check.
Based on feedback from @negativeExponent.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-09-04 17:33:25 +00:00
Rafael Kitover
2727f683f1 Support archlinux derivatives in installdeps.
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>
2020-09-03 16:31:25 +00:00
Rafael Kitover
020daad85f Fix joy accels when emulation is paused.
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>
2020-09-02 00:50:45 +00:00
Rafael Kitover
def5d3e486 Stop timer when game is loaded again.
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>
2020-08-31 07:25:38 +00:00
Rafael Kitover
9dd2932436 Disable nostl build on travis as well for now.
It is failing in the same way as the utf8 build.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-08-29 23:25:21 +00:00
Rafael Kitover
12193dcbae Disable utf8 build on travis for now.
To be fixed later.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-08-29 22:23:21 +00:00
Rafael Kitover
e59cedaed6 Transifex push/pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-08-29 21:42:57 +00:00
Rafael Kitover
546c9d3a11 Minor joystick event handler finding refactor.
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>
2020-08-29 20:53:49 +00:00
Rafael Kitover
891b1c35e4 Update gettext source.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-08-29 20:53:49 +00:00
Edênis Freindorfer Azevedo
e0816b0e10 Fix weird input/buttons memory leak.
Deleting the vector was not enough, although it was not clear what else
was causing the leak.
2020-08-29 20:53:49 +00:00
Edênis Freindorfer Azevedo
cc5ddd1bb7 Isolate x11 keymap to its own header. 2020-08-29 20:53:49 +00:00
Edênis Freindorfer Azevedo
790628961d Include X11 libs and header without screensaver.
We need to always include these files and libs now due to using them
on our keyboard background input solution.
2020-08-29 20:53:49 +00:00
Edênis Freindorfer Azevedo
7031c1d155 [LINUX,WINDOWS] Key/Joy background input.
- 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.
2020-08-29 20:53:49 +00:00
Edênis Freindorfer Azevedo
84f3e8ce67 Allow joystick background input.
Refactor function to send joy events to `GameArea` even if vbam is not
focused.
2020-08-29 20:53:49 +00:00
Rafael Kitover
bce91d1722 Run wxrc from the source dir.
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>
2020-08-29 19:44:15 +00:00
Fabrice de Gans-Riberi
4074158061 Add GUI cmd line option for config file. (#724)
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>
2020-08-28 22:26:07 +00:00
Rafael Kitover
a305f550e1 Replace Catch2 with doctest for unit tests.
Pretty much the same usage and functionality.

Add `tests.hpp` to configure doctest.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-08-28 05:14:22 +00:00
Rafael Kitover
22a3524c66 Fix linking on Msys2.
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>
2020-08-28 05:09:58 +00:00
Rafael Kitover
e2634df5cc Update .gitignore.
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>
2020-08-28 04:57:35 +00:00
Rafael Kitover
5081ae44e5 Vcpkg fixes.
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>
2020-08-26 10:07:04 +00:00
Rafael Kitover
3ee26c0de6 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-08-25 01:58:41 +00:00
Rafael Kitover
9c8604c58c installdeps: Move git mod checkout after git inst.
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>
2020-08-23 06:13:46 +00:00
Rafael Kitover
ff03bcc1e0 Better fix for wxrc with vcpkg.
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>
2020-08-23 05:56:32 +00:00
Rafael Kitover
f07a838883 Another hack to work-around broken vcpkg upgrades.
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>
2020-08-22 21:31:12 +00:00
Rafael Kitover
c169420fbc Turbo/throttle config and DirectSound fixes.
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>
2020-08-22 20:25:05 +00:00
Rafael Kitover
5114c1dc87 Remove el_GR translation, leaving el translation.
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>
2020-08-22 20:11:09 +00:00
Rafael Kitover
8603c879a9 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-08-22 19:41:39 +00:00
Rafael Kitover
4148080eb5 Always update Win32 dependencies git submodule.
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>
2020-08-21 07:03:35 +00:00
Rafael Kitover
84d406ac0e Temporary fix for wxrc on MSVC/vcpkg builds.
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>
2020-08-20 23:28:42 +00:00
Rafael Kitover
378c9493e9 Fix joystick config when game is loaded.
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>
2020-08-19 11:32:38 +00:00
Rafael Kitover
61a726a828 Merge remote-tracking branch 'libretro/master'
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-08-19 10:57:35 +00:00
Rafael Kitover
dcaa18aae4 Fix optional deps in vcpkg script.
Before installing optional deps, check that the associated variable is
either unset or true.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-08-19 09:59:29 +00:00
Rafael Kitover
3052eb33a5 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-08-19 09:42:02 +00:00
Autechre
36b011c72e Merge pull request #92 from negativeExponent/gb_update
Gb update
2020-08-18 16:28:06 +02:00
negativeExponent
95213a6d55 GB: Only use mapperLastTime to see if RTC data was loaded
- 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.
2020-08-18 21:14:21 +08:00
Rafael Kitover
fb9e7e2059 Fix expat lib name for vcpkg.
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>
2020-08-17 22:05:01 +00:00
Rafael Kitover
375daf99cb Only build ffmpeg with vcpkg if installs < 30m.
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>
2020-08-17 18:38:58 +00:00
Rafael Kitover
dfec0b3d99 Transifex push/pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-08-17 18:37:36 +00:00
Rafael Kitover
b23d463652 Use vcpkg installed wxrc, support mingw triplet.
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>
2020-08-14 13:16:37 +00:00
negativeExponent
86fcffefd0 GB: Add support for 4MB MBC30 2020-08-14 19:21:56 +08:00
Rafael Kitover
08b5685049 Merge remote-tracking branch 'libretro/master'
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-08-14 11:00:06 +00:00
hizzlekizzle
6b70aa5de5 Merge pull request #90 from negativeExponent/input_updates
Move main input polling at the beginning of retro_run()
2020-08-13 08:44:40 -05:00
hizzlekizzle
2f1439c5bd Merge pull request #89 from negativeExponent/add_color_and_interframe_options
Add color and interframe options
2020-08-13 07:59:14 -05:00
hizzlekizzle
640e93cd97 Merge pull request #91 from negativeExponent/hle_bios_fixes
GBA BIOS: ArcTan/ArcTan2 fixes for HLE bios
2020-08-13 07:55:59 -05:00
negativeExponent
2f9933ae49 GBA BIOS: ArcTan/ArcTan2 fixes for HLE bios
Fix ArcTan and ArcTan2 based on mgba's hle bios fixes
- References:
- 14dc01409c (diff-8f06a143a9fd912c83209f935d3aca25)
- b154457857 (diff-8f06a143a9fd912c83209f935d3aca25)
2020-08-12 22:44:43 +08:00
negativeExponent
5d5dc1b39b Move main input polling at the beginning of retro_run()
- 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.
2020-08-12 22:30:22 +08:00
negativeExponent
e58332c03a Add interframe blending core options
- Adds 'smart' and 'motion blur' interframe methods as core options for
both 16bit and 32bit color depths
2020-08-12 10:25:52 +08:00
negativeExponent
54399dffea Add LCD Color Filter core options 2020-08-12 07:43:21 +08:00
hizzlekizzle
364a182968 Merge pull request #88 from negativeExponent/backport
Backport
2020-08-11 09:35:33 -05:00
negativeExponent
97637f16d6 Buildfix 2020-08-11 21:22:07 +08:00
negativeExponent
d9732f68db Fix clock cycle count for MUL, MLA instructions... (b91f39c787)
- backport Fix clock cycle count for some arm/thumb instructions (5243b2d806)
- backport Fix base cycle count for MUL, MLA series (b91f39c787)
2020-08-11 21:17:25 +08:00
negativeExponent
c07d5b658b Fix vram 16/32 bit unaligned reads(backport 7f18771165) 2020-08-11 20:29:28 +08:00
negativeExponent
f4891b6504 Update .gitignore 2020-08-11 19:34:36 +08:00
Brian Searls
18c2ea61c6 Further fixing Multi Buffer formatting. 2020-08-10 21:44:01 +00:00
Brian Searls
1e5693009c Addressing audio plugin crash
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.
2020-08-10 21:44:01 +00:00
Edênis Freindorfer Azevedo
9c314a155d Use proper string "wglGetExtensionsStringEXT".
`"wglGetExtensionsString"` is not valid on Windows.
2020-08-09 07:01:34 +00:00
Zach Bacon
7c8ba1e7c5 This should fix building edge packages,
as well as fix building on arm platforms and ppc64 platforms,
quite possibly s390x, but can't guarantee how it will perform.
2020-08-08 09:14:07 -04:00
Rafael Kitover
9495dc84f8 Prefer upgrading zlib before other vcpkg deps.
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>
2020-07-31 09:32:42 +00:00
Rafael Kitover
299362b3cf Refactor cmake ccache support and support MSVC.
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>
2020-07-31 09:30:23 +00:00
Rafael Kitover
2fe1c5711b Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-07-17 02:49:32 +00:00
Rafael Kitover
81c88227fa Add Catch2 unit testing framework + some tests.
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>
2020-07-10 13:43:48 +00:00
Edênis Freindorfer Azevedo
3ba0529585 Improve BIOS Math tests score from 425 to 625.
Without using BIOS file.
2020-07-10 00:25:38 -03:00
Edênis Freindorfer Azevedo
6f2e320d59 Improve clock cycle count for THUMB operations. 2020-07-10 00:25:38 -03:00
Edênis Freindorfer Azevedo
9e537a8fe3 Improve cycle count for MUL, MLA.
Improves Timing score from 679 to 905.
2020-07-10 00:25:38 -03:00
Rafael Kitover
7fbb017cd5 Update macOS/Xcode version to latest for travis.
Use "osx_image: xcode12" which is Xcode 12.0 and macOS 10.15.5, the
latest available for travis.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-07-09 09:52:54 +00:00
Rafael Kitover
a5f863f390 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-07-08 13:28:31 +00:00
Rafael Kitover
36e61d765a Test with utf8 and nostl variants of wx on Travis.
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>
2020-06-30 00:52:20 +00:00
Rafael Kitover
306f92f5d7 Check game kbd input with wxGetKeyState() again.
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>
2020-06-29 01:24:40 +00:00
Rafael Kitover
8e88363163 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-06-28 00:27:41 +00:00
Rafael Kitover
f51e1ee4ec Fix for non-stl wx builds.
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>
2020-06-26 06:51:27 +00:00
Rafael Kitover
047cc29787 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-06-23 06:45:12 +00:00
Rafael Kitover
3a2b97fd08 Transifex pull.
New complete translation by @Ds886 for he_IL.

New locale en_PL.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-06-21 20:12:55 +00:00
Rafael Kitover
121013c534 Transifex push + fix for a couple of strings.
Fix a couple of strings noted by @Ds886.

Generate new pot and push to transifex.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-06-21 19:42:52 +00:00
Edênis Freindorfer Azevedo
91a6b53e02 Input followup (#687)
- 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.
2020-06-20 19:36:24 -03:00
Edênis Freindorfer Azevedo
de93330125 Merge pull request #671 from visualboyadvance-m/turbo-gba
Input refactoring.
2020-06-18 23:01:32 -03:00
Edênis Freindorfer Azevedo
baa0341bd5 Input refactor.
- 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.
2020-06-18 20:47:47 -03:00
Edênis Freindorfer Azevedo
6b257d52f2 Avoid override of variable throttle for turbo.
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.
2020-06-17 13:23:14 -03:00
Edênis Freindorfer Azevedo
bd2483cae7 Allow changing connection type without restart.
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.
2020-06-17 13:23:14 -03:00
Rafael Kitover
d379a076df Decrease mouse sensitivity for menu hiding.
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>
2020-06-15 19:32:33 +00:00
Rafael Kitover
0b7f11018d Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-06-14 19:08:41 +00:00
Edênis Freindorfer Azevedo
0c5ee9941b Fix PNG capture screen.
- Fix #680.
2020-06-07 18:06:04 +00:00
Rafael Kitover
3d83590774 Remove 32 bit mac binary, builder updates.
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#99644

https://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>
2020-06-07 12:38:48 +00:00
Rafael Kitover
d8da93897a Minor improvements for mac dyld linker.
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>
2020-06-05 03:36:59 -07:00
Rafael Kitover
7c0c53a332 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-06-04 22:38:36 +00:00
Rafael Kitover
c294b86635 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-06-01 18:20:56 +00:00
Rafael Kitover
bfab4321cb Improve gentoo support for installdeps.
- Use gtk3 slot for wxWidgets.

- Fully qualify all ebuilds.

- Only rebuild if necessary.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-06-01 12:24:41 +00:00
Rafael Kitover
0436797080 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-05-23 20:09:17 +00:00
Rafael Kitover
a5e776eea3 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-05-16 22:42:18 +00:00
Rafael Kitover
7d15117536 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-05-16 11:25:04 +00:00
Rafael Kitover
1347026d40 Turbo config refactor followup.
In the Turbo config dialog, remove the selection list for entering the
value and leave only the spin control. Allow values above 600%, up to
4000%.

Reintroduce the speedup_frame_skip config variable, defaulting to 9, use
it for turbo selection values > 600%, with speedup_throttle == 0.

The rationale for this is that on average modern hardware, throttle
values above 500% or 600% will not be effective.

The default is now shown as 1000%, which is:

frame_skip == 9 && speedup == 1,

where:

speedup == 1 is equivalent to throttle == 0,

as was the case before the turbo config changes.

Values above 600% are automatically rounded up or down to the nearest
100%, on entry and on click of the up/down arrows of the spin control.

The frame skip checkbox is cleared and disabled for the "Unlimited"
setting (throttle == 0), and set and disabled for values > 600%, to
reflect the mechanism to the user.

When the value again enters the modifiable range in the spin control,
the previous value of the checkbox is restored.

Misc:

- Turn off translation of percentage values in the xrc.

- Remove the size element for the throttle selection list in the general
  config dialog xrc, it breaks the layout on GTK3.

- Add a note about passing wxWidgets_CONFIG_EXECUTABLE to cmake to
  select wxWidgets version to README.md.

Hopefully this will reduce confusion and present a nicer UI.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-05-15 02:01:57 +00:00
Rafael Kitover
51b66714c5 Small update to powershell section in dev manual.
- Fix pkill function.

- Give more example of comma separating arguments.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-05-13 22:38:22 +00:00
Rafael Kitover
b4aeab689a Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-05-13 08:47:46 +00:00
Rafael Kitover
44202abdb5 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-05-12 08:14:48 +00:00
Rafael Kitover
710d356084 Improve powershell notes in the dev manual.
I now know some things better about powershell.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-05-11 00:33:30 +00:00
Rafael Kitover
4f0f942e31 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-05-09 20:51:09 +00:00
Rafael Kitover
1bced474a2 Codesign fix for mac.
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>
2020-05-08 13:26:20 -07:00
Edênis Freindorfer Azevedo
07064c8714 [Windows,MacOS] Auto-updater refactoring. (#639)
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`.
2020-05-07 23:06:00 -03:00
Rafael Kitover
8024c87832 Fix vcpkg upgrades.
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>
2020-05-07 01:11:18 +00:00
Rafael Kitover
43b749fe0b Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-05-06 10:20:23 +00:00
Rafael Kitover
6bf107f75d Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-05-05 14:00:58 +00:00
Rafael Kitover
09e8da43db Joystick refactor pt. Deux: Support Joysticks.
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>
2020-05-05 08:47:52 +00:00
Rafael Kitover
ad3327d437 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-05-03 00:08:09 +00:00
Rafael Kitover
504ca08b6b Hide menubar + minor UI refactor.
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>
2020-05-02 13:14:46 +00:00
Rafael Kitover
2868c1b753 Fix changing aspect ratio option.
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>
2020-05-02 13:08:34 +00:00
Rafael Kitover
0f55b5d1c8 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-05-01 23:58:42 +00:00
Josh Smith
3041e3262b Removing meaningless conditional
reg[0].I is unsigned so checking if it is greater than or equal to zero is always true by definition.

Fixes #578
2020-04-30 02:17:23 +00:00
Rafael Kitover
045e95ab4e GB: Support 4MiB MBC30 ROM bank select.
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>
2020-04-27 18:32:12 +00:00
Rafael Kitover
a972da8ddb Update github issue template.
Use html comments for section instructions that shouldn't be visible in
the completed form.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-04-24 12:53:51 +00:00
Rafael Kitover
eecde424ae Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-04-21 21:56:56 +00:00
Edênis Freindorfer Azevedo
0b14e9f885 [WINDOWS] Add function to open unicode files. (#644)
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.
2020-04-21 10:24:28 -03:00
Rafael Kitover
ed438d6e52 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-04-15 10:09:27 +00:00
Rafael Kitover
b7f5754338 Add to dev manual on translations and char sets.
Document how we interact with transifex and how to pass strings to
non-wxWidgets code.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-04-13 00:25:11 +00:00
Rafael Kitover
a36b147411 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-04-13 00:12:21 +00:00
Rafael Kitover
9e03af83c4 Transifex push.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-04-12 00:21:04 +00:00
Rafael Kitover
3869b08c9a Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-04-12 00:18:00 +00:00
Rafael Kitover
8e3978b314 Speedup/Turbo/Throttle fixes.
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>
2020-04-10 10:19:03 +00:00
Rafael Kitover
d6cc14ef10 builder: URL updates.
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>
2020-04-04 15:17:05 -07:00
Rafael Kitover
f24e8aae2f Change board/nightly URLs in README.md to https.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-03-23 00:27:51 +00:00
Rafael Kitover
83b6efa6cd Add forums link back to README.md.
Now that the board is back up.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-03-22 15:04:06 +00:00
Rafael Kitover
b21880ea15 cmake: Zip suffix fix for 60f05ced.
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>
2020-03-18 01:01:19 +00:00
Edênis Freindorfer Azevedo
166cf446f7 Disable menu LCD filter unless playing GB or GBA.
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.
2020-03-18 00:48:43 +00:00
Edênis Freindorfer Azevedo
060010699d Init systemColorMaps after output module init.
It is done only once after the output module is initialized. It is also
adjusted to whatever ROM is being loaded.
2020-03-18 00:48:43 +00:00
Edênis Freindorfer Azevedo
cd029ae696 Fix video recording with frame skip 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.
2020-03-18 00:48:43 +00:00
Edênis Freindorfer Azevedo
008aecde67 [LINUX] Fix display of RGB values on viewers.
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.
2020-03-18 00:48:43 +00:00
Edênis Freindorfer Azevedo
834d153725 Fix accel shortcuts when using some menu options.
`gbColorOption`, `GBALcdFilter` and `GBLcdFilter` did not respond
to accelerators shortcuts.
2020-03-18 00:48:43 +00:00
Edênis Freindorfer Azevedo
994726dd8d Do not pause while opening configuration windows.
The only configuration that we cannot change while playing is the sound
driver. All the others should be changeable without any major issues.
2020-03-18 00:48:43 +00:00
Edênis Freindorfer Azevedo
54335dc67c [WINDOWS] Fix weird WX errors messages.
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.
2020-03-18 00:48:43 +00:00
Edênis Freindorfer Azevedo
7bac34eda4 Remove duplicate variable winFlashSize.
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.
2020-03-18 00:48:43 +00:00
Edênis Freindorfer Azevedo
8d62a790e3 Change default options for GB.
We set to automatically display borders on SGB games, as well as
setting the default emulation system to `automatic`.
2020-03-18 00:48:43 +00:00
Edênis Freindorfer Azevedo
99b66e1326 Expose LCD filter for GBA and GB color saturation.
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.
2020-03-18 00:48:43 +00:00
Edênis Freindorfer Azevedo
c789020e93 Fix Save button on OAM Viewer for GB and GBA.
No idea why this was not implemented yet...
2020-03-18 00:48:43 +00:00
Edênis Freindorfer Azevedo
dcaa1b9abc Fix Save button on Tile Viewer for GB and GBA.
For some reason this was not implemented yet.
2020-03-18 00:48:43 +00:00
Edênis Freindorfer Azevedo
d05e8fc141 Make AGBPrint output to our Logging.
We also output using `dbgOutput`, hence the behaviour will not change
for users relying on this.
2020-03-18 00:12:27 +00:00
Rafael Kitover
60f05cedc2 cmake: Add ZIP_SUFFIX option, for build configs.
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>
2020-03-17 03:24:43 +00:00
Rafael Kitover
abb8234174 Allow binding specific server IP. (#633)
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>
2020-03-16 13:37:01 -03:00
Rafael Kitover
4f49c89a98 Update README.md for current project status.
- 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>
2020-03-16 12:13:25 +00:00
Rafael Kitover
a462904c58 Merge remote-tracking branch 'vbam-libretro/master'
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-03-16 11:48:19 +00:00
Rafael Kitover
7ab7bc3a9d cmake: Add -debug suffix to windows debug zips.
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>
2020-03-15 20:44:22 +00:00
Rafael Kitover
57bc8f9e40 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-03-15 02:19:42 +00:00
Rafael Kitover
571025da66 cmake: Do not use gpg if user has no keys.
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>
2020-03-14 13:28:36 +00:00
Rafael Kitover
7b04c4ceec Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-03-14 01:55:08 +00:00
Rafael Kitover
8ede756fb0 Gettext pot regen and transifex push.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-03-13 14:41:14 +00:00
Rafael Kitover
6c64db0794 cmake: Windows codesigning refactor.
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>
2020-03-13 00:30:26 +00:00
Rafael Kitover
7a4a7d148c Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-03-12 23:45:45 +00:00
Edênis Freindorfer Azevedo
4f1a351d4a Try to configure vsync for multiple options.
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.
2020-03-11 14:00:24 +00:00
Edênis Freindorfer Azevedo
ed8a9af250 Use proper functions and checks for OpenGL VSYNC.
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.
2020-03-11 14:00:24 +00:00
hizzlekizzle
29dffc0120 Merge pull request #86 from negativeExponent/patch-1
Fix Save Failed error for Super Monkey Ball Jr.
2020-03-10 18:43:54 -05:00
negativeExponent
6092082e04 Fix Save Failed error for Super Monkey Ball Jr. 2020-03-11 06:47:25 +08:00
Rafael Kitover
2ba0d316cd cmake: Include .pdb in zips of debug builds.
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>
2020-03-09 04:28:52 +00:00
Rafael Kitover
2fe84053e1 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-03-09 02:36:26 +00:00
Rafael Kitover
f1099a213a Check return value of soundInit().
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>
2020-03-07 13:30:28 +00:00
Mystro256
410ede543c Check for null pointer in soundReset().
Check that soundDriver is defined.
2020-03-07 13:08:44 +00:00
negativeExponent
9d1d707c01 Limit ROM size to 32 MiB.
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.
2020-03-07 11:45:19 +00:00
negativeExponent
fd319d2184 GB: Check header for a valid ROM file.
Check some magic numbers in the ROM header to detect Game Genie and Game
Shark ROMs, and check for the Nintendo logo in the header in normal
ROMs.
2020-03-07 11:43:00 +00:00
Rafael Kitover
2f23467245 cmake: When replacing old tags, use origin.
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>
2020-03-07 11:36:40 +00:00
Rafael Kitover
20f57587e2 cmake: Replace old git tags if found.
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>
2020-03-05 15:04:19 +00:00
Rafael Kitover
e220c9bc91 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-03-04 15:29:57 +00:00
Rafael Kitover
c258f6c1c8 Remove libpng from dependencies in README.md.
Followup on 05bd2a95 and 513af13d.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-03-02 19:15:38 +00:00
Rafael Kitover
995c2cb706 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-03-01 14:03:10 +00:00
Rafael Kitover
05bd2a95cd Remove libpng direct dependency.
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>
2020-03-01 13:56:29 +00:00
Rafael Kitover
f2e81b8e4b Clarify direct commit policy in manual.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-03-01 12:50:52 +00:00
Edênis Freindorfer Azevedo
513af13ddc Replace libpng code for stb_image one.
It is a very straightforward replacement calls.
2020-03-01 09:54:43 +00:00
Edênis Freindorfer Azevedo
8f48c1f01d Fix weird wxWidgets>=3.0 error message.
ASSERT INFO:
/usr/include/wx-3.0/wx/object.h(160): assert "wxDynamicCast(ptr, T)"
failed in wxCheckCast(): wxStaticCast() used incorrectly
2020-03-01 09:54:43 +00:00
Edênis Freindorfer Azevedo
7f1a3a932c Add stb_image headers to cmake. 2020-03-01 09:54:43 +00:00
Edênis Freindorfer Azevedo
4da422d02b Update stb_image headers to latest version.
We are going to remove our libpng for stb_image.
2020-03-01 09:54:43 +00:00
Rafael Kitover
3ca35d9ca6 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-02-29 02:31:11 +00:00
Rafael Kitover
0a451d11d3 Tranisfex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-02-27 00:12:03 +00:00
Rafael Kitover
229bf815e0 Revert f1abbc5f, vcpkg upgrade is fixed.
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>
2020-02-25 20:40:22 +00:00
Rafael Kitover
5c0903d651 Add developer manual.
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>
2020-02-25 19:51:53 +00:00
Rafael Kitover
32e7c69726 Gettext pot update improvements.
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>
2020-02-24 21:06:23 +00:00
Rafael Kitover
2f0653824e Enable XAudio2 for Windows vcpkg build.
Add necessary headers to the dependencies submodule and default the
cmake option to on.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-02-24 20:49:01 +00:00
Rafael Kitover
ba14cadba1 Fix 0e8e46f0 for gcc.
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>
2020-02-24 19:46:50 +00:00
Rafael Kitover
0e8e46f0b7 Windows: Fix deleting tempfile for winsparkle dll.
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>
2020-02-24 13:17:32 +00:00
Rafael Kitover
89d378eb71 cmake: Fix gettext pot update check.
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>
2020-02-20 23:46:09 +00:00
Rafael Kitover
2504596140 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-02-19 23:55:25 +00:00
Rafael Kitover
06b3affeef Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-02-19 10:49:47 +00:00
Rafael Kitover
4b4b770495 Transifex push/pull.
pot made using new cmake code from d93f6350.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-02-17 09:13:08 +00:00
Rafael Kitover
d93f6350d0 cmake: Generate gettext pot automatically.
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>
2020-02-17 08:34:32 +00:00
s520
a320377040 Fix: a issue with loading e-Reader dot code (#608)
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.
2020-02-15 14:02:53 -03:00
Rafael Kitover
951e8e0ebe cmake: Check UPDATE_APPCAST before TAG_RELEASE.
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>
2020-02-08 23:22:31 +00:00
Rafael Kitover
9475474ee6 cmake: Add UPDATE_APPCAST script for appcast.xml.
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>
2020-02-08 22:53:53 +00:00
Rafael Kitover
19dff6c911 Make win32 dependencies submodule point to master.
Use the new git feature to point dependencies submodule to the tip of
its master.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-02-08 21:46:22 +00:00
Rafael Kitover
0b419ee849 Revert snap store badge change.
It seems only the svg version is available.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-02-08 04:42:12 +00:00
Rafael Kitover
00cd19f640 README.md: remove snap status, small store badge.
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>
2020-02-08 04:33:30 +00:00
Rafael Kitover
83614290be Turn on winsparkle update checking support.
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>
2020-02-08 04:26:50 +00:00
Rafael Kitover
f1abbc5f83 cmake: Use vcpkg remove/install instead of upgrade.
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>
2020-02-05 17:56:05 +00:00
Rafael Kitover
4aab08c47b Set link timeout default to 500ms, fix prev. dflt.
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>
2020-02-04 23:01:11 +00:00
Rafael Kitover
136c094f0c Add option to set link network port.
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>
2020-02-04 23:01:11 +00:00
Rafael Kitover
98f3948ea8 cmake: Add dep on catalogs for translations.zip.
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>
2020-02-03 18:10:29 +00:00
Rafael Kitover
1d6342d6cb Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-02-03 15:38:23 +00:00
Edênis Freindorfer Azevedo
789cd2d0f0 Revert "Enable layers in non-tile modes."
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.
2020-02-03 07:38:26 -03:00
Rafael Kitover
7bbbf04716 installdeps: fix mxe compiler ccache symlinks.
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>
2020-02-03 01:41:37 +00:00
Rafael Kitover
bb23357d47 builder: disable libwebp in libtiff.
Fixes mac build.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-02-02 08:13:13 -08:00
Edênis Freindorfer Azevedo
ca3b63d64c Enable layers in non-tile modes.
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.
2020-02-02 15:49:02 +00:00
Rafael Kitover
213f47ec96 builder: minor fixes for mingw.
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>
2020-02-02 03:35:26 +00:00
Rafael Kitover
3ca67b9d5d builder: disable openal for 32 bit mingw.
XP users may not have openal, and it's not an important feature.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-02-02 03:32:24 +00:00
Rafael Kitover
3edd9ba756 cmake: Fix fedora mingw build + misc improvements.
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>
2020-02-01 16:43:08 +00:00
Rafael Kitover
ba9c10d566 cmake: Make FileIterator more correct, add eg..
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>
2020-01-26 23:35:09 +00:00
Edênis Freindorfer Azevedo
ed4d1b9827 Merge pull request #595 from visualboyadvance-m/qol
Cleanup and WAV audio recording.
2020-01-25 17:14:24 -03:00
Rafael Kitover
8ce60e1745 cmake: Fix ffmpeg regression on Windows.
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>
2020-01-23 01:49:44 +00:00
Rafael Kitover
5de47935cf cmake: Followup on release commit automation.
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>
2020-01-22 18:15:21 +00:00
Edênis Freindorfer Azevedo
f69febfd71 Add .wav support for sound recording.
WAV is also set to be the default extension for audio recording.
2020-01-22 13:50:27 -03:00
Rafael Kitover
93f906e2db cmake: Automate release commit and tag.
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>
2020-01-22 03:14:26 +00:00
Edênis Freindorfer Azevedo
588e82f03c Cleanup from PR 586. 2020-01-21 13:57:42 -03:00
Rafael Kitover
4e607da067 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-01-20 11:48:57 +00:00
Rafael Kitover
5cc1fd28b4 cmake: Wrap vcpkg code in a function.
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>
2020-01-17 21:55:26 +00:00
Rafael Kitover
47880ff9c6 cmake: Limit vcpkg upgrades to one port per run.
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>
2020-01-17 19:47:09 +00:00
Zack
6a8a9e6244 Fix integer overflow in cheatsImportGSACodeFile length check.
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.
2020-01-17 16:39:58 -03:00
Rafael Kitover
77c299c13f cmake: Check for libcharset and use if found.
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>
2020-01-17 16:03:07 +00:00
Rafael Kitover
0c0a35fd04 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-01-16 16:13:35 +00:00
Rafael Kitover
920f5ac704 Merge remote-tracking branch 'vbam-libretro/master'
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-01-16 15:47:53 +00:00
twinaphex
7d88e045a2 (MSVC 2017) Buildfix 2020-01-07 17:57:00 +01:00
Edênis Freindorfer Azevedo
b27d853d48 Merge pull request #586 from negativeExponent/bps
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.
2020-01-04 07:26:08 -03:00
negativeExponent
b50d48458f GBA: Fix crash when new size is larger than rom size after soft-patching 2020-01-04 04:46:49 +08:00
Ar't
9e1a63af0b support for patches in BPS format 2020-01-04 00:44:55 +08:00
Zach Bacon
7a7c86d315 Fix the git versioning for the snapcraft.yaml 2020-01-03 05:22:52 -05:00
Rafael Kitover
ff0dbf8fe6 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-31 02:47:40 +00:00
Zach Bacon
ac8ada553c Stupid that I am
I forgot to add nasm to the build routine, this should resolve the build issues for snapcrafts build service.
2019-12-28 22:24:32 -05:00
Zach Bacon
1fa66c1f32 just a minor change to the readme
have the snap badge on a separate line
2019-12-28 22:18:23 -05:00
Zach Bacon
d785cd4e6c Add build status for snapcraft 2019-12-28 22:12:54 -05:00
Zach Bacon
e9dc6dfd64 change to devel for this snapcraft file 2019-12-28 22:08:00 -05:00
Zach Bacon
d58d4ee1d2 Move the snapcraft to root for snapcraft edgechannel setup 2019-12-28 22:04:03 -05:00
Zach Bacon
312b541625 Fix up the icon location in the desktop file
For regular desktop users they don't need this work around, it's mainly due to how snaps are mounted.
2019-12-28 22:01:53 -05:00
Rafael Kitover
065e700fc8 Fix icon in about dialog.
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>
2019-12-29 02:03:46 +00:00
Rafael Kitover
f3e4b05fa8 Linux: fix icon name in .desktop file.
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>
2019-12-29 01:26:15 +00:00
ZachBacon
f26480bb07 Move this snapcraft yaml to git releases and fix the icon location 2019-12-28 19:21:49 -05:00
Rafael Kitover
d3397e6a1a cmake: Release automation followup.
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>
2019-12-25 23:14:45 +00:00
Rafael Kitover
f7f424ea1b cmake: Find FFMPEG_LDFLAGS in FindFFmpeg.cmake.
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>
2019-12-25 07:59:56 -08:00
Rafael Kitover
fb068e55c4 Poll joysticks before emumain in OnIdle #582.
Call PollJoysticks() before entering the emulator in OnIdle for the
lowest input latency.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-24 21:53:41 +00:00
Rafael Kitover
7a8aeb9842 Poll joysticks even when emulator is paused.
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>
2019-12-24 13:54:53 +00:00
Rafael Kitover
e98d89310e cmake: Add some release automation steps.
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>
2019-12-24 06:32:01 +00:00
Rafael Kitover
bbbe9fe73f Only poll joysticks with a valid device.
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>
2019-12-22 17:59:57 +00:00
Rafael Kitover
99cdbb8860 cmake: Remove libcmt from SDL bin in debug mode.
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>
2019-12-22 17:46:21 +00:00
Rafael Kitover
54072f9711 Update icon xrc.
Followup on f306cc63.

Set the correct reference to icon .xpm file in MainIcon.xrc.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-22 17:34:50 +00:00
Rafael Kitover
0577f8afc2 Better joystick hotplug support.
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>
2019-12-22 03:17:33 +00:00
Rafael Kitover
f306cc63b0 App name cleanup.
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>
2019-12-21 18:22:57 +00:00
Rafael Kitover
9e4fd8fb2e Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-20 23:46:19 +00:00
Rafael Kitover
17d2fbc5cc builder: mingw 32 bit updates.
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>
2019-12-19 02:57:03 +00:00
ZachBacon
b57bd76e3a Added snapcraft store page.
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.
2019-12-18 19:00:09 -05:00
Rafael Kitover
939a88ab4a cmake: No default ffmpeg on 32 bit Windows.
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>
2019-12-18 14:17:20 +00:00
Rafael Kitover
4e00fa605b cmake: Make wrong vcpkg arch error more clear.
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>
2019-12-16 00:56:10 +00:00
Rafael Kitover
49ca52ba03 cmake: Visual Studio misc followup on cf9a88df.
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>
2019-12-15 19:34:18 +00:00
Rafael Kitover
b3932e4e3d cmake: Fix localization for Visual Studio.
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>
2019-12-12 19:01:58 +00:00
Rafael Kitover
3aefcf64c9 cmake: Add ffmpeg to appveyor vcpkg cache.
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>
2019-12-12 14:10:36 +00:00
Rafael Kitover
d0d087511f MSVC: Fix SDL binary assertion failure on start.
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>
2019-12-10 23:41:40 +00:00
Rafael Kitover
cf9a88dfc3 cmake: Visual Studio support improvements.
Add support for vcpkg ffmpeg, this requires using someone's
FindFFmpeg.cmake instead of relying on pkg-config, since vcpkg does not
have pkg-config.

Do not use the ffmpeg from vcpkg on appveyor however, because that
pushes the build cache generation over the time limit for jobs.

Add secur32 and bcrypt to the list of ffmpeg libs on windows, these are
standard windows libraries.

Change some code in ffmpeg.cpp to remove C-style casts of struct
initializers, which are illegal in MSVC.

Add the INT64_C and UINT64_C macros missing in MSVC's stdint.h (if not
defined) to ffmpeg.h before the ffmpeg headers are included, because
they rely on them.

Rewrite the wxWidgets finding code for the vcpkg wxWidgets to be nicer
and work correctly for debug and static builds.

Remove all /W* and /w* warnings options from cmake compiler flags, and
replace them with /W4 for debug builds, and /w (no warnings) for release
modes.

When building a static binary, remove all /MD* flags from cmake compiler
flags, and use /MT for static release builds and /MTd for static debug
builds.

Improve the vcpkg toolchain wrapper to only rebuild the vcpkg binary if
there were git updates.

Redo the handling of SDL2 and SDL_main. Only link SDL2Main to the SDL
binary and don't use the definitions.

Update CMakeSettings.json to use Ninja and include static
configurations.

Use CMAKE_PROJECT_DIR instead of CMAKE_SOURCE_DIR to determine the vcpkg
root, as CMAKE_SOURCE_DIR is sometimes set incorrectly in the 2017 GUI.

Add /nodefaultlib:libcmt to the debug build link flags, as in debug
builds libcmtd is used and libcmt should not be.

Add /subsystem:console to debug build link flags to produce a windows
console app for debug builds, like we do for mingw builds. To do this,
define a WIN32_CONSOLE_APP macro and if set, define a main() that calls
WinMain().

Call wxMesdsageOutput::Set() in OnInit with an instance of
wxMessageOutputStderr for windows debug builds to make sure the --help
text etc. goes to the console instead of a popup box.

Update the Visual Studio related text in README.md.

Fix dynamic debug builds by linking to the debug version of SDL2 and
copying the debug version of the dll to the build dir.

Fix issue in MainFrame::BindAppIcon with the function we are using not
being found in a Windows DLL in debug builds by using
wxDynamicLibrary::GetSymboolAorW() instead of GetSymbol().

Enable LTO for MSVC in Release modes, if the option is set.

Change appveyor config to use an 8 item build matrix of
x64/x86 / Release/Debug / Static/Dynamic. And test the binary in debug
modes by running --help.

When copying the wxrc.exe out of the build tree, copy both the release
and debug versions, this is so that appveyor caching of vcpkg works,
since the build trees are not cached.

Add some necessary win32 libraries to the SDL binary. And enable
building it on appveyor.

Fix #465.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-10 11:13:58 +00:00
Rafael Kitover
d183245bdd builder: Link setupapi always, update libpng.
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>
2019-12-08 15:28:03 +00:00
Rafael Kitover
2b34983b9f cmake: Support VS Ninja/jom builds on Windows.
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>
2019-12-07 17:39:19 +00:00
Rafael Kitover
1ccc377978 Improve joystick connection/disconnection.
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>
2019-12-05 17:00:05 +00:00
Rafael Kitover
d395e05d97 builder: Limit ninja jobs on Windows.
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>
2019-12-05 14:09:45 +00:00
Rafael Kitover
6c2850cd59 Merge remote-tracking branch 'vbam-libretro/master'
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-04 01:59:38 +00:00
Rafael Kitover
212e45cc8d Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-03 20:24:46 +00:00
Rafael Kitover
498e4e858d Windows joystick events fix.
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>
2019-12-03 20:09:56 +00:00
Rafael Kitover
198e2467dd cmake: Add vcpkg update and upgrade.
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>
2019-12-03 18:59:42 +00:00
hizzlekizzle
2622db116c Merge pull request #82 from negativeExponent/fix_window
Allow game window to resize on-the-fly when enabling/disabling borders
2019-12-02 13:26:45 -06:00
negativeExponent
72d0725bac Allow game window to resize on-the-fly when enabling/disabling borders 2019-12-02 22:23:07 +08:00
Rafael Kitover
b917933013 builder: Fix mingw cross build.
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>
2019-12-01 22:07:41 +00:00
Rafael Kitover
b8310538a3 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-01 00:37:42 +00:00
Rafael Kitover
24f13ef00f Merge remote-tracking branch 'vbam-libretro/master'
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-01 00:35:05 +00:00
Twinaphex
5d28c5ad39 Merge pull request #78 from webgeek1234/master
libretro: allow mingw cross compile
2019-11-29 18:54:35 +01:00
Rafael Kitover
95b9e413f7 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-11-29 04:41:21 +00:00
Rafael Kitover
e04efa76b3 Release game controller device correctly. #568
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>
2019-11-29 03:50:24 +00:00
Rafael Kitover
85abf97a21 Transifex pull.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-11-27 23:14:27 +00:00
Rafael Kitover
02520fb63e Joystick handling refactor.
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>
2019-11-27 23:09:35 +00:00
Rafael Kitover
d458e75ca6 builder: mingw/msys2 updates.
- 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>
2019-11-26 14:31:20 +00:00
Rafael Kitover
ae7349b06f cmake: Use list var VBAM_LIBS for link libs.
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>
2019-11-13 02:56:06 +00:00
Rafael Kitover
1e56cbfcb3 travis: Add minimal build.
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>
2019-11-13 01:46:02 +00:00
Rafael Kitover
ed14c7bc76 installdeps: Add --no-openal and --no-ffmpeg #563.
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>
2019-11-13 01:34:46 +00:00
Rafael Kitover
f3282ef0a9 installdeps: debian: detect gtk3 version of wxgtk
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>
2019-11-12 18:45:43 +00:00
Rafael Kitover
bd7f38ece7 Update win32 dependencies submodule.
Includes the WinSparkle binary release, for the current work integrating
WinSparkle.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-11-10 14:37:57 +00:00
Rafael Kitover
e35d46254b WinSparkle wrapper improvements.
- 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>
2019-11-09 23:44:23 +00:00
Edênis Freindorfer Azevedo
76803caf5f [Windows] Enable winsparkle update checker.
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>
2019-11-09 22:47:34 +00:00
ZachBacon
3f39bcd04f Finally a working snapcraft yaml file with confinement enabled.
Tasks that need to be done
- Enable ffmpeg
- Fix icon location
- Enter testing phase before going onto the snap store.
2019-11-08 04:36:04 -05:00
Edênis Freindorfer Azevedo
225e4dc954 Remove top border black line when using filters.
We don't want to display the top border when using filters, since it
is a single line with black pixels.

- Fix #561.
2019-11-07 17:52:18 +00:00
Rafael Kitover
4352504385 Windows: load WinSparkle.dll as a resource
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>
2019-11-06 12:04:29 +00:00
Rafael Kitover
74dc86f77e update win32 dependencies submodule
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>
2019-11-06 07:28:25 +00:00
Rafael Kitover
3fe383c2b5 Update win32 dependencies git submodule.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-11-04 00:59:02 +00:00
Rafael Kitover
d999544a3d update win32 dependencies submodule
To add winsparkle-static.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-11-03 01:58:15 +00:00
Rafael Kitover
e113508593 installdeps: fix git submodule update
Add `--init`.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-11-03 00:24:18 +00:00
Rafael Kitover
b757048203 transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-11-03 00:21:44 +00:00
Rafael Kitover
8c14138782 transifex pull, delete en.po
Update `de.po` from transifex and delete `en.po` as it seems to not be
managed by transifex.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-10-23 16:46:43 +00:00
Rafael Kitover
d0d22b3068 cmake: copy wxrc from vcpkg build if not exists
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>
2019-10-21 14:19:56 +00:00
Rafael Kitover
c06e3bf3fc cmake: update vcpkg mod for appveyor build cache
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>
2019-10-21 13:58:55 +00:00
mudlord
0535d5c797 Optimize CRC32. 2019-10-21 13:25:19 +00:00
Rafael Kitover
a90f4663a5 transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-10-20 08:16:36 +00:00
Rafael Kitover
b8f2c8977e appveyor: use vcpkg installed not whole vcpkg
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>
2019-10-18 01:28:09 +00:00
Rafael Kitover
252d3f65ab installdeps: detect correct mxe apt repo
Try to guess the correct mxe apt package repository based on
`lsb_release` codename.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-10-17 22:25:56 +00:00
orbea
7f6337b1c7 travis: Make xenial the main distribution.
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
2019-10-17 22:24:45 +00:00
orbea
73a2450247 travis: Test --help on osx. 2019-10-17 22:23:50 +00:00
Rafael Kitover
36790074c3 cmake: fix linking to libssp and linking bin2c
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>
2019-10-17 21:53:15 +00:00
orbea
eaa744cc2e cmake: Add generate as a vbamcore dependency.
Fixes https://github.com/visualboyadvance-m/visualboyadvance-m/issues/542.
2019-10-11 07:02:38 -07:00
orbea
2d783f5df8 cmake: Fix ENABLE_ASAN with clang.
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
2019-10-10 02:49:07 -07:00
orbea
65c908141c wx: Fix conditional jump on uninitialized value with valgrind.
==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.
2019-10-10 02:47:43 -07:00
orbea
6adf5ea487 wx: Silence -Woverloaded-virtual warnings with debug builds.
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.
2019-10-09 10:32:51 -07:00
orbea
84d24b7d71 cmake: Silence _FORTIFY_SOURCE warnings with debug builds.
[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.
2019-10-09 08:48:20 -07:00
orbea
675072f025 travis: Test xvfb on xenial and bionic. 2019-10-08 13:27:35 -07:00
orbea
4e9882f24d cmake: Don't install visualboyadvance-m twice on WIN32. 2019-10-08 13:23:44 -07:00
orbea
518c147281 cmake: Use an install target for visualboyadvance-m. 2019-10-07 17:36:27 -07:00
orbea
369da07e7f travis: Test make install. 2019-10-07 17:36:27 -07:00
orbea
3111de5205 travis: Test clang builds. 2019-10-07 11:52:40 -07:00
orbea
6cc00a09fe travis: Clean up. 2019-10-07 11:51:07 -07:00
orbea
65fceab75a travis: Refactor script. 2019-10-07 04:47:57 -07:00
orbea
abff89e4fb cmake: Use add_executable when not cross-compiling. 2019-10-07 04:46:20 -07:00
Rafael Kitover
61520df789 Add @orbea to About -> Contributors.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-10-06 23:48:13 +00:00
Rafael Kitover
7ee3cbe120 Joystick rumble followup. #522
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>
2019-10-06 17:42:12 +00:00
Rafael Kitover
4bc9bb84b4 Implement joystick rumble. #522
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>
2019-10-06 11:06:08 +00:00
Rafael Kitover
5b809e3ad1 Drop reference to ubuntu PPA from README.md
The packages in this PPA are completely out of date, even the
dependencies are out of date.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-10-06 06:06:13 +00:00
orbea
680af6d420 cmake: Silence cmake policy warning CMP0058.
See: cmake --help-policy CMP0058
2019-10-05 18:33:44 -07:00
Rafael Kitover
ec7d1b15b1 cmake: fix reading version from changelog
Fix version regex to allow version numbers without text and revision.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-10-05 20:32:46 +00:00
Rafael Kitover
699d0c3724 Add denisfa to about -> contributors.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-10-05 19:35:15 +00:00
Edênis Freindorfer Azevedo
384f448757 Fix key accel overriding menus and dialogs.
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.
2019-10-05 12:30:49 -07:00
Rafael Kitover
6468d04114 appveyor: cache vcpkg build deps
Will hopefully make the build much faster.

TODO: make the vcpkg cmake script update vcpkg.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-10-04 14:01:43 +00:00
Rafael Kitover
3e22d17fb2 fix Visual Studio build
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>
2019-10-04 13:20:10 +00:00
Rafael Kitover
24d83a1262 make recompile for vers/git state change minimal
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>
2019-10-04 08:14:22 +00:00
Rafael Kitover
af0de1c4b3 xbrz: fix inline asm check
Use correct cpp code to detect x86/amd64 architecture to use inline asm.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-10-04 07:35:49 +00:00
Rafael Kitover
e811070d01 transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-10-04 07:22:44 +00:00
Ar't
ced2676926 win: set correct version in rc
xvbam.rc: use version.h to generate version strings,
cmake: adding version in odd format required by rc
2019-10-04 07:13:20 +00:00
Rafael Kitover
09fbcbac07 release v2.1.4
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-10-02 14:17:30 +00:00
Rafael Kitover
c93e017d3a builder: minor changes to support mac 32 bit
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>
2019-09-28 14:29:40 -07:00
Rafael Kitover
c1636d1bcf builder: fixes for ffmpeg + misc.
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>
2019-09-28 19:07:44 +00:00
ZachBacon
aec23e3586 builder: re-enable ffmpeg, update dists
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>
2019-09-28 01:10:04 -07:00
Edênis Freindorfer Azevedo
806dd7daa6 Fix circular --config for SDL port.
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.
2019-09-25 20:59:37 -01:00
Edênis Freindorfer Azevedo
1aa8afb4dc Drop dead code entirely.
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`.
2019-09-25 20:59:37 -01:00
Edênis Freindorfer Azevedo
531172c4be Fix displaying of link menu when ENABLE_LINK=NO.
We disable the items, but not the menu. So, there was an empty list
on `Options` > `Link` > `Type`.
2019-09-16 21:36:44 -01:00
Edênis Freindorfer Azevedo
07107096b8 [Windows] Fix crash when setting weekly updates.
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.
2019-09-16 21:36:44 -01:00
Edênis Freindorfer Azevedo
efa09bdb07 Add faster sqrt code for xBRZ filters.
We use ASM code for Windows `x86` and Linux desktop. The others remains
the same.
2019-09-16 21:36:44 -01:00
Edênis Freindorfer Azevedo
10f5576ecf Fix config file when removing system accels.
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.
2019-09-16 21:36:44 -01:00
Edênis Freindorfer Azevedo
1c6b016853 [Windows] Fix remaining UTF-8 issues.
We were missing some `wxConvLibc` on the output code. This meant crappy
messages on windows.
2019-09-16 21:36:44 -01:00
Rafael Kitover
a2f3126e17 transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-09-14 22:22:00 +00:00
Rafael Kitover
1e9d167597 builder: pause before codesigning for win targets
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>
2019-09-14 21:46:01 +00:00
Rafael Kitover
0af5965ee1 builder: work on linux static binary
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>
2019-09-12 16:42:43 +00:00
Rafael Kitover
33c43e3ad4 add -p:BuildInParallel=true to appveyor.yml
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>
2019-09-12 16:02:06 +00:00
Rafael Kitover
61141ebd3a add -p:BuildInParallel=true to VS instructions
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>
2019-09-12 03:12:15 +00:00
Rafael Kitover
9ee6b54a68 cmake: remove invalid opt /std:c++11 for MSVC
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>
2019-09-12 03:04:20 +00:00
Rafael Kitover
0f2c8cab08 win: check APPDATA if LOCALAPPDATA is not found
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>
2019-09-12 03:01:16 +00:00
Rafael Kitover
32fbfec46c transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-09-10 23:26:00 +00:00
Edênis Freindorfer Azevedo
cc51622928 transifex push/pull
Signed-off-by: Edênis Freindorfer Azevedo <edenisfa@gmail.com>
2019-09-10 07:59:56 +00:00
Edênis Freindorfer Azevedo
528c37f9e0 Allow "Browse" to be translated.
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`.
2019-09-10 07:59:56 +00:00
Edênis Freindorfer Azevedo
d8c981fb42 Fix toggles for video/audio layer options on menu.
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.
2019-09-10 07:59:56 +00:00
Edênis Freindorfer Azevedo
c0f96425e6 Show all commands available on menu.
We move from `Other commands` to several places of our main menu. This
way we allow texts to be translated and easier view of them for users.
2019-09-10 07:59:56 +00:00
Edênis Freindorfer Azevedo
51fa150f1c Adjust MMX menu variable and position.
It should only appear on `x86`.
2019-09-10 07:59:56 +00:00
Edênis Freindorfer Azevedo
27b038b378 Show messages about operations of state slot. 2019-09-10 07:59:56 +00:00
Edênis Freindorfer Azevedo
2e24845711 Allow translation of the words Open and Quit. 2019-09-10 07:59:56 +00:00
Edênis Freindorfer Azevedo
54991c5b14 Add extra keys default input when using GUI.
We also set the extra keys for controller input when using `defaults`
option.
2019-09-10 07:59:56 +00:00
Rafael Kitover
b358c051c9 Fix compilation issue when ENABLE_DEBUGGER=Off.
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.
2019-09-04 14:31:11 +00:00
Rafael Kitover
2a2be95397 builder: msys2 fixes
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>
2019-09-03 00:14:37 +00:00
Edênis Freindorfer Azevedo
f1438e0f0a Check ASAN support when ENABLE_ASAN=ON.
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.
2019-09-02 20:52:08 +00:00
Rafael Kitover
ade64db7a6 transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-09-01 20:42:30 +00:00
Rafael Kitover
8b3470507d cmake: check for ffmpeg >= 4.0.4
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>
2019-09-01 20:37:39 +00:00
Rafael Kitover
0b9c771027 travis: more ubuntu dists, fix mac cache
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>
2019-08-31 23:50:15 +00:00
Rafael Kitover
d9e4a0874d build fixes: ffmpeg, xbrz, travis, C++ version
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>
2019-08-31 22:58:59 +00:00
Rafael Kitover
23224fbaac update factory reset instructions in README.md
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>
2019-08-31 16:23:34 +00:00
Rafael Kitover
381a7bfe78 /std:c++latest for MSVC, fix bool flip, warn opts
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>
2019-08-30 01:57:01 +00:00
Edênis Freindorfer Azevedo
234f1e9b1a Update to xBRZ 1.7.
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.
2019-08-28 22:07:52 +00:00
Rafael Kitover
290012d1a7 transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-08-21 20:28:47 +00:00
Edênis Freindorfer Azevedo
06a9d786c2 Allow UPS patch for GBA games.
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.
2019-08-21 00:45:46 +00:00
Rafael Kitover
1949cdb37a transifex push/pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-08-20 23:24:36 +00:00
Edênis Freindorfer Azevedo
03121c69c0 Add support for autohold buttons.
We implement this in the same way it is being done on `vba-rr`.

- Fix #414.
2019-08-20 23:00:48 +00:00
Edênis Freindorfer Azevedo
e87213e369 Fix indentation. 2019-08-20 23:00:48 +00:00
Edênis Freindorfer Azevedo
cf47942f09 Fix Autofire {L,R}.
We were using directionals (left and right) instead.
2019-08-20 23:00:48 +00:00
Rafael Kitover
4993cb88dc remove tea-ci .drone.yml and installer.nsi
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-08-20 09:24:21 +00:00
Rafael Kitover
d9a7e0c964 cmake: auto-detect sfml, ffmpeg and openal
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>
2019-08-20 08:21:38 +00:00
Rafael Kitover
c64dd259b9 Update README.md
Fix Visual Studio instructions.

Add links for all dependencies.

Fix grammar/omissions etc.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-08-20 07:31:38 +00:00
Rafael Kitover
8ceef90fc4 fix appveyor visual studio build
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>
2019-08-20 06:55:07 +00:00
Rafael Kitover
a8b7b72dbd transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-08-19 22:16:33 +00:00
Rafael Kitover
f5eabb3514 builder: disable LTO on 64 bit mingw
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>
2019-08-19 17:23:45 -04:00
Edênis Freindorfer Azevedo
fc2eb38fcd Fix behaviour of Tools > Memory Viewer (#486)
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.
2019-08-19 19:25:47 -01:00
Rafael Kitover
2958af01ca builder: mingw improvements + misc.
- 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>
2019-08-19 13:15:01 -07:00
Rafael Kitover
3923b28fc3 transifex pull/push
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-08-18 19:01:10 +00:00
Rafael Kitover
51f61a3afb Merge remote-tracking branch 'vbam-libretro/master' 2019-08-18 18:46:55 +00:00
Aaron Kling
a01a2d4dd0 libretro: allow mingw cross compile 2019-08-17 09:17:06 -05:00
Twinaphex
6bdd6d1b22 Merge pull request #77 from negativeExponent/fix_cheat_search
Add missing break; lines for switch statements
2019-08-17 15:01:51 +02:00
Rafael Kitover
dc8d36a08c minor fix for stl wx builds
`XRCID()` expects a `const char *` not a `wxString`.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-08-16 06:08:47 +00:00
Rafael Kitover
51a4f74b94 Merge remote-tracking branch 'vbam-libretro/master' 2019-08-15 18:42:08 +00:00
negativeExponent
9ccdeac3aa Add missing break; lines for switch statements
- 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
2019-08-15 15:23:58 +08:00
Twinaphex
b8afa8c57c Merge pull request #76 from RobLoach/intl
libretro: Update core options API
2019-08-14 16:18:18 +02:00
Rob Loach
a17eb47103 Merge branch 'master' of github.com:fpscan/vbam-libretro into intl 2019-08-14 10:00:20 -04:00
Rob Loach
9b043daadf libretro: Update core options API 2019-08-14 09:56:39 -04:00
Edênis Freindorfer Azevedo
6b18c1f9b8 Fix warning about frames left in queue.
Example:
- [libmp3lame @ 0x55b9e7248300] 4 frames left in the queue on closing
2019-08-14 08:27:51 -01:00
Edênis Freindorfer Azevedo
f5b19475c9 [IDEA] Fix recording when using speedup/turbo.
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).
2019-08-14 08:27:51 -01:00
Edênis Freindorfer Azevedo
738494a232 Support all sample rate available on GUI.
Before we could only use `44100`. Now we can use all available on GUI
for the supported codecs.
2019-08-14 08:27:51 -01:00
Edênis Freindorfer Azevedo
aa3ecaf701 Add new output formats for recording audio/video.
We test each of these additions by trying to record gameplay with them.
Then we play it and check the results. Pretty straightforward.
2019-08-14 08:27:51 -01:00
Edênis Freindorfer Azevedo
5848feaea2 Fix video/audio recording.
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.
2019-08-14 08:27:51 -01:00
Ömercan Kömür
9e3c26152e Update libretro_core_options.h
option_defs_tr
2019-08-13 11:23:36 +03:00
Ömercan Kömür
6c60ac334b Turkish Language option 2019-08-13 08:50:56 +03:00
hizzlekizzle
d92ca688b3 Merge pull request #74 from retro-wertz/update
Fix "index out of bounds" runtime error
2019-08-12 10:23:21 -05:00
retro-wertz
ad43b32bdd Fix "index out of bounds" runtime error 2019-08-12 21:56:10 +08:00
hizzlekizzle
36f3a739ed Merge pull request #73 from retro-wertz/libretro_cleanup
Libretro cleanup and MBC3 RTC update
2019-08-10 08:33:02 -05:00
retro-wertz
82e723a528 MBC3: Update mapper to check if RTC is present before running RTC functions 2019-08-10 19:01:10 +08:00
retro-wertz
03184dd513 libretro: Use GB RTC data when available
- Save GB RTC data using retro_get_memory/size and only init using localtime when its unavailable (check is done in retro_run)
2019-08-10 18:24:32 +08:00
retro-wertz
b3744b3bd5 Simplify GB border core option 2019-08-10 01:06:15 +08:00
retro-wertz
9757a880c7 Core options cleanup and a few readability-related updates
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
2019-08-09 22:28:52 +08:00
Edênis Freindorfer Azevedo
cfb03d8b3a Set default keybinding when key does not exist.
- Fix #463
2019-08-08 21:31:58 -01:00
Twinaphex
1ef0912691 Merge pull request #72 from retro-wertz/enable_rtc
Allow enabling GBA RTC regardless of rom types
2019-08-07 15:49:16 +02:00
retro-wertz
496b372d3e Allow enabling GBA RTC regardless of rom types
- 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)
2019-08-07 20:05:57 +08:00
hizzlekizzle
4dbdf87d0a Merge pull request #71 from retro-wertz/patch-3
Update Makefile
2019-08-06 18:50:45 -05:00
retro-wertz
bb10954466 Update Makefile 2019-08-07 01:55:52 +08:00
hizzlekizzle
3e64044379 Merge pull request #70 from retro-wertz/update_makefiles
Update Makefile
2019-08-06 08:49:25 -05:00
retro-wertz
98313652d6 Update Makefile
- Try to fix osx build
- style nits and cleanup
2019-08-06 19:22:14 +08:00
Twinaphex
34de057969 Merge pull request #67 from retro-wertz/update_makefiles
Update Makefiles
2019-08-06 05:45:32 +02:00
Twinaphex
71e4b7b375 Merge pull request #69 from retro-wertz/master
Cleanup
2019-08-06 05:44:56 +02:00
retro-wertz
d9f8396c67 Cleanup 2019-08-06 08:58:04 +08:00
retro-wertz
9a13449782 Update Makefiles
- Updating makefile from vba_next's makefiles, removing any defines that are not available in this core.
- Update Android.mk
2019-08-04 15:37:18 +08:00
ZachBacon
38b7613eb4 Setting up basic appveyor 2019-08-01 23:07:34 -04:00
hizzlekizzle
408cab71e2 Merge pull request #66 from retro-wertz/libretro
Automatically hide some core options depending on rom image type
2019-07-29 13:19:36 -05:00
retro-wertz
d898288100 Automatically hide some core options depending on rom image type
- loading gba games will automatically hide gb/gbc only related core options at startup
- loading a gb/gbc game will also hide gba only options...
2019-07-30 00:51:06 +08:00
hizzlekizzle
c3edd6d433 Merge pull request #65 from retro-wertz/libretro
retro_get_memory_data/size and memory descriptors update
2019-07-28 17:05:10 -05:00
retro-wertz
2084a63e1f Update GB/GBC memory maps (retro_memory_descriptors) 2019-07-28 21:52:13 +08:00
Twinaphex
90b051eee1 Update libretro_core_options.h 2019-07-28 07:40:43 +02:00
retro-wertz
a727e22265 GB: Rename this variable to isolate from a global variable of the same name
- this is a temporary variable and should only affect on this section, and not the global one.
2019-07-27 19:35:58 +08:00
retro-wertz
0d423b98fa Cleanup GB palette struct and update retro_get_memory_data/size
- 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.
2019-07-27 19:15:46 +08:00
retro-wertz
bc80ecdb39 UtilRetro.cpp: Cleanup 2019-07-27 11:33:32 +08:00
Edênis Freindorfer Azevedo
855db11d98 Fix wxWidgets assertion error on Logging... menu. 2019-07-26 19:38:44 -01:00
Zach Bacon
c886b6a16d remove wrong and unnecessary #define
This fixes builds with clang on windows.
2019-07-25 21:45:29 -01:00
Rafael Kitover
38561b5713 Merge remote-tracking branch 'vbam-libretro/master' 2019-07-25 02:16:32 +00:00
Edênis Freindorfer Azevedo
770b9c1cf8 Add left analog bind to D-PAD for joystick. 2019-07-25 00:41:34 +00:00
Edênis Freindorfer Azevedo
6de45d4ed2 Set default binding for keyboard.
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.
2019-07-25 00:41:34 +00:00
Edênis Freindorfer Azevedo
78bbe1487a Add individual clear buttons for input config.
Besides that, we also rename the button for all input to `Clear All`.

- Fix #416.
2019-07-25 00:41:34 +00:00
Edênis Freindorfer Azevedo
53002e54db Use hats from joystick as default D-PAD. 2019-07-25 00:41:34 +00:00
Edênis Freindorfer Azevedo
57b7ddf592 Fix small memory leak. 2019-07-25 00:41:34 +00:00
Edênis Freindorfer Azevedo
060da968eb [LINUX] Add option to disable the online updater.
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.
2019-07-25 00:41:34 +00:00
Edênis Freindorfer Azevedo
dbb5914fa4 Show which BIOS file is currently selected.
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.
2019-07-25 00:41:34 +00:00
Edênis Freindorfer Azevedo
76756ef916 Fix key shortcuts for toggle menu actions.
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.
2019-07-25 00:41:34 +00:00
Edênis Freindorfer Azevedo
4622f1b833 Whitespace fix. 2019-07-25 00:41:34 +00:00
Edênis Freindorfer Azevedo
3dc738b5c5 Set default keys for input on first run.
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.
2019-07-25 00:41:34 +00:00
Edênis Freindorfer Azevedo
9bc8f33c40 Disable using volume {+,-} actions in main menu.
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.
2019-07-25 00:41:34 +00:00
Twinaphex
d1fcffc8c4 Merge pull request #63 from retro-wertz/fix_gba_siocnt
libretro: add SIO Control, normal mode reg
2019-07-23 13:47:12 +02:00
Twinaphex
7df7b19047 Merge pull request #64 from retro-wertz/patch-2
Update README.md
2019-07-23 13:46:36 +02:00
retro-wertz
7f105da3d6 Update README.md 2019-07-23 19:24:59 +08:00
retro-wertz
53ce6fb054 libretro: add SIO Control register (GBA)
- emulate SIOCNT reg, which is still needed for some games to trigger IRQ's even in single, non-link mode
- Fixes Digimon Racing (Europe) stuck in intro as reported in libretro docs page https://docs.libretro.com/library/vba_m/#compatibility
- Related PR: f9efb79a7d (diff-385704891f00846c986e9056b5d7c5a5)
2019-07-23 19:15:45 +08:00
Twinaphex
2e96f59ed0 Merge pull request #62 from retro-wertz/gb_timing_updates
Gb timing updates
2019-07-22 20:19:27 +02:00
retro-wertz
e50812dc79 GB: input, audio, video timing updates 2019-07-23 01:18:13 +08:00
retro-wertz
1532f555fe GB: Reduce input lag by 1 frame, video and audio timing updates...
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
2019-07-23 00:40:28 +08:00
Rafael Kitover
f09a9aa99a builder: add python3 to msys2 deps
For ninja.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-07-20 18:35:23 +00:00
Rafael Kitover
2fcad3f813 joysticks: hack to better support 360 triggers
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>
2019-07-19 12:43:47 +00:00
Rafael Kitover
352eb149ae Merge remote-tracking branch 'vbam-libretro/master' 2019-07-19 12:12:49 +00:00
Edênis Freindorfer Azevedo
2e97b27ffa Use --config option to load configuration file. 2019-07-18 19:40:42 +00:00
hizzlekizzle
bdd4386805 Merge pull request #61 from retro-wertz/gb
gb palette fix, color correction and cleanup
2019-07-18 08:06:34 -05:00
retro-wertz
bd5ba43122 Cleanup: Remove previous core option struct and unused variables etc 2019-07-18 19:34:20 +08:00
retro-wertz
aac30c72d3 Add GB Color Correction core option 2019-07-18 18:07:00 +08:00
retro-wertz
02a7a48bf3 GB: Fix selected palette not applied when loading content...
- Prevent GB type hardware change during runtime.
2019-07-18 17:35:54 +08:00
hizzlekizzle
8462ca76ca Merge pull request #59 from retro-wertz/gb
a few gb updates
2019-07-17 23:24:47 -05:00
retro-wertz
1fa78e69c5 Fix android build 2019-07-18 11:57:42 +08:00
retro-wertz
6dcf016d20 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
2019-07-18 10:41:59 +08:00
retro-wertz
85bd86cf5f GB: Send LCD interrupt only if there is no INT 48h signal
- Fixes Speedy Gonzales status bar in GB emulated hardware type.
2019-07-18 08:31:33 +08:00
hizzlekizzle
b147e9129f Merge pull request #57 from retro-wertz/sync
update
2019-07-17 14:45:00 -05:00
retro-wertz
d808297bc6 Fix crash caused by incorrect variable index for analog sticks 2019-07-18 01:02:17 +08:00
retro-wertz
7e8828986e libretro: Add core option sublabels 2019-07-18 00:56:58 +08:00
Rafael Kitover
ce11403b4e builder: updates for mingw
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>
2019-07-17 15:28:36 +00:00
retro-wertz
c5e6a3409a Libretro: Update GBC memory map 2019-07-16 22:51:07 +08:00
Rafael Kitover
fa45ccdfcd builder: fix command(), update c2man url
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>
2019-07-16 11:29:04 +00:00
Rafael Kitover
e64b990415 builder: fix msys2
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>
2019-07-16 00:48:18 +00:00
Rafael Kitover
5802207829 builder: make zip + sig on win + minor changes
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>
2019-07-11 20:18:21 -04:00
Rafael Kitover
296255d492 handle SDL joystick query errors #451
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>
2019-07-11 21:25:51 +00:00
Rafael Kitover
95658f57fc transifex sync
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-07-04 22:37:16 +00:00
Rafael Kitover
86c4dc7d3c transifex sync
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-07-04 15:22:54 +00:00
Rafael Kitover
bcc8b54096 transifex sync
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-07-04 04:50:39 +00:00
Edênis Freindorfer Azevedo
7569242f77 Fix pause behaviour with Pause when inactive.
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.
2019-07-04 04:42:32 +00:00
Edênis Freindorfer Azevedo
030740ee34 Fix some memory leak. 2019-07-04 04:41:26 +00:00
Edênis Freindorfer Azevedo
8ea607e1c7 remove translation from joystick keys
Avoid issues with translation, at least for now,
by not translating joystick button/axis names.
2019-07-04 04:26:48 +00:00
Rafael Kitover
cec32a61cc travis: mac: disable --help check, it segfaults
Disable the binary `--help` sanity check on mac because it is currently
segfaulting.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-07-04 04:08:42 +00:00
Rafael Kitover
f54dd25bb8 travis: fix gettext on mac + brew
cmake cannot find gettext, force link the gettext brew.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-07-04 03:51:00 +00:00
Rafael Kitover
e2f06210e0 update Visual Studio support
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>
2019-07-03 23:28:48 +00:00
Edênis Freindorfer Azevedo
91501becf6 Fix small memory leak. 2019-07-03 19:25:11 +00:00
Edênis Freindorfer Azevedo
c366907f64 Temporary fix for #65.
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.
2019-07-03 19:25:11 +00:00
Rafael Kitover
d585a61049 followup on kbd trans issues fix in 30b92724
Use the table to to replace both the translated string and the English
string.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-07-03 02:17:13 +00:00
Rafael Kitover
eaf1ad2429 Merge remote-tracking branch 'vbam-libretro/master' 2019-07-01 08:00:30 +00:00
Rafael Kitover
30b9272412 hopefully fix kbd control translation issues
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>
2019-07-01 07:53:23 +00:00
Edênis Freindorfer Azevedo
90b3f35408 Add hotkeys for changing sizes (1x ... 6x).
Use a accelerator to quickly provide a way to change to/from multipliers
of the original size.

- Fix #415.
2019-06-29 14:04:04 +00:00
Edênis Freindorfer Azevedo
fa77010f23 Fix pause toggle keybinding when unmuting.
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.
2019-06-29 14:01:21 +00:00
Twinaphex
8cb420030f Merge pull request #56 from webgeek1234/master
Android updates
2019-06-27 13:15:33 +02:00
Edênis Freindorfer Azevedo
8b8efa1b2d fix key shortcuts for save/load states
* 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.
2019-06-26 02:30:31 +00:00
Rafael Kitover
9fa20b49ca joystick cleanups #444
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>
2019-06-24 20:36:21 +00:00
Rafael Kitover
684b1bb7aa fix mem error for config global homeDir
Fix `homeDir` `ConfigManager` global pointing to freed memory.

Thanks to @FredericHamel for catching this.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-06-23 20:08:23 +00:00
Edênis Freindorfer Azevedo
ccc91fa04b quick fix for unicode filenames on windows 2019-06-23 10:59:13 +00:00
Edênis Freindorfer Azevedo
dfa4fec3d5 Fix missing shortcuts from key bindings.
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.
2019-06-23 10:50:52 +00:00
Edênis Freindorfer Azevedo
69b581f7e5 Handle key{bindings,shortcuts} correctly on frame.
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.
2019-06-23 10:50:52 +00:00
Edênis Freindorfer Azevedo
cec1dbfd36 Split configuration for default keys.
Split for keyboard and joystick with two arrays variables for
refactoring purposes.
2019-06-23 10:50:52 +00:00
Edênis Freindorfer Azevedo
d655031a8f Fix removing multiple system keys shortcuts.
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.
2019-06-23 10:50:52 +00:00
Edênis Freindorfer Azevedo
996d5b9df8 Do not set these options on MainMenu.xrc.
We already set the default values on `opts.cpp`, therefore these
values are not needed here.
2019-06-23 10:50:52 +00:00
Edênis Freindorfer Azevedo
019ab5a7e1 Fix "Joybus host invalid; disabling" warning.
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.
2019-06-23 10:07:24 +00:00
Edênis Freindorfer Azevedo
f6bfe67632 Have better support for maximized window.
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.
2019-06-23 10:04:37 +00:00
Edênis Freindorfer Azevedo
dcc0afa0d4 Fix window size when {en,dis}abling status bar.
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.
2019-06-23 10:04:37 +00:00
Edênis Freindorfer Azevedo
bf6f2d4ac2 Change where the config dir is created.
On Windows, if there is a `vbam.ini` where the exe is, we should not
create the configuration directory `%LOCALAPPDATA%\visualboyadvance-m`.
2019-05-31 00:42:08 -07:00
Rafael Kitover
3490620e0f travis: use Mac OS 10.14 and Xcode 10.2.1
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>
2019-05-29 23:26:46 +00:00
Edênis Freindorfer Azevedo
b0ec84693e fix stuck keys on ubuntu and on focus loss #142
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.
2019-05-29 12:08:18 -07:00
Edênis Freindorfer Azevedo
3d57750c16 Follow-up work on #142.
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.
2019-05-23 20:04:18 -03:00
Aaron Kling
055b7c4d49 libretro: jni: Switch to clang compiler in preparation for ndk r20 2019-05-23 15:29:16 -05:00
Aaron Kling
2e1333e1bb regparm is an x86 only attribute, only define it there 2019-05-23 15:28:09 -05:00
Rafael Kitover
500506cbd4 travis: disable link/SFML for mac
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>
2019-05-22 21:06:42 +00:00
Edênis Freindorfer Azevedo
22307de6c8 Fix continuous sprinting when using a modifier key
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.
2019-05-22 10:59:16 -07:00
Rafael Kitover
504597120f wx: only rename config if new file doesn't exist
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>
2019-04-28 12:35:27 +00:00
retro-wertz
0a95486fd8 Sound.cpp: Update
- minor, non-function changing updates like float value changes, some unrolled sections
- break soundEvent into separate 8 / 16 bit data writes.
2019-04-28 04:02:45 -07:00
Rafael Kitover
a4eae8025e cmake: use LEGACY OpenGL on FreeBSD only 2fedaa63
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>
2019-04-27 22:52:42 +00:00
retro-wertz
240257a01b wx: Change max volume from 400 to 200
- global implementation has set max at 200% (2.0 float), its already loud enough at 100%
2019-04-27 15:49:55 -07:00
Rafael Kitover
57ed465ebb builder: better mac automation
Make the right zip release filename and gpg signature when done
building for mac.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-27 15:45:03 -07:00
Rafael Kitover
15f040f3c4 cmake: missing space in wx util function
Fix typo from 2fedaa6.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-25 23:51:40 +00:00
Rafael Kitover
2fedaa63a6 support FreeBSD
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>
2019-04-25 16:22:07 +00:00
Rafael Kitover
a0c375b6e4 Merge remote-tracking branch 'vbam-libretro/master'
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-20 08:39:54 +00:00
Twinaphex
c013d499d5 Merge pull request #55 from Classicmods/master
Add PSC Makefile changes
2019-04-19 07:31:37 +02:00
Rafael Kitover
a8b386816a remove some old visual studio project files
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-18 10:45:20 +00:00
Rafael Kitover
1401573f52 release v2.1.3
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-17 17:23:23 +00:00
Rafael Kitover
ac35e37ca0 fix game geometry on windows
Previously when working on Visual Studio support I noticed an XRC error
dialog when adding the game area to the BoxSizer.

I tried removing the wxEXPAND flag with insufficient testing, the flag
is actually necessary.

The error is actually an incorrect debug assertion that is present in
3.1.2 and later fixed in master. The assertion is not triggered when
the project is built in release mode.

Remove the windows conditional code that removes the wxEXPAND flag.

TODO: silence assertion in debug mode or patch the wxWidgets vcpkg port.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-17 13:38:29 +00:00
Rafael Kitover
9fa544d1bb cmake: wxWidgets Release config for visual studio
Fix the cmake code that sets up wxWidgets when using vcpkg with Visual
Studio so that the Release configuration also works. Use variables
instead of an if statement.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-17 13:15:13 +00:00
Rafael Kitover
3cacb363a6 libretro: put " " between version and git sha
To make the version string consistent with other cores, make it of the
form "<VER> <SHORT-SHA>" with a space in-between.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-16 15:51:30 +00:00
Rafael Kitover
c2656f1375 libretro: remove "-" between version and git sha
To make the libretro core consistent with other cores, remove the "-"
between the version and the git short sha for git builds.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-16 15:46:32 +00:00
Rafael Kitover
4203bb53f2 libretro: set version with git sha
Read version from `CHANGELOG.md` and append the short git sha if not on
the released commit.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-16 14:13:22 +00:00
Rafael Kitover
8abbb070e8 cmake: use Win32Deps when mingw cross compiling
So that dependencies submodule is cloned.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-16 13:07:51 +00:00
Rafael Kitover
ffc9309253 builder: freetype 2.9.1 -> 2.10.0, verbose make
make project with `VERBOSE=1`.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-16 13:05:43 +00:00
Wes Smith
b6bb24e016 Merge pull request #1 from libretro/master
Rebase
2019-04-15 22:27:52 -04:00
Rafael Kitover
d08dd6cd18 builder: opensuse update 2
Install python3 in cross deps and call glib configure with the path to
it.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-16 00:08:45 +00:00
Rafael Kitover
9b38a38428 builder: updates for opensuse, refactor cross deps
Move linux distribution detection into `detect_os()` in the core.

The appropriate routine is then called with eval.

Move linux deps installation (for fedora previously) from
`linux-cross-builder` to `mingw-cross.sh` using the `linux_distribution`
variable set by `detect_os()`.

Add a routine to install suse cross dependencies as well.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-15 23:38:26 +00:00
Rafael Kitover
d28fd302aa cmake: only link SetupAPI on win32 if it's found
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-15 13:11:00 +00:00
Rafael Kitover
af63a1194f cmake: add -lSetupAPI to SDL2 libs for win32
Fix for undefined reference errors linking for msys2 mingw build using
the scripts.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-15 03:28:18 +00:00
Rafael Kitover
04c77a267f update win32 dependencies submodule
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-14 01:18:37 +00:00
Rafael Kitover
5dfb36ad84 remove .clang-format, update .travis.yml
Remove .clang-format as it causes some people's editors to do
unnecessary reformatting automatically.

Add binary `--help` check to travis build steps.

Add `-DENABLE_SDL=ON -DENABLE_OPENAL=ON` to cmake options for all travis
jobs.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-13 23:18:57 +00:00
Rafael Kitover
ed16d625e3 add unistd.h compat header for visual studio
Using:

https://stackoverflow.com/a/826027/262458

Revert 5019a201.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-13 22:50:05 +00:00
Zach Bacon
5019a20165 [SDL Front] MSVC doesn't have an unistd.h system file, closest is io.h, this will fix building the SDL frontend with msvc again. 2019-04-10 17:27:45 -04:00
Edênis Freindorfer Azevedo
2ae72f38cd fix starting game pos and geometry #406
Fix display when loading ROMs with custom geometry.

This issue was a combination of `wxSHAPED` and its effect on the custom
geometry. It is necessary to force a dummy resize so the display adjusts
itself.

Align game frame on center, both horizontal and vertical.
2019-04-09 15:49:13 +00:00
Rafael Kitover
2beb561838 cmake: move wx funcs and macros into separate file
In 2097b5aa I added a function that is used both in the non-vcpkg block
and outside of it, but the function was defined in the non-vcpkg block,
and this broke the visual studio build.

Move functions and macros into an include file so that they are globally
available.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-09 02:04:50 +00:00
Rafael Kitover
468fe26678 fix lang in changelog, add bios to issue template
Fix changelog for last release being generated in the russian locale.

Ask users in the issue template what bios they are using, because this
can affect things like link.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-06 20:26:08 +00:00
Rafael Kitover
95433f6caa release v2.1.2
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-06 19:01:14 +00:00
retro-wertz
5012969a59 Bump version to 2.1.1 2019-04-06 20:11:14 +02:00
retro-wertz
755f476799 Fix #52 2019-04-06 20:11:13 +02:00
Rafael Kitover
5b9d1a7174 cmake: improve finding wx utils
Clear the `find_program()` cache variable before each use.

On win32 prefer unqualified utility executables.

Add special handling for msys2, where wx-config is a shell script that
cannot be directly run from native cmake.

This is a followup on 2097b5aa.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-06 01:37:02 +00:00
Rafael Kitover
836b74a162 remove DOS line-ends from src/wx/xrc/*.xrc
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-04 19:21:20 +00:00
Rafael Kitover
49205bf28a remove unused "multithread filter" menu item
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-04 19:20:20 +00:00
Edênis Freindorfer Azevedo
331d9d331c Fix compilation warnings for MacOS build. 2019-04-04 18:01:05 -01:00
Edênis Freindorfer Azevedo
5540790ff1 fix some compilation warnings
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Merged #396
2019-04-03 17:32:25 +00:00
Edênis Freindorfer Azevedo
d919728138 Fix for resizing window geometry when loading games. 2019-04-03 11:51:56 +00:00
Rafael Kitover
64a9c0945f fix analog stick regression from e57beed8 #400
Instead of ignoring the initial state of axes, which I did to make
triggers work on the 360 controller, set the initial previous value to
the initial state instead.

This fixes the original problem without breaking analog stick movement.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-01 09:38:51 -07:00
Rafael Kitover
0f0d2400bc more specific check for 3.1.2 xrc error
The `wxEXPAND` flag is necessary for the game area in wxWidgets 3.0 and
earlier, it may be necessary in 3.1.2 as well, but it throws an xrc
error, so we check for windows and at least 3.1.2 to test for the visual
studio and vcpkg environment to avoid the xrc error.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-01 09:28:19 -07:00
Rafael Kitover
d9a7df6105 fix if statement in SDL sound driver #396
@denisfa found this due to a warning, this should improve the
functionality of the SDL sound driver.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-01 08:42:52 -07:00
Rafael Kitover
41ee35f22e add *.dll to .gitignore
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-04-01 08:42:18 -07:00
Rafael Kitover
6ec46678c5 installdeps: centos: do not install wx 2.8
Do not install the wxGTK-devel package on centos, as the wxGTK3-devel
package does come with a wxrc named wxrc-3.0.

This is a followup on 2097b5aa.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-28 22:20:16 +00:00
Rafael Kitover
2097b5aaa5 wx 2.8 compat fixes, centos support, cmake fixes
Add support for RHEL/centos to installdeps. There is no SFML package.

Add some string compatibility stuff so that everything builds on wx 2.8
unicode builds.

TODO: add travis slaves for 2.8, with and without unicode

Disable the game frame spacer code on 2.8 because it does not work (the
frame does not expand.)

cmake improvements:

- set ENABLE_LTO=OFF for Debug builds by default

- set ENABLE_LINK=OFF if SFML cannot be found and continue

- use better logic for finding wx utilities wx-config and wxrc

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Closes #395
Closes #297
2019-03-28 21:45:06 +00:00
Rafael Kitover
b69fced749 cmake: refactor, better clang support
Do some reformatting towards the more modern cmake style.

Clean up some code.

Support linking to gcc compiled wxWidgets by setting
`-D__GXX_ABI_VERSION=` appropriately for clang.

Use the new method of calling `FindwxWidgets.cmake`, the old method
causes some problems now.

Set all necessary policies in both cmake files.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-27 03:25:43 +00:00
Rafael Kitover
7fb27c4df9 cmake: check for broken LTO
When using LTO with gcc or clang, try to compile and link something to
make sure it works, and disable it if it doesn't.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-26 14:49:48 +00:00
Rafael Kitover
f2e9dc5530 cmake: check for policy CMP0077 existence
Check `if(POLICY CMP0077)` before trying to set it, because setting a
policy a version of cmake does not know about is an error.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-26 13:40:35 +00:00
Rafael Kitover
ae38a70d1e cmake: gcc/clang colors with ninja, fix warnings
Ninja requires `-fdiagnostics-color=always` instead of
`-fdiagnostics-color=auto` with gcc because it pipes output from the
compiler unlike regular makes.

Use `-fcolor-diagnostics` for clang, which also works correctly with
ninja to show colors.

Information for this taken from here:

https://medium.com/@alasher/colored-c-compiler-output-with-ninja-clang-gcc-10bfe7f2b949

Set all cmake policies in both the root `CMakeLists.txt` and
`src/wx/CMakeLists.txt` to silence warnings about unset policies from
cmake.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-26 00:35:23 +00:00
Rafael Kitover
23fe13d8fb cmake: fix syntax error in Win32Deps.cmake
In a construct such as:

```cmake
if($ENV{FOO} MATCHES bar)
...
endif()
```

if the environment variable is not set, the if statement becomes a
syntax error because there is nothing being compared.

Fix this by quoting the environment variable like so:

```cmake
if("$ENV{FOO}" MATCHES bar)
...
endif()
```

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-23 08:22:57 -07:00
Rafael Kitover
59e9c69097 reset Xorg screensaver on joy events
Use the libXss Xorg screensaver extension library to call
`XResetScreenSaver()` on joystick events to inhibit screen blanking when
for whatever reason the joystick driver or DE (xboxdrv and KDE in this
case) does not do this.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-22 11:30:31 -07:00
Rafael Kitover
a0283eadb6 fix game panel size on wxGTK #325
On wxWidgets 3.1.2, which is what vcpkg uses (and we use vcpkg for
Visual Studio) the wxEXPAND flag for the game area in the sizer throws
an XRC error dialog, removing the flag works correctly on Windows, but
not on wxGTK.

As a workaround, do not use the wxEXPAND flag on Windows.

TODO: with max zoom set, the game area is not centered vertically in
wxGTK.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-22 11:24:56 -07:00
Rafael Kitover
f1ecd7c322 auto deps for visual studio, take 1
Use vcpkg to build deps when Visual Studio on Windows is detected, this
only happens on first build, but does take a while because things like
wxWidgets need to be built. Building from the developer command line is
also supported.

I considered making a pre-built tarball available, but the resulting
files are just too big for this to be practical.

Make the necessary cmake code changes for this to work and to use the
vcpkg packages, which work just like on linux or have other cmake glue
code available.

To do this, we make vcpkg a submodule, use git to checkout all
submodules, then just build and use the `vcpkg.exe`. Then we set the
CMAKE_TOOLCHAIN_FILE to the vcpkg toolchain and also include it
directly, why this is necessary I don't know, without it it doesn't work
in the IDE but does on the command line.

All of this requires no vcpkg integration with either the user or the
project. A user-wide `ENV{VCPKG_ROOT}` is also supported.

Fix the dynamic arrays in the GBA core, MSVC follows the C++ standard on
this and gcc does not.

TODO: add the necessary gcc flags to make this an error in cmake.

Use `wxArrayString` instead of `std::vector<wxString>` in
`src/wx/strutils.cpp` which is used in options parsing. This was
necessary because of a bizarre linker error with wxWidgets when using
Visual Studio:

https://trac.wxwidgets.org/ticket/10884#comment:46

In `src/wx/panel.cpp` make sure the unimplemented D3D renderer code does
not get compiled if it's actually `OFF`.

Also fix the new spacer code for the drawing panel to not combine
`wxEXPAND` with `wxALIGN_CENTER`, which is an error on wxWidgets 3.1.2,
which is what vcpkg uses. The drawing panel seems to be automatically
stretched to the max size automatically anyway.

TODO: if all of this works, we'll need an Appveyor set up for visual
studio.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-21 16:01:46 -07:00
Rafael Kitover
3da07f4083 detect llvm toolchain utilities #392
Use `clang -print-prog-path=<tool>` to find the locations of llvm
toolchain utilities such as `llvm-ranlib` and set the appropriate cmake
variables to the resultant paths.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-19 18:41:25 -07:00
Edênis Freindorfer Azevedo
c714ff825a fix problems of command line parameters
* Fix return code for wrong command line parameters.

* Update return code for incorrect command line option on WX port.
2019-03-18 20:38:42 -07:00
Edênis Freindorfer Azevedo
a1f0c34ace XDG followup work #94
* Apply save order for save states and batteries.
The order for save state/battery:
1. StateDir / BatteryDir;
2. The path of the current loaded game;
3. XDG Base Dir fallback.

* Use XDG Base Dir fallback to save screenshots and recordings.

* Apply search order for all dirs except recording (not implemented yet) of SDL port.
The order for battery/save state/screenshot is:
1. StateDir/BatteryDir/ScreenshotDir;
2. The path of the current loaded game;
3. XDG Base Dir (or equivalent) fallback.

* Refactor code.

* Fix freeing and setting pointer to NULL of SDL port.
2019-03-18 01:08:53 -07:00
Rafael Kitover
2142a46dd5 Revert "travis: try re-enabling binary check"
This reverts commit 101fac5910.

Both ubuntu and mac jobs timeout when trying to call `--help`.
2019-03-16 03:45:36 -07:00
Rafael Kitover
101fac5910 travis: try re-enabling binary sanity check
On the ubuntu and mac jobs, try re-enabling the `--help` check, it
should now work thanks to @denisfa's work on a57e51f6.

If this works we also want to use wine for the mingw jobs to do the
same.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-15 19:26:16 -07:00
Rafael Kitover
6ca59412a8 travis: disable mxe pkg key
The mxe package server key has been removed from the keyservers, allow
apt-key to fail and add `--allow-unauthenticated` to the apt-get
options.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-15 04:44:45 -07:00
Edênis Freindorfer Azevedo
a57e51f699 Return non-error code for given command line parameters. 2019-03-14 16:17:45 -07:00
Edênis Freindorfer Azevedo
3fd444da91 XDG related cleanups #94
* Add migration support for 'vbam.cfg' to 'vbam.ini' on MacOS and Windows.

* Cleanup from XDG Base Dir code.

* Set home to NULL after using free().
2019-03-13 22:05:02 -07:00
Rafael Kitover
513b0559ce minor travis update for mingw jobs
Use the right gpg key id for the mxe apt server and remove the
`--allow-unauthenticated`.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-12 19:32:14 -07:00
Edênis Freindorfer Azevedo
1ebb8efdb6 Fix to set correctly position Y. 2019-03-12 11:16:09 -07:00
Edênis Freindorfer Azevedo
944c263e7f auto save/load geometry for wx GUI #94
* Add support to save/load geometry options for GUI window.

* Refactor code to use wxWidgets functions to get window geometry.

* Call update_opts() from ::OnSize and ::OnMove functions.
2019-03-11 10:32:39 -07:00
Rafael Kitover
36fbf71527 travis update attempt 5
`stretch` mxe binaries are failing due to missing libraries like
`libssl.so.1.1`, try to use the `trusty` repo instead.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-08 20:52:09 -08:00
Rafael Kitover
77bcbbf445 travis update attempt 4
Pass --allow-unauthenticated to apt when installing mxe packages,
perhaps the gpg key changed.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-08 20:03:17 -08:00
Rafael Kitover
7b3a3a0c4f travis update attempt 3
Disable the `--help` test for now, for some reason the exit code is 255,
something is still not quite working there.

Update installdeps to force a partial upgrade from trusty to xenial on
travis to get a newer version of libcurl-gnutls, which is necessary to
use the mxe package server.

Fix mxe package server repo url.

Add `mirror.mxe.cc` to list of apt hostnames to ignore SSL errors for.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-08 19:55:10 -08:00
Rafael Kitover
8f0a578ade travis update attempt 2
Use `xvfb` as per instructions at:

https://docs.travis-ci.com/user/gui-and-headless-browsers/

to run the `--help` check on linux.

Try https url for `pkg.mxe.cc`.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-08 17:13:48 -08:00
Rafael Kitover
dbd1d8c1f8 attempt to re-enable travis mingw slaves
The mxe pkg server seems to be back online with some changes, and an
invalid SSL certificate.

Also thanks to @denisfa's work on 7373da15 we can re-enable the `--help`
check on travis.

Let's see if this works.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-08 16:56:46 -08:00
Rafael Kitover
530af14030 rpi plugins fix + paths enhancements #94
Store the full relative path to found `.rpi` plugins, relative to the
standard Plugins directory, as specified by wxWidgets.

This fixes the problem of plugins being in a subdirectory while only the
basename was stored, making the plugins unusable.

This is done by using `wxFileName::GetFullPath()` instead of
`wxFileName::GetFullName()` with a relative filename instance.

Make a `GetPluginsDir()` method on the app class to simplify getting
this directory, and for possible future overrides.

Also make some minor, functionally equivalent changes to
`get_config_path()` in `wxvbam.cpp`:

- use the new `GetPluginsDir()` method for the plugins directory when
  building the config file search path

- print the XdgConfigDir on all platforms, since the function works on
  all platforms

- make a `add_nonstandard_path` macro which duplicates the `add_path`
  macro for wxWidgets standard paths but for any arbitrary string path

- use `wxFileName` methods to make the XDG config directory path instead
  of string concatenation

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-07 07:13:07 -08:00
Rafael Kitover
6a98f3c200 define S_ISDIR for win32 #94
Followup on #383.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-06 18:53:22 -08:00
Edênis Freindorfer Azevedo
7373da1528 Fix segmentation fault issue when using WX port command line
on Linux and MacOS.
2019-03-06 18:03:37 -08:00
Edênis Freindorfer Azevedo
36453885fc XDG Base Dir Spec followup #383
* Add XDG Base Dir Spec for other Unix alike platform.

* Add XDG Base Dir support for the fallback on SDL port.

* Add migration for Unix configuration file.
We migrate from 'vbam.conf' to 'vbam.ini' automatically.

* Refactor code for portability of dir creation functions.

* Fix for MacOS compilation directive.
2019-03-06 15:38:57 -08:00
Wes Smith
f87e085079 added a8a35 2019-03-05 15:22:21 -05:00
retro-wertz
286c8ff487 Fix #52 2019-03-03 15:16:11 -05:00
Rafael Kitover
39fd3f6580 add note to README.md about translations
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-02 17:34:36 -08:00
Rafael Kitover
24fd4e91a0 move factory reset to help menu
Per Squall's suggestion.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-02 14:37:08 -08:00
Rafael Kitover
5835dafe9a translate battery save error #318
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-02 11:04:06 -08:00
Rafael Kitover
d2922cfc5d stop showing "wrote battery" msg on panel #318
Remove the "wrote battery" system message that is painted on the panel,
because it annoys people, and show errors writing the battery with
`wxLogError()`.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-03-02 08:15:30 -08:00
Edênis Freindorfer Azevedo
646557e24e Add support for the XDG Base Dir Spec for Linux with legacy support.
We check if `$HOME/.vbam` exists; if it does, then we use
`$HOME/.vbam/vbam.conf`; otherwise, use
`${XDG_CONFIG_HOME:-$HOME/.config}/visualboyadvance-m/vbam.conf`.
2019-02-28 16:22:09 -08:00
Rafael Kitover
b5741ee4f6 release v2.1.1
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-02-25 19:17:00 -08:00
Rafael Kitover
286d7ee93a builder: fix 32bit mac build
Compile libicu not in cross mode for 32 bit.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-02-25 03:07:08 -08:00
retro-wertz
eaa9b6c57b Map Viewer: Fix crash when running a gb/gbc game,
...caused by invalid start address of mapbase.

Fix https://github.com/visualboyadvance-m/visualboyadvance-m/issues/372
2019-02-24 18:31:24 -08:00
Rafael Kitover
91ee8cad9c installdeps: check gtk3-classic on arch/manjaro
Don't try to install gtk3 if the user has gtk3-classic installed on arch
and manjaro.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-02-24 14:43:48 +00:00
Rafael Kitover
98cb298efc GB: fix 32/64 bit save/state incompatibility
The MBC3 and TAMA5 battery formats save the RTC data including a
`time_t` field which is the last field.

Since `time_t` is 32 bits for 32 bit builds and 64 bits for 64 bit
builds, pad it in the two battery structs with a `uint64_t` and detect
the 4 byte shorter saves made by older 32 bit builds.

Also remove some pointless code in save state reading that also uses
`sizeof(time_t)`.

Add two new constants for RTC data size in gbMemory.h and use them.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-02-23 13:40:25 -08:00
Rafael Kitover
b9d6f35f8f add build32/ to .gitignore (for 32bit builds)
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-02-22 10:20:44 -08:00
Rafael Kitover
6e76fcefef cmake: fix finding 32 bit wxWidgets on gentoo
Generalize regex and glob against `wx/config` scripts in
`Toolchain-cross-m32.cmake` to work on gentoo, which can append the
`-gtk3` suffix.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-02-22 08:50:04 -08:00
Rafael Kitover
0674b41b6c cmake: remove <INCLUDES> from nasm definition
For some reason on Ubuntu 14 (trusty) cmake translates `<INCLUDES>` in
`CMAKE_ASM_NASM_COMPILE_OBJECT` as a literal `INCLUDES` which produces
an error, remove it because we are not using it anyway.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-02-22 15:11:01 +00:00
Rafael Kitover
7dda58097a cmake: do not use -fPIC on 32 bit x86, breaks asm
Do not add the -fPIC (position independent code) compiler flag on 32 bit
x86 architectures because that breaks inline assembly, and some included
libraries like fex require inline assembly to work.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-02-22 14:53:51 +00:00
Rafael Kitover
3c28a18976 installdeps: support -m32 builds on opensuse
Also allow specifying target as "-m32" instead of "m32".

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-02-21 22:33:14 +00:00
Rafael Kitover
d7cf15e076 implement factory reset option #368
Add a "Factory Reset" item to the Options menu, which calls
`DeleteAll()` on the config object, which actually deletes the config
file. After this the application is relaunched asynchronously without
parameters and the current instance is closed.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-02-20 19:44:42 -08:00
Rafael Kitover
12fa61af82 cmake: refactor FindSSP.cmake
Use a function to not pollute variable scope.

Use modern style.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-02-16 13:04:43 -08:00
Rafael Kitover
5a77d8f4ba cmake: don't use ccache on msys2+ninja
When using msys ccache with a mingw ninja, the compiler fails to
execute.

Don't try to detect ccache when using the Ninja generator on msys2, it
can still be specified through cmake variables.

Do not check for the mingw ccache because it is broken and I will assume
not being used.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-02-14 14:58:13 -08:00
Zach Bacon
ed29b9c497 Merge pull request #364 from laqieer/master
bugfix: crash when loading elf
2019-02-05 08:11:25 -05:00
laqieer
7b350c09b9 bugfix: crash when loading elf 2019-02-05 20:44:17 +08:00
Rafael Kitover
eb6dfb4bfa fix libretro build broken in 16dd5d40 #339
Conditionally compile out the code for the feature implemented in
16dd5d40 (which is the throttle and frame skip configuration for the
speedup button) for libretro, and use the old behavior of skipping 9
frames.

Affects GBA.cpp and GB.cpp .

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-02-03 15:28:26 -08:00
Rafael Kitover
16dd5d4068 make speedup/turbo configurable + misc #339
Add Speedup / Turbo configuration panel which allows setting the
throttle or number of frames to skip for when the speed key is pressed
or turbo is enabled (which just presses the speed key.)

Throttle and frame-skip are mutually exclusive, throttle must be 0 (no
throttle) when number of frames to skip is non-zero. The dialog controls
handle this.

This is implemented in the core in GBA.cpp, GB.cpp and ConfigManager.

Two new options are added both in ConfigManager and in the wx options,
speedup_throttle and speedup_frame_skip, the defaults are:

```
speedup_throttle   = 0 (no throttle)
speedup_frame_skip = 9
```

this was the original behavior.

Add support for unsigned ints to wx/opts.cpp for these and for throttle,
this requires a new validator wxUIntValidator to use them in spin
controls.

Clean up appearance of the throttle spin control in the General dialog.

Maximum throttle and speedup_throttle is 600, values much over 500 will
not behave differently from 0 on modern hardware.

Maximum frame skip is 30 at the moment.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-02-02 18:43:55 -08:00
ZachBacon
5379708fcc I guess I'll try the gtk2 build of wxwidgets instead 2019-02-02 18:32:38 -05:00
ZachBacon
d70dd37326 Let's use the proper wxwidgets package 2019-02-02 18:29:19 -05:00
ZachBacon
ede6b371a4 Fix snap deps 2019-02-02 18:23:24 -05:00
ZachBacon
44208c82d7 Add basic snapcraft yaml for building a snap 2019-02-02 18:01:59 -05:00
retro-wertz
ba678f4f2e GB: Make gbTimerOn an INT type instead of BOOL 2019-01-31 16:35:36 -08:00
retro-wertz
43647d3234 GB: Prevent gbSpritesTicks from going out-of-bounds 2019-01-31 16:35:36 -08:00
Rafael Kitover
f8c6953151 fix drawing panel alignment in frame #325
Add wxEXPAND spacers to frame wxBoxSizer on the top and bottom around
the drawing panel so that panel is correctly centered if maximum zoom is
set.

Set proportion to 1 on the spacers and 0 on the panel so that both
centering with maximum zoom and full expansion work correctly.

Refactor frame OnSize event: pass a dummy userdata pointer to
distinguish resizing the frame from resizing the panel, and call
Layout() when the frame is resized.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-01-31 14:59:41 -08:00
Rafael Kitover
c6fa7246de cmake: use color gcc/clang output when possible
Test for the -fdiagnostics-color=auto compiler option supported by gcc
and probably clang, and turn it on if it's available.

This option colorizes compiler warnings/errors/etc. when output to a
terminal.

Also fix a typo above when adding the -fopenmp flag.
2019-01-30 14:29:06 -08:00
retro-wertz
e912c359f6 GBA: Remove some magic numbers for main pointers and save types size 2019-01-30 04:10:35 -08:00
retro-wertz
0697922179 Update libretro.cpp 2019-01-29 08:28:17 -08:00
retro-wertz
4700a2c1bf libretro: Enable mirroring for classic/famicom games for GBA and update 2019-01-29 08:28:17 -08:00
retro-wertz
f2b3496298 GB: Add missing battery save for MMM01 cart 2019-01-29 08:28:17 -08:00
retro-wertz
a0cec107a2 Update GBA save type detection and cleanup...
1. EEPROM: move eepromInUse and eepromSize from EepromReset() to eepromInit()
to avoid re-initializing during a reset (makes item below redundant)
2. Remove gbaSaveType variable - this is now redundant due to change above
which probably was added for this reason since games using eeprom fails with
gamepak error after a reset.
3. Add labels to identify cpuSaveTypes
4. libretro: remove workaround for eeprom reset issue (#1), do not apply
custom gbPalettes if not running in GB, change vram size to 0x18000 in
memory map
2019-01-29 08:28:17 -08:00
retro-wertz
2a796d48a0 libretro: Add GB color palettes 2019-01-26 06:45:35 -08:00
Rafael Kitover
4f9003112d persist chosen audio device in config file #353
Write `gopts.audio_dev` to the option `Sound/AudioDevice`.

Clear `gopts.audio_dev` when resetting the driver, because we cannot
assume anything about device enumeration order across sound drivers.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-01-24 03:14:23 -08:00
Rafael Kitover
d94d6d5363 osx builder: add -stdlib=libc++ to CFLAGS/LDFLAGS
Although this is a C++ option, some dists like ninja use CFLAGS instead
of CXXFLAGS for C++ code, and this becomes even more problematic with
XCode 10 which removes libstdc++ entirely.
2019-01-22 18:50:33 -08:00
ZachBacon
3eb591cac5 Update wxwidgets to 3.1.2 2019-01-21 15:27:03 -05:00
retro-wertz
3b87576e41 GB: Fix rumble support (MBC5)
- Fix missing call to rumble function on MBC5
- fix rumble flag gets disabled causing rumble not to work at all.
2019-01-21 05:28:27 -08:00
retro-wertz
089d7a40e5 libretro: Add support for tilt, gyro sensors and rumble pak (WIP)
- Uses analog stick to simulate tilt and gyro hw. By default, tilt uses
the right analog stick while gyro uses the left. The analog stick can be
swapped using a core option provided and with separate sensitivity level
for both sensors. WIP and will be fine tuned later (Kirby was fun to
play at least)
- Minor retro_run() cleanup and some minor stuff i forgot.
2019-01-21 05:28:27 -08:00
Zach Bacon
6330555c3b Merge pull request #350 from retro-wertz/libretro
libretro: Update input descriptors for 4-player SGB and cleanup...
2019-01-18 19:52:38 -05:00
retro-wertz
a2b3dd76a1 libretro: Update input descriptors for 4-player SGB and cleanup...
- Updates descriptors for 4-player SGB
- Remove alternate gamepad layouts for GBA
- Prevent crash when SGB border option executes at startup when GB is not
initialized yet
- Update input turbo function for 4-player support
- Minor cleanups (texts, style nits, etc)...
2019-01-19 00:11:16 +08:00
Rafael Kitover
9d058abb41 libretro: don't include getopt.h in configmanager
Check for __LIBRETRO__ before including getopt.h in ConfigManager.h,
because windows does not come with this header or function, and libretro
does not need it.
2019-01-17 10:36:18 -08:00
retro-wertz
d5642fa333 libretro: Android buildfix (#348) 2019-01-17 23:56:12 +08:00
retro-wertz
093818a1d7 GBA: Resolve shifting negative value issue in some thumb/arm opcodes 2019-01-17 05:54:31 -08:00
retro-wertz
59f76d05b8 libretro: Use gbWram[] for $C000 in CGB mode
This uses full size of gbWram[] so we have a continouos memory block
for RAM addresses $C000 and $D000 in CGB mode. This helps with
retroachievements.
2019-01-14 09:42:53 -08:00
retro-wertz
f9efb79a7d libretro: Fix GB games that uses serial (WIP)
Allow serial emulation without having the need to run link-related
communication stuff (NO_LINK define). Some games need this e.g. RC Pro-AM
racing. Dummy funcs/vars are added as placeholders.

Currently work-in-progress and might need to disable some more NO_LINK
sections.
2019-01-14 08:20:18 -08:00
retro-wertz
af3fe01822 libretro: Update GB's memory map, expose all usuable ram 2019-01-14 08:20:18 -08:00
retro-wertz
470d86f5c8 libretro: Cleanup 2019-01-13 04:29:02 -08:00
retro-wertz
ad432a6f70 libretro: Silence warning 2019-01-13 04:29:02 -08:00
retro-wertz
bff08eafb7 libretro: Update Makefile, fix ASAN 2019-01-13 04:29:02 -08:00
ZachBacon
8628db1359 Revert faudio inclusion, causing builder to fail because I didn't properly hook up the build instructions, will try and fix later 2019-01-10 16:34:58 -05:00
retro-wertz
c2b31635dd GBA: Only use eepromReset/flashReset during reset event (CPUReset) 2019-01-10 19:29:48 +00:00
retro-wertz
0d73da01a1 GBA: Get rid of blip_time() 2019-01-10 19:29:48 +00:00
Rafael Kitover
83b3ebd7f0 fix audio api radio buttons
Only the first wxRadioButton in a group is supposed to have the wxRB_GROUP
style, I broke this in 964f086b.
2019-01-09 08:32:03 -08:00
Rafael Kitover
327611b7dd installdeps: add gcc-libgfortran to msys2 deps
Add gcc-libgfortran to list of deps, without it gcc-libs may fail to
update.
2019-01-05 13:04:12 -08:00
Rafael Kitover
f6ad9a8ca7 remove bad hardcoded keybinds #298 #334
Remove esc to quit key bind #298.

Remove ctrl+x (cmd+x on mac) to quit key bind #334.

Remove FilterEvent app method, it is no longer being used anyway as key binds
work correctly.
2019-01-05 12:32:10 -08:00
Rafael Kitover
6462ce59b5 pull transifex updates 2019-01-02 17:25:10 -08:00
Rafael Kitover
ab3d9236ee add vim undo files to .gitignore 2019-01-02 17:00:02 -08:00
ZachBacon
a7773bc96f Bump FAudio to 19.01 2019-01-02 18:00:51 -05:00
Rafael Kitover
de0e8d6ba3 cmake: support libasan/-fsanitize
Add the ENABLE_ASAN cmake option, defaulting to `-fsanitize=address` if
ON, or the value specified for the option.
2019-01-02 08:23:26 -08:00
Rafael Kitover
ff2d31bf5e faudio: minor change
This translated xaudio2 driver may not be feasible to get working, but
I'll try at some point.
2019-01-02 07:16:08 -08:00
Rafael Kitover
964f086bea fix audioapi opt enum, reorder xrc
The config option name enum needs to match the actual enum, since the
value is an integer. Unavailable APIs are not shown using #ifdefs in
guiinit.cpp.

Also reorder the radio button xrcs to be in the order of the enum.
2019-01-01 18:44:51 -08:00
Rafael Kitover
8cb3f5a78c fix sound api config on linux/mac
Missing "|" in option spec would create the "sdlopenal" option instead
of separate "sdl|openal" options.

Add missing "|" to option spec.
2018-12-31 03:49:31 -08:00
Rafael Kitover
55a60e3e73 only block key event propagation for game keys #88
One bug noted in the #88 discussion is that when a joystick button is
held down, keyboard shortcuts do not work.

Rewrite the logic for process_key_press() to only block further
wxWidgets event propagation if the actual key pressed is a game key, not
if any game keys are being held down.

This takes care of all the issues in #88.

TODO:

- investigate other joystick issues
2018-12-28 21:51:28 -08:00
Rafael Kitover
f8b5627bd8 fix support for old SDL versions
Check for at least SDL 2.0.6 when using the
SDL_JoystickGetAxisInitialState() API introduced in e57beed8.
2018-12-28 05:22:17 -08:00
Rafael Kitover
e57beed890 ignore depressed gamepad triggers #88
On joystick event notification, filter out axis values that are equal to
their initial state.

The reason for doing this is explained in 539027ca. Triggers on e.g. the
360 controller are an axis that are the max negative value in the
depressed state, and for some reason a constant stream of events are
generated for them, that's another issue that needs to be addressed.

For the time being, this fixes the other half of the main issue in #88:
users with an old config with the default special key bindings will now
be able to use keyboard hotkeys as these spurious joystick events will
be filtered out and will not block keyboard events.

TODO:

- stop generating events for depressed triggers in the first place

- fix joystick events completely blocking keyboard events
2018-12-28 04:36:41 -08:00
Rafael Kitover
979ef8ebbd cmake: fix building without FAudio
Only add FAudio to target_link_libraries() if it's enabld.
2018-12-26 10:56:27 -08:00
Rafael Kitover
a91f066493 disable travis mingw jobs for now
The mxe package server is dead, disable mingw jobs because they fail
without it pending some workaround.
2018-12-26 10:38:12 -08:00
Rafael Kitover
edf2c0c461 fix xaudio2 when openal is disabled
Move the new faudio driver constant AUD_FAUDIO to the end of the sound
driver enum, otherwise the wrong is used.

Also check for NO_OAL before instantiating an openal driver.
2018-12-26 07:35:42 -08:00
Rafael Kitover
3ed08e8d68 finish connecting new faudio driver
Add cmake code to find and link faudio if enabled.

Fix typo for get devices faudio method in wxvbam.h

Selecting the faudio driver now works, but the driver not does
unfortunately.
2018-12-26 06:53:52 -08:00
Rafael Kitover
296e8e1693 fix valid sound driver config values + faudio fix
Fix name of FAudio option XRC control: "FAudio" and not "Faudio".

Create list of valid sound driver options by using macros for the ones
that are compiled in (with windows being a special case.)
2018-12-26 06:09:29 -08:00
Rafael Kitover
1f4487b836 faudio: add gui code for selecting driver
Add code to swtich to faudio api when the option is selected in the
config dialog in guiinit.cpp.
2018-12-26 05:33:19 -08:00
Rafael Kitover
396227661e add some missing faudio initialization code
Add case for faudio in the code for getting audio devices in
guiinit.cpp.
2018-12-26 05:28:53 -08:00
Rafael Kitover
0c2906d026 fix SDL sound defaulting code
The #if logic was leftover from when OpenAL was the default.

Default to SDL sound always instead.
2018-12-26 05:24:21 -08:00
ZachBacon
580a11e39e Let's not force FAudio just yet 2018-12-26 06:37:53 -05:00
ZachBacon
969046ea83 Add faudio to the build script 2018-12-26 06:21:25 -05:00
ZachBacon
d6f3fd23de Finish hooking up FAudio to the rest of the frontend 2018-12-25 20:58:31 -05:00
Rafael Kitover
539027ca16 remove problematic default joy binds #88
The default keyboard/joystick bindings for the "special" keys have
assumptions about axis numbers that do not hold with modern game pads.

For reference, the 360 controller has the following mappings:

Axis 0/1: left stick
Axis 3/4: right stick
Axis 2:   left trigger
Axis 5:   right trigger

This triggers another bug causing the depressed state of a trigger axis
to fire continuously. In this case, this is the left trigger on a 360
controller which is axis 2.

This triggers yet another bug where a stream of joystick events blocks
keyboard events from registering, resulting in hotkeys like ctrl+p to
pause not working.

Replace all joystick binds for special keys with null values.

With this change, a default installation of vbam will not trigger the
hotkeys not working bug when a joystick is plugged in.

The other bugs here mentioned also need to be fixed.
2018-12-25 17:42:46 -08:00
ZachBacon
5da48769ae fixed a typo and added faudio, but there's still persisting issues 2018-12-25 20:31:29 -05:00
Zach Bacon
514f355664 Merge pull request #337 from visualboyadvance-m/light-weight
Light weight
2018-12-25 20:00:09 -05:00
ZachBacon
429b8ceba2 I'm pretty sure some of this is very hacky and needs correcting, but it compiles at least. 2018-12-25 19:57:49 -05:00
ZachBacon
53e16e0411 Need to hook up the effects chain parameters 2018-12-25 18:48:55 -05:00
ZachBacon
8939455bb9 Next on the list is adding a few more arguments for certain functions 2018-12-25 17:47:21 -05:00
ZachBacon
a8c44364e5 Next on the list is correcting the incomplete types 2018-12-25 17:31:22 -05:00
ZachBacon
4b664c69f7 Still not quite ready for d3d, but this one header mingw has anyways. 2018-12-25 16:22:13 -05:00
ZachBacon
14815135bc we need to release with the proper function in faudio 2018-12-25 16:07:12 -05:00
ZachBacon
0bfbcfa332 Needed the FAudio Processor in FAudioCreate 2018-12-25 15:40:14 -05:00
ZachBacon
af98f532b1 Inbound FAudio fixes 2018-12-25 15:29:11 -05:00
Rafael Kitover
5f38c0da8a cmake: static: check for link file when editing
When trying to do the necessary edits to linklibs.rsp or link.txt for
static linking, first check if the files were created by cmake,
otherwise a fatal error is generated.
2018-12-23 19:43:32 -08:00
Rafael Kitover
ebd2e74a8a installdeps: fix for a01deb28: use msys2 ccache
For msys2 dependencies in installdeps, make sure to only install msys2
layer ccache and NOT the mingw ccache, because the mingw ccache is
completely broken.
2018-12-23 10:58:24 -08:00
Rafael Kitover
a01deb28d9 installdeps: also install ccache
Add ccache to list of packages we try to install for any particular
distribution, the vbam cmake code will automatically find and use it.
2018-12-23 10:48:35 -08:00
ZachBacon
ba563c71b3 Add FAudio to the xrc 2018-12-23 12:46:01 -05:00
Zach Bacon
5d7dfa4958 Merge pull request #335 from retro-wertz/fix_crash
Revert to a default audio api (SDL) when config is invalid
2018-12-22 20:35:16 -05:00
retro-wertz
0c579b20a1 Revert to a default audio api (SDL) when config is invalid
Prevents crash when an invalid or a non existing api is used in
vbam.conf
2018-12-23 09:29:48 +08:00
ZachBacon
4361c45b16 Fixed a few things, still have lots to fix though before it's a usable state. 2018-12-18 10:46:45 -05:00
ZachBacon
99795b270d cmake hookup is done, there are some issues that I'll be trying to fix within faudio.cpp before it's ready for mainstream 2018-12-18 10:24:39 -05:00
ZachBacon
eab039cd78 This should allow faudio to be supported in vba-m, next is to further modify cmake to find faudio 2018-12-18 08:59:11 -05:00
ZachBacon
e00aca18df Initial work on switching to faudio, WIP 2018-12-17 23:20:29 -05:00
ZachBacon
0a40ca7ab0 initial inclusion of stb_image to begin migration from libpng to stb, let's trim some fat 2018-12-17 20:44:00 -05:00
Zach Bacon
0d1b23c5e8 Merge pull request #331 from retro-wertz/gba_timings
Reduce input delay by 1 frame and audio timing fix
2018-12-12 13:43:04 -05:00
retro-wertz
85891fc7fd Reduce input delay by 1 frame and audio timing fix 2018-12-10 18:47:09 +08:00
Rafael Kitover
3cb38420bd builder: add patch for glibc 2.28 compat to m4
glibc 2.28 breaks the gnulib shipped with m4, this patch from gentoo
makes it compile.
2018-12-06 14:28:46 -08:00
Rafael Kitover
61b3084e4a builder: set host cc for libgpg-error to gcc
Set the var CC_FOR_BUILD=gcc in the core build environment. This is used
by libgpg-error to make host build tools when cross compiling, may be
used by other things as well.
2018-12-06 14:27:17 -08:00
Rafael Kitover
00b04692ae add travis hook for gitter 2018-12-05 14:38:54 -08:00
Rafael Kitover
b60a6343e9 Merge pull request #326 from knightsc/tasks/add-lldb-support
Add LLDB support to gdb remote debugging stub
2018-12-05 14:24:27 -08:00
Rafael Kitover
27a874e3ba Merge branch 'master' into tasks/add-lldb-support 2018-12-05 14:23:20 -08:00
Scott Knight
a52eddb5b4 Handle debugger disconnect and reconnect properly
When connecting the debugger the debugger variable was
being set to true before setting up the dbgMain and other related
function pointers. This caused the idle loop to attempt to call dbgMain
which was still NULL. This change makes sure that debugger isn't
set to true until all function pointers are set and that when disconnecting
the remotePort variable is reset back to 0 so we can reconnect properly.
2018-12-05 14:17:52 -08:00
Scott Knight
6ba3b7791d Set correct register number in gdb stop reply
https://github.com/bminor/binutils-gdb/blob/master/gdb/features/arm/arm-core.xml

According to the current arm register definition file in gdb the cpsr register is
actually register number 25 and not 16.
2018-12-05 14:17:01 -08:00
Scott Knight
f385fb2faf Update gdb remote query support
The latest version of gdb from devkitpro expects slightly
different response to some of the remote queries. For instance
when sending back the current thread id there should be no
space or dash between 'm' and the thread id. Additionally a
handful of other common remote gdb query params were
added to better support current versions of gdb
2018-12-05 14:17:01 -08:00
Rafael Kitover
3b185e235e builder: libvorbis fix
libvorbis autogen.sh calls the version-suffixed autoconf/automake
scripts, which ends up calling the wrong scripts, so remove the
autogen.sh and reconfigure manually.
2018-12-05 01:59:51 -08:00
Rafael Kitover
c68f372e5a fix wrong copy-pasta in 36e412df
Set the CPPFLAGS/CFLAGS/CXXFLAGS/OBJCXXFLAGS variables correctly in
build_dist(), were set incorrectly in 36e412df.
2018-12-03 16:24:42 -08:00
Zach Bacon
16ccad07c7 Merge pull request #330 from retro-wertz/libretro_updates
Libretro : cheat updates and tubo buttons
2018-12-03 11:11:38 -05:00
Rafael Kitover
36e412df53 builder: mingw: fix libffi for i686 + improvemnts
Add the tables DIST_EXTRA_{CPPFLAGS,CFLAGS,CXXFLAGS,OBJCXXFLAGS} for
adjustments during builds.

Add -DSYMBOL_UNDERSCORE to DIST_EXTRA_CPPFLAGS for libffi on mingw when
the target is i686, see:

https://bugzilla.mozilla.org/show_bug.cgi?id=1336569

Also set target_bits and target_cpu appropriately in the msys2 script.
2018-12-03 00:37:04 -08:00
Rafael Kitover
5b0f2e8aa6 builder: msys2: fix links to host binaries
Factor out non-environment code from host_env()/target_env() into
host_env_base()/target_env_base(). Such as that for creating symlinks to
root, link host binaries to the target root, as well as calling the
hook.

Call the _base() functions from the msys2 overrides so that symlinks are
created properly, remove redundant symlink code.
2018-12-02 20:35:29 -08:00
retro-wertz
727606420a Update ISSUE_TEMPLATE.md 2018-12-01 07:33:19 +08:00
retro-wertz
ca56ccffeb libretro: Simplify cheats, add multiline support for GB/GBC 2018-12-01 07:24:54 +08:00
retro-wertz
a2d5c260ec libretro: Add turbo buttons 2018-12-01 07:13:14 +08:00
Scott Knight
3484ecc419 Add support for LLDB qHostInfo packet
https://github.com/llvm-mirror/lldb/blob/master/docs/lldb-gdb-remote.txt

The qHostInfo command is listed as a high priority to implement for gdb
stubs that lldb can connect to. Adding support for this command allows
lldb to properly connect with it's `gdb-remote 55555` command and
correctly determine the target and allow debugging.
2018-11-28 08:50:50 -05:00
Scott Knight
dd2a1d9b51 Fix stack overflow in remoteMemoryRead
When doing a remote memory read the debugger can ask for any size.
The buffer being allocated however was only 1024 bytes long and the
code in remoteMemoryRead also attempts to write a zero byte at the
end of the array. This code will now take the count of bytes the debugger
is trying to read and allocates a buffer that is count * 2 + 1 large. This is large
enough to hold the $02x formatted hex byte for each byte as well as the zero
byte written at the end.
2018-11-28 08:50:49 -05:00
Scott Knight
4f28e84632 Fix stack overflow in remotePutPacket
If the packet passed into remotePutPacket was 1024 bytes or
larger then the buffer array would not be large enough to hold
the $, checksum and zero byte written. This now allocates a buffer
of size count + 5 to accommodate these extra characters.
2018-11-28 08:50:48 -05:00
Rafael Kitover
db8aaeca87 builder: mingw: build zlib-target after cmake
Since mingw zlib is built with cmake, move the dist to after cmake in
the build order.
2018-11-27 06:18:46 -08:00
Rafael Kitover
beaf934082 builder: bump libxslt 1.1.33-rc1 -> 1.1.33-rc2 2018-11-27 04:51:53 -08:00
Rafael Kitover
afbe647aed builder: catgets fix for msys2 + minor changes
Change `ln -s` to `cp` in the catgets makefile in the applied patch,
this is used for making symlinks to some header files, this will
hopefully fix building catgets for @ZachBacon on msys2. There seems to
be a problem with the mingw gcc reading headers that are symlinks, even
if they are real windows symlinks.

Also slightly refactor checking for target built files. Add the `-f`
flag for `install_artifact([-f] $dist)` for the full path to the target
file, and add the helper functions `check_install_artifact($dist)` and
`check_install_artifact_relative($dist $root_path)`.

These helper functions also display error messages if the target file
does not exist, as opposed to the previous behavior where it would just
silently exit nonzero.
2018-11-23 09:48:48 -08:00
Rafael Kitover
a6034ddfa2 builder: disable building openssl tests
Remove the build_tests dependency from build_all in the openssl makefile
due to a possible build issue on msys2.
2018-11-18 09:03:24 -08:00
Rafael Kitover
9ebc3fc28c builder: build mingw dlfcn after cmake
dlfcn requires cmake to build.
2018-11-16 02:19:05 -08:00
Rafael Kitover
115fce6958 builder: do not defer env eval for msys2 host hook
Do not defer evaluating $BUILD_ENV in the msys2 host/target environment
overrides, as that causes the subsequent eval to try to run the variable
as a command.
2018-11-15 19:22:56 -08:00
Rafael Kitover
b9911a5759 builder: fix regressions from 37869441..a3ec309b
Refactor the build environment evaluation, make build variables set
immediately so that they don't grow longer on re-evaluations and defer
all other variables. Export as many build related variables as possible.

Make one more crucial fix for cross builds: run the post_build after
LDFLAGS and LIBS are restored, so that this does not interfere with
setting and restoring the build environment for host builds.

Other changes:

- fontconfig 2.13.0 -> 2.13.1

- openal     1.19.0 -> 1.19.1

- set fontconfig configure type to autoreconf, disable tests

- disable the openssl parallel build patch, it fails unpredictably,
  always build openssl with -j1

- configure libicu with --disable-tests and a few other things disabled,
  the tests cause link issues on mingw i686

- also make a minor fix to libicu makefiles for mingw (replace echo -n
  with printf)

- move $BUILD_ENV evaluation to the builder() main function to defer
  some variable initializations

- add patch for openal to mingw-cross to use gcc instead of cmake to
  build some native tools it uses, cmake causes issues with cross builds

- in host_env()/target_env() defer variable expansion and include a copy
  of $BUILD_ENV in the appropriate sequence
2018-11-15 01:54:19 -08:00
Rafael Kitover
a3ec309bd6 builder: more minor mingw cross fixes
Do not defer evaluating build env variables in mingw-cross.sh, this
interferes with switching them between host/target.

In build_dist() adjust the LDFLAGS and LIBS after pre_build has run,
because host/target env setting happens in pre_build and adjustments get
lost.
2018-11-12 09:48:35 -08:00
Rafael Kitover
d725978abf builder: fix openssl parallel make patch
Fix sed regex for the openssl POST_CONFIGURE to work with the mac/BSD
sed (anchor to beginning of line.)
2018-11-12 05:40:24 -08:00
Rafael Kitover
cf3ed8f370 builder: fix quoting issues introduced in 37869441
In host_env/target_env/etc. functions, quote all variables values so
that they pass through eval correctly.
2018-11-12 04:47:59 -08:00
Rafael Kitover
37869441d2 builder: msys2 fixes + misc improvements
- Fix leading spaces in build env vars.

- Pass -Dcc="$CC" to the c2man metaconfig, it tries to use cc on msys2
  which fails.

- Pass LDFLAGS to openssl make to fix link errors.

- Change the host_env, target_env and related functions to output a list
  of commands for eval.

- Add a --host-env flag to output the host env for cross build
  environments.

- Ignore symlink failures when installing dists, symlinks fail on msys2
  sometimes for some reason.

- Put libicu in the list of both host and target dists only in
  mingw-cross, the host libicu does not build on msys2, and everything
  works fine without it.

- Add -j1 to openssl make args to disable parallel builds for the msys2
  and cygwin host builds, because they fail otherwise.

- Add "-ldl -lcatgets -lws2_32" to libicu LDFLAGS for the target build,
  ws2_32 may be necessary for 32 bit builds.
2018-11-12 04:07:48 -08:00
Rafael Kitover
975a1866f5 cmake: support linuxbrew mingw toolchain
Add default linuxbrew mingw toolchain root paths to cmake mingw
toolchain files.
2018-11-11 19:33:55 -08:00
Rafael Kitover
453fa0decf add visual studio .vs/ directory to .gitignore 2018-11-04 21:22:29 -08:00
Zach Bacon
eee4add6f3 Add localizations to installer, next will be adding portable mode so users can install to a custom location without the shortcuts being installed 2018-11-04 09:24:23 -05:00
Zach Bacon
2e5235af8d Initial rework of the installer framework, this is very incomplete, but it'll hopefully allow individual selection of translations as well as offer a portable mode installer 2018-10-29 18:33:20 -04:00
Rafael Kitover
6f1df2ddea rename mingw include dir mingw-include in deps 2018-10-23 20:07:04 -07:00
Zach Bacon
5e58e4c3e6 when it comes to cross compiling, Most unices like linux are case sensitive 2018-10-23 22:06:18 -04:00
Rafael Kitover
26b15b2c1e add mingw dependencies/include to include path
Older versions of mingw64 do not have the versionhelpers.h header, add
it to the dependencies submodule include/ directory and add it to
include_directories() for mingw in cmake.
2018-10-23 16:32:34 -07:00
Rafael Kitover
9cb9ce86bd fix Windows XP Compatibility #315
Use the IsWindowsVistaOrGreater() function from VersionHelpers.h, which
fortunately is part of mingw, to check for the availability of the
comctl32 LoadIconWithScaleDown API, which we use to fix issues with the
app icon, like the icon being too big in the volume mixer.
2018-10-23 06:19:34 -07:00
Rafael Kitover
1bf51ec1fa builder: 32 bit mingw fixes
Add -lm (the math library) to CFLAGS/CXXFLAGS/OBJCXXFLAGS/LDFLAGS and
LIBS for the cases where it is used but not explicitly linked.

Improve the sed script to override building the openal native tools as
it was failing for mingw 32 bit. Add -lm and remove flags from the
environment.
2018-10-14 21:34:00 -07:00
Rafael Kitover
ed8c928adb builder: support gentoo crossdev + misc fixes
Support the gentoo crossdev mingw environment for the mingw cross
builder:

- For the cmake toolchains, add /usr/<arch>/usr to root paths, as this
  is the mingw root for crossdev.

- -Wno-error=all no longer works with gcc 8.2, instead remove all
  -Werror flags in dist_post_configure().

- Also remove all -I/usr/include flags in dist_post_configure().

- Don't prepend ROOT/host/bin to the PATH globally, only in
  set_host_env(). This way the target config scripts are correctly found
  in PATH.

- Bump openssl 1.0.2o -> 1.0.2p, cmake 3.10.3 -> 3.13.0-rc1, gd 2.2.4 ->
  2.2.5 and glib 2.57.2 -> 2.58.1.

- Add libicu unicode handling library, needed by some deps. Put into the
  list of dists that must be built for both the host and the target. Use
  a whole bunch of patches from MSys2 for it.

- Make openssl build in parallel by using a sed script to prepend a + to
  the appropriate make rules.

- Replace fontconfig EXTRA_LIBS with MAKE_ARGS: LIBS="-lintl -liconv"
  because these libs were being stripped out from LIBS and LDFLAGS.

- Add V=1 VERBOSE=1 to all make invocations for extra verbosity (to see
  compile/link invocations.)

- As a consequence, use dist_ninja_args() for ninja, it will still take
  options in DIST_MAKE_ARGS.

- Add CONFIGURE_TYPE "cmakeninja" which is like the "cmake" type except
  with -G Ninja to use the ninja generator and built with ninja. Nothing
  uses this yet.

- Fix dist_patch() output for already applied patches.

- Add -L/usr/<arch>/usr/lib64 to CFLAGS/CXXFLAGS/OBJCXXFLAGS/LDFLAGS,
  because crossdev libpthreads.a is in that directory and it's not in
  gcc search paths. It cannot go into CPPFLAGS because those are used
  for windres invocations, and windres errors out with non-cpp flags.

- Add -DMINGW_HAS_SECURE_API to all flags to fix a problem with the
  mingw headers in crossdev.

- Add -lpthread to a default LIBS env var so that it's often linked last
  against any libraries that may need it, at least for autoconf.

- Set the PKG_CONFIG env var to the path of the built pkg-config binary,
  not exactly sure why this was necessary.

- Overhaul environment variable saving/restoring for set_host_env() so
  that more variables are covered and have good host defaults.

- Add the dlfcn-win32 for mingw for dependencies that need -ldl.

- Add some MSys2 patches for fontconfig.

- Use a sed script to fix the native tools compilation when cross
  compiling openal.

- Replace the fedora glib patches for mingw with MSys2 ones for the
  newer glib.

- Add --with-threads=posix --disable-libelf to glib DIST_ARGS.
2018-10-11 06:55:53 -07:00
ZachBacon
b60cd3326f Update openal to use github url 2018-10-07 22:42:59 -04:00
retro-wertz
aebda1b706 debian: update dependency
add zip, needed during compile
2018-09-22 07:40:22 -07:00
ZachBacon
58083d9d4a Gonna use universaldxsdk for xaudio 2018-09-16 15:20:06 -04:00
Rafael Kitover
721c1b7c19 Revert "hopefully fix bin2c for msvc"
This reverts commit 01a75e8e6e.

The bin2c executable path is already a full absolute path.
2018-09-16 11:14:49 -07:00
Rafael Kitover
01a75e8e6e hopefully fix bin2c for msvc
Prefix destination bin2c.exe with ${CMAKE_BINARY_DIR} so that it doesn't
try to use whatever its current directory is.
2018-09-16 11:06:48 -07:00
Rafael Kitover
b9d0f81843 builder: fix ccache on msys2
Apply msys2 patch for ccache, otherwise it hangs when compiling.
2018-09-16 10:13:04 -07:00
Rafael Kitover
be0d49a304 builder: msys2 fixes
Build zlib before ccache so that ccache does not try to use its bundled
zlib, which does not compile cleanly on cygwin/msys2.

A couple of related PRs for ccache:

https://github.com/ccache/ccache/pull/311
https://github.com/ccache/ccache/pull/310

Replace the usage of xzcat/bzcat in archive unpacking with `xz -dc` and
`bzip2 -dc` because @ZachBacon had some issues with xzcat trying to
compress instead of decompress.

When switching msys2 build modes, unset related env vars first,
sometimes they can get mixed up for some reason.
2018-09-12 17:21:40 -07:00
Rafael Kitover
3aa00bfbbf builder: fix libuuid_mingw for mingw cross
Unset UUID_LIBS when building host fontconfig, which contains
-luuid_mingw for the cross fontconfig.

Add trailing semicolons on core POST_BUILD actions.
2018-09-08 19:59:07 +00:00
Rafael Kitover
5b5e319378 builder: don't install cpanm with local::lib
Don't pass -I to cpan when installing App::cpanminus, because that may
ignore our env vars and put things into ~/perl5 .
2018-09-08 19:48:29 +00:00
Rafael Kitover
88f66ef6f8 builder: fix building ccache for win targets
Add ccache as a host dist when compiling with mingw.
2018-09-08 19:08:00 +00:00
Rafael Kitover
d1c82cac9e fix typo in builder core
Fix line with a / at the beginning which causes a syntax error.
2018-09-05 12:12:18 -07:00
Rafael Kitover
dcd7d5e092 support 32/64 bit mac builds, build improvements
Support building both 32 bit and 64 bit mac binaries, by passing the -32
or -64 flag just like for mingw.

Install libuuid on mac into a private path, because its uuid.h conflicts
with mac APIs when e.g. building python2.

Other improvements:

- add ccache to dists early on to not rely on the dist ccache

- update python2 version

- set python3 version to 3.6.5 until patches are updated

- TODO: rebase python3 patches

- configure cmake with --enable-ccache always

- TODO: remove all ccache optional stuff, make it required

- run cpanm through perl, because of possible issues with the script and
  various paths

- support an install prefix other than /usr via DIST_PREFIX
2018-09-04 08:29:24 -07:00
Zach Bacon
b4dd06a148 Merge pull request #302 from retro-wertz/libretro
Libretro: Add GB/GBC cheat support and wram/vram access using retro_get_memory api
2018-08-19 11:49:31 -04:00
retro-wertz
916c091a49 Libretro: Add GB/GBC cheat support...
- Add wram and vram to retro_get_memory* and minor cleanup
2018-08-19 23:34:38 +08:00
retro-wertz
14086d0007 Libretro: Fix crash on some linux systems 2018-08-19 22:19:06 +08:00
Rafael Kitover
0e33861754 update translations, add new langs from transifex
Update the po files with the transifex client and do a msgmerge.

Replace cmake/FindGettext.cmake with the current version, and fix a bug
in it that would not allow files with multiple periods such as
zh_TW.Big5.po. Also disable msgmerge in GETTEXT_CREATE_TRANSLATIONS
otherwise it would create too many very spammy commits.

Replace language list in po/wxvbam/CMakeLists.txt (where the .pot and
.po files are) with a list made with file(GLOB ...), so that all the new
languages are pulled in.
2018-08-11 16:18:15 -07:00
Rafael Kitover
e67b513e94 rename mac-localizations to mac-translations.cmake
Rename cmake script to copy .gmo files into the .app introduced in
bf4606fc from mac-localizations.cmake to mac-translations.cmake since
these are really translations and not localizations.
2018-08-11 15:05:12 -07:00
Rafael Kitover
bf4606fc18 install translations into mac .app
Add a POST_BUILD hook to run a cmake script to install translations into
the .app.

Tested to work correctly, when system language is different a
translation is loaded.
2018-08-11 14:52:18 -07:00
Rafael Kitover
0092dc16ac msys2: don't try to link msys librt and libpthread
In cmake on Win32, don't try to find librt or libpthread using
find_library(), and on mingw just include -lpthread.

For some reason the msys versions of librt and libpthread were being
picked up when find_library() was being used.
2018-08-10 16:47:17 -07:00
Rafael Kitover
65e1ab041d disable gcc stack protector, segfault on 8.2.0
Make gcc -fstack-protector-strong and associated options controlled by
the cmake option ENABLE_SSP which defaults to OFF.

This option causes a segfault on startup with gcc 8.2.0.
2018-08-10 16:35:49 -07:00
Rafael Kitover
6cbad61f36 fix cmake regression introduced in bfe21aee
Before calling list(REMOVE_ITEM ...) check if the variable exists, if it
doesn't cmake throws an error.
2018-08-10 09:37:55 -07:00
Rafael Kitover
bfe21aee3e remove -fpermissive compiler flag
Remove -fpermissive from the list of flags passed to gcc and clang.

Remove -fpermissive from the cxxflags from wxWidgets config as well.

When checking wxWidgets ABI compatibility version, temporarily add
-fpermissive to compiler flags on Win32 because minhook requires it.
2018-08-10 06:46:51 -07:00
Rafael Kitover
571ecbe3e8 support mac-hosted mingw builds, misc. fixes
- Add the cross root from the mingw-w64 mac brew to the cmake toolchain
  files.

- Remove strerror_r/strerror_s from ConfigManager.cpp because the
  mingw-w64 brew does not support strerror_s for some reason.

- Strip the vbam executable from the builder script in the build_project
  phase.

- Change the bzip2 URL to the github mirror because the bzip.org domain
  expired.

- Add libuuid as it's required by the new fontconfig, use the mingw
  version for mingw builds, for mingw also set UUID_LIBS to
  '-luuid_mingw -luuid' in mingw.sh for fontconfig, the mingw version
  is called uuid_mingw because uuid is a core win32 library.

- Lower glib version to 2.57.2 stable.

- Update wxwidgets version to current master sha.

- Fix a bug in flex-2.5.3 post_build where it tries to build flex
  current but flex has been removed, and it was just rebuilding 2.5.3.

- Fix "aggressive" relocation and the relocation of .l[ao] and .pc files
  in install_dist to ignore /usr/local, and only match /usr.

- Add a "project" pre_build and post_build hooks.

- Add getopt to host-only dists in mingw-cross.sh.

- Use perl instead of readlink -f to get the absolute path of the cmake
  toolchain files in mingw-cross.sh, as readlink -f is linux-only.

- In mingw-cross.sh, replace the glib post_build to rebuild
  gettext-target instead of gettext --without-included-glib.

- Add overridable functions set_host_env_hook and unset_host_env_hook in
  mingw.sh to override in other scripts, in this case mac-cross-builder.

- Update mingw glib patches to current fedora versions.

- Add tools/win/mac-cross-builder script to build mingw windows binaries
  on mac, it borrows some necessary parts from the mac native builder
  for host dists, and inherits from mingw-cross.sh.

TODO: currently the resulting mac-built binary segfaults due to gcc
8.2.0, just as the msys2-built binary does, this is a separate issue.
2018-08-10 04:31:05 -07:00
retro-wertz
e32e7c5de2 installdeps: Add zip to openSuse dependency 2018-08-08 08:51:51 +08:00
retro-wertz
f45935af98 Add vbam_libretro.info
to be copied into <retroarch_folder>/<core_info_folder
2018-08-06 13:46:48 +08:00
Rafael Kitover
be508eb2fd simplify check for renamed wx-config, fix gentoo
Use find_program() to check for the existance of wx-config-gtk4, then
wx-config-gtk3 and finally wx-config, instead of calling find_package()
for each separately, FindwxWidgets module does not like being called
multiple times, it screws up some cache variables.
2018-08-05 21:16:33 -07:00
Rafael Kitover
3b44a29948 cmake: fix wrong unset syntax #295 from f78d45c0
unset(VAR PARENT_SCOPE CACHE FORCE)

seemed to work on my version of cmake on gentoo, but does not work on
other versions.

Rewrite the function as a macro and use the syntax:

unset(VAR CACHE)

instead.
2018-08-04 13:13:37 -07:00
Rafael Kitover
5644339193 installdeps gentoo: don't eselect wxwidgets
Don't eselect the wxwidgets installation for gentoo because the user may
have their own preferred version and the default should be set correctly
for the only installation.
2018-08-04 05:11:24 -07:00
Rafael Kitover
7a054b4583 installdeps: support gentoo
Add a check for gentoo and the appropriate emerge commands to get the
library and toolchain dependencies.
2018-08-04 04:41:42 -07:00
Rafael Kitover
f78d45c038 cmake: fix regression in finding wx from 2efcb620
Clear FindwxWidgets module variables from the cache after each
unsuccessful try with WX_CONFIG_EXECUTABLE set, otherwise the succeeding
find_package(wxWidgets) call with WX_CONFIG_EXECUTABLE unset will fail,
as it does with cmake on gentoo.
2018-08-04 04:34:24 -07:00
Rafael Kitover
594ecc3947 msys2 builder: redo fontconfig patch, bumb wx
Replace fontconfig gperf bug workaround patch with the one worked out in
the upstream bugzilla report.

Bump wxWidgets version up to current sha to fix an incompatibility with
mingw.
2018-08-01 01:48:52 -07:00
ZachBacon
2cece6ac9f Updated Translations, finally added transifex support to pull in new translations 2018-07-31 06:54:10 -04:00
Rafael Kitover
6bc301018f update msys2 builder
Bump freetype2 and fontconfig versions.

Add patch to fix a gperf bug that causes an error in the fontconfig
build to fontconfig (.gperf file must not have blank lines.)

Add -lintl -liconv to extra libs for fontconfig.
2018-07-30 20:50:15 -07:00
Zach Bacon
14d13153b3 Merge pull request #292 from retro-wertz/updates
Updates
2018-07-26 13:33:06 -04:00
retro-wertz
ddea50d3c8 GB: Cleanup sound registers
Seems to be left-overs from switching to blargg
2018-07-26 14:39:06 +08:00
retro-wertz
faf01db2cf GB: Backport STAT register behavior
http://www.devrs.com/gb/files/faqs.html#GBBugs
2018-07-26 13:45:06 +08:00
retrowertz
d9e0d0f88d GB: Remove references to gbReadOpcode
Merged with gbReadMemory since this basically is just a duplicate
2018-07-26 00:24:06 +08:00
Zach Bacon
eb20bb4aad We don't have a forum anymore
Please kindly use github issues
2018-07-24 17:42:55 -04:00
retro-wertz
fca7e175d8 Libretro: Prevent crash when loading an incompatible state file 2018-07-24 14:23:52 -07:00
retro-wertz
1289e08cb4 Libretro: Enable battery save ram support for MBC2 and MBC7 2018-07-24 14:23:52 -07:00
retro-wertz
a9ab09f749 Libretro: Fix realtime clock not updating in GB/GBC...
Remove usage of RETRO_MEMORY_RTC - not required since real-time clock is always updated and is using current time and not ingame time.

Add some more rom info to logs during loading
2018-07-24 14:23:52 -07:00
retro-wertz
6cda6c0c24 Libretro: Show basic details in log window during rom loading 2018-07-24 14:23:52 -07:00
Zach Bacon
de25e9d76d include zip for arch based systems 2018-07-22 10:29:28 -04:00
Zach Bacon
5016fd6c0e Merge pull request #286 from retro-wertz/libretro_gb
add GB/GBC core to libretro
2018-07-22 10:27:25 -04:00
retro-wertz
6ef938fc52 Libretro: Add memory descriptors for GB/GBC 2018-07-20 22:21:07 +08:00
retro-wertz
bb64e8d8d6 Libretro: Use retro_get_memory_data/size for battery-enabled roms
Supports battery saving for MBC1, MM01, MBC3, MBC3+RTC, MBC5

WIP: TAMA5, MBC2, MBC7

Minor style nits
2018-07-19 03:06:06 +08:00
retro-wertz
119e1f5c99 Libretro: Add core options for GB border and hardware overrides 2018-07-17 21:34:14 +08:00
retro-wertz
76ad84fd28 Opps, accidentally broke borders in standalone 2018-07-17 02:29:03 +08:00
retro-wertz
bf447bf89a Libretro: Add GB/GBC core
Gb,gbc and sgb enhanced version of roms and savestates working. Bios loading for gb/gbc works too. No save ram / battery handling yet.

Fix offset and pitch issues with vba rendering and when borders are enabled.
2018-07-17 01:55:19 +08:00
retro-wertz
f05a05e622 Libretro: Refactoring for adding GB/GBC core 2018-07-15 17:53:44 +08:00
retro-wertz
0e60c34ab9 Fix this 2018-07-12 16:23:59 +08:00
Rafael Kitover
52f5a02b55 fix installdeps for Ubuntu 18
Read libglew version from apt-cache, as it varies between Ubuntu
releases.
2018-07-10 04:44:38 -07:00
Rafael Kitover
cc43db35af fix installdeps for Ubuntu
Read names of sfml libs from apt-cache, because version suffixes differ
between Ubuntu releases.
2018-07-10 11:10:25 +00:00
Zach Bacon
3f903cf0e4 Merge pull request #278 from retro-wertz/patch-4
Libretro: Bump version number
2018-07-06 11:10:04 -04:00
retro-wertz
02e5f0bdce Libretro: Bump version number 2018-07-06 22:47:41 +08:00
retro-wertz
fc42f88bd7 GB: Fix SIO related issue 2018-07-06 04:23:58 -07:00
Rafael Kitover
a8d0508cf2 use GetWindow()->Refresh() in Wayland only
Some people are reporting stuttering, and @retro-wertz tested both
DrawArea() and Refresh() on wxgtk3 under xorg and found that the
Refresh() method produces more stuttering.

Change the compile check for wxgtk2 to a runtime check for wayland, and
use Refresh() under Wayland only.
2018-07-02 18:32:18 -07:00
Rafael Kitover
459a1fbebb builder: fix ccache, mingw-cross
Update mingw cmake toolchain files to work-around a bug in cmake where
find_program() would return the current working directory instead of the
executable path if CMAKE_C_COMPILER and related are passed on the
command line.

Fix $CC/$CC_ORIG and $CXX/$CXX_ORIG handling for the core and
mingw-cross (_ORIG is without ccache.)
2018-07-01 22:18:59 -04:00
Rafael Kitover
f937aa72f5 builder: disable ccache for openssl
ccache can apparently cause issues when building openssl, as I've
noticed on Mac OS 10.13, save the original values of $CC and $CXX and
pass them to make when building openssl.
2018-06-30 15:48:58 -07:00
ZachBacon
7aa5d9398e update changelog for new release 2018-06-30 17:28:46 -04:00
retro-wertz
9146f878d5 Cleanup 2018-06-30 12:15:08 -07:00
retro-wertz
88a19f7c07 Libretro: Add entries for games using 8KB eeprom 2018-06-30 12:15:08 -07:00
retro-wertz
daf50fcdbe Libretro: Remove workaround for save file handling
For the most part, save types should now be identified during rom loading and then allow libretro to correctly use flash or eeprom save types and save size.
2018-06-30 12:15:08 -07:00
retro-wertz
c1f281b7ba Libretro: Better auto detection of save types when not found in gbaover 2018-06-30 12:15:08 -07:00
retro-wertz
7337341166 Libretro: Set input descriptors to each retropad mapping options 2018-06-30 12:15:08 -07:00
Rafael Kitover
68028b503b minor fix for mingw cross build
Fix regex that changes the command to rebuild freetype with harfbuzz for
cross building, as previous commit fixed that command.
2018-06-30 07:50:05 -04:00
Rafael Kitover
498019a39b support older 32 bit macs running 10.7, fix build
Make mac builder use -m32 in CFLAGS etc. to produce a 32 bit binary
targetting 10.7 (Lion.) This provides the greatest backward
compatibility for older macs, and also allows for asm filters.

Fix an issue with m4 on 10.13 using a patch from macports.

Support `-pX` patch level args in DIST_PATCHES in builder.

Fix an issue with bison on 10.13 by bumping the version to 3.0.5.

Build libxslt `--without-crypto` so that it doesn't try to link the brew
libgcrypt.

Invoke cmake for dists with -DCMAKE_C_COMPILER_LAUNCHER=ccache and
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache to use ccache, and set
CMAKE_C_COMPILER and CMAKE_CXX_COMPILER to the actual compilers not
prefixed by ccache.

When checking for ccache in vbam cmake code, check that
CMAKE_CXX_COMPILER_LAUNCHER and CMAKE_C_COMPILER_LAUNCHER were not
already defined (generally on the command line.)

Remove align attributes from sections in 2xSaImmx.asm, macho format on
mac does not support this and the filter works fine without them.

In the Quartz2D renderer, pass the NSRect view.bounds through
NSRectToCGRect when calling CGContextDrawImage(), this is necessary for
the 32 bit API.

Bump openssl to 1.0.2o.

Bump libxml2 to 2.9.8.

Update URL for urw fonts, and improve the dist downloading/unpacking
code to handle URLs that do not contain the filename (for .tar.gz and
.zip as identified by `file`.)

Change post-build for harfbuzz from `rebuild_dist freetype;` to
`rebuild_dist freetype --with-harfbuzz=yes;` as it was supposed to have
been.

Build cmake itself with --parallel and --enable-ccache.

Silence errors from killed jobs due to tmp directory being gone.

Write a couple of string functions, rtrim() and gsub().

Make path_exists() handle globs with spaces in them, by escaping the
space.

Use --host and --build args to autoconf configure to "cross-compile" for
32 bits, this is necessary for some dists, and does not work for others,
remove it for dists where it does not work.

Add COMMAND_MODE=unix2003 to the build environment, this is necessary to
fix some build errors, why I have no clue, found it on stackoverflow.

Pass -Wl,-no_compact_unwind in LDFLAGS to openssl, this is necessary for
32 bits.

Force sfml to compile as 32 bit, it normally does not allow this.

Remove shared-mime-info from this build, it's not necessary for anything
and there are issues XML::Parser linked to our expat and brew perl that
need to be resolved.
2018-06-30 03:40:47 -07:00
Rafael Kitover
6b4862581e fix some ELF parsing vulnerabilities #255
Implement the recommendations described in issue #255 by @zzazzdzz:

- Check bounds when reading ELF program header sections.

- Skip reading ELF section headers if the string table pointer is NULL.

- Increase the buffer size for dissassembled instructions in the
  dissassembly view and pass the buffer size to the disArm() and
  disThumb() functions so that rudimentary bounds checking can be done.

Also add the constants WORK_RAM_SIZE and ROM_SIZE to reduce incidence of
magic numbers and make the code a bit cleaner.
2018-06-29 08:17:13 -07:00
Rafael Kitover
c63d364058 travis: add job for libretro module
Add a job to test compiling the libretro module to the matrix.
2018-06-28 20:51:13 -07:00
retro-wertz
ef8c89fce0 Libretro: Do not compile arm disassembly module
fix compile issue in windows
2018-06-28 15:15:18 -07:00
Rafael Kitover
63431916a7 fix 2 broken URLs in builder script
The libxslt and urw URLs were broken, replace them with working ones.
2018-06-27 14:36:34 -07:00
Rafael Kitover
48af3829aa travis: move cache key for ccache into jobs
Move the `cache: directories: "$HOME/.ccache"` key from the top of the
file into each specific job, otherwise it does not seem to have an
effect as a global option.
2018-06-27 14:13:23 -07:00
ZachBacon
21b718b837 Add Coverity Badge 2018-06-26 22:26:50 -04:00
Rafael Kitover
8778837c83 add Travis CI support
Use a matrix of 4 jobs, linux (ubuntu trusty), mingw i686, mingw x86-64
and mac.

Automatically detect ccache in the cmake config and cache the
`~/.ccache` directory for faster rebuilds.

Instructions for ccache in cmake are here:
https://stackoverflow.com/a/24305849

Change build status badge in README.md to Travis.
2018-06-26 19:15:22 -07:00
Rafael Kitover
fde9d731a8 installdeps: add ccache to list of deps
Add ccache to list of deps for all platforms.
2018-06-27 02:06:28 +00:00
Rafael Kitover
77a3673d04 installdeps: install wx-common for mxe for wxrc
When cross building for win32, native wxrc is needed to generate xrc
files, add wx-common to mxe dependencies which provides it.
2018-06-27 01:58:33 +00:00
Rafael Kitover
90188e8875 installdeps: fix build instructions for mxe
Change cmake executable prefix from `x86-64` to the correct `x86_64` for
the 64 bit architecture.
2018-06-27 01:49:26 +00:00
Rafael Kitover
816aab9939 fix installdeps for ubuntu:trusty
Add some dependencies for the linux build that apt errors out on,
hopefully this won't affect newer ubuntu or debian.

Do an apt-get update before trying to install mxe dependencies for win32
cross builds, or the packages cannot be found.
2018-06-27 01:38:43 +00:00
Rafael Kitover
e4923e7267 fix save dialogs on Mac #268
In MainFrame::ShowModal, which is used as a wrapper for
wxDialog::ShowModal to also pause emulation, add the current window
style flags to the additional CAPTION and RESIZE_BORDER flags being set
with SetWindowStyle(), otherwise the other style flags of the window are
reset causing erroneous behavior such as save dialogs appearing as open
dialogs on Mac.
2018-06-26 04:38:38 -07:00
Rafael Kitover
66a50e35da note how to reset config in windows in README.md
Add a note at the top of README.md for windows users on how to find the
config directory and delete it.
2018-06-23 13:45:35 -07:00
Rafael Kitover
ed00dc77a9 use GetWindow()->Refresh() on non-GTK too #260
Default to GetWindow()->Refresh() to draw the game area on non-GTK
platforms as well, and only use the DrawArea(dc) method in GTK2 and
lower.
2018-06-18 10:20:29 -07:00
Rafael Kitover
89228b0697 fix high CPU usage under wxgtk2 #260
When using GTK2, call DrawArea(dc) instead of GetWindow()->Refresh(),
this prevents glib from using huge amounts of CPU (as discovered by
@retro-wertz .)

Switching video drivers sometimes crashes the app, the DrawArea() call
is as safe as possible, the problem is elsewhere.
2018-06-18 10:11:14 -07:00
Rafael Kitover
d160321811 fix $ENV{WX_CONFIG} check yet again
The expansion must be quoted as "$ENV{WX_CONFIG}" when passed as a
parameter e.g. to if() otherwise it expands to no parameter when empty.
2018-06-18 08:29:14 -07:00
Rafael Kitover
0489756d4c fix $ENV{WX_CONFIG} check in 46f52941
Apparently in cmake empty env vars do not evaluate to false, use
explicit STREQUAL "".
2018-06-18 04:11:35 -07:00
Rafael Kitover
46f5294129 do not prefer wxgtk3 if $ENV{WX_CONFIG} is set
Skip the check for wx-config-gtk3 if the WX_CONFIG environment variable
is set, indicating that the user wants to override the version of wx to
build against.
2018-06-18 04:04:47 -07:00
Rafael Kitover
437b366e39 clean up wxgtk3 finding cmake code
Use a loop to check for wx-config-gtk4 then wx-config-gtk3 and unset the
config executable variable otherwise.

Also remove gl from the initial wx libraries list.
2018-06-18 03:46:30 -07:00
Rafael Kitover
2efcb620bd support and default to wxgtk3 not gtk2 on arch
Change installdeps to install wxgtk3 on arch instead of the wxgtk
package which uses gtk2.

Update the cmake code to check for the renamed wx-config executable
wx-config-gtk3 on arch, first checking for wx-config-gtk4 for the
future.
2018-06-18 02:44:19 -07:00
Rafael Kitover
430b5d638d fix Mac OS 10.13 build issues
Compile out the min/max functions in GBALink.cpp when compiling with
clang, clang does not like them because of some sort of changes in the
preprocessor.

Run the mac builder script with homebrew bash, system bash does not work
and dash no longer works.

TODO: fix dash compat
2018-06-17 16:01:40 -07:00
Zach Bacon
9222894cc4 Merge pull request #263 from retro-wertz/patch-2
Add couple of file ext on .gitignore
2018-06-16 10:25:05 -04:00
retro-wertz
02e1f49a7c Add couple of file ext on .gitignore 2018-06-16 21:46:01 +08:00
Zach Bacon
fad1dd15cd Merge pull request #262 from retro-wertz/libretro
Libretro
2018-06-16 07:43:29 -04:00
retro-wertz
9c85991773 Opps 2018-06-16 16:47:44 +08:00
retro-wertz
009c09ef4a GBA: Show log when rom uses SRAM of FLASH save types
Log should only show once during the first write to SRAM or FLASH address using flashSaveDecide()
2018-06-16 15:59:53 +08:00
retro-wertz
90bc79f299 Libretro: implement vbam logging using libretro logging api 2018-06-16 15:55:26 +08:00
retro-wertz
f4b88ba63a Libretro: Remove GBA LCD filter
Libretro use shaders for filters etc.
2018-06-16 15:53:20 +08:00
retro-wertz
76389d8e94 RTC: Change this #ifdef to GBA_LOGGING 2018-06-16 15:17:12 +08:00
retro-wertz
710d2f3ebf UtilRetro: Remove LCD filter 2018-06-16 15:08:04 +08:00
retro-wertz
e0fe836516 Makefile: Add option for sanitizer, add -DNO_DEBUGGER 2018-06-16 15:02:27 +08:00
retro-wertz
94d076760d Makefile: Remove sources we dont need 2018-06-16 15:00:47 +08:00
retro-wertz
50e91f7973 Remove unrelated function during rom load 2018-06-15 13:07:22 -04:00
retro-wertz
3c0e88bcdf Remove wrong #ifdef decleration
#ifdef __libretro__ is incorrect and function has worked fine without it.
2018-06-15 13:07:22 -04:00
retro-wertz
3791b0a07f Libretro: Fix samplerate not passed correctly to gba core 2018-06-14 12:16:37 -04:00
retro-wertz
3385be2578 Silence some warnings 2018-06-14 11:48:35 -04:00
retro-wertz
4d4819f055 Libretro: Add core options for Sound Interpolation and Filtering 2018-06-14 11:48:35 -04:00
retro-wertz
94f1102395 Libretro: Add core option to mute sound channels 2018-06-14 11:48:35 -04:00
Zach Bacon
5a4c788dad Merge pull request #256 from retro-wertz/patch-1
Set mirroringEnable to false
2018-06-14 08:28:27 -04:00
retro-wertz
bdb164bd1c Set mirroringEnable to false
Set mirroring to false when rom loaded is not found in database. Making this true all the time causes some issue, for one with soft-patching some games.

Fix this https://github.com/visualboyadvance-m/visualboyadvance-m/issues/182
2018-06-14 20:04:20 +08:00
Zach Bacon
0047fa1a69 Merge pull request #253 from retro-wertz/libretro
Libretro Updates
2018-06-14 06:08:12 -04:00
retro-wertz
17b681b864 ereader.cpp: Silence warning 2018-06-13 22:54:07 +08:00
retro-wertz
27fa30b43c Libretro: Disable cheats by default, update to bios loading
Minor rework on how bios is loaded when CPUInit is called, removes a few conditions.

Disable cheats by default. This is automatically re-enabled when enabling and applying cheats. Should save a few cycles during runtime if cheats are not needed.
2018-06-13 22:49:26 +08:00
retro-wertz
01c5f465fe Libretro: Cleanup controller layout binds 2018-06-13 22:39:25 +08:00
retro-wertz
319a4869c7 Libretro: Do not allow opposing directions 2018-06-13 21:19:59 +08:00
U-DESKTOP-UVBJEGH\Cloud
2c46522e59 Libretro: Add Solar Sensor 2018-06-11 16:46:17 +08:00
ZachBacon
037e3771b1 let's place these in the correct spot shall we? 2018-06-10 12:37:28 -04:00
ZachBacon
90d2f5c808 Added retro-wertz for his contributions in bringing in libretro back to speed and other things
Signed-off-by: ZachBacon <zachbacon@budgiemedia.rocks>
2018-06-09 12:04:42 -04:00
Zach Bacon
03bc7c247e Merge pull request #249 from retro-wertz/updates
GB: Fix sound options not working
2018-06-09 10:08:14 -04:00
retro-wertz
991fc74922 Do this for GBA sound enhancements too 2018-06-09 21:42:04 +08:00
retro-wertz
4e4424e806 GB: Fix sound options not working
Fix crash when adjusting echo/stereo sliders.

Fix enhancements not working when selected

Fix settings not loaded at startup

Reviews and/or modifications are welcome. Obviously, im trying out if I understand how options are linked in WX so I am not quite sure if this is the right thing to do this.
2018-06-09 21:08:20 +08:00
Rafael Kitover
abb62df6f3 pause on menu pulldown on windows only (FIXED)
Previous commit had an #ifndef when what was needed was an #ifdef.
2018-06-08 17:24:23 -04:00
Rafael Kitover
cb3e9e3252 pause on menu pulldown on windows only
On Windows we still need to pause on menu pulldown until we figure out
how to keep the game running, with the code disabled it still pauses and
the audio loops.
2018-06-08 13:58:19 -04:00
Zach Bacon
1115be1284 Merge pull request #248 from retro-wertz/updates
Updates to gfxDrawTextScreen() and Cleanup
2018-06-08 11:44:16 -04:00
U-DESKTOP-UVBJEGH\Cloud
bc0e169d23 Add missing file 2018-06-08 23:05:23 +08:00
retro-wertz
edf939e96b Gfx: Add #ifdef _MSC_VER, fix tiled rendering on windows
This only affects when using TILED_RENDERING
2018-06-08 21:21:57 +08:00
retro-wertz
57dc0c25ff Move gfxDrawTextScreen() into GBAGfx.cpp 2018-06-08 20:56:39 +08:00
retro-wertz
27aeb6dc67 Re-add Types.h, remove some more #ifdef 2018-06-08 20:14:45 +08:00
U-DESKTOP-UVBJEGH\Cloud
9ec142daa8 Add header guard 2018-06-08 17:45:10 +08:00
Rafael Kitover
7a194fb224 do not pause games when menus are pulled down
Previously I disabled this for mac because of bugs in keyboard handling,
but it turns out most people don't like the game pausing on menu
pulldown anyway, so now I disable it for all platforms.

TODO: the game still pauses for modal dialogs.
2018-06-08 04:14:34 -04:00
ZachBacon
6e18c3c2d4 exclude headers for now 2018-06-06 07:05:18 -04:00
Rafael Kitover
947cd10e2f minor OSD code cleanup
Use strdup instead of a stack variable + strncpy to convert the osd
wxString message to a C string, hopefully fixes an MSVC incompatiblity.
2018-06-06 06:57:34 -04:00
Rafael Kitover
0dc3e06c99 update installdeps for opensuse
ID_LIKE in /etc/os-release changed from "suse" to "opensuse suse",
change to match *suse* in the string.
2018-06-06 06:47:56 -04:00
ZachBacon
cafe905b6d Fix a cast for msvc compilers 2018-06-06 04:44:05 -04:00
Zach Bacon
07bc2ee4cb Merge pull request #246 from retro-wertz/libretro
libretro: Cleanup some #ifdefs
2018-06-06 04:32:08 -04:00
retro-wertz
1606ea7482 libretro: Cleanup some #ifdefs 2018-06-06 16:20:32 +08:00
Zach Bacon
1d4dacc6f9 Merge pull request #244 from retro-wertz/fix_gba_cheats
Fix cheats not working in GBA
2018-06-05 21:50:22 -04:00
retro-wertz
e2dff89dec Fix cheats not working in GBA 2018-06-06 09:35:23 +08:00
Zach Bacon
a3510c906e Merge pull request #243 from retro-wertz/fix_opcode
Fix some opcodes in arm
2018-06-05 21:34:54 -04:00
retro-wertz
9ab2ee6730 Fix some opcodes in arm 2018-06-06 07:48:18 +08:00
Zach Bacon
a5e717a284 add brace so it doesn't break compilation
Phone editing is a no, but I didn't want to break compilation.
2018-06-05 11:14:47 -04:00
ZachBacon
4a615ab395 Gonna take my time and actually work on a D3D9 panel. Documentation here I come. 2018-06-05 10:13:41 -04:00
Zach Bacon
fdb39a1c8f Merge pull request #242 from retro-wertz/fix_alignments
Fix some formatting alignments in arm/thumb opcodes
2018-06-05 07:00:18 -04:00
retro-wertz
26c8c61b88 Fix some formatting alignments in arm/thumb opcodes 2018-06-05 18:43:32 +08:00
Zach Bacon
7c3d8d0298 Merge pull request #241 from retro-wertz/libretro
libretro: Fix save types not properly set using overrides
2018-06-04 20:54:19 -04:00
retro-wertz
8edd4ce5de libretro: Fix save types not properly set using overrides 2018-06-05 08:23:19 +08:00
Zach Bacon
893269d897 Merge pull request #239 from retro-wertz/libretro
Update Libretro port
2018-06-04 12:36:32 -04:00
retro-wertz
3411aa33a4 libretro: Use stdint.h instead in most cases 2018-06-05 00:14:06 +08:00
retro-wertz
1f20ba81ad libretro: Update 2018-06-04 23:55:08 +08:00
retro-wertz
b0982ac8e1 Always apply map masks
fixes libretro issue where loading rom will only show white screen
2018-06-04 18:12:02 +08:00
retro-wertz
ff4f1235aa libretro: Fix wrong file pointer 2018-06-04 18:03:33 +08:00
retro-wertz
8f6e5de50a libretro: Fix error : narrowing conversion 2018-06-04 18:01:58 +08:00
retro-wertz
8a1fd58783 libretro: Add header guard to UtilRetro.h 2018-06-04 17:59:29 +08:00
Rafael Kitover
85dea8a57b add cygwin cross build support
Put shared code for linux cross builds and cygwin cross builds into
builder/mingw-cross.sh .

Call wxrc when the build platform is cygwin with files resolved via
`cygpath -m` in case the wxrc is a native binary.

Add -fpermissive to CXX/OBJCXX flags.

Reenable libzvbi support for ffmpeg.

Stop building ffmpeg and related dists by default until we fix game
recording.

Set CMAKE_PREFIX_PATH in cmake args as a FILEPATH type variable.

Support xml catalog made with native libxml2 using cygpath in related
commands, make cygpath a noop on non-cygwin platforms.

Remove gdb and zip from msys2 deps.

Add a cygwin installdeps routine using a copy of cyg-apt that it
fetches.

When creating symlinks in install_dist() fully resolve all symlinks in
path parts for the source file, so that host and target binaries are
correctly linked.

When cp -af fails to preserve permission related data, fall back to cp
-rf.

When installing libs with a cross suffix, make a symlink for the lib
without the cross suffix.

Make sure cygwin runs with CYGWIN=winsymlinks:native .

Add paths to host gettext executables to cmake args, otherwise it tries
to use the target executables and fails on paths.

For the pkgconfig bundled glib, turn off win32 platform for the cygwin
host build.

For gettext, remove --disable-auto-import from link flags.

Compile target freetype on cygwin with cmake and manually install the
pkgconfig .pc file using sed.

Add a relocation type 'aggressive', when a dist is marked with this
type, rewrite all '/usr' prefixes to the build root. By default only
files that exist in the dist are matched and rewritten.

Fix regression in linux build by adding some iconv related flags to the
cmake invocation for doxygen and disabling -Werror for xorg dists.

When relocating scripts, use the actual resolved root path for host or
target.

Build libxslt --without-python so that it doesn't try to pick up the
msys2 python.

Other misc. minor tweaks and cleanups.
2018-05-01 04:11:57 -04:00
Rafael Kitover
8638c76923 require pkg-config in cmake for gtk checks #227
cmake reconfigure was failing for the gtk2 case because the pkg-config
cmake code was not being loaded.

Load pkg-config cmake code before any gtk checks.
2018-04-26 17:09:21 -04:00
Rafael Kitover
60f2bd3fd9 remove ffmpeg from suse installdeps
ffmpeg requires the packman repo, and there's no simple way to enable
the repo for any version of opensuse.
2018-04-26 17:08:16 -04:00
ZachBacon
9933b6bb7e if cross compiling openssl, need to add --cross-compile-prefix=- 2018-04-20 20:39:19 -04:00
Rafael Kitover
55caf62e01 win cross script: pass RANLIB to openssl make
Pass RANLIB=${prefix}-ranlib to openssl for the linux mingw cross
compile script.
2018-04-20 16:40:03 -04:00
Rafael Kitover
9cd26b255f windows cross build script: use autoconf for bzip2
When cross compiling bzip2, it may use host tools such as ranlib instead
of the cross tools.

Apply the msys2 autotools patch to the cross bzip2 and move it to after
automake in the chain.
2018-04-20 15:49:18 -04:00
Rafael Kitover
d5f90f0a05 fix SDL sound on windows
In SoundSDL, when building on windows add this init code:

```
SDL_setenv("SDL_AUDIODRIVER", "directsound", true);
```

Otherwise there is no sound on windows.

Also update SDL to 2.0.8 from 2.0.7 in build scripts.
2018-04-16 13:10:12 -04:00
Rafael Kitover
fe9f06414d fix msys2 builder script
- add python2 for msys to list of core deps and link it to root/bin,
  harfbuzz requires python to build

- fix double eval in build_project()

- remove duplicates from list of host-only and host/target dists in
  mingw.sh

- fix msys2-builder startup, and assume 64 bit build if MSYSTEM = MSYS

- make sure MSYS has winsymlinks:nativestrict on startup, the user has
  to turn off UAC

- update patch for infozip zip to fix a #define

Overall, the script is far too slow to be practical.

TODO: build both python and perl for the host to not rely on system
versions
2018-04-16 12:01:21 -04:00
Rafael Kitover
70c8dee8bf cmake: default ENABLE_OPENAL to OFF
Since the SDL sound driver is now the default on all platforms, change
the ENABLE_OPENAL default in cmake to OFF.
2018-04-13 12:31:07 -04:00
Eleuin
d992cfa214 Finalize vertical draw fixes and code cleanup
Fix shenanigans
2018-04-04 14:33:20 -04:00
Lucas
62e8098f5b Fix forbidden conversion in remote.cpp
Conversion from std::string to char* is forbidden in ISO C++.
2018-04-03 16:00:45 -04:00
Zach Bacon
edb2fd2601 Merge pull request #214 from Eleuin/name-fixes
Fix cmake directory in installdeps
2018-04-02 12:23:11 -04:00
Eleuin
9843af2b5a Fix cmake directory in installdeps 2018-04-02 09:29:32 -04:00
Eleuin
80bcdab924 Fix draw height across rendering modes 2018-03-22 21:00:11 -04:00
Rafael Kitover
f3f6ee7b1c fix compile errors with ffmpeg git
The FF_MIN_BUFFER_SIZE macro was renamed to AV_INPUT_BUFFER_MIN_SIZE at
some point, so check for the newer variant first.

The AVFMT_RAWPICTURE macro seems to be gone, but affected code was an
edge-case so compile it out if the macro is not present.
2018-03-19 19:36:00 -04:00
Rafael Kitover
5ae853a905 fix installdeps for OpenSUSE
Fix syntax error (calling functions from the wrong script) and add
openal-soft-devel to deps.
2018-03-19 02:52:53 -04:00
Rafael Kitover
8540860ab8 adjust changelog version regex for cur. version
Allow matching text after version and before date.

Matches current version 2.0.2 .
2018-03-17 12:32:27 -04:00
Zach Bacon
61e2f3b284 Merge pull request #204 from Eleuin/filter-bounds-fix
Fixed filter draw bounds
2018-03-15 10:15:54 -04:00
Eleuin
d7a4eddb3c Fixed filter draw bounds 2018-03-15 10:00:26 -04:00
ZachBacon
92ba676632 update changelog for 2.0.2 release
Signed-off-by: ZachBacon <zachbacon@budgiemedia.rocks>
2018-03-13 23:49:17 -04:00
Rafael Kitover
d5c9c6bac7 change default audio driver to SDL
A Linux user (Eleuin) has reported menu lockups with the default OpenAL
(probably thread related) and no lockups with SDL.

A Windows user has reported popping noises with all audio drivers except
SDL (#178).

Change the audio driver default to SDL for the time being until these
issues can be looked into.
2018-02-28 17:53:55 -05:00
Eleuin
480541a205 Modify max_threads sanity check to better handle erroneous values 2018-02-28 17:18:52 -05:00
ZachBacon
c7c6ad6a87 implemented the fix from nhdailey, should resolve #153. Will put up a
test build soon.
2018-02-25 13:38:25 -05:00
Rafael Kitover
66980934b2 add multi-platform build system
under `tools/` add some scripts to invoke the build system to build all
deps for vbam and vbam itself:

- `tools/linux/builder`

This builds a mostly static linux binary with a few dynamic deps for
xorg and wayland. Using gtk3. This will run on just about any dist.

- `tools/osx/builder`

Builds a static mac app targetting 10.7.

- `tools/win/linux-cross-builder`

Builds a static windows binary using the mingw-w64 toolchain.

- `tools/win/msys2-builder`

Builds a static windows binary in the MSYS2 environment, this may be
suffering from a few regressions.

Change some cmake code to support the build system, refactor a few
things in it.
2018-02-24 14:39:29 -05:00
orbea
3e052c943d cmake: Fix -DENABLE_FFMPEG=OFF 2018-01-18 13:18:35 -08:00
Rafael Kitover
df0bd439fb fix deps submodule init on windows
`git submodule update --remote --recursive` must be called with `--init`
if the submodules have never been initialized, add the flag to the cmake
code that does this. If they are already initialized, it will not cause
any harm.
2017-10-25 06:25:29 -07:00
Rafael Kitover
420450255c mac build/builder improvements
Improve, refactor and clean up `tools/osx/builder` to build a relatively
full-featured ffmpeg as well. This requires lots of other dists. It's
kind of like a mini port system now. Will generalize it shortly to a
sourced library for using with both the mac and the mingw builds. Will
hopefully become a separate repo on github at some point.

Add perl dist support to the builder.

Add an `--env` flag to the builder to print the build environment
variables so that they can be read in with `eval` for debugging
purposes.

Also add the `FFMPEG_STATIC` cmake option to link static ffmpeg
libraries correctly.

Move the codesigning and zipping of the `.app` bundle to the builder
script and out of cmake, as this is something most users don't need.
2017-10-22 15:35:56 -07:00
ZachBacon
f527d0a2a3 The not so finished builder script for windows. 2017-10-22 08:29:22 -04:00
Zach Bacon
7dca06979b Added some windows specific stuff to builder.
Still have much more to do.
2017-10-22 00:41:27 -04:00
Zach Bacon
c3fc4e7edf Added basic windows script 2017-10-21 23:25:12 -04:00
Rafael Kitover
21926d6230 add -mfpmath=sse -msse2 compiler flags: x86/amd64
This may speed things up a little in some places, or maybe not, but
should be safe as few if any users are likely to be using a CPU without
SSE2.
2017-10-17 10:26:37 -07:00
Rafael Kitover
afb1cd3dfc automate codesign/zip for mac build, add xz dep
Add POST_BUILD commands on Mac to codesign the `.app` and make a zip
file from it.

Also add xz/liblzma dist to `tools/osx/builder` because something
apparently wants liblzma.
2017-10-12 14:56:21 -07:00
Rafael Kitover
5e633984b8 mac builder refactor/improvements
Refactor the code in `tools/osx/builder` somewhat and make it cleaner.

Move a few table processing loops into functions to make things less
ugly.

Delete dists not listed in the table (e.g. when they are updated) and
when a dist is re-downloaded, delete the tree and the target file to
force a rebuild.

Use number version for gettext instead of `-latest`.

Specify full dist target, e.g. `lib/libfoo.a` instead of just
`libfoo.a`.
2017-10-12 14:31:23 -07:00
Rafael Kitover
d7ff2afb80 add mac release builder script
Add `tools/osx/builder`, a POSIX sh script to build all dependant
libraries as static, targetted to OS X 10.7, and build the project with
them (also targetted to OS X 10.7.)

ffmpeg currently does not link, as recording functionality is currently
non-functional anyway, this will be fixed later.

MISC:

- set WORKING_DIRECTORY and ERROR_QUIET for all git commands, for the
  cases when the build directory is not under the git checkout

- #include <cerrno> in ConfigManager.cpp as it uses errno

- change `build*` in `.gitignore` to `build/*` so that files starting
  with "build" are not affected
2017-10-12 01:32:18 -07:00
Rafael Kitover
46486381f0 read version info from CHANGELOG.md if no git
If git tags are not available, set the version and revision by finding
the first version tag in `CHANGELOG.md` of the form

```
```

Where N.N.N is the number version (number of components can vary) and
the revision (as speicified by -REV) is optional.

TODO: support named revision without a version number of the form
`[REV]`.
2017-10-11 19:17:25 -07:00
Zach Bacon
30b6ecf1a5 Add a changelog
Gonna try and keep this up to date as often as possible.
2017-10-12 00:49:05 +00:00
Rafael Kitover
55fa9c69c0 refactor/cleanup GitTagVersion.cmake
Run just one `git tag` command instead of two (with tags and refs) and
break it into the form [tag0, ref0, tag1, ref1, ...]. Iterate over the
list with two counters for tag and ref.
2017-10-10 03:15:53 -07:00
Rafael Kitover
52439cee0e fix error and version info in shallow git clones
Fix `cmake/GitTagVersion.cmake` to not throw errors when in a shallow
git clone, or any git clone that has no tags.

And when either git or git tag version info is not available, set the
version variables to the defaults, which are:

```
VERSION         = '2.0.0'
REVISION        = 'unknown'
VERSION_RELEASE = 0
```
2017-10-07 18:17:52 -07:00
Rafael Kitover
f5379ab806 read version and subversion info from Git
To get the version, find the last tag in git tag of the form "v2.0.0" or
"2.0.0". If this is the last tag and the current commit matches the ref
of this tag, the revision will be empty.

In the case that the current commit is not tagged with a version, to get
the revision, use the short sha unless the current commit is tagged with
something that is not a version string, e.g.  "feature-foo", in which
case the revision will be "feature-foo".

If the current commit is tagged as e.g. "v2.0.1-foo" or "2.0.1-foo" then
the version will be "2.0.1" and the revision will be "foo". Tags of this
form are also checked when finding the current version.

This is all done in cmake. If there is no git detected, the version will
be "2.0.0" and the revision will be "unknown".
2017-10-07 14:00:47 -07:00
Rafael Kitover
9c06c31814 deps: don't check result of apt-get update #154
On Debian-based distributions, people sometimes have bad sources in apt,
e.g. PPAs that no longer exist, or mirrors that no longer work, etc.. In
these cases, `apt-get update` will still likely fetch the main
distribution package lists, which is what we need, but return a non-zero
exit code.

Change `./installdeps` to not abort on non-zero exit status from
`apt-get -qq update`.
2017-10-05 18:28:42 -07:00
Rafael Kitover
1fc0966384 minor code cleanup
Change one instance of a dummy local variable to a C++11 temporary via
CLASS{param}.
2017-09-23 15:29:35 -07:00
Rafael Kitover
f069f0c02d default LTO to OFF on 64 bit MinGW
64 bit MinGW (e.g. msys2 64 bit) produces a binary that immediately
segfaults when built with LTO.

Make ENABLE_LTO default to OFF on 64 bit MinGW (32 bit will still
default to ON.)
2017-09-22 00:42:49 -07:00
ZachBacon
75ef0aa26d Added executable extension
* Allows the SDL binary to be installed if it's cross compiled from
within linux or macOS for windows for packaging purposes.
2017-09-22 02:46:20 -04:00
Rafael Kitover
e9a86c541d fix deadlock in SoundSDL::deinit() #139 #130
On SoundSDL destructor and `reset()`, there was a deadlock with Linux
pthreads, it happened sometimes that the reader thread would call
`SDL_SemWait(data_available)` while `deinit()` would destroy the
semaphore and the `SDL_SemWait()` would end up waiting forever on a null
semaphore.

Change the sequencing of deinit() to prevent this from happening, set
`initialized = false` at the beginning of the sequence to prevent
subsequent entries into the reader callback, and add an SDL_Delay(100)
between the final `SDL_SemPost()` and `SDL_UnlockMutex()`s and the
`SDL_DestroySemaphore()` and `SDL_DestroyMutex()`s to allow a running
reader to complete with a valid mutex and semaphores before they are
destroyed and the thread is joined.

Resetting the sound system also sometimes triggers a memory corruption
bug, but that's a separate issue.
2017-09-21 15:39:30 -07:00
Rafael Kitover
3d792457b2 fix huge app icon in Win volume settings #149 #121
We were setting the app icon based on the 256x256 xpm icon in the xrc,
and this triggered a bug where the app-specific icon in Windows volume
settings was huge:

https://stackoverflow.com/questions/17949693/windows-volume-mixer-icon-size-is-too-large/46310786#46310786

Adapt the code from that SO question to use Windows-specific code to
load and scale the icon appropriately using a Vista+ API, and fall back
to the normal Wx icon loading mechanism on XP.

Also generate a nice new `vbam.ico` Windows icon file based on the
`.svg` using the app from:

https://iconverticons.com
2017-09-19 16:28:23 -07:00
Rafael Kitover
de89bd0561 use num cpu cores to parallelize LTO link with gcc
Use the `cmake` `ProcessorCount` module to determine the number of CPU
threads, and set the `-flto` flag for gcc to `-flto=${num_cpus}` if the
number of CPU threads is detected and is greater than `1`.

clang does not support this.
2017-09-19 06:58:48 -07:00
Rafael Kitover
268c638456 improve win32 dependencies git submodule handling
Use `git submodule update --remote --recursive` instead of `git
submodule update --init --recursive` so that the latest version of the
repo is always installed.

Run the command from cmake instead of throwing an error if the submodule
is not checked out. Only throw an error if the checkout failed or the
source tree is not a git checkout.

Don't add the `mingw-xaudio` include directory if using MSVC.

Remove the submodule check from src/wx/CMakeLists.txt, having it in the
main CMakeLists.txt is enough.
2017-09-19 06:11:41 -07:00
Rafael Kitover
d3351a7575 remove doctoc title from README.md TOC
Remove the "generated with doctoc" title from the README.md table of
contents.

Need to run `doctoc --notitle`.
2017-09-18 01:02:33 -07:00
Rafael Kitover
42fb76bfcf update README.md
Note that LTO now defaults to ON, and ENABLE_ASM does not turn on
ENABLE_ASM_CORE.

Trim the wxLogDebug() section.

Titlecase headings.

Generate a TOC with `doctoc`.
2017-09-18 00:58:47 -07:00
Rafael Kitover
7f1fec88af work around gcc lto wrappers bug with gcc 7.x
gcc lto wrapper commands such as `gcc-ar` will segfault with some
versions of gcc 7.x when called via an absolute path, see:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80717

Generalize the mechanism for compiling a small C program on the host
(currently used for bin2c for Wx resources) and use it to wrap the gcc
wrappers in a little executable that prepends their dirname to PATH and
runs them with `execvp()`.

Make LTO default to ON again, except on win32 with gcc < 7, because
those toolchains produce broken binaries with LTO enabled.

Also add `-ffat-lto-objects` to compiler flags for gcc when LTO is
enabled, this will increase the chances that the LTO build will succeed
even if there are issues with the binutils wrappers. Clang does not
support this.
2017-09-16 19:47:39 -07:00
Rafael Kitover
b82cab14e2 rename CMakeScripts/ to cmake/
Most projects nowadays call the project specific cmake scripts directory
just `cmake/` and we will do so as well.
2017-09-13 20:30:33 -07:00
Rafael Kitover
02b3defcd0 restore wx 2.8 compat, improve string processing
Fix building with wx 2.8 by rewriting some more string related code.

Replace all calls to .c_str() with .mb_str().

Remove some of the .c_str()/.mb_str() calls where the target is already
wxString.

Move the split()/enum_idx() functions from opts.cpp into
str_split()/vec_find() in strutils.h/strutils.cpp for use in other
files.

Replace the C-style string parsing code in a couple of places in
wxvbam.cpp for processing possible command line options by splitting on
'='.

Also replace a couple of places that use pointer arithmetic in
widgets/joyedit.cpp and widgets/keyedit.cpp with wxString methods.
2017-09-13 05:32:44 -07:00
Rafael Kitover
fa9afa4e18 cmake: wx and cross compiling fixes
When calling find_package(wxWidgets ...) allow the first call to fail
because the OpenGL library may not be found. A subsequent call without
listing the OpenGL library is done with REQUIRED.

And if the OpenGL library is not found, skip the OpenGL compile test.

When cross-compiling (e.g. with mxe or other mingw packages) skip the wx
ABI compatibility run tests.

When choosing which minhook lib to link to the wx ABI compat run test
program, check for 64 bit but fallback to 32 bit just in case.
2017-09-12 15:31:49 -07:00
Rafael Kitover
5691ac0c0e installdeps: fedora fixes, including m32
Fix some syntax errors and extraneous output in fedora_installdeps().

"Fix" the 32 bit deps installer to try to ignore file conflicts between
i686 and host rpms, by first using rpm --force to install the 32 bit
rpms and then overwriting them with the host ones using --force as well.
This is hackish and fragile, but there aren't any good alternatives
right now.
2017-09-12 13:47:56 -07:00
Rafael Kitover
f5cb7b2b40 support Wx built with --enable-stl #134
When Wx is built with --enable-stl, wxString to wxChar*/char* implicit
conversions and vice-versa no longer work.

Change all wxChar* data members to wxString and change all pointer
arithmetic code (mostly in opts.cpp, cmdevents.cpp and
widgets/joyedit.cpp) to use wxString methods instead.

Also make mostly minor changes in various other files for all of this to
work.
2017-09-10 15:44:18 -07:00
Rafael Kitover
142dbc0aca cmake: use arch specific minhook trampoline libs
Use either the 32 bit or 64 bit MinHook trampoline static lib for the Wx
ABI tests, depending on the detected arch of the host/target.
2017-09-10 12:24:36 -07:00
Rafael Kitover
de95c70547 fix Wx ABI check for Win32/MinGW
Fix error dialog boxes popping up when the Wx ABI compat tests are run
from cmake.

Wx 3.x is hardcoded to use MessageBox for wxLogFatalError(), even in a
console app, so use the minhook trampoline lib (added to dependencies)
to hook the Win32 API MessageBoxW and MessageBoxA (the second just in
case) so that no error dialogs pop up.

Details here:

https://www.codeproject.com/Articles/44326/MinHook-The-Minimalistic-x-x-API-Hooking-Libra
2017-09-10 11:00:24 -07:00
Rafael Kitover
42f6c446ea minor improvements for Wx compile tests
Include `wx/wxprec.h` (precompiled header first in test programs to
possibly make the tests slightly faster.

For the ABI compat check, set a variable for the test program instead of
listing it twice.
2017-09-08 08:59:19 -07:00
Rafael Kitover
ceef480e70 improve wx GCC ABI check #142
Following some suggestions from @ArtiiP, first check if there are no
issues without an -fabi-version flag, and then instead of incrementing
from 0, decrement from 15 to find the highest working ABI version.

This is very slow if the needed ABI version is 2 for example, but not
much to do about that for the time being.
2017-09-04 12:28:24 -07:00
Rafael Kitover
b1937fe9cb improve Wx GCC ABI check #142
Start checking the ABI version at -fabi-version=0, which is the default,
and if that succeeds don't set the flag at all.

This will allow the code to work properly if and when Wx removes the ABI
check alltogether.
2017-09-02 18:52:01 -07:00
Rafael Kitover
4b1c9b4e86 installdeps: minor refactoring/cleanup
Break command line argument processing and OS detection off into
functions called from `main()`.

Remove all references to cairo.

For fink, install the SFML package I made instead of turning off link.
2017-09-02 03:59:31 -07:00
Rafael Kitover
2ad204619b compile/run test to detect Wx ABI version #142
In 4e665ae I hardcoded -fabi-version=2 for g++ flags, and @ArtiiP
pointed out that this is wrong, because Wx may be compiled with other
ABI versions.

Add cmake check_cxx_source_runs() tests to determine the correct ABI
version flag to use with Wx.
2017-09-01 21:51:24 -07:00
Rafael Kitover
4e665ae088 use -fabi-version=2 for GCC, turn off LTO #142
Use the g++ `-fabi-version=2` compiler option, as suggested by @ArtiiP
to fix problems similar to:

```
Fatal Error: Mismatch between the program and library build versions
detected.
The library used 3.0 (wchar_t,compiler with C++ ABI 1002,wx
containers,compatible with 2.8),
and your program used 3.0 (wchar_t,compiler with C++ ABI 1009,wx
containers,compatible with 2.8).
Aborted
```

Turn LTO off by default until I fix it for newer gcc/binutils, currently
with gcc7 ar segfaults linking vbamcore.
2017-09-01 05:06:26 -07:00
Rafael Kitover
1a27f81342 installdeps: use -j$(nproc) not -j8 in info #146
Replace the hardcoded `make -j8` command in the build instructions with
a `-j` parameter that is the number of the host's CPUs minus one.

Subtracting 1 is done to reduce chances of overloading the host.

If the value is `1`, then don't print the `-j` flag at all.
2017-08-31 16:56:06 -07:00
Rafael Kitover
8b2e8f87d4 only use -mtune=generic on x86/amd64 #146
This flags breaks the build on e.g. ARM, so only use it when a PC
architecture (x86 or amd64) has been detected. Thanks to ZachBacon for
spotting this.
2017-08-30 14:42:08 -07:00
Zach Bacon
350619be93 Merge branch 'master' of https://github.com/visualboyadvance-m/visualboyadvance-m 2017-08-27 22:02:03 -04:00
Zach Bacon
c6d8939304 Made a tiny, itty bitty, little accident. Forgot to remove cairo option
from the xrc.
2017-08-27 22:01:19 -04:00
Rafael Kitover
e0f79f32a5 remove version.h in ConfigManager and AutoBuild.h
ConfigManager does not use any version info, but is part of libvbamcore,
so removing the `#include` makes rebuilds after git changes much much
faster.

Remove the AutoBuild.h includes from ConfigManager.cpp and SDL.cpp (the
SDL port) because the information in that file does not seem to be used
and it also includes version.h, forcing those files to rebuild
unnecessarily.
2017-08-27 13:32:13 -07:00
Rafael Kitover
82d0b04a01 remove cairo references from README.md
Since Cairo was dropped in 1583a226, remove all references to it in
README.md .
2017-08-27 13:22:41 -07:00
Rafael Kitover
2179215a8b fix rebuilds on git changes
Use cmake to generate the version.h from version.h.in which is a cleaned
up version of the old version.h with the git short sha into the build
directory, and include the version.h from there.

Continue to use the GetGitRevisionDescription plugin to make the cmake
configuration state depend on the current sha of HEAD, but throw away
the results (for the time being.)

This makes rebuilds after git changes such as a commit only recompile a
couple of files instead of the whole tree.
2017-08-27 13:20:17 -07:00
Zach Bacon
23ed930de1 Say good bye to cairo 2017-08-27 13:32:32 -04:00
Zach Bacon
1583a226f4 *Removal of the cairo renderer, it never performed well to begin with. 2017-08-27 13:11:34 -04:00
Rafael Kitover
1a8f2f9886 "no throttle" fixes/cleanups
`throttle == 0` is supposed to emulate at full speed and drop audio
data, this is different from `throttle == 100` which is emulation
throttled at normal speed, the default setting.

Fix the recently rewritten SoundSDL sound driver to make `throttle == 0`
work, and make some minor changes to clean up the relevant code in the
XAudio2 sound driver.
2017-08-27 07:21:27 -07:00
Rafael Kitover
9bca4f7292 document how to provide symbolic backtraces
Add a "REPORTING CRASH BUGS" section to the README.md with instructions
for how to provide a symbolic backtrace on Linux and MSYS2.

Add a "Crash bugs" section the the issue template with a link to said
README.md section.
2017-08-17 14:25:27 -07:00
Rafael Kitover
1e3a85a34b cleanup SoundSDL #139 #130 #97 #67 #65 #46 #47
Rewrite SoundSDL (the SDL sound driver).

Clean up the code and eliminate all deadlocks/hangs/crashes (hopefully.)

Many of the deadlocks were caused by initialize() not de-initializing
properly and causing the audio callback thread to deadlock, fix this.

Also use better logic for the semaphore controls, which will also
hopefully increase audio quality.

Use better logic for the throttle control, with throttle == 0 being the
same as throttle == 100 and implement setThrottle().

Also increase the buffer size to 300ms and the number of samples to
2048, for hopefully less choppiness in audio overall.
2017-08-17 02:44:40 -07:00
Rafael Kitover
f88faef1b2 SoundSDL: write silence when paused #139
The SDL API documentation for the audio callback specifies that the
callback *MUST* write to the buffer and not just return:

https://wiki.libsdl.org/SDL_AudioSpec#Remarks

write silence to the buffer (value taken from the AudioSpec returned
from OpenAudioDevice) when the emulator is paused.
2017-08-16 15:20:05 -07:00
Rafael Kitover
4d7e102e26 hopefully fix resize artifacts on game panel #138
Paint the whole GameArea (containing the emulator graphics panel) black
on size events for both the GameArea and the panel.

This will hopefully fix reports of garbage around the panel when going
full screen with the OpenGL driver on Linux.
2017-08-16 04:02:12 -07:00
Rafael Kitover
346d97a760 remove default F11 keybinding for save state #137
Remove F11 as the default key for save state (GS=) in the defkeys array
in opts.cpp and leave it unmapped by default, because it conflicts with
the menu XRC mapping for full screen which is also F11 on non-macOS
platforms.
2017-08-16 03:36:18 -07:00
Rafael Kitover
5e9c9093c0 SoundSDL: lock conditional code cleanup
Move the `bool lock` condition used to wait for sound data to be
exhausted from two places in the code into the `bool should_wait()`
member function.
2017-08-16 03:20:10 -07:00
Rafael Kitover
03a20820cb temp fix for deadlocks in SoundSDL on pause #139
SDL_PauseAudioDevice seems to be causing thread deadlocks in combination
with Wx threads (e.g. on menu activation or modal dialogs.)

Remove these calls from SoundSDL::pause() and SoundSDL::resume() for the
time being so that deadlocks do not happen.

This effectively allows pausing, but on resume there is no sound for 2-3
seconds until the buffer is filled again.

This will need a proper fix at a later time.
2017-08-15 15:30:27 -07:00
Nicola Spanti (RyDroid)
2da2d9c41d Improving README 2017-08-14 15:28:52 -07:00
Rafael Kitover
fb15aed223 fix memory viewer xrc on wx 3.1+ #127
Remove the wxALIGN_CENTRE_VERTICAL flag from items that have the
wxEXPAND flag in the MemViewer.xrc because wx 3.1+ warns about the flags
being incompatible.
2017-08-09 03:03:56 -07:00
Rafael Kitover
1d0eece046 let cmake escape -D preproc. definitions
As cmake now warns when policies are set to OLD, change the CMP0005
policy to NEW.

What this does is have cmake escape -D preprocessor definitions passed
to e.g. add_definitions() starting in cmake 2.6 . This is fine since the
minimum cmake version we support is 2.8.12 . It also makes the code
cleaner since we don't have to escape quotes anymore ourselves. This
will also work better on different platforms, where different escapes
may be needed.

Remove all quote escapes from string params to add_definitions() for
this policy change to work.
2017-08-09 02:34:40 -07:00
Avindra Goolcharan
0bdbcf3188 SUSE Lint: fix a few classes of warnings #136
- drop unused variables

- unused-but-set-variable

- stray trailing comments

- in viewsupt.cpp replace redundant expression with variable that holds the same value
2017-08-08 20:05:38 -07:00
Avindra Goolcharan
dd91abf72e fix errors reported by SUSE's post-build linter
In StartRFUSocket() in gba/GBALink.cpp move a postincrement out of an
expression to a following statement, because the evaluation order is
undefined.

In GetDevices() in wx/openal.cpp replace an #else with an #endif so that
the function has a default return statement visible to the linter.

In FilterThread::Entry() add a `return 0;` (ExitCode) statement at the
end even though it is probably never reached.

In the TransferToWindow() for the positive double validator widget in
wx/widgets/wxmisc.cpp add a default `return true;`, for the rare case
there is no double value, in which case the string representation would
be displayed (since it is a subclass of wxGenericValidator(wxString&) .)
2017-08-07 20:31:08 -07:00
Rafael Kitover
d118c457b1 regenerate translation files
Run po/update_pot.sh and rebuild all .po files.
2017-08-03 23:33:30 -07:00
Rafael Kitover
c99a58faee fix a memory leak due to wrong syntax
In C++ arrays are deleted with `delete[]` and not `delete`.
2017-08-03 16:29:37 -07:00
Zach Bacon
997b97573f Added updated and new translations 2017-06-03 12:19:28 -04:00
Zach Bacon
ebfc8fdb12 Updated translation pot file 2017-06-03 12:11:53 -04:00
Rafael Kitover
783475bf39 switch to cmake module GNUInstallDirs #116
See:

https://cmake.org/cmake/help/v2.8.12/cmake.html#module:GNUInstallDirs

Use these variables to set all installation paths.

Add link and note about module to README.md .
2017-05-24 04:25:45 -07:00
Zach Bacon
535a2d5a32 Merge pull request #118 from kwkam/patch-1
wx/wxvbam: fix GetAbsolutePath
2017-05-12 09:02:37 -04:00
kwkam
7405efef5f wx/wxvbam: fix GetAbsolutePath
Makes battery/state directory setting work when set as relative path
2017-05-12 20:40:37 +08:00
Zach Bacon
9a5833b8c1 Forgot the zip program for the build 2017-05-11 22:18:10 -04:00
Zach Bacon
e95c083466 this should fix the windows build 2017-05-11 22:13:11 -04:00
Zach Bacon
dd34951d2f Windows doesn't have sterror_r 2017-05-11 21:34:18 -04:00
Zach Bacon
8840b62b27 I swear, I need to double check these things. 2017-05-11 21:15:00 -04:00
Zach Bacon
095e4f2849 added instructions for git submodule because we need some headers that mingw doesn't have yet. 2017-05-11 21:11:05 -04:00
Zach Bacon
8f12629d30 Seems no matter what I did last time, the generator wasn't properly set. 2017-05-11 21:05:49 -04:00
Zach Bacon
0d70c227f3 added github integration. 2017-05-11 21:02:12 -04:00
Zach Bacon
ce39651984 forgot msys makefile generator 2017-05-11 15:03:16 -05:00
Zach Bacon
587d162490 Helps if I added build stuff to it. 2017-05-11 15:53:24 -04:00
Zach Bacon
dfb22709ce added drone.yml file for tea-ci integration 2017-05-11 15:49:14 -04:00
Zach Bacon
10e1b7a6dd added tea-ci badge 2017-05-11 15:38:17 -04:00
Zach Bacon
27034bf2ca Merge pull request #116 from orbea/cmake
Add BIN_INSTALL_DIR and MAN_INSTALL_DIR
2017-05-11 09:44:32 -04:00
orbea
7ea1616afc Add BIN_INSTALL_DIR and MAN_INSTALL_DIR 2017-05-11 06:39:37 -07:00
Rafael Kitover
fed6f2389e Add #include <cmath> for std::ceil() #113
A couple files that use the std::ceil() math ceiling function were not
including the required header <cmath> and this seemed to have been
causing build errors on some Linux distributions.

Add the necessary #include <cmath> statement to both files.
2017-05-05 10:21:03 -07:00
Rafael Kitover
01dd7cef45 fix portability issue with strerror_r()
If _GNU_SOURCE is defined on linux, then strerror_r() is an alternate,
non-POSIX version.

Undefine _GNU_SOURCE when including <string.h> in ConfigManager.cpp to
get the POSIX version of strerror_r(), and initialize the error string
buffer to "unknown error" so that the code does not crash whichever
version of the library function is being used, or strerror_r() fails for
some reason.
2017-04-27 13:16:16 -07:00
Rafael Kitover
05555a23a8 SDL: fix deflt bat saving, improve dir checking
By default the SDL port tried to save the battery to a nonexistant
directory in saveDir, because if (saveDir) {...} evaluted to true since
saveDir was a non-NULL pointer but empty.

Change sdlCheckDirectory to return a bool indicating if the directory is
good or not, and if not set screenShotDir, saveDir and batteryDir to
NULL so that code that checks for their existance works correctly.
2017-04-27 08:52:14 -07:00
Rafael Kitover
02a1e38e6c SDL: improve error msg for unwritable config #105
Following up on 1ba2eef which fixed a crash caused by trying to write to
a NULL FILE* due to fopen() failure: write the error message to stderr
instead of trace.log and show the OS error using strerror_r().
2017-04-27 08:46:03 -07:00
Rafael Kitover
cab6f0f026 delete memory in common/array.h on destruction
Hopefully fix a memory leak in common/array.h by adding a destructor
that does a delete on the underlying array if it was previously
allocated.
2017-04-27 08:35:25 -07:00
Christopher Snowhill
a5ebd8d2b4 Merge pull request #109 from condret/elf-parser-security
fix some potential buffer-overflows
2017-04-23 13:45:48 -07:00
condret
a9b1251b88 fix some potential buffer-overflows 2017-04-23 22:28:17 +00:00
Christopher Snowhill
48f7437612 Merge pull request #108 from condret/master
fix gameboy header-detection in libretro interface
2017-04-23 13:45:25 -07:00
condret
63b0760329 hotfix for potential buffer-overflow 2017-04-23 22:07:28 +00:00
condret
d3b459ba0d fix gameboy header-detection in libretro interface 2017-04-23 21:54:56 +00:00
Jeremy Newton
1ba2eefebe Fix glibc crash: add log message on fopen failure
glibc's fclose implementation does not do a NULL check and will crash on "fclose(NULL)". A bunch of Fedora users have been sending in traces for this issue. I've added a log on failure case, likely if the user does not have permission to write to the file.
2017-04-17 12:04:07 -07:00
Rafael Kitover
b59b7b394c add Linux joystick reference to issue template
Add a link to the Joystick page in the Arch Wiki so that users hopefully
use it to troubleshoot their joystick issues before filing an issue.

Also note that any joystick issues would be SDL related.
2017-04-10 04:13:02 -07:00
Rafael Kitover
247e584fe0 better fix for clipped video in GL fullscreen #89
In d1918c12 I manually sent a SIZE event to the DrawingPanel after
calling Layout() in the setup code in OnIdle().

But the obvious problem is that the ->Connect() calls to set up the
event handlers, including SIZE, are after all the setup code including
the Layout().

Move the ->Connect() calls to the top of the setup code and remove the
manual SIZE event sending. This is a much better solution that for some
reason I didn't notice at the time.

Tested to also fix the problem.
2017-04-04 13:30:56 -07:00
Zach Bacon
b217f8b40b Oops, forgot Unices etc are case sensitive. 2017-03-25 07:23:30 -05:00
Rafael Kitover
7b0078d2c1 ./installdeps tweaks for fedora/rawhide
When installing rpmfusion repos, try going back up to 3 releases in case
the latest rawhide release does not have an rpmfusion repo, and install
the repo packages with --nodeps so that they don't conflict with
system-release(XX).

If installing rpmfusion repos fails, continue without ffmpeg (and adjust
build instructions accordingly.)

If ffmpeg fails to install for any reason, show a warning and adjust
build instructions.
2017-03-25 04:02:52 -07:00
Rafael Kitover
5d4ce82d54 make bins built with asm disable exec stack #98
Add the `section .note.GNU-stack` markers to .asm files built with nasm
to make sure the final executables do not have an executable stack.

This is described here:

https://wiki.gentoo.org/wiki/Hardened/GNU_stack_quickstart
2017-03-25 03:58:30 -07:00
Rafael Kitover
f56794e8a3 fix ./installdeps m32 for Solus
When calculating 32 bit dependencies, look only for -devel packages, and
match only -devel packages when checking for corresponding -32bit-devel
packages.
2017-03-24 01:38:34 -07:00
Zach Bacon
9324318373 Working on getting libretro updated 2017-03-24 07:59:10 -04:00
Zach Bacon
fec17c7900 libretro: this should solve the configmanager stuff and libretro 2017-03-23 22:14:38 -04:00
Zach Bacon
93bb1d3417 Merge branch 'master' of https://github.com/visualboyadvance-m/visualboyadvance-m 2017-03-23 22:05:07 -04:00
Rafael Kitover
41ead88dcb 32 bit cross compiling support on Linux
Add the `m32` parameter to ./installdeps to fetch 32 bit multilib
dependencies on Fedora, Arch and Solus linuxes and add a cmake toolchain
file to build with them.

For MSYS2 support both an `m32` and an `m64` to choose deps for 32 bit
or 64 bit mingw targets.

Adjust build instructions from ./installdeps to support both usages.

Other changes:

- use --nogpgcheck --best --allowerasing for dnf invocations for Fedora,
  the --nogpgcheck is necessary when Rawhide is confused about which
  keys it has, and the latter two are needed for upgrades that remove
  unneeded deps etc

- when finding GTK2, first try using pkg-config, and only fall back to
  the cmake script when that fails, pkg-config works better for cross
  builds

- add cairo to dep lists in ./installdeps for the time being

- for arch, list individual packages from base-devel instead of
  base-devel that do not require gcc-libs because of potential conflicts
  between gcc and gcc-multilib
2017-03-23 14:09:17 -07:00
Zach Bacon
352527254b Merge pull request #102 from JoshStrobl/patch-1
Simplified Solus installdeps
2017-03-22 20:50:57 -04:00
Joshua Strobl
8013d226a0 Simplified Solus installdeps
Multiple previously specified packages are either already in system.devel or are dependencies of items such as libgtk-2-devel or libgtk-3-devel, dependencies of those dependencies, etc.
2017-03-23 02:49:08 +02:00
Zach Bacon
105bbba888 Almost there, just a few more blocks to go. 2017-03-21 21:52:28 -04:00
Rafael Kitover
3a7c18da11 add gitter.im badge to top of README.md 2017-03-21 16:05:28 -07:00
Rafael Kitover
0dc175cdb4 basic ./installdeps support for Solus Linux
Add basic support for installing deps for a Solus host build and update
README.md .

Support for mingw and 32 bit cross-builds may be added later.
2017-03-19 19:09:33 -07:00
Rafael Kitover
6af5525ac1 cmake: default to ENABLE_ASM_CORE=OFF #98 #54
The inline assembly in src/gba/GBA-thumb.cpp which is turned on with the
cmake ENABLE_ASM_CORES option, sometimes causes weird behavior on
windows (see: #54) and a crash on startup in linux (see: #98, confirmed
on both Fedora and Arch Linux.)

Previously the default for this option was ON for 32 bit builds, set the
default to OFF always for the time being, until it is either fixed or
replaced.
2017-03-18 19:04:39 -07:00
Rafael Kitover
e1c1a5c95f fix src/filters/2xSaImmx.asm linking issues #98
Because of how asm subroutines are linked to C/C++ programs,
src/filters/2xSaImmx.asm had an %ifdef __DJGPP__ (the DOS port of gcc)
with the subroutine names prepended with an extra underscore.

In 902a7a7e I removed the %ifdef and just kept the extra underscore for
all symbols, and this worked fine until #98 where some version of Fedora
did not like that and would not link the code.

So adopt the behavior of the other asm filters, which have a NEWSYM
macro that defines the symbol name both with and without the extra
underscore, by listing the symbol twice, both with and without the extra
underscore, this is confirmed to fix the linking issue on that Fedora
build host.
2017-03-18 18:44:39 -07:00
Zach Bacon
a575cc9295 Small tweaks to the installer 2017-03-16 19:23:12 -04:00
Zach Bacon
3a141be6c1 Added initial installer script to install either the 64bit or 32bit versions depending on platform. 2017-03-15 22:58:02 -04:00
Rafael Kitover
2e8bee117d cmake: use add_compile_options for ssp-buffer-size
In 82c8a1e3 I made "--param ssp-buffer-size=4" one argument instead of
two because when added to CMAKE_REQUIRED_LIBRARIES the ssp-buffer-size=4
part was being recognized as a library, breaking the compile tests.

This broke the build on mac, which I fixed in 915e2d1e by using ssp
flags for gcc only and not clang.

Now apparently it is breaking mxe, so instead of adding this particular
parameter to the MY_C_FLAGS variable which is then added to
CMAKE_REQUIRED_* variables for compile tests, add it directly via
ADD_COMPILE_OPTIONS().

This should hopefully resolve any remaining issues with this compiler
flag.
2017-03-14 10:33:24 -07:00
Rafael Kitover
915e2d1ec2 activate libssp compiler flags for gcc only
In 82c8a1e3 I made "--param ssp-buffer-size=4" one argument instead of
two to fix another problem when passing compiler flags to
CMAKE_REQUIRED_LIBRARIES, clang cannot deal with this and this breaks
the build on mac.

Enable libssp related flags for gcc only, because clang does not support
them anyway. This fixes the build issue on mac.
2017-03-11 19:19:47 -08:00
Rafael Kitover
82c8a1e3fa fix linux build broken in 687c08a
Stop saving and restoring the CMAKE_REQUIRED_* variables for the compile
test, because the subsequent Wx header symbol tests need them set up for
Wx support as well.

Also --param foo=bar needs to be a single string in the list of compiler
flags, or cmake can misinterpret the second part as a library when it is
passed to libraries/link-options.
2017-03-10 06:38:50 -08:00
Zach Bacon
145f6d433c Some debian stuff, I honestly don't like debian packaging... but it's important for some people 2017-03-09 04:06:25 -05:00
Zach Bacon
015e0af857 Start removing ancient history of gvbam, may it rest in peace 2017-03-09 03:58:00 -05:00
Rafael Kitover
7b0baadbaa fix 32bit intel detection for 32bit mxe target
mxe leaves CMAKE_SYSTEM_PROCESSOR empty, so detect if mxe is being used
and set the variable based on CMAKE_TOOLCHAIN_FILE, this allows the
32bit asm to compile under mxe.

Also if no toolchain file is being used and CMAKE_SYSTEM_PROCESSOR is
empty, fall back to CMAKE_HOST_SYSTEM_PROCESSOR.
2017-03-08 15:49:00 -08:00
Rafael Kitover
687c08a051 pass all compiler/linker flags for compile test
When determining gcc/clang flags, save resulting C flags as MY_C_FLAGS,
C++ flags as MY_CXX_FLAGS, and linker flags as MY_C_LINKER_FLAGS, then
use them in the Wx OpenGL compile test.

This fixes the test erroneously failing on git mxe on mac.

Also, don't use -fPIC on Win32, set Wx defines separately from the test,
and save all CMAKE_REQUIRED_* variables before the test and restore them
afterwards.
2017-03-07 16:15:02 -08:00
Zach Bacon
78cd223827 changed the throttle for sdl config example 2017-03-07 06:48:41 -05:00
Rafael Kitover
d1b4abc85a fix sound in SDL port/ConfigManager
Since we are using sound frequency to control game speed, not quality,
change ConfigManager to default to a frequency of 44100 instead of
22050.

This also fixes trace.log files showing up with "unknown sound quality"
warnings.
2017-03-06 04:26:33 -08:00
Rafael Kitover
f2bfc549ea fix Ubuntu PPA link
Also add a note that it's easy to build from source.
2017-03-06 02:10:06 -08:00
Rafael Kitover
9dc740156b minor doc tweaks
- Add Ubuntu daily PPA link.

- Add link to releases tab for win/mac builds.

- Advise `make -j8` instead of `make -j10`.

- Clarify which dependencies are optional and which are required.

- Add ENABLE_ASM cmake option to the table.

- Replace wxLogDebug with wxString example to use .utf8_str() instead of
  concatenation, this is more correct.
2017-03-06 02:03:15 -08:00
Rafael Kitover
fef71439fc add ENABLE_ASM cmake option
Add the ENABLE_ASM flag for cmake which turns ON or OFF the
ENABLE_ASM_CORE, ENABLE_ASM_SCALERS and the ENABLE_MMX options at once.
2017-03-06 01:40:55 -08:00
Zach Bacon
eb7dab6272 ws2_32 is needed for the SDL binary on windows 2017-03-05 20:06:22 -05:00
Rafael Kitover
05610d84f6 fix linking OpenAL statically on Win32/MXE
Add the necessary AL_LIBTYPE_STATIC define for MXE and non-msys2 win32
builds so that OpenAL can be linked statically without errors.
2017-03-05 11:47:32 -08:00
Rafael Kitover
7b85964eb6 full throttle support + snd driver improvements
Support throttle in all sound drivers: SDL, openal, dsound and xaudio.

Link OpenAL at compile time instead of runtime.

Minor improvement on 891f17d6, which added throttle support to SoundSDL
and made it actually work more often and crash less: check that throttle
is non-zero before scaling the frequency.

For dsound, add the CTRLFREQUENCY capability to buffers and call
SetFrequency on the secondary buffer in setThrottle().

For OpenAL, set AL_PITCH on the source to throttle / 100.0 in
setThrottle() and remove all dynamic library loading stuff.

For xaudio, 441e6c9e allows throttle to work, and is also necessary for
these changes to dsound and openal.
2017-03-05 08:43:25 -08:00
Mystro256
891f17d62f Fixes for SDL throttle
- Throttle should be set on init
- SDL auido device was not being correctly closed on throttle change
2017-03-05 05:32:34 -08:00
Zach Bacon
8fcc32eeeb Merge pull request #93 from Mystro256/master
Fix incorrect bug tracker link
2017-03-05 03:16:53 -05:00
Mystro256
093bc40074 Fix incorrect bug tracker link
Clicking "Report Bugs" goes to SF instead of github
2017-03-05 01:56:31 -05:00
Rafael Kitover
441e6c9e0e fix setting throttle on LoadGame()
Move the soundSetThrottle() calls after the soundSetSampleRate() calls
in LoadGame(), because the core calls soundInit() again after
soundSetSampleRate() wiping out the throttle value. This allows the
throttle setting to work with xaudio on startup and game loads.

TODO: the throttle config setting only works correctly for the xaudio
driver at the moment, it needs to be implemented for other sound drivers
and eventually moved out of the sound drivers altogether.
2017-03-04 21:53:35 -08:00
Rafael Kitover
88d15c6ec8 partial fix for disabling pausing when linked #83
Check if link mode is active in GameArea::Pause() and refuse to pause if
it is.

Remove the check for the app not having focus with pauseWhenInactive
enabled in GameArea::OnIdle() as this is now handled in
MainFrame::OnActivate() (which receives focus events) since f10e2e99.

Revert 13f5afa9 which tried to check for link status in
MainFrame::MenuPopped() because it was completely wrong and the link
check is better done in GameArea::Pause().
2017-03-04 21:16:14 -08:00
Rafael Kitover
d1918c12f4 fix clipped game area in GL fullscreen #89
Trigger OnSize in the drawing panel after setting the geometry and
calling Layout(). I'm not sure what exactly broke but this seems to fix
the issue for the time being.

Also do a bit of very minor refactoring, change some calls to GetSize()
to GetClientSize() and simplify GLDrawingPanel::OnSize(ev&), tested to
work fine in wx 2.8.
2017-02-28 17:16:46 -08:00
Mystro256
fa1e13e606 Use prefix add operator for non-prim types
Typically yields better or equal performance. Sometimes compilers don't
optimizer out keeping the previous values (not needed for only adding 1)
2017-02-28 15:04:56 -08:00
Mystro256
7c06968557 Typo, only 10 recent accels 2017-02-28 15:04:56 -08:00
Rafael Kitover
95c3fd8cdf expand github issue template
Ask for more information like the affected games and drivers being used.
2017-02-28 14:18:27 -08:00
Zach Bacon
f145d6ab0e Still working on libretro stuff, working on cheatsenabled compile issue now. 2017-02-25 00:55:29 -05:00
Zach Bacon
a8a48919db Fixes build on the libretro side by wrapping an ifndef statement around rederedframes 2017-02-25 00:38:06 -05:00
Rafael Kitover
4d12fcda10 fix Mac linker script for @rpath libs (like SFML)
Homebrew SFML links itself with @rpath/ instead of the dylib path,
update the mac linking and bundling script to handle that case, also
move it from src/wx/tools/osx to tools/osx now that wx is the primary
port.

This fix is temporary and I will write a better one that takes
DYLD_LIBRARY_PATH and such into account, but will suffice for linking
Homebrew libs for now. The script needs more work in general.
2017-02-24 12:24:20 -08:00
Rafael Kitover
cf5f425b3a default to -DENABLE_FFMPEG=ON on Mac again
No particular reason to exclude ffmpeg support in Mac builds.
2017-02-24 06:44:26 -08:00
n-a-c-h
931fda459a Fix case where buffer is filled to capacity and becoming empty. There always needs to be an extra entry as a separator between the write and the read. 2017-02-22 03:39:57 +02:00
Rafael Kitover
095b48aabf minor fix for Ubuntu 14 (cmake)
Check that the CMAKE_VERSION is 3.0 or greater when setting the CMP0043
policy to NEW. The Ubuntu 14 cmake which is 2.8.12 throws an unknown
policy error otherwise.
2017-02-21 16:47:31 -08:00
n-a-c-h
3e0f5d89ba Rewrite of ringbuffer, and updated copyright file for Debian. 2017-02-22 02:03:21 +02:00
n-a-c-h
e923015d45 Remove copyright header from ZSNES since it annoys some people. The original version in ZSNES including the entire 1.4x version was GPL2+. The changes since then are mine, and I licensed it as GPL2 only for ZSNES 1.5x. I have no issue with VBA-M distributing this as GPL2+. 2017-02-22 01:05:35 +02:00
Rafael Kitover
ea4056e025 remove intermediate dependencies jpeg and tiff
jpeg and tiff are not direct dependencies and should be pulled in by
direct dependencies such as wx, remove them from README.md and
./installdeps.
2017-02-20 13:43:39 -08:00
Rafael Kitover
6a7d49419c initial Wayland support #72 #76
Disable OpenGL support under Wayland because wxGLCanvas segfaults, and
fix an issue with drawn frames not appearing.

If the user has opengl as the render method in their config, it will not
be changed, but at runtime will be set to simple under Wayland.

To fix the issue with frames not being drawn, Call Refresh() to queue a
PaintEv from DrawArea(data) instead of calling DrawArea(device_context)
directly.

Also remove the DrawOSD() call from PaintEv, this was causing the OSD to
sometimes show up twice in one frame, because DrawArea(data) draws the
OSD directly on the frame data.

Add new files wayland.cpp and wayland.h with a bool IsItWayland() global
function. This uses a GDK (part of GTK) call to detect Wayland.  This
unfortunately requires linking GTK libs separately.

Add cmake code to detect the version of GTK used by the wx being linked
and link it as well. Add gtk2 and gtk3 dev packages to the code for the
supported linux dists in ./installdeps.
2017-02-20 13:20:09 -08:00
Rafael Kitover
13f5afa9c5 don't pause on menu open when link active #83
In the MenuPopped method (which received MENU_OPEN, MENU_CLOSE and
MENU_HIGHLIGHT) check that gba_joybus_active is not true before pausing
the emulator, so that if Link mode is on it will not pause.
2017-02-19 10:39:46 -08:00
Rafael Kitover
b0b0ad08ca add --exclude='glibc32*' for Fedora ./installdeps
This should fix possible problems with the glibc32 package being
sometimes erroneously pulled in in rawhide when installing 32 bit devel
libs.
2017-02-16 05:21:40 -08:00
Rafael Kitover
92e3a826a4 update ./installdeps for Fedora rawhide
Try to install both pkgconfig.i686 and pkgconfig.x86_64 silently because
fc26+ does not have a separate 32 bit package.

If installing 32 bit packages fails on amd64, fall back to installing 64
bit packages only.
2017-02-16 03:39:51 -08:00
Rafael Kitover
99c6c4f938 Merge pull request #74 from Mystro256/gccwarnings
- fix C++ only flags being used for C

- check if cheats/patches files load correctly
2017-02-13 01:26:22 -08:00
Mystro256
611bbd6707 Re-add missing installed icons (for linux) 2017-02-12 06:50:54 -08:00
Rafael Kitover
27d4f09fb4 add Mystro256 to developer list in About box 2017-02-12 04:49:06 -08:00
Rafael Kitover
289abcd7a2 use -fpermissive and -fexceptions with C++ only
Add -fpermissive and -fexceptions to CMAKE_CXX_COMPILE_OBJECT so that
they only affect C++. -std=gnu++11 was already there from b4ba9d9d, but
this is a cleaner method (which is also used for NASM) where we use
STRING(REGEX REPLACE ...) to append options after the <FLAGS>
placeholder in CMAKE_CXX_COMPILE_OBJECT.
2017-02-12 04:41:57 -08:00
Mystro256
28624ac01b fpermissive is only a C++ flag 2017-02-12 04:26:21 -08:00
Mystro256
e9e2100f6d Error case in gbCheatReadGSCodeFile
Silence GCC warning
2017-02-12 04:26:21 -08:00
Mystro256
b38cb9b522 Error case if game num can't be read in cheatsImportGSACodeFile
Silence GCC warning
2017-02-12 04:26:21 -08:00
Mystro256
7e8efe963f Incorrect return value in cheatsImportGSACodeFile 2017-02-12 04:26:21 -08:00
Mystro256
cc2fabbf0a Use fread return values for apply patch error checking
Silences gcc warnings
2017-02-12 04:26:21 -08:00
Rafael Kitover
a493e0f85a remove updater code #71
Remove the "check for updates" and "Update ROM database" menu entries,
as well as the automatic update checking and all supporting code.

This fixes the issue with the emulator hanging without access to the
internet.

Updating code will be reimplemented in the future using something like
Sparkle. wxHTTP does not support redirects or https so is pretty much
useless now.

Also update the About box to bump copyright year to 2017 and change my
name to "rkitover", which is what I use on github, and mention other
contributors.
2017-02-12 03:47:29 -08:00
Rafael Kitover
65dae0d0a1 support Ninja cmake generator on msys2
Add a hack to the root CMakeLists.txt to SET(MSYS ON) for the Ninja
generator when running under msys2, otherwise it cannot find libs.

The quoting fixes from #70 allow all of this to work.
2017-02-11 14:18:38 -08:00
Rafael Kitover
98718f2094 Merge pull request #70 from edorax/master
Some fixes for MSVC.
2017-02-11 08:02:02 -08:00
edorax
0791236a8f Improve the method to find SDL2. 2017-02-11 23:48:11 +08:00
edorax
fee89f1967 Fix build for MSVC. 2017-02-11 23:11:32 +08:00
Rafael Kitover
c02c448f47 clean up dependencies/msvc inclusion cmake code
Move the check for dependencies/msvc into the previous IF(WIN32) block
adding an IF(MSVC) level.

Remove duplicate call to INCLUDE_DIRECTORIES(dependencies/msvc) from
later on in the main CMakeLists.txt.
2017-02-11 06:33:08 -08:00
Rafael Kitover
d6c1b53653 add one missed cmake windows quoting fix
Also quote LOCALEDIR with as \\\""${LOCALEDIR}"\\\", just like the other
defs are quoted.

This fixes the build on msys2.
2017-02-11 05:52:42 -08:00
Rafael Kitover
b4ba9d9d65 set -std=gnu++11 globally for C++ only
Add -std=gnu+11 to CMAKE_CXX_COMPILE_OBJECT in the main CMakeLists.txt
to force the option for all C++ sources.

The right way to do this is to use a generator expression with
ADD_COMPILE_OPTIONS, but this is only available in cmake 3.3 and we must
maintain 2.8.12 compatibility to support Ubuntu 14.

This fixes the mac build (clang.)
2017-02-11 05:33:10 -08:00
edorax
2dc673c753 Fix the options of cl. 2017-02-11 15:48:19 +08:00
edorax
95e1a35d4c Use cl(the MS C/C++ compiler) instead of cc for MSVC build. 2017-02-11 14:55:45 +08:00
edorax
f7186a6493 Move 'dependencies/msvc' inclusion to the CMakeLists.txt in top level. 2017-02-11 13:39:50 +08:00
Su Yong
4e096c127c Some fixes for MSVC. 2017-02-11 10:57:35 +08:00
Rafael Kitover
8754a8f6d8 fix cmake -G Ninja support
Use an explicit list of Wx XRC sources instead of a GLOB so that cmake
generators for other build systems such as Ninja work.
2017-02-10 08:22:58 -08:00
Rafael Kitover
f10e2e9904 fix directsound loop on unfocus #45
Call GameArea::Pause and ::Resume in MainFrame::OnActivate based on
focus state if the pauseWhenInactive config option is set.

Also stop/play the primary dsound buffer in pause()/resume() in
dsound.cpp, not onlyu the secondary, this may not be necessary but it
doesn't hurt.
2017-02-09 07:30:54 -08:00
Rafael Kitover
fcc34394c1 fix build failure on OS X Lion with XCode 4.2
XCode 4.2 generates a broken binary if -fomit-frame-pointer and/or -flto
is used for compile and link flags.

Check for Clang version less than 4.3 on APPLE and remove these flags in
the compile options setting cmake code.
2017-02-03 12:39:10 -08:00
Rafael Kitover
6ecab805e0 fix game freezing on kbd input #54
Apparently in some configurations, holding a key on the keyboard makes
Wx stop processing Idle events, so the emulator does not run until the
key is released, freezing the game and ignoring the key.

Hopefully fix this by calling wxWakeUpIdle() from OnKeyDown() and
OnKeyUp().

Other Misc. Improvements:

- refactor process_key_press() to only return true if the system is in a
  pressed key state on key presses or a game key was released on
  releases and always true on double releases.

- call ev.StopPropagation() from OnKey* events for game keys, this may
  not actually do anything, but just in case.

- remove static OnKeyUp and OnKeyDown events from GameArea, these are
  connected to the DrawingPanel dynamically now.

- remove the dynamic_cast<>s from PaintEv/EraseBackground/OnSize event
  forwarders, since there is already a panel member to use.

TODO:

The state returned by process_key_press() is still not entirely correct,
if a joystick button is pressed, it will return true for a non-game
keyboard press, and it needs to return the correct state for double
releases.
2017-02-02 07:13:39 -08:00
Rafael Kitover
44382a71c5 fix openal.so loading issues on some dists #69
As suggested by @Mystro256, try:

wxDynamicLibrary::CanonicalizeName(wxT("openal"))+wxT(".1")

before just the canonical name for "openal" when trying to load the
library.

Also add a utility method to quietly try loading the library, because on
wx 2.8 wxDL_QUIET does not work.
2017-01-30 20:11:07 -08:00
Rafael Kitover
cb0bcfae6b fix msys2 build failure in 34e408cc
cmake automatically passes -std=gnu++11 in some cases, while we were
passing -std=c++11, and this was causing incompatibilites in name
mangling between different objects.

Fix this by using -std=gnu++11 for gcc.
2017-01-30 19:12:04 -08:00
Rafael Kitover
f21178f6f7 fix nasm support broken in 34e408cc
The last commit removed generator expressions from ADD_COMPILE_OPTIONS()
which made C/C++ flags apply to nasm as well.

Fix this by removing <FLAGS> from CMAKE_ASM_NASM_COMPILE_OBJECT and
replacing it with the flags we want.
2017-01-30 18:14:33 -08:00
Rafael Kitover
34e408ccb7 fix Debian 8 Jessie and Ubuntu 14 Trusty compat
Fix some porting issues to make everything work on Debian 8 "Jessie"
and Ubuntu 14 "Trusty":

- set cmake minimum version to 2.8.12, this is the Ubuntu 14 version

- combine C and C++ flags and add all of them using
  ADD_COMPILE_OPTIONS() without using generator expressions, which is a
  cmake 3.2 or so feature

- add -fpermissive to force some non-const type casts to compile on
  older versions of gcc

- add -std=c++11 for gcc to enable support on older versions of gcc

- check that the compiler supports -fstack-protector-strong before
  adding it, older versions of gcc do not

- fix the debian section of ./installdeps to include libpng-dev instead
  of libpng16-dev and add gettext for msginit etc.

- fix compat checks in src/common/ffmpeg.cpp and src/wx/cmdevents.cpp to
  check for libavcodec >= 56 instead of > 56, the Debian Jessie version
  is exactly version 56 . With the one exception of
  AV_CODEC_FLAG_GLOBAL_HEADER which is defined in later versions.
2017-01-29 10:14:34 -08:00
Rafael Kitover
fdc389c280 fix wx 2.8 compat, debug logging works everywhere
Fix backcompat with wx 2.8. This involved writing
wxPositiveDoubleValidator and rewiring the DrawingPanel inheritance tree
and event handling mechanisms (because 2.8 does not have ->Bind, only
->Connect which is less flexible.) As a result all the event handling
has been gathered into GameArea and the affected code is somewhat
cleaner. 2.8 support is untested on Mac because it requires 32 bit libs
and Carbon.

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

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

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

On Windows, build a console binary for debug builds.

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

Add -Wextra to cflags for debug builds.
2017-01-25 10:53:05 -08:00
Rafael Kitover
82d694df3a disable LTO on Win32 for now
Due to reports of segfaults etc. disabling LTO on Win32 for now.
2016-12-31 04:48:51 -08:00
Rafael Kitover
281e73eee0 correct fix for ddef88f0
Check that codec is not a NULL pointer right after it's first set, this
is done later after configuring the ctx anyway.
2016-12-31 04:07:12 -08:00
DoctorWho11
57adfaf24e Add missing libiconv for enabling nls 2016-12-30 22:48:23 -05:00
Zach Bacon
fd693b385e Merge pull request #60 from Mystro256/master
Various fixes
2016-12-30 21:17:00 -05:00
Mystro256
2ef0074f72 Duplicate CMake Option in README.md 2016-12-30 12:14:35 -05:00
Mystro256
24f06848df DeSerialize should pass packet by ref too 2016-12-30 11:43:36 -05:00
Mystro256
ddef88f0c5 Possible null dereference 2016-12-30 11:42:56 -05:00
Mystro256
7bc7ff57f4 Redundant code? 2016-12-30 11:41:33 -05:00
Mystro256
7788e6fc89 Spelling mistake ;) 2016-12-30 11:19:48 -05:00
Mystro256
c3e4969498 Fix gcc parentheses warning 2016-12-30 11:17:18 -05:00
Mystro256
0bcf4a5223 Clean up various used variables 2016-12-30 11:16:00 -05:00
Mystro256
0df6f036d6 Silence gcc misleading-indentation warning 2016-12-30 11:03:34 -05:00
Mystro256
a08d944867 Fix format-extra-args warning 2016-12-30 10:49:22 -05:00
Mystro256
e451ce09dd Missing include, fixes gcc warning 2016-12-30 10:48:05 -05:00
Rafael Kitover
b258c004af ./installdeps: support Fedora Linux
Detect and install deps for Fedora Linux in ./installdeps . On 64 bit
intel hosts install both 32 and 64 bit dev libs. Also update README.md
to note that Fedora is supported.

MISC: add nasm to all dep lists for various dists
2016-12-28 08:48:30 -08:00
Rafael Kitover
f641620a6c ./installdeps: pull deps submdl for cross targets
Run `git submodule update --init --recursive` for all win32 cross
targets, not just msys2, in check_cross() .
2016-12-25 05:12:23 -08:00
Rafael Kitover
d01bf5dbd0 fix control panel link in MSys2 Notes in README.md
Fix the instructions in MSys2 notes for how to change the system PATH in
Control Panel in README.md.
2016-12-23 07:15:47 -08:00
Rafael Kitover
9f051c3813 put CMake options in README.md into table + misc
Make a nice table for CMake options, add a note on making debug vs.
release builds, add nasm to list of deps, add a note in MSys2 notes
about lack of debug console messages.
2016-12-23 06:10:54 -08:00
Rafael Kitover
2483a2c440 add a README.md
Add a link to the homepage, building instructions and some notes on
contributing.
2016-12-23 05:38:50 -08:00
Rafael Kitover
f124a28e19 use $MSYSTEM for msys2 target in ./installdeps
Only allow running ./installdeps if $MSYSTEM is MINGW32 or MINGW64, that
is, the user started a MINGW 32 bit or 64 bit shell and **NOT** an MSYS
shell.

Use the value of $MSYSTEM to determine if 32 bit or 64 bit target deps
should be installed.

Update usage() text to reflect this.

MISC: rename generic_build_instructions() to build_instructions() .
2016-12-22 07:04:27 -08:00
Rafael Kitover
e2e4105dcd remove src/wx/VBA.ico, dup for src/wx/icons/VBA.ico 2016-12-21 17:10:03 -08:00
Rafael Kitover
d06e7afceb full support for cross-compiling to win32 with mxe
Fix all cmake issues related to building for win32 with mxe.

Add support for ./installdeps win32 on Debian/Ubuntu using the mxe apt
repository.

Details:

* default to ENABLE_LTO=OFF on mxe

* set SFML_STATIC_LIBRARIES=TRUE on mxe

* fix the libintl/gettext checking logic

* fix the git dependencies submodule checking logic, and check that it
  triggers for mxe

* revert FindSFML.cmake to upstream version, works fine with mxe

* make 'win32' an alias for the 'MinGW-w64-i686' target for
  ./installdeps, add support for mxe apt repository for Debian/Ubuntu

* change bin2c related cmake code to compile the tool on the host always
  even when cross-compiling

* copy src/win32/res/VBA.ico to src/wx/icons since src/win32 has been
  removed

TODO: generic mxe installer for other unix-likes
2016-12-21 13:02:55 -08:00
Zach Bacon
3279ce2ab8 Merge pull request #56 from Mystro256/master
Appdata fixes
2016-12-21 09:53:55 -05:00
Mystro256
774719ddf6 Appdata fixes
Note that metadata_license is the license of this specific file, apparently
it's not allowed to be GPL, CC-BY-SA-3.0 is close enough.
2016-12-21 09:14:10 -05:00
DoctorWho11
978d5b7991 Missed one other cmake instance of gvbam 2016-12-20 21:26:11 -05:00
DoctorWho11
33febfb4ba add old resources that were in the win32 folder that the wxwidgets interface uses on windows 2016-12-20 17:56:05 -05:00
DoctorWho11
a1bf0f3f82 Drop gtk and mfc interfaces. Things are changing and for the better. 2016-12-20 17:34:34 -05:00
DoctorWho11
ac32a524a3 adjust small things in preparation in a move. 2016-12-20 17:27:30 -05:00
Rafael Kitover
982d639ea2 add gettext-tools to fink deps
gettext-tools needs to be installed in fink for cmake to find msginit,
update ./installdeps to include it.
2016-12-19 02:18:30 -08:00
Rafael Kitover
dea31e52e9 fix SDL2 include in 534c4da
For SDL2 includes are specified as:

```cpp
```

rather than as:

```cpp
```

without the `SDL/` prefix, this was causing a compile error.
2016-12-19 02:15:44 -08:00
Rafael Kitover
fba7adf3eb trying to create an issue template
This should help with people creating issues with no information about
their build or configuration.
2016-12-18 20:10:18 -08:00
Zach Bacon
0b6942684f Merge pull request #53 from drysyle/master
Fix wx joystick hat diagonals
2016-12-18 21:28:49 -05:00
drysyle
534c4da649 Rewrote joystick hat code to fix diagonal issues 2016-12-18 15:25:18 -08:00
Rafael Kitover
f83fcfb40f hopefully fix cross-compiling with SFML
Remove "PATH_SUFFIXES include" in the FIND_PATH(SFML_INCLUDE_DIR ...)
call in FindSFML.cmake, this has fixed cross-compiling issues with
FindOpenAL.cmake and FindSDL2.cmake already.
2016-12-18 12:11:37 -08:00
Zach Bacon
f7f67ff6f9 Fixed compiling without sfml. 2016-12-14 16:52:45 -05:00
Rafael Kitover
c2a23a9ffe check for RAW_CONTROL only on macs in switch stmts
On e.g. Windows WXK_RAW_CONTROL == WXK_CONTROL so having both in a
switch statement is compile-time error, so wrap the checks for
WXK_RAW_CONTROL in an #ifdef __WXMAC__ .
2016-12-14 06:23:02 -08:00
Rafael Kitover
7b1b1ea236 only use gcc binutils wrappers when LTO is enabled
Use gcc wrappers like gcc-ar/gcc-nm/gcc-ranlib only when LTO is enabled.
2016-12-14 05:48:37 -08:00
Rafael Kitover
8c309eaaf4 fix modifier-only game keys
Fix using modifier keys such as SHIFT or CONTROL by themselves as game
keys.

Modifier keys are sent as a special keycode e.g. WXK_CTRL along with the
modifier flag, however on key release the keycode is sent but the
modifier flag is not. So check for modifier keys in process_key_press()
and always set the modifier flag so that release events are recognized
correctly.

Fix support for RAW_CTRL on Mac (which is the real control, while the
Command key is mapped to CTRL.)

Also disable the debug message emitted by wX when our modifier-only key
parsing code runs.

TODO: map modifier key names on Mac to the actual keys rather than the
wX names such as RAWCTRL.
2016-12-14 00:26:54 -08:00
Rafael Kitover
a60d24e91a workaround wX 3.1+ key accel string parsing bug
In wX 3.1+ the behavior of wxAcceleratorEntry::ToString() and
wxAcceleratorEntry::FromString() has changed and the resulting string
can no longer round-trip through these methods.

Use a lookup table based on an internal data structure from the wX
source code to translate the "display name" of some keys to the regular
"name" as a workaround for now.

This allows at least the default keybindings to work and not throw an
error on startup.

TODO: standalone modifiers as game keys are still broken.
2016-12-13 15:08:55 -08:00
Rafael Kitover
d5020b905c fix wX XRC for wX 3.2
Some sizeritems in horizontal box sizers had the wxALIGN_RIGHT flag,
which makes no sense in horizontal sizers, since they allow only
aligning things vertically. This was throwing XRC errors on startup.

Remove the erroneous wxALIGN_RIGHT flags from the XRC.
2016-12-13 10:03:38 -08:00
Rafael Kitover
94b62b13b3 minor update to ./installdeps
For arch cross builds, try to install both the mingw -headers-git and
-crt-git .
2016-12-13 10:38:15 -05:00
Rafael Kitover
68f2badae7 more ./installdeps improvements
Allow selecting target for MSYS2 deps.

For Arch cross builds, do not run yaourt if all deps are already
satisfied.

For Mac Homebrew, only install formulae that do not already have some
version installed, otherwise if the user has a non-default version (such
as --HEAD) the script will error out.
2016-12-12 19:55:44 -08:00
Rafael Kitover
53fb6b4371 ./installdeps + windows cross build improvements
Refactor ./installdeps and add support for mingw-w64 cross builds on
Arch Linux. The latter does not work currently because of a bug in
libuuid in the mingw-w64 crt, and the wxmsw AUR package does not build.
This will hopefully be resolved soon.

Put a copy of FindOpenAL.cmake into our own CMakeScripts/ because
searching for include files with PATH_SUFFIXES of include/ does not work
for cross builds, as it is done in the system version.
2016-12-12 19:46:14 -05:00
Rafael Kitover
c216528793 generalize ./installdeps + mac pkg mgrs support
Add a more general purpose ./installdeps script to replace
./installdeps-msys2 that handles: Debian Linux, Arch Linux, MSYS2+MinGW,
Mac Homebrew, MacPorts and Fink for Mac. More OSes and distributions
will be added in the future, and the script may be generalized for use
in other projects.

Move Mac package manager setup code into MacPackageManagers.cmake and
greatly improve it. Handles Homebrew, MacPorts and Fink correctly.

Minor tweaks for FindSDL2.cmake: better include dir searching that works
on cygwin, fix flags for MinGW, and quiet pkg-config program errors.

Add MinGW cross-compilation toolchain files, they can be specified on
the cmake command line with:

-DCMAKE_TOOLCHAIN_FILE=../CMakeScripts/Toolchain-cross-MinGW-w64-i686.cmake

or

-DCMAKE_TOOLCHAIN_FILE=../CMakeScripts/Toolchain-cross-MinGW-w64-x86_64.cmake

these work for Cygwin and should work for MinGW on Linux as well.
2016-12-10 23:41:32 -08:00
Zach Bacon
0e9fb98393 Merge pull request #52 from Mystro256/master
Various fixes
2016-12-10 19:50:19 -05:00
Mystro256
1af42f486c Use full name for wx appdata 2016-12-10 19:34:16 -05:00
Mystro256
8f694f054b Fix FSF address information 2016-12-10 19:19:34 -05:00
Mystro256
8baa415848 Add linux appdata and fixes
Desktop files aren't installed for linux by default
2016-12-10 19:05:30 -05:00
Mystro256
d6228254cf cmake fixes
-Whitespace fixes
-Binaries installation fixes
2016-12-10 18:27:18 -05:00
Mystro256
24d2521914 Manpage fixes 2016-12-10 17:56:04 -05:00
Mystro256
4a3618ef26 Forgot two instances of SYSCONF_INSTALL_DIR 2016-12-10 04:12:36 -05:00
Zach Bacon
ea220b4822 one file was missed from the last PR, looking at you Mystro256 :P 2016-12-10 04:08:03 -05:00
Mystro256
87ee8c700a Forgot two instances of SYSCONF_INSTALL_DIR 2016-12-09 23:33:19 -05:00
Rafael Kitover
0e6c1b66e3 Quartz2D display rendering driver for Mac
Implement a Quartz 2D (aka Core Graphics) output renderer for the Wx
interface as a subclass of BasicDrawingPanel called
Quartz2DDrawingPanel.

Split BasicDrawingPanel's DrawArea() into DrawArea() and DrawImage(),
with DrawImage() receiving both the wxPaintDC and the wxImage, the
wxImage is created with a direct pointer to the frame buffer when
possible (24bpp).

Implement Quartz2DDrawingPanel in macsupport.mm based on the code here:

http://www.cocoabuilder.com/archive/cocoa/309165-how-to-quickly-paint-to-cocoa-view-from-bitmap-in-memory.html

and here:

http://stackoverflow.com/questions/2261177/cgimage-from-byte-array

the GetData() method of wxImage is used to avoid copying the frame
buffer.

Add RND_QUARTZ2D to the renderers enum and update all config stuff and
the XRC to support it. As well as the DrawingPanel instantiation code in
GameArea::OnIdle().
2016-12-09 13:06:59 -08:00
Zach Bacon
60e98506e7 Merge pull request #49 from Mystro256/master
Fix DSYSCONF_INSTALL_DIR (SDL)
2016-12-09 14:20:13 -05:00
Jeremy Newton
c7386503c4 Fix DSYSCONF_INSTALL_DIR
I'm not sure if this was changed in cmake recently, but "SYSCONFDIR" is incorrect. It should be SYSCONF_INSTALL_DIR.

As well CMAKE_INSTALL_PREFIX refers to /usr or /usr/local in linux, so installing it into ${CMAKE_INSTALL_PREFIX}/${SYSCONFDIR} would be incorrect. I've wrapped it in the existing IF( WIN32 ) to preserve the installation for windows, a window dev should fix that if it's incorrect.
2016-12-09 12:44:11 -05:00
Zach Bacon
d35d00f650 Added Caelum to the list 2016-12-03 09:01:36 -05:00
Rafael Kitover
37518fc88b add LTO option, disable on GCC+AMD64+Win32
Add ENABLE_LTO cmake option that defaults to ON except on GCC building
for AMD64 on Win32.

Also set the cmake variables AMD64 or X86_32 when one of these
architectures is detected.
2016-11-27 15:37:24 -08:00
Rafael Kitover
7f6374356d rename 'Fullscreen filter' to 'Display filter'
Since filters apply to both window and fullscreen mode, rename the
config option 'Fullscreen filter' to 'Display filter'.
2016-11-23 03:56:30 -08:00
Rafael Kitover
3af0c7ff51 reorganize display config panel
Rename "Advanced" page to "Basic" and move to the first page instead of
last.
2016-11-23 03:49:07 -08:00
Rafael Kitover
b468eddfa5 only use -flto=10 with gcc
gcc allows flto=<jobs> to parallelize linking, clang does not understand
this, use just -flto for clang and -flto=10 for gcc.
2016-11-23 03:13:33 -08:00
Rafael Kitover
790c9e13bd update mac link script to 1.0
This version is roughly twice as fast.
2016-11-23 03:07:44 -08:00
Rafael Kitover
cdae078e42 pass all compile flags to link step
This makes -static-libgcc -static-libstdc++ actually work, and is
probably better for LTO as well.
2016-11-21 13:53:16 -08:00
Rafael Kitover
349bbd13bc add LTO support, fix libssp link, add -ggdb3 -Og
Add support for Link Time Optimization (LTO) on gcc and Clang.

Link libssp only when it is on the system, some toolchains like Ubuntu's
do not require explicitly linking to libssp. On Win32 try to link it
statically.

In debug builds with GCC, use -ggdb3 -Og, otherwise use -g .

Two new cmake modules were written for this:

* FindSSP.cmake -- this is for finding libssp on the system.

* UseGCCBinUtilsWrappers.cmake -- this is for using gcc binutils
wrappers such as gcc-ar, which is required for gcc LTO to work.

These will be distributed separately as well.
2016-11-21 12:37:21 -08:00
Rafael Kitover
55f6e17f0d compile/link flags improvements
* Bump minimum cmake required to 3.3.2, to make sure generator
  expressions work.

* Force CMAKE_BUILD_TYPE to "Release" if unset, not sure if this
  actually works.

* Merge the older compile flags block with the new one and use generator
  expressions to make sure the relevant flags apply only to C, C++ or
  nasm.

* Add -lssp to the end of the link commands for the -fstack-protector*
  options, this is only needed/done for gcc.

* Add -lversion and -limm32 to SDL2_LIBRARY (Zach asked for this.)

* Builds on msys2 again!
2016-11-20 11:11:52 -08:00
Rafael Kitover
1dd7ecfe0f set Zach's CXXFLAGS only on gcc/clang
Set the flags Zach gave me only when cmake detects gcc or clang, this
way other generators like Visual Studio will still work fine.
2016-11-20 06:15:27 -08:00
Rafael Kitover
bbdc6ca577 make ENABLE_SDL default to OFF
Default building options now just build the Wx port.

Also set +x on ./installdeps-msys2 .
2016-11-20 05:46:24 -08:00
Zach Bacon
0ba8166467 Moved all filters into interframe.cpp file, original code by EmporerArthur 2016-11-19 20:43:07 -05:00
Rafael Kitover
180ee60c7a clean up APPLE block in main CMakeLists.txt
Remove some redundant nasm-related code and an outdated comment.

Objective-C++ code is now separated into an .mm file and nothing is done
to change the compiler invocation for it.
2016-11-19 17:13:49 -08:00
Rafael Kitover
40dcb2df7a add some compiler flags
These are the flags Zach wanted.

They work fine with gcc and clang, will test what happens with msvc as
well.
2016-11-19 17:07:30 -08:00
Rafael Kitover
13196c0748 update to latest version of bin2c.c
I maintain it here:

https://github.com/rkitover/bin2c

In terms of functionality, this version is pretty much the same as the
original, just nicer argument handling, a usage screen, etc.
2016-11-18 09:08:09 -08:00
Rafael Kitover
902a7a7e0d fix 32bit build support
Make ASM_CORE, ASM_SCALERS and ENABLE_MMX the defaults for 32bit builds
on intel hosts (the host can be AMD64, as long as the target is 32bits.)

Move mac nasm search into the mac section of the cmake code and stop
defaulting to /usr/bin/nasm, this was screwing up the build on msys2.

Fix src/filters/2xSaImmx.asm to compile and link correctly.

Add nasm to list of mingw deps for ./installdeps-msys2 .

Tested that msys2-built Wx binary runs, including with 2xSaI.

Keyboard doesn't work yet on msys2 builds, but that's a completely
different issue.
2016-11-18 09:04:55 -08:00
Zach Bacon
c0f8a8a335 Resolves undefined issues, just doesn't fix using libretro... yet. 2016-11-17 19:29:10 -05:00
Zach Bacon
7c23a38147 Merge pull request #41 from rkitover/msys2_build
msys2 build improvements
2016-11-14 15:27:58 -05:00
Rafael Kitover
3c30d59aba msys2 build improvements
* Enable ffmpeg by default only on linux and msys2, it will be disabled
for normal windows builds and on mac.

* Set SFML_STATIC_LIBRARIES only for normal non-msys2 windows builds,
because msys2 does not currently have static versions of the SFML
sub-libraries, e.g. system, network, etc.. Dynamic linking works fine
for now.

* Fix quoting for -DLOCALEDIR, on windows spaces were causing errors in
make on msys2.

* Update to upstream FindSFML.cmake .

* Add an ./installdeps-msys2 script to install all necessary tools and
libraries on msys2 for building both 64 and 32 bit windows Wx binaries.

* Add the dependencies/mingw-xaudio/include directory to
INCLUDE_DIRECTORIES so that XAudio compiles on msys2, as mingw-w64 does
not currently have XAudio headers. Also check that the user pulled the
git submodule in the process (the ./installdeps-msys2 script does this
for you.)

TODO:

* Generalize ./installdeps to work on more platforms.

* Make console Wx app in debug mode so that debug prints will work.

* Fix game keyboard input for msys2 builds.

* Add HiDPI support for Windows.

* Fix the -D*DIR defines to have the correct paths on windows.
2016-11-14 10:56:50 -08:00
Zach Bacon
39360b88d8 Merge pull request #40 from rkitover/bin2c
enormous speedup for compiling Wx resources
2016-11-13 17:48:10 -05:00
Rafael Kitover
10fd7f926e enormous speedup for compiling Wx resources
Replace bin2c.cmake script with one written in C and compiled as an
intermediate target.

The C version is roughly 12000 times faster.

On msys2, the cmake version takes 7.5 minutes on this system, while the
C version takes 0.037 seconds.
2016-11-13 14:31:34 -08:00
Zach Bacon
1dc4ab845a Merge pull request #39 from atsampson/master
SFML is required for link support.
2016-11-10 07:26:28 -05:00
Adam Sampson
4bf4248985 SFML is required for link support. 2016-11-10 11:39:45 +00:00
Zach Bacon
0d6b94afb7 Slow fix of libretro interface 2016-11-10 00:40:22 -05:00
Zach Bacon
9e0c8cec8b Fix compiling d3d 2016-11-08 09:15:52 -05:00
Zach Bacon
a2f5d1338e Merge pull request #38 from rkitover/master
fix wx GL viewport + build improvements
2016-11-08 08:08:36 -05:00
Rafael Kitover
30f80ab22b fix wx GL viewport + build improvements
Add GetRealPixelClientSize() method to HiDPIAware and implement using
wx GetClientSize() in panel.cpp for the generic version, and using
convertSizeToBacking: in macsupport.mm .

Add an AdjustViewport() method to GLDrawingPanel that sets glViewport()
using GetRealPixelClientSize(), and call it for the SIZE event. Debug
print the viewport size here instead of in DrawingPanelInit().

Build improvements:

* default to Cairo off for all platforms, currently libcairo2-dev does
  not install on Ubuntu

* default to ON for ENABLE_LINK and ENABLE_FFMPEG (for game recording),
  this will allow for more fully-featured default builds

* do not set SFML_STATIC_LIBRARIES on Mac because this is currently
  broken

* fix the Mac bundling/linking script to deal with links in dependent
  libs that already use @rpath (very minor change.)
2016-11-08 04:51:26 -08:00
Christopher Snowhill
63b086af20 Merge pull request #37 from rkitover/wx_accels_with_modifiers_fix
fix wx kbd accels that are game key + modifier
2016-11-06 15:42:29 -08:00
Christopher Snowhill
f0e8c94c9c Merge pull request #36 from rkitover/cmake_xcode_support
fix Xcode project generation via cmake
2016-11-06 15:41:23 -08:00
Rafael Kitover
491cef4872 fix wx kbd accels that are game key + modifier
Pass the keyboard modifiers to process_key_press so that it only
registers a game key if the modifiers match. That is, if e.g. ENTER is a
game key, then ALT+ENTER gets passed to other Wx controls and does not
register as a game key.
2016-11-06 14:48:05 -08:00
Rafael Kitover
981026dc80 fix Xcode project generation via cmake
Move Objective-C++ Mac code for Wx into macsupport.mm with stub methods
in panel.cpp, and stop compiling all C++ as Objective-C++.

cmake -G Xcode # now works fine
2016-11-06 14:09:50 -08:00
Zach Bacon
24e2b0ba81 Merge pull request #35 from rkitover/todos
some TODO entries from me
2016-11-04 20:42:45 -04:00
Rafael Kitover
77a14ae7a4 some TODO entries from me
Some stuff I would like to wrap up from the Mac port and some longer
term things as well.
2016-11-04 13:43:59 -07:00
Christopher Snowhill
6cc2db09ab Update Cheats.cpp
Bounds checking again.
2016-11-04 11:59:03 -07:00
Zach Bacon
ecc6f7c3c6 Default to OpenAL and OpenGL on linux 2016-11-03 19:47:00 -04:00
Zach Bacon
0e9e003a02 Merge pull request #34 from rkitover/lion_build
Mac OS X 10.7 (Lion) build and runtime support
2016-11-03 14:10:37 -04:00
Rafael Kitover
01200fadbd Mac OS X 10.7 (Lion) build and runtime support
Make a custom cstdint.h header file that includes <tr1/cstdint> if
<cstdint> is not available, because the clang 3.x used on Lion does not
have it. Change all references to <cstdint> to use it instead.

Add missing OpenGL header for older OS X in sdl/SDL.cpp .

When calling HiDPI methods, use respondsToSelector: to check if the
methods are available first.

Fix the bundling/linking script to support multiple copies of the same
dylib with different versions. Necessary to include both the Lion system
libpng and the brew libpng. Including the system libpng is necessary
because it is removed in later versions of OS X.
2016-11-03 10:49:13 -07:00
Christopher Snowhill
36d84cfa2b Update gbCheats.cpp
Bounds checking is important.
2016-11-02 21:28:58 -07:00
Christopher Snowhill
87630fdf84 Merge pull request #33 from rkitover/master
fix Mac post-build bundle/link broken in a775cc4
2016-11-02 19:06:55 -07:00
Rafael Kitover
ba043f4f97 fix Mac post-build bundle/link broken in a775cc4
Instead of checking if CMAKE_BUILD_TYPE is "Release", check that it is
**NOT** "Debug", because by default CMAKE_BUILD_TYPE is empty.
2016-11-02 19:05:18 -07:00
Christopher Snowhill
b7a633b70a Merge pull request #32 from rkitover/master
fix kbd controls on Mac + misc.
2016-11-02 18:34:32 -07:00
Rafael Kitover
a775cc409f fix kbd controls on Mac + misc.
After creating the drawing panel, call SetFocus() on it and use
Connect() to bind keyboard events from it. Add the wxWANTS_CHARS flag to
all DrawingArea subclasses so that wxEVT_CHAR_HOOK can be used instead
of wxEVT_KEY_DOWN, because it is more general and catches more keys.

Change the process_key_press function to return a bool indicating
whether a game control is currently pressed or not, this is used in the
key events to determine whether the event should be propagated or not.
If in a game key, do not propagate the event, otherwise it hits one of
the other controls and generates a beep sound.

The menu open/closed/highlighted events had to be turned off for Mac,
because the menubar is catching all keyboard events for some reason even
before they reach the drawing panel event handler. So on Mac the game
will not be paused when the menu is being used, this is not really a big
deal and can be fixed later.

Other improvements:

* do not bundle and link dylibs when CMAKE_BUILD_TYPE is not "Release",
  this makes for quicker debug builds

* finally make a generic PaintEv for the DrawingPanel abstract base
  class using dynamic_cast<> and Bind(), unfortunately this is not wx
  2.8 compatible

* set the default audio_buffers to 10 instead of 5, this completely or
  almost completely fixes sound stuttering during normal game play on
  Mac with OpenAL

* spew path info on startup only once
2016-11-02 18:14:58 -07:00
Zach Bacon
e609bb9c8c Merge pull request #31 from rkitover/master
Mac build improvements
2016-10-28 21:05:53 -04:00
Rafael Kitover
d18afb982f support for fully independent .app build on Mac
The resulting Mac wX .app build is now completely independent and
redistributable, only needs to be codesigned.

Necessary dylibs are bundled and linked in a POST_BUILD step using
third_party_libs_tool (included) for which I created a separate repo
here as well:

http://github.com/rkitover/mac-third-party-libs-tool

Turn off Cairo on Mac because it does not work for now.

Set RPATH on the executable to @loader_path/../Frameworks, the bundling
tool also does this.

Update .gitignore for Finder .DS_Store files.

TOOD:

* write a ./quickbuild for Mac and other platforms such as msys2 and
  linux
2016-10-27 22:06:06 -07:00
Rafael Kitover
2d9ec99c11 Mac build improvements
Move closer to allowing an "out of the box" distributable build for Mac:

* fix the icon for the .app

* link SDL2 statically, a PR has been sent to the original repo here:
  https://github.com/tcbrindle/sdl2-cmake-scripts/pull/9

* link SFML statically

TODO:

For a releasable build on OS X, system libs must be linked
dynamically while third party libs are linked statically or bundled. The
goal is to link them statically.

The two remaining libs that need static linking are PNG and wX.

For PNG a similar approach to the one used for SDL2 using pkg-config
should work fine and be simple to implement.

For wX things are more complicated. The default build of wX does not
include static libs, I will need to submit a PR for Homebrew to change
the default build to include both dynamic and static versions.
2016-10-26 16:58:21 -07:00
Zach Bacon
6899b97dbc Merge pull request #30 from rkitover/linux_fixes
Fix namespace issue, missing parens, missing func
2016-10-24 16:26:07 -04:00
Rafael Kitover
2b45cc7662 fix typo in CMakeLists.txt from 7a7a72f
Fix typo in the default cpp flag when CMAKE_BUILD_TYPE is "Release"
from `-NDEBUG` to `-DNDEBUG`.
2016-10-24 13:12:40 -07:00
Renato "Lond" Cerqueira
91a9b75d40 Fix namespace issue, missing parens, missing func 2016-10-24 12:40:43 -07:00
Zach Bacon
9200bba41d Merge pull request #29 from rkitover/master
fix DisplayConfig panel brkn in 7a7a72f
2016-10-24 14:57:57 -04:00
Rafael Kitover
d075bacf94 fix DisplayConfig panel brkn in 7a7a72f
Change the Scale control in the DisplayConfig dialog from a SpinCtrl to
a TextCtrl (for a simple text field) because GenericValidator does not
support using a double* with a SpinCtrl.

Also force adjustment on minimum size and resize the window when
necessary on panel creation, so that when the user sets the value
higher, the window size automatically adjusts.
2016-10-24 10:02:44 -07:00
Zach Bacon
179987f8c4 Merge pull request #27 from rkitover/master
fix backcompat on unix for config brkn in 7a7a72f
2016-10-23 17:05:46 -04:00
Rafael Kitover
0192d9a362 simplify DrawingPanel classes w. dynamic_cast<>
Use dynamic_cast<wxWindow*>(this) in the DrawingPanel abstract class to
implement GetWindow() and Delete() so that all concrete classes do not
have to duplicate the code.
2016-10-23 11:38:54 -07:00
Rafael Kitover
d543217f6a fix backcompat on unix for config brkn in 7a7a72f
Only load config files with the app name set to "visualboyadvance-m" on
Windows and Mac, on unix keep the default of "vbam" for now so that
users' ~/.vbam directories are found correctly.

TODO:

* migrate all of this properly to XDG paths on unix, giving users the
  option to move their config
2016-10-22 17:26:05 -07:00
Zach Bacon
db85f54b1c Merge pull request #26 from rkitover/mac_hidpi
Mac OS X HiDPI fixes + other misc
2016-10-22 11:04:03 -04:00
Rafael Kitover
7a7a72f2bd Mac OS X HiDPI fixes + other misc
Use a high-res surface on HiDPI (e.g. retina) Macs for the OpenGL
renderer, and scale window accordingly. Also fix fullscreen toggle not
working in HiDPI mode. And some other stuff.

Aside from the .app not being linked statically, the app is now fully
functional on Mac and ready to ship.

Full change details:

* add -DDEBUG or -DNDEBUG based on CMAKE_BUILD_TYPE (-DNDEBUG for
  Release and -DDEBUG for Debug)

* properly search for homebrew/macports/fink directories, and only add
  them if they exist

* fix building with wx debug support, when available

* use explicit OpenGL context on Mac too for new versions of wx

* add main_frame pointer in GameArea back to MainFrame, and a
  SetMainFrame(MainFrame* parent) public method to set it in guinit

* add full support for reading and writing double value config options
  (the GUI still needs to be updated for options that can take doubles,
  such as video_scale)

* change video_scale option (Display/Scale) to a double, putting a
  double value such as 3.6 in the config file works correctly

* add a HiDPIAware mixin class for GameArea and DrawingPanel, with the
  method HiDPIScaleFactor which returns the current window's
  backingScaleFactor

* change the GameArea sizing methods (DelBorder(), AdjustMinSize() and
  AdjustSize()) to divide the window size by the
  HiDPIAware::HiDPIScaleFactor so that the window is scaled properly

* change GameArea::ShowFullScreen to ignore fullscreen events for a
  maximized window on Mac, because maximized windows on OS X are
  actually native fullscreen windows

* change scale variables to double from int, and use std::ceil() to
  round scaled pixel or memory size values

* make a default base class DrawingPane::DrawingPanelInit() virtual
  method, call by all concrete class constructors based on the did_init
  flag

* call setWantsBestResolutionOpenGLSurface:YES on the view backing the
  wxGLCanvas for the OpenGL renderer (GLDrawingPanel) to get a high res
  OpenGL surface in HiDPI mode

* remove GLDrawingPanel::OnSize event, the OpenGL viewport resizes
  automatically without the need to call glViewport()

* do not hide the mouse pointer if the main frame has menus or dialogs
  open

* add variadic vbamDebug(const char* format, ...) function, active only
  #ifdef DEBUG, which sets the wx log target to STDERR and logs a
  message to it

* use full name of app "visualboyadvance-m" instead of "vbam" when
  getting configuration paths, this way the config is saved to
  ~/Library/Application Support/visualboyadvance-m rather than
  ~/Library/Application Support/vbam

* listen to the MENU_HIGHLIGHT_ALL event as well, as an extra way to
  check when the menus are open

* add public MainFrame::SetMenusOpened(bool state) method to force the
  main frame to change the internal menus_opened state, this is
  necessary because in HiDPI mode on Mac the keyboard accelerator for
  toggle fullscreen sends a menu open event, but not a menu close event,
  so on switch to fullscreen the state is changed to menus closed and
  the emu is unpaused

TODO:

* GUI option to change toggle fullscreen behavior between native and
  non-native fullscreen on Mac

* GUI support for double config values like Display/Scale

* add HiDPI support to simple renderer

* fix SDL sound, or disable the option

* fix Cairo suport on Mac, or disable the option

* use dynamic_cast<> to implement GetWindow() for DrawingPanel instead
  of pure virtual method, likewise for Delete()

* link .app statically by default so it can be shipped

* add Homebrew formula
2016-10-22 05:47:27 -07:00
Zach Bacon
258c7fec40 Merge pull request #25 from rkitover/master
rebind toggle fullscreen on mac
2016-10-18 17:35:40 -04:00
Rafael Kitover
61b1af9e16 rebind toggle fullscreen on mac
On OS X, the F11 key is by default bound to "show desktop", so is a poor
choice for the "ToggleFullscreen" accelerator.

The default key combo to take apps fullscreen should be Ctrl+Cmd+F
according to:

https://support.apple.com/kb/PH18744?locale=en_US

Fortunately, this was very easy to fix by using the "platform" attribute
in MainMenu.xrc .

NOTE: this does not give us "real" OS X fullscreen yet, where the app is
on its own space, like native fullscreen apps. In the future it would be
nice to add an option to do this.
2016-10-18 07:02:47 -07:00
Zach Bacon
153a5bf686 Merge pull request #24 from rkitover/master
make OpenGL default render method on OS X
2016-09-23 22:16:07 -04:00
Rafael Kitover
98e82247fc make OpenGL default render method on OS X
Currently the "simple" render method is way too slow on OS X, while
Cairo is completely broken. The OpenGL renderer, on the other hand, runs
with almost no stuttering.

Also fix dangling icon file after OS X build.
2016-09-22 11:00:47 -07:00
Zach Bacon
30801e1554 Merge pull request #23 from rkitover/master
improve OpenAL support on Mac and make it default
2016-09-20 20:38:38 -04:00
Rafael Kitover
cc7394f730 improve OpenAL support on Mac and make it default
Fix the dynamic library path for OpenAL to the framework included with
OS X.

Make option initialization set the AudioAPI to OpenAL on mac by default,
since SDL sound is currently completely broken.

There is a lot of stuttering, will have to look at that next.
2016-09-20 05:24:25 -07:00
Zach Bacon
9b65a9cf29 Merge pull request #22 from kookerus/PR
Added cast to uint8
2016-09-09 06:59:28 -04:00
Zach Bacon
b80ea69a12 Merge pull request #21 from sundhaug92/master
GDB: Range-checking for 'p' and 'P' ops
2016-09-09 06:59:04 -04:00
Taylor Rose
294296b226 Added cast to uint8 2016-09-08 18:08:23 -04:00
Martin Sundhaug
6176a57d81 Merge https://github.com/visualboyadvance-m/visualboyadvance-m 2016-09-07 18:49:54 -04:00
Martin Sundhaug
9ad1506ed7 GDB: Range check register in remoteReadRegister and remoteWriteRegister 2016-09-07 18:29:57 -04:00
Zach Bacon
f295f726b0 Merge pull request #20 from sundhaug92/patch-1
Fix: Typo in GDB implementation
2016-09-03 17:23:48 -04:00
Zach Bacon
03655a465f Fix some compile issues and desktop launcher issues 2016-09-03 17:07:30 -04:00
Martin Sundhaug
a80209e9b9 Fix: Typo in GDB implementation 2016-09-03 22:39:55 +02:00
1143 changed files with 284893 additions and 175432 deletions

47
.appveyor.yml Normal file
View File

@@ -0,0 +1,47 @@
version: '{build}'
image:
- Visual Studio 2017
build:
verbosity: detailed
configuration:
- Debug
- Release
platform:
- x64
- x86
environment:
matrix:
- STATIC: " "
- STATIC: "-static"
matrix:
fast_finish: true
install:
- set NINJA_URL="https://github.com/ninja-build/ninja/releases/download/v1.9.0/ninja-win.zip"
- appveyor DownloadFile %NINJA_URL% -FileName ninja.zip
- 7z x ninja.zip -oc:\projects\ninja > nul
- set PATH=c:\projects\ninja;%PATH%
- ninja --version
before_build:
- call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" %PLATFORM%
build_script:
- mkdir build
- cd build
- cmake .. -DVCPKG_TARGET_TRIPLET=%PLATFORM%-windows%STATIC% -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DENABLE_SDL=TRUE -G Ninja
- ninja
# only debug builds are console mode apps, in them test --help
test_script:
- if not %CONFIGURATION%==Release .\visualboyadvance-m.exe --help
- ctest -V
cache:
- c:\vcpkg\installed

View File

@@ -1,90 +0,0 @@
---
Language: Cpp
# BasedOnStyle: WebKit
AccessModifierOffset: -4
AlignAfterOpenBracket: DontAlign
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlinesLeft: false
AlignOperands: false
AlignTrailingComments: false
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: false
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
AfterClass: false
AfterControlStatement: false
AfterEnum: false
AfterFunction: true
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
BreakBeforeBinaryOperators: All
BreakBeforeBraces: WebKit
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: true
ColumnLimit: 0
CommentPragmas: '^ IWYU pragma:'
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: false
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
- Regex: '^(<|"(gtest|isl|json)/)'
Priority: 3
- Regex: '.*'
Priority: 1
IndentCaseLabels: false
IndentWidth: 4
IndentWrappedFunctionNames: false
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: Inner
ObjCBlockIndentWidth: 4
ObjCSpaceAfterProperty: true
ObjCSpaceBeforeProtocolList: true
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Left
ReflowComments: true
SortIncludes: true
SpaceAfterCStyleCast: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Cpp11
TabWidth: 8
UseTab: Never
...

1
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1 @@
github: rkitover

163
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View File

@@ -0,0 +1,163 @@
name: Bug Report
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.
On Linux 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: https://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."
placeholder: |
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: markdown
attributes:
value: "### Emulator Settings\nList the settings you are using."
- type: input
id: Video_Driver
attributes:
label: Video Driver
description: "Specify which video driver you're using (e.g., Simple, OpenGL)."
validations:
required: true
- type: input
id: Sound_Driver
attributes:
label: Sound Driver
description: "Specify which sound driver you're using (e.g., DirectSound, XAudio, OpenAL, SDL)."
validations:
required: true
- type: input
id: Scale_Filter
attributes:
label: Scale Filter
description: "Specify which scale filter you are using."
validations:
required: true
- type: markdown
attributes:
value: "### Specifications and Build Details\nList your system information, you can obtain this from MSINFO32 and the emulator's Titlebar."
- type: input
id: VBA-M
attributes:
label: VBA-M Version
description: "Include commit version number and whether you are using the 32-bit or 64-bit version."
validations:
required: true
- type: input
id: OS
attributes:
label: Operating System
description: "Include version and OS build number using WinVer if on Windows."
validations:
required: true
- type: dropdown
id: Linux_Display_Server
attributes:
label: Linux Display Server
description: "Specify whether using Xorg or Wayland."
options:
- Xorg
- Wayland
validations:
required: false
- type: input
id: CPU
attributes:
label: CPU Model
description: "Provide details of your CPU model."
validations:
required: true
- type: input
id: GPU
attributes:
label: GPU Model
description: "Provide details of your GPU model."
validations:
required: true
- type: input
id: RAM
attributes:
label: RAM Size
description: "Specify the amount of RAM installed."
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.
required: true

9
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,9 @@
blank_issues_enabled: false
contact_links:
- name: VBA-M Forum
url: https://board.visualboyadvance-m.org/
about: For general questions and support please join our forum or our
- name: VBA-M IRC Channel
url: https://web.libera.chat/#vba-m
about: For realtime discussion and support

46
.github/ISSUE_TEMPLATE/feature.yml vendored Normal file
View File

@@ -0,0 +1,46 @@
name: Feature request
description: >-
If you would like a new feature in Visual Boy Advance - M, please
open an issue here and fill out the template.
title: '[Feature request]: '
labels:
- enhancement
assignees:
- null
body:
- type: markdown
attributes:
value: "## BEFORE CREATING A FEATURE REQUEST"
- type: markdown
attributes:
value: |
Please try a nightly build from: https://nightly.visualboyadvance-m.org to see if your idea has already been implemented.
On Linux build master from source or use the edge snap.
And last but not least, search for existing requests via the filters bar on the issues page.
- type: textarea
id: feature-request
attributes:
label: Request box
description: What feature would you like to see added?
placeholder: Tell us what you would like to see added to Visual Boy Advance - M!
value: null
validations:
required: true
- type: textarea
id: reason-why
attributes:
label: Reason box
description: Provide reasoning for the new feature
placeholder: Tell us why you'd like to see this feature added
value: null
validations:
required: true
- type: textarea
id: Examples
attributes:
label: Examples
description: Provide examples of this feature
placeholder: Provide examples or screenshots of this feature in other software
value: null
validations:
required: true

View File

@@ -0,0 +1,57 @@
name: Claude Code Review
on:
pull_request:
types: [opened, synchronize]
# Optional: Only run on specific file changes
# paths:
# - "src/**/*.ts"
# - "src/**/*.tsx"
# - "src/**/*.js"
# - "src/**/*.jsx"
jobs:
claude-review:
# Optional: Filter by PR author
# if: |
# github.event.pull_request.user.login == 'external-contributor' ||
# github.event.pull_request.user.login == 'new-developer' ||
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Run Claude Code Review
id: claude-review
uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
prompt: |
REPO: ${{ github.repository }}
PR NUMBER: ${{ github.event.pull_request.number }}
Please review this pull request and provide feedback on:
- Code quality and best practices
- Potential bugs or issues
- Performance considerations
- Security concerns
- Test coverage
Use the repository's CLAUDE.md for guidance on style and conventions. Be constructive and helpful in your feedback.
Use `gh pr comment` with your Bash tool to leave your review as a comment on the PR.
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
# or https://docs.claude.com/en/docs/claude-code/sdk#command-line for available options
claude_args: '--allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)"'

50
.github/workflows/claude.yml vendored Normal file
View File

@@ -0,0 +1,50 @@
name: Claude Code
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
issues:
types: [opened, assigned]
pull_request_review:
types: [submitted]
jobs:
claude:
if: |
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
actions: read # Required for Claude to read CI results on PRs
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Run Claude Code
id: claude
uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
# This is an optional setting that allows Claude to read CI results on PRs
additional_permissions: |
actions: read
# Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
# prompt: 'Update the pull request description to include a summary of changes.'
# Optional: Add claude_args to customize behavior and configuration
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
# or https://docs.claude.com/en/docs/claude-code/sdk#command-line for available options
# claude_args: '--model claude-opus-4-1-20250805 --allowed-tools Bash(gh pr:*)'

34
.github/workflows/devkitpro-build.yml vendored Normal file
View File

@@ -0,0 +1,34 @@
name: Libretro Devkitpro
on: [push, pull_request]
jobs:
build:
strategy:
matrix:
# target_name: [ngc, wii, wiiu, switch]
target_name: [ngc, wii, wiiu]
build_type: [release, debug]
include:
- libretro_build: 'DEBUG=0'
build_type: release
- libretro_build: 'DEBUG=1'
build_type: debug
- devkit_container: 'devkitpro/devkitppc:latest'
target_name: ngc
- devkit_container: 'devkitpro/devkitppc:latest'
target_name: wii
- devkit_container: 'devkitpro/devkitppc:latest'
target_name: wiiu
# - devkit_container: 'devkitpro/devkita64:latest'
# target_name: switch
runs-on: ubuntu-latest
container: ${{ matrix.devkit_container }}
steps:
- name: Checkout the code
uses: actions/checkout@v4
with:
submodules: recursive
# Libretro build
- name: Build libretro core
run: make -C src/libretro ${{ matrix.libretro_build }} platform=${{ matrix.target_name }}

63
.github/workflows/macos-build.yml vendored Normal file
View File

@@ -0,0 +1,63 @@
name: macOS Latest
on: [push, pull_request]
jobs:
build:
strategy:
matrix:
build_type: [release, debug]
build_options: [default, link_off, translations_only, libretro]
include:
- cmake_build: '-DCMAKE_BUILD_TYPE=Release'
build_type: release
- cmake_build: '-DCMAKE_BUILD_TYPE=Debug'
build_type: debug
- cmake_options: '-DENABLE_LINK=OFF'
build_options: link_off
- cmake_options: '-DTRANSLATIONS_ONLY=ON'
build_options: translations_only
- libretro_build: 'DEBUG=0'
build_type: release
build_options: libretro
- libretro_build: 'DEBUG=1'
build_type: debug
build_options: libretro
exclude:
# Exclude debug/translations_only build
- build_type: debug
build_options: translations_only
runs-on: macos-latest
env:
NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM: 1
steps:
- name: Checkout the code
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install nix
uses: cachix/install-nix-action@v31
with:
nix_path: nixpkgs=channel:nixos-unstable
# Cmake build
- if: matrix.build_options != 'libretro'
name: Configure CMake
run: >-
nix-shell --command 'cmake -B build -G Ninja ${{ matrix.cmake_build }} -DENABLE_LTO=OFF ${{ matrix.cmake_options }}'
- if: matrix.build_options != 'libretro'
name: Build
run: >-
nix-shell --command 'ninja -C build'
# Libretro build
- if: matrix.build_options == 'libretro'
name: Build libretro core
run: >-
nix-shell --command 'make -C src/libretro ${{ matrix.libretro_build }}'
# Run tests
- if: matrix.build_options == 'default'
name: Run tests
run: >-
nix-shell --command 'cd build && ctest -j --output-on-failure'

64
.github/workflows/msys2-build.yml vendored Normal file
View File

@@ -0,0 +1,64 @@
name: MSYS2
on: [push, pull_request]
jobs:
build:
strategy:
matrix:
build_type: [release, debug]
build_options: [default, link_off, translations_only, libretro]
include:
- cmake_build: '-DCMAKE_BUILD_TYPE=Release'
build_type: release
- cmake_build: '-DCMAKE_BUILD_TYPE=Debug'
build_type: debug
- cmake_options: '-DENABLE_LINK=OFF'
build_options: link_off
- cmake_options: '-DTRANSLATIONS_ONLY=ON'
build_options: translations_only
- libretro_build: 'DEBUG=0'
build_type: release
build_options: libretro
- libretro_build: 'DEBUG=1'
build_type: debug
build_options: libretro
exclude:
# Exclude debug/translations_only build
- build_type: debug
build_options: translations_only
runs-on: windows-latest
env:
MSYSTEM: CLANG64
defaults:
run:
shell: msys2 {0}
steps:
- name: Checkout the code
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup msys2
uses: msys2/setup-msys2@v2
with:
msystem: CLANG64
update: true
- name: Install deps
run: >-
bash installdeps
# CMake build
- if: matrix.build_options != 'libretro'
name: Configure CMake
run: cmake -B build -G Ninja ${{ matrix.cmake_build }} -DENABLE_LTO=OFF ${{ matrix.cmake_options }}
- if: matrix.build_options != 'libretro'
name: Build
run: ninja -C build
- if: matrix.build_options != 'libretro'
name: Install
run: ninja -C build install
# Libretro build
- if: matrix.build_options == 'libretro'
name: Build libretro core
run: make -C src/libretro ${{ matrix.libretro_build }} CC=clang CXX=clang++

77
.github/workflows/ubuntu-build.yml vendored Normal file
View File

@@ -0,0 +1,77 @@
name: Ubuntu Latest
on: [push, pull_request]
jobs:
build:
strategy:
matrix:
build_compiler: [gcc, clang]
build_type: [release, debug]
# build_options: [default, link_off, translations_only, libretro]
build_options: [default, link_off, translations_only]
include:
- cmake_compiler: '-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++'
build_compiler: gcc
- cmake_compiler: '-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++'
build_compiler: clang
- cmake_build: '-DCMAKE_BUILD_TYPE=Release'
build_type: release
- cmake_build: '-DCMAKE_BUILD_TYPE=Debug'
build_type: debug
- cmake_options: '-DENABLE_LINK=OFF'
build_options: link_off
- cmake_options: '-DTRANSLATIONS_ONLY=ON'
build_options: translations_only
# - libretro_build: 'DEBUG=0'
# build_type: release
# build_options: libretro
# - libretro_build: 'DEBUG=1'
# build_type: debug
# build_options: libretro
exclude:
# Exclude debug/translations_only build
- build_type: debug
build_options: translations_only
- build_type: release
build_options: translations_only
build_compiler: clang
runs-on: ubuntu-latest
steps:
- name: Checkout the code
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Dependencies
run: |
sudo add-apt-repository ppa:hrzhu/sdl3-backport
sudo apt update
bash installdeps
if [ "${{ matrix.build_compiler }}" = clang ]; then
sudo apt -y install clang
fi
- name: Install xvfb
run: sudo apt -y install xvfb
# CMake build
- if: matrix.build_options != 'libretro'
name: Configure CMake
run: >-
cmake -B build -G Ninja ${{ matrix.cmake_compiler }} ${{ matrix.cmake_build }} ${{ matrix.cmake_options }}
- if: matrix.build_options != 'libretro'
name: Build
run: ninja -C build
- if: matrix.build_options != 'libretro'
name: Install
run: sudo ninja -C build install
# Libretro build
# - if: matrix.build_options == 'libretro'
# name: Build libretro core
# run: make -C src/libretro ${{ matrix.libretro_build }}
# Run tests
- if: matrix.build_options == 'default'
name: Run tests
run: cd build && xvfb-run ctest -j --output-on-failure

View File

@@ -0,0 +1,60 @@
name: Visual Studio
on: [push, pull_request]
jobs:
build:
strategy:
matrix:
msvc_arch: ['x64', 'amd64_x86', 'amd64_arm64']
# TODO: Re-add "Visual Studio 17 2022" once it's working.
cmake_generator: ['Ninja']
build_type: [release, debug]
build_options: [default, link_off, translations_only]
include:
- cmake_build: '-DCMAKE_BUILD_TYPE=Release'
build_type: release
- cmake_build: '-DCMAKE_BUILD_TYPE=Debug'
build_type: debug
- cmake_options: '-DENABLE_LINK=OFF'
build_options: link_off
- cmake_options: '-DTRANSLATIONS_ONLY=ON'
build_options: translations_only
- cmake_vcpkg_triplet: 'x64-windows-static'
msvc_arch: x64
- cmake_vcpkg_triplet: 'x86-windows-static'
msvc_arch: amd64_x86
- cmake_vcpkg_triplet: 'arm64-windows-static'
msvc_arch: amd64_arm64
exclude:
# Exclude debug/translations_only build
- build_type: debug
build_options: translations_only
- build_type: release
build_options: translations_only
msvc_arch: amd64_x86
- build_type: release
build_options: translations_only
msvc_arch: amd64_arm64
runs-on: windows-latest
steps:
- name: Checkout the code
uses: actions/checkout@v4
with:
submodules: recursive
- name: Prepare Visual Studio environment
uses: ilammy/msvc-dev-cmd@v1.13.0
with:
arch: ${{ matrix.msvc_arch }}
- name: Configure
run: >-
cmake -B build -G ${{ matrix.cmake_generator }} -DVCPKG_TARGET_TRIPLET=${{ matrix.cmake_vcpkg_triplet }} ${{ matrix.cmake_build }} ${{ matrix.cmake_options }}
- name: Build
run: cmake --build build
# Run tests
- if: matrix.build_options == 'default' && matrix.msvc_arch != 'amd64_arm64'
name: Run tests
run: cd build && ctest -j --output-on-failure

28
.gitignore vendored
View File

@@ -1,8 +1,22 @@
src/wx/builtin-over.h
src/wx/builtin-xrc.h
src/wx/cmd-evtable.h
src/wx/cmdhandlers.h
src/wx/cmdtab.cpp
src/wx/wxvbam.xrs
build/
/*build*/*
.vs/*
.idea
*.o
*.so
*.dll
*.exe
.vscode/
# clangd files
compile_commands.json
.cache/
# vim swap files
*.sw?
*.un~
# mac finder crap
*.DS_Store
# online updates header
src/wx/winsparkle-path.h

201
.gitlab-ci.yml Normal file
View File

@@ -0,0 +1,201 @@
# DESCRIPTION: GitLab CI/CD for libRetro (NOT FOR GitLab-proper)
##############################################################################
################################# BOILERPLATE ################################
##############################################################################
# Core definitions
.core-defs:
variables:
GIT_SUBMODULE_STRATEGY: recursive
JNI_PATH: src/libretro
MAKEFILE_PATH: src/libretro
CORENAME: vbam
# Inclusion templates, required for the build to work
include:
################################## DESKTOPS ################################
# Windows 64-bit
- project: 'libretro-infrastructure/ci-templates'
file: '/windows-x64-mingw.yml'
# Windows 32-bit
- project: 'libretro-infrastructure/ci-templates'
file: '/windows-i686-mingw.yml'
# Linux 64-bit
- project: 'libretro-infrastructure/ci-templates'
file: '/linux-x64.yml'
# Linux 32-bit
- project: 'libretro-infrastructure/ci-templates'
file: '/linux-i686.yml'
# MacOS 64-bit
- project: 'libretro-infrastructure/ci-templates'
file: '/osx-x64.yml'
# MacOS ARM 64-bit
- project: 'libretro-infrastructure/ci-templates'
file: '/osx-arm64.yml'
################################## CELLULAR ################################
# Android
- project: 'libretro-infrastructure/ci-templates'
file: '/android-jni.yml'
# iOS
- project: 'libretro-infrastructure/ci-templates'
file: '/ios-arm64.yml'
# iOS (armv7)
- project: 'libretro-infrastructure/ci-templates'
file: '/ios9.yml'
################################## CONSOLES ################################
# PlayStation Vita
- project: 'libretro-infrastructure/ci-templates'
file: '/vita-static.yml'
# Nintendo GameCube
- project: 'libretro-infrastructure/ci-templates'
file: '/ngc-static.yml'
# Nintendo Wii
- project: 'libretro-infrastructure/ci-templates'
file: '/wii-static.yml'
# Nintendo WiiU
- project: 'libretro-infrastructure/ci-templates'
file: '/wiiu-static.yml'
# Nintendo Switch
- project: 'libretro-infrastructure/ci-templates'
file: '/libnx-static.yml'
# tvOS (AppleTV)
- project: 'libretro-infrastructure/ci-templates'
file: '/tvos-arm64.yml'
#################################### MISC ##################################
# Stages for building
stages:
- build-prepare
- build-shared
- build-static
##############################################################################
#################################### STAGES ##################################
##############################################################################
#
################################### DESKTOPS #################################
# Windows 64-bit
libretro-build-windows-x64:
extends:
- .libretro-windows-x64-mingw-make-default
- .core-defs
# Windows 32-bit
libretro-build-windows-i686:
extends:
- .libretro-windows-i686-mingw-make-default
- .core-defs
# Linux 64-bit
libretro-build-linux-x64:
extends:
- .libretro-linux-x64-make-default
- .core-defs
# Linux 32-bit
libretro-build-linux-i686:
extends:
- .libretro-linux-i686-make-default
- .core-defs
# MacOS 64-bit
libretro-build-osx-x64:
extends:
- .libretro-osx-x64-make-default
- .core-defs
# MacOS ARM 64-bit
libretro-build-osx-arm64:
extends:
- .libretro-osx-arm64-make-default
- .core-defs
################################### CELLULAR #################################
# Android ARMv7a
android-armeabi-v7a:
extends:
- .libretro-android-jni-armeabi-v7a
- .core-defs
# Android ARMv8a
android-arm64-v8a:
extends:
- .libretro-android-jni-arm64-v8a
- .core-defs
# Android 64-bit x86
android-x86_64:
extends:
- .libretro-android-jni-x86_64
- .core-defs
# Android 32-bit x86
android-x86:
extends:
- .libretro-android-jni-x86
- .core-defs
# iOS
libretro-build-ios-arm64:
extends:
- .libretro-ios-arm64-make-default
- .core-defs
# iOS (armv7) [iOS 9 and up]
libretro-build-ios9:
extends:
- .libretro-ios9-make-default
- .core-defs
# tvOS
libretro-build-tvos-arm64:
extends:
- .libretro-tvos-arm64-make-default
- .core-defs
################################### CONSOLES #################################
# PlayStation Vita
libretro-build-vita:
extends:
- .libretro-vita-static-retroarch-master
- .core-defs
# Nintendo GameCube
libretro-build-ngc:
extends:
- .libretro-ngc-static-retroarch-master
- .core-defs
# Nintendo Wii
libretro-build-wii:
extends:
- .libretro-wii-static-retroarch-master
- .core-defs
# Nintendo WiiU
libretro-build-wiiu:
extends:
- .libretro-wiiu-static-retroarch-master
- .core-defs
# Nintendo Switch
libretro-build-libnx-aarch64:
extends:
- .libretro-libnx-static-retroarch-master
- .core-defs

9
.gitmodules vendored
View File

@@ -1,3 +1,6 @@
[submodule "dependencies"]
path = dependencies
url = https://github.com/visualboyadvance-m/dependencies.git
[submodule "win32-deps"]
path = win32-deps
url = https://github.com/visualboyadvance-m/win32-deps.git
[submodule "third_party/googletest"]
path = third_party/googletest
url = https://github.com/google/googletest.git

101
.travis.yml Normal file
View File

@@ -0,0 +1,101 @@
---
cache: ccache
dist: xenial
language: cpp
services: xvfb
sudo: required
matrix:
fast_finish: true
include:
- env: BUILD_ENV=ubuntu-bionic XVFB_RUN=1
dist: bionic
# - env: BUILD_ENV=utf8 XVFB_RUN=1
# dist: bionic
# - env: BUILD_ENV=nostl XVFB_RUN=1
# dist: bionic
- env: BUILD_ENV=ubuntu-xenial XVFB_RUN=1
- env: BUILD_ENV=ubuntu-xenial-minimal INSTALLDEPS_ARGS="--no-openal --no-ffmpeg" XVFB_RUN=1
- env: BUILD_ENV=ubuntu-xenial XVFB_RUN=1 CC=clang CXX=clang++
- env: BUILD_ENV=mingw-w64
- env: BUILD_ENV=mingw-w32
- env: BUILD_ENV=libretro
- env: BUILD_ENV=libretro CC=clang CXX=clang++
- env: BUILD_ENV=mac
os: osx
osx_image: xcode12
install: export PATH="/usr/local/opt/ccache/libexec:$PATH"
before_install:
- |
case "$BUILD_ENV" in
mingw-w64 )
ARG=MinGW-w64-x86_64
CMAKE=/usr/lib/mxe/usr/bin/x86_64-w64-mingw32.static-cmake
PATH="$PATH:/usr/lib/mxe/usr/bin"
;;
mingw-w32 )
ARG=MinGW-w64-i686
CMAKE=/usr/lib/mxe/usr/bin/i686-w64-mingw32.static-cmake
PATH="$PATH:/usr/lib/mxe/usr/bin"
;;
* )
CMAKE=cmake
;;
esac
- |
if [ "$BUILD_ENV" != libretro ]; then
./installdeps $INSTALLDEPS_ARGS $ARG
DIR=build
else
DIR=src/libretro
fi
before_script:
- |
if [ -n "$ENABLE_SDL" ]; then
CMAKE_ARGS="$CMAKE_ARGS -DENABLE_SDL=ON"
fi
case "$BUILD_ENV" in
utf8|nostl)
sudo apt-get -y install stow libwxgtk3.0-gtk3-dev
(
cd /
sudo curl -LO 'http://cachemiss.com/files/wxWidgets-gtk3-'"$BUILD_ENV"'-3.0.5.tar.gz'
sudo tar zxvf wxWidgets-gtk3-"$BUILD_ENV"-3.0.5.tar.gz
cd /usr/local/stow
sudo stow wxWidgets-gtk3-"$BUILD_ENV"-3.0.5
)
export LD_LIBRARY_PATH=/usr/local/lib
CMAKE_ARGS="$CMAKE_ARGS -DwxWidgets_CONFIG_EXECUTABLE=/usr/local/bin/wx-config -DWXRC=/usr/local/bin/wxrc"
;;
esac
script:
- mkdir -p -- "$DIR"
- cd -- "$DIR"
- if [ "$BUILD_ENV" != libretro ]; then $CMAKE $CMAKE_ARGS ..; fi
- if [ "$BUILD_ENV" != libretro ]; then ninja; else make; fi
- if [ "$BUILD_ENV" != libretro ]; then DESTDIR=/tmp/VBAM ninja install; fi
- |
if [ "$BUILD_ENV" = mac ]; then
./$PRGNAM.app/Contents/MacOS/$PRGNAM --help
elif [ -n "$XVFB_RUN" ]; then
xvfb-run -a ./$PRGNAM --help
fi
ctest -V
env:
global:
- CMAKE_ARGS="-G Ninja"
- ENABLE_SDL=1
- MAKEFLAGS="-j2"
- PRGNAM=visualboyadvance-m
notifications:
webhooks:
urls:
- https://webhooks.gitter.im/e/b273e1f74f164855d115
on_success: change # options: [always|never|change] default: always
on_failure: always # options: [always|never|change] default: always
on_start: never # options: [always|never|change] default: always

10
.tx/config Executable file
View File

@@ -0,0 +1,10 @@
[main]
host = https://www.transifex.com
[o:bgk:p:vba-m:r:wxvbam]
file_filter = po/wxvbam/<lang>.po
source_file = po/wxvbam/wxvbam.pot
type = PO
source_lang = en
minimum_perc = 0

1045
CHANGELOG.md Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,567 +1,251 @@
# The project's name is VBA-M it uses C and C++ code
PROJECT(VBA-M C CXX)
cmake_minimum_required(VERSION 3.19)
cmake_policy(VERSION 3.19...3.28.3)
cmake_minimum_required( VERSION 3.1.0 )
if( COMMAND cmake_policy )
cmake_policy( SET CMP0003 NEW )
cmake_policy( SET CMP0005 OLD )
endif( COMMAND cmake_policy )
SET( CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeScripts )
#Output all binaries at top level
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
# Use new link library de-duplication behavior.
if(POLICY CMP0156)
cmake_policy(SET CMP0156 NEW)
endif()
if(POLICY CMP0179)
cmake_policy(SET CMP0179 NEW)
endif()
#if(POLICY CMP0181)
# cmake_policy(SET CMP0181 NEW)
#endif()
option( ENABLE_SDL "Build the SDL port" ON )
option( ENABLE_GTK "Build the GTK+ GUI" OFF )
option( ENABLE_GTK3 "Build the GTK+ GUI" OFF )
option( ENABLE_WX "Build the wxWidgets port" ON )
option( ENABLE_DEBUGGER "Enable the debugger" ON )
option( ENABLE_NLS "Enable translations" ON )
option( ENABLE_ASM_CORE "Enable x86 ASM CPU cores" OFF )
option( ENABLE_ASM_SCALERS "Enable x86 ASM graphic filters" OFF )
option( ENABLE_LINK "Enable GBA linking functionality" OFF )
option( ENABLE_LIRC "Enable LIRC support" OFF )
option( ENABLE_FFMPEG "Enable ffmpeg A/V recording" OFF )
if(ENABLE_ASM_SCALERS)
option( ENABLE_MMX "Enable MMX" OFF )
endif(ENABLE_ASM_SCALERS)
option( ENABLE_GBA_LOGGING "Enable extended GBA logging" ON )
if( ENABLE_GBA_LOGGING )
ADD_DEFINITIONS (-DGBA_LOGGING )
endif( ENABLE_GBA_LOGGING )
if(ENABLE_MMX)
ADD_DEFINITIONS (-DMMX)
endif(ENABLE_MMX)
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
# The SDL port can't be built without debugging support
if( NOT ENABLE_DEBUGGER AND ENABLE_SDL )
message( SEND_ERROR "The SDL port can't be built without debugging support" )
endif( NOT ENABLE_DEBUGGER AND ENABLE_SDL )
if(WIN32)
include(RemoveStrawberryPerlFromPATH)
# Set the version number with -DVERSION=X.X.X-uber
IF( NOT VERSION )
#Will need to change this over to git
SET( VERSION "https://github.com/visualboyadvance-m/visualboyadvance-m" )
find_program(POWERSHELL
NAMES powershell.exe pwsh.exe
HINTS "/Windows/System32/WindowsPowerShell/v1.0"
REQUIRED)
else()
find_program(POWERSHELL pwsh)
endif()
#openmw does this
if(EXISTS ${PROJECT_SOURCE_DIR}/.git)
if(NOT EXISTS ${PROJECT_SOURCE_DIR}/.git/shallow)
find_package(Git)
if(GIT_FOUND)
include(GetGitRevisionDescription)
get_git_head_revision(REFSPEC COMMITHASH)
SET( VERSION "GIT Commit: " ${COMMITHASH} )
else(GIT_FOUND)
message(WARNING "Git executable not found")
endif(GIT_FOUND)
else(NOT EXISTS ${PROJECT_SOURCE_DIR}/.git/shallow)
message(STATUS "Shallow Git clone detected, not attempting to retrieve version info")
endif(NOT EXISTS ${PROJECT_SOURCE_DIR}/.git/shallow)
endif(EXISTS ${PROJECT_SOURCE_DIR}/.git)
ENDIF( NOT VERSION )
if(UPDATE_APPCAST)
include(UpdateAppcast)
endif()
if(TAG_RELEASE)
include(MakeReleaseCommitAndTag)
endif()
option(VCPKG_BINARY_PACKAGES "Use vcpkg binary packages" TRUE)
# Fill in SDLMAIN_LIBRARY on OS X manually to avoid using SDLMain.m
# OS X users will have to compile and install SDL from source.
if( APPLE AND ENABLE_SDL )
ADD_DEFINITIONS (-DwxMAC_USE_CORE_GRAPHICS )
SET(SDL2MAIN_LIBRARY "-lSDL2main")
endif( APPLE AND ENABLE_SDL )
set(VCPKG_DEPS zlib bzip2 "liblzma[tools]" pthreads gettext-libintl wxwidgets nanosvg)
# Add support for MacPorts and Homebrew on OS X
# and ObjectiveC code
IF(APPLE)
SET(CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH};/usr/local/include;/opt/local/include")
SET(CMAKE_LIBRARY_PATH "${CMAKE_LIBRARY_PATH};/usr/local/lib;/opt/local/lib")
SET(CMAKE_PROGRAM_PATH "${CMAKE_PROGRAM_PATH};/usr/local/bin;/opt/local/bin")
link_directories("/usr/local/lib")
include_directories("/usr/local/include")
link_directories("/opt/local/lib")
include_directories("/opt/local/include")
# and compile as Objective-C++ for ObjectiveC #ifdefs
SET(CMAKE_CXX_COMPILE_OBJECT "<CMAKE_CXX_COMPILER> -x objective-c++ <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")
ENDIF()
# We do not support amd64 asm yet
IF((ENABLE_ASM_CORE OR ENABLE_ASM_SCALERS OR ENABLE_MMX)
AND CMAKE_SYSTEM_PROCESSOR MATCHES "[xX]86|[aA][mM][dD]64|[xX]64"
AND CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
MESSAGE(FATAL_ERROR "The options ASM_CORE, ASM_SCALERS and MMX are not supported on AMD64 yet.")
ENDIF()
# Check for nasm
if( ENABLE_ASM_SCALERS )
IF(EXISTS "/usr/local/bin/nasm")
SET(CMAKE_ASM_NASM_COMPILER "/usr/local/bin/nasm")
ELSEIF(EXISTS "/opt/local/bin/nasm")
SET(CMAKE_ASM_NASM_COMPILER "/opt/local/bin/nasm")
ELSE()
SET(CMAKE_ASM_NASM_COMPILER "/usr/bin/nasm")
ENDIF()
ENABLE_LANGUAGE(ASM_NASM)
endif( ENABLE_ASM_SCALERS )
# Look for some dependencies using CMake scripts
FIND_PACKAGE ( ZLIB REQUIRED )
FIND_PACKAGE ( PNG REQUIRED )
FIND_PACKAGE ( OpenGL REQUIRED )
FIND_PACKAGE ( SDL2 REQUIRED )
if( ENABLE_LINK )
if( WIN32 )
set(SFML_STATIC_LIBRARIES TRUE)
endif( WIN32 )
FIND_PACKAGE ( SFML 2 COMPONENTS network system )
endif( ENABLE_LINK )
# set the standard libraries all ports use
SET(VBAMCORE_LIBS
vbamcore
fex
${SDL2_LIBRARY}
${SFML_LIBRARIES}
${OPENGL_LIBRARIES}
${ZLIB_LIBRARY}
${PNG_LIBRARY}
set(VCPKG_DEPS_OPTIONAL
"sdl3[vulkan]" ENABLE_SDL3
"sdl2[samplerate]" ENABLE_SDL2
openal-soft ENABLE_OPENAL
"ffmpeg[x264,x265]" ENABLE_FFMPEG
faudio ENABLE_FAUDIO
)
if(ENABLE_FFMPEG)
FIND_PACKAGE ( PkgConfig REQUIRED )
include(Set-Toolchain-vcpkg)
PKG_CHECK_MODULES(FFMPEG REQUIRED libavcodec libavformat libswscale libavutil)
endif(ENABLE_FFMPEG)
# Use ccache if available and not already enabled on the command line.
# This has to be done before the project() call.
if(NOT CMAKE_CXX_COMPILER_LAUNCHER)
find_program(CCACHE_EXECUTABLE ccache)
if(CCACHE_EXECUTABLE)
message(STATUS "Enabling ccache")
if(NOT ENABLE_FFMPEG)
ADD_DEFINITIONS(-DNO_FFMPEG)
endif(NOT ENABLE_FFMPEG)
set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_EXECUTABLE} CACHE STRING "C compiler launcher" FORCE)
set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_EXECUTABLE} CACHE STRING "C++ compiler launcher" FORCE)
set(CMAKE_ASM_NASM_COMPILER_LAUNCHER ${CCACHE_EXECUTABLE} CACHE STRING "nasm assembler launcher" FORCE)
endif()
endif()
IF( ENABLE_LIRC )
SET( WITHLIRC 1 )
ELSE( ENABLE_LIRC )
SET( WITHLIRC 0 )
ENDIF( ENABLE_LIRC )
find_package(Git)
# Set the default install dir
IF( NOT DATA_INSTALL_DIR )
SET( DATA_INSTALL_DIR "share/vbam" )
ENDIF( NOT DATA_INSTALL_DIR )
# Make sure we pull in the submodules on windows and mingw.
if(GIT_FOUND AND WIN32)
# Win32 deps submodule
set(SUBMODULE_MANUAL_UPDATE FALSE)
SET( PKGDATADIR ${CMAKE_INSTALL_PREFIX}/${DATA_INSTALL_DIR} )
if(EXISTS "${CMAKE_SOURCE_DIR}/.git" AND NOT EXISTS "${CMAKE_SOURCE_DIR}/win32-deps/mingw-xaudio/include")
set(SUBMODULE_MANUAL_UPDATE TRUE)
execute_process(
COMMAND "${GIT_EXECUTABLE}" submodule update --init --remote --recursive
RESULT_VARIABLE SUBMODULE_UPDATE_STATUS
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
)
endif()
# Set the configuration file location
IF( NOT SYSCONFDIR )
SET( SYSCONFDIR "/etc" )
ENDIF( NOT SYSCONFDIR )
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/win32-deps/mingw-xaudio/include")
if(NOT (SUBMODULE_MANUAL_UPDATE AND SUBMODULE_UPDATE_STATUS EQUAL 0))
message(FATAL_ERROR "Please pull in git submodules, e.g.\nrun: git submodule update --init --remote --recursive")
endif()
endif()
endif()
# C defines
ADD_DEFINITIONS (-DHAVE_NETINET_IN_H -DHAVE_ARPA_INET_H -DHAVE_ZLIB_H -DFINAL_VERSION -DSDL -DUSE_OPENGL -DSYSCONFDIR='"${SYSCONFDIR}"' -DWITH_LIRC='${WITHLIRC}')
ADD_DEFINITIONS (-DVERSION='"${VERSION}"' -DPKGDATADIR='"${PKGDATADIR}"' -DPACKAGE='')
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED True)
if( ENABLE_LINK )
# IPC linking code needs sem_timedwait which can be either in librt or pthreads
FIND_LIBRARY(RT_LIB rt)
IF(RT_LIB)
SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${RT_LIB})
SET(VBAMCORE_LIBS ${VBAMCORE_LIBS} ${RT_LIB})
ENDIF(RT_LIB)
project(VBA-M C CXX)
FIND_LIBRARY(PTHREAD_LIB pthread)
IF(PTHREAD_LIB)
SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${PTHREAD_LIB})
SET(VBAMCORE_LIBS ${VBAMCORE_LIBS} ${PTHREAD_LIB})
ENDIF(PTHREAD_LIB)
if(APPLE)
include(CheckLanguage)
include(MetalShaderSupport)
INCLUDE(CheckFunctionExists)
CHECK_FUNCTION_EXISTS(sem_timedwait SEM_TIMEDWAIT)
IF( SEM_TIMEDWAIT)
ADD_DEFINITIONS (-DHAVE_SEM_TIMEDWAIT)
ENDIF( SEM_TIMEDWAIT)
else( ENABLE_LINK )
ADD_DEFINITIONS (-DNO_LINK)
endif( ENABLE_LINK )
execute_process(
COMMAND xcrun -f metal
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE CMAKE_Metal_COMPILER
)
# The debugger is enabled by default
if( NOT ENABLE_DEBUGGER )
ADD_DEFINITIONS (-DNO_DEBUGGER)
else( NOT ENABLE_DEBUGGER )
ADD_DEFINITIONS (-DBKPT_SUPPORT)
endif( NOT ENABLE_DEBUGGER )
if(NOT CMAKE_Metal_COMPILER)
check_language(Metal)
endif()
# The ASM core is disabled by default because we don't know on which platform we are
IF( NOT ENABLE_ASM_CORE )
ADD_DEFINITIONS (-DC_CORE)
ENDIF( NOT ENABLE_ASM_CORE )
if(CMAKE_Metal_COMPILER)
enable_language(Metal)
endif()
endif()
include(CTest)
include(FetchContent)
include(GNUInstallDirs)
include(Architecture)
include(Options)
include(Toolchain)
include(Dependencies)
# We target Windows XP for 32 bit Windows builds.
if(WIN32 AND X86)
add_compile_definitions(-DWINVER=0x0501 -D_WIN32_WINNT=0x0501)
endif()
# Disable tests when not in a git checkout.
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/.git")
set(BUILD_TESTING OFF)
endif()
# Configure gtest
if(BUILD_TESTING)
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
set(INSTALL_GTEST OFF CACHE BOOL "" FORCE)
if(NOT EXISTS third_party/googletest/CMakeLists.txt)
execute_process(
COMMAND git submodule update --init --recursive -- third_party/googletest
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
endif()
if(EXISTS third_party/googletest/CMakeLists.txt)
add_subdirectory(./third_party/googletest)
include(GoogleTest)
else()
set(BUILD_TESTING OFF)
endif()
endif()
if(NOT CMAKE_PREFIX_PATH AND (NOT ("$ENV{CMAKE_PREFIX_PATH}" STREQUAL "")))
set(CMAKE_PREFIX_PATH "$ENV{CMAKE_PREFIX_PATH}")
endif()
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build Type" FORCE)
elseif(NOT CMAKE_BUILD_TYPE MATCHES "^(Release|Debug|RelWithDebInfo|MinSizeRel)$")
message(FATAL_ERROR "Invalid CMAKE_BUILD_TYPE: '${CMAKE_BUILD_TYPE}', must be one of: 'Release', 'Debug', 'RelWithDebInfo' or 'MinSizeRel'")
endif()
set(MSYS OFF)
if(NOT "$ENV{MSYSTEM_PREFIX}" STREQUAL "")
set(MSYS ON)
endif()
if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
include(GitTagVersion)
git_version(VBAM_VERSION VBAM_REVISION VBAM_VERSION_RELEASE)
# only use the plugin to tie the configure state to the sha to force rebuilds
# of files that depend on version.h
include(GetGitRevisionDescription)
get_git_head_revision(REFSPEC COMMITHASH)
# Make sure old tags are gone from all clones.
execute_process(
COMMAND ${GIT_EXECUTABLE} tag -l
OUTPUT_VARIABLE git_tags
OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
string(REGEX REPLACE ";" "\\\\;" git_tags_lines "${git_tags}")
string(REGEX REPLACE "\r?\n" ";" git_tags_lines "${git_tags_lines}")
set(found_old_tags FALSE)
foreach(tag ${git_tags_lines})
if(NOT tag MATCHES "^v[0-9]")
set(found_old_tags TRUE)
break()
endif()
endforeach()
if(found_old_tags)
# Delete all tags and fetch them from the origin.
foreach(tag ${git_tags_lines})
execute_process(
COMMAND ${GIT_EXECUTABLE} tag -d ${tag}
OUTPUT_QUIET
ERROR_QUIET
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
endforeach()
execute_process(
COMMAND ${GIT_EXECUTABLE} fetch --tags origin
OUTPUT_QUIET
ERROR_QUIET
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
endif()
endif()
# no git or no tags, use ChangeLog
if(NOT VBAM_VERSION)
include(ChangeLogVersion)
changelog_version(VBAM_VERSION VBAM_REVISION VBAM_VERSION_RELEASE)
endif()
# Enable internationalization
if( ENABLE_NLS )
SET( LOCALEDIR ${CMAKE_INSTALL_PREFIX}/share/locale )
ADD_DEFINITIONS ( -DENABLE_NLS )
ADD_DEFINITIONS ( -DLOCALEDIR=\\\"${LOCALEDIR}\\\" )
# for now, only GBALink.cpp uses gettext() directly
IF(APPLE)
# use Homebrew gettext if available
IF(EXISTS "/usr/local/opt/gettext")
SET(CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH};/usr/local/opt/gettext/include")
SET(CMAKE_LIBRARY_PATH "${CMAKE_LIBRARY_PATH};/usr/local/opt/gettext/lib")
SET(CMAKE_PROGRAM_PATH "${CMAKE_PROGRAM_PATH};/usr/local/opt/gettext/bin")
ENDIF()
ENDIF()
IF(ENABLE_LINK)
FIND_PATH(LIBINTL_INC libintl.h )
FIND_LIBRARY(LIBINTL_LIB intl )
IF(LIBINTL_LIB)
SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${LIBINTL_LIB})
SET(VBAMCORE_LIBS ${VBAMCORE_LIBS} ${LIBINTL_LIB})
ENDIF(LIBINTL_LIB)
INCLUDE(CheckFunctionExists)
CHECK_FUNCTION_EXISTS(gettext GETTEXT_FN)
IF(NOT LIBINTL_INC OR NOT GETTEXT_FN)
MESSAGE(FATAL_ERROR "NLS requires libintl/gettext")
ENDIF(NOT LIBINTL_INC OR NOT GETTEXT_FN)
INCLUDE_DIRECTORIES(${LIBINTL_INC})
ENDIF(ENABLE_LINK)
endif( ENABLE_NLS )
set(LOCALEDIR ${CMAKE_INSTALL_PREFIX}/share/locale)
# Compiler flags
IF(WIN32)
SET( CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -I$(CMAKE_SOURCE_DIR)/src/filters/hq/asm/ -O1 -w-orphan-labels")
ELSEIF(APPLE)
SET( CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -I$(CMAKE_SOURCE_DIR)/src/filters/hq/asm/ -O1 -DMACHO -w-orphan-labels")
ELSEIF("${CMAKE_SYSTEM}" MATCHES "Linux")
SET( CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -I$(CMAKE_SOURCE_DIR)/src/filters/hq/asm/ -O1 -DELF -w-orphan-labels")
ENDIF()
if(NOT TRANSLATIONS_ONLY)
add_subdirectory(third_party/include/nonstd)
add_subdirectory(third_party/include/stb)
add_subdirectory(third_party/include/ghc)
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "[xX]86|[aA][mM][dD]64|[xX]64" AND CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
ADD_DEFINITIONS( -D__AMD64__ )
SET(CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -D__AMD64__")
ENDIF()
if(ENABLE_LINK)
include_directories(third_party/sfml/include)
add_subdirectory(third_party/sfml/src/SFML/System EXCLUDE_FROM_ALL)
add_subdirectory(third_party/sfml/src/SFML/Network EXCLUDE_FROM_ALL)
set(SFML_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/third_party/sfml/include)
set(SFML_LIBRARIES sfml-system sfml-network)
endif()
SET( CMAKE_C_FLAGS_RELEASE "-O3")
SET( CMAKE_CXX_FLAGS_RELEASE "-O3")
SET( CMAKE_C_FLAGS_DEBUG "-g -Wall")
SET( CMAKE_CXX_FLAGS_DEBUG "-g -Wall")
add_subdirectory(src/core)
add_subdirectory(src/components)
add_subdirectory(src/sdl)
endif()
if (WIN32)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static-libgcc -static -I./dependencies/include")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++ -static -I./dependencies/include")
endif (WIN32)
add_subdirectory(src/wx)
add_subdirectory(po/wxvbam)
add_subdirectory (fex)
SET(SRC_MAIN
src/Util.cpp
src/common/ConfigManager.cpp
src/common/dictionary.c
src/common/iniparser.c
src/common/Patch.cpp
src/common/memgzio.c
src/common/SoundSDL.cpp
)
SET(HDR_MAIN
src/AutoBuild.h
src/System.h
src/Util.h
src/version.h
src/common/array.h
src/common/ConfigManager.h
src/common/dictionary.h
src/common/iniparser.h
src/common/memgzio.h
src/common/Port.h
src/common/SoundDriver.h
src/common/SoundSDL.h
)
if(ENABLE_FFMPEG)
SET(SRC_MAIN ${SRC_MAIN} src/common/ffmpeg.cpp)
SET(HDR_MAIN ${HDR_MAIN} src/common/ffmpeg.h)
endif(ENABLE_FFMPEG)
if(ENABLE_NLS)
SET(HDR_MAIN ${HDR_MAIN} src/NLS.h)
endif(ENABLE_NLS)
SET(SRC_GBA
src/gba/agbprint.cpp
src/gba/bios.cpp
src/gba/BreakpointStructures.cpp
src/gba/Cheats.cpp
src/gba/CheatSearch.cpp
src/gba/debugger-expr-lex.cpp
src/gba/debugger-expr-yacc.cpp
src/gba/EEprom.cpp
src/gba/ereader.cpp
src/gba/Flash.cpp
src/gba/GBA.cpp
src/gba/GBAGfx.cpp
src/gba/GBALink.cpp
src/gba/GBASockClient.cpp
src/gba/GBA-thumb.cpp
src/gba/GBA-arm.cpp
src/gba/gbafilter.cpp
src/gba/Globals.cpp
src/gba/Mode0.cpp
src/gba/Mode1.cpp
src/gba/Mode2.cpp
src/gba/Mode3.cpp
src/gba/Mode4.cpp
src/gba/Mode5.cpp
src/gba/RTC.cpp
src/gba/Sound.cpp
src/gba/Sram.cpp
)
SET(HDR_GBA
src/gba/agbprint.h
src/gba/bios.h
src/gba/BreakpointStructures.h
src/gba/Cheats.h
src/gba/CheatSearch.h
src/gba/debugger-expr-yacc.hpp
src/gba/EEprom.h
src/gba/ereader.h
src/gba/Flash.h
src/gba/GBA.h
src/gba/GBAcpu.h
src/gba/gbafilter.h
src/gba/GBAGfx.h
src/gba/GBAinline.h
src/gba/GBALink.h
src/gba/GBASockClient.h
src/gba/Globals.h
src/gba/RTC.h
src/gba/Sound.h
src/gba/Sram.h
)
SET(SRC_GB
src/gb/GB.cpp
src/gb/gbCheats.cpp
src/gb/gbDis.cpp
src/gb/gbGfx.cpp
src/gb/gbGlobals.cpp
src/gb/gbMemory.cpp
src/gb/gbPrinter.cpp
src/gb/gbSGB.cpp
src/gb/gbSound.cpp
)
SET(HDR_GB
src/gb/gb.h
src/gb/gbCheats.h
src/gb/gbCodes.h
src/gb/gbCodesCB.h
src/gb/gbGlobals.h
src/gb/gbMemory.h
src/gb/gbPrinter.h
src/gb/gbSGB.h
src/gb/gbSound.h
)
SET(SRC_APU
src/apu/Blip_Buffer.cpp
src/apu/Effects_Buffer.cpp
src/apu/Gb_Apu.cpp
src/apu/Gb_Apu_State.cpp
src/apu/Gb_Oscs.cpp
src/apu/Multi_Buffer.cpp
)
SET(HDR_APU
src/apu/blargg_common.h #Unused(?) but in the VS projects
src/apu/blargg_config.h #Unused(?) but in the VS projects
src/apu/blargg_source.h
src/apu/Blip_Buffer.h
src/apu/Effects_Buffer.h
src/apu/Gb_Apu.h
src/apu/Gb_Oscs.h
src/apu/Multi_Buffer.h
)
SET(SRC_SDL
src/sdl/SDL.cpp
src/sdl/filters.cpp
src/sdl/text.cpp
src/sdl/inputSDL.cpp
src/sdl/expr.cpp
src/sdl/exprNode.cpp
src/sdl/expr-lex.cpp
)
SET(HDR_SDL
src/sdl/filters.h
src/sdl/text.h
src/sdl/inputSDL.h
src/sdl/expr.cpp.h
src/sdl/exprNode.h
)
SET(SRC_FILTERS
src/filters/2xSaI.cpp
src/filters/admame.cpp
src/filters/bilinear.cpp
src/filters/hq2x.cpp
src/filters/interframe.cpp
src/filters/pixel.cpp
src/filters/scanline.cpp
src/filters/simpleFilter.cpp
src/filters/xbrzfilter.cpp
src/filters/xBRZ/xbrz.cpp
)
SET(HDR_FILTERS
src/filters/hq2x.h
src/filters/interp.h
src/filters/lq2x.h
src/filters/xBRZ/config.h
src/filters/xBRZ/xbrz.h
)
SET(SRC_HQ_C
src/filters/hq/c/hq_implementation.cpp
)
SET(HDR_HQ_C
src/filters/hq/c/hq3x_pattern.h
src/filters/hq/c/hq4x_pattern.h
src/filters/hq/c/hq_base.h
src/filters/hq/c/hq_shared.h
)
SET(SRC_HQ_ASM
src/filters/hq/asm/hq3x_16.asm
src/filters/hq/asm/hq3x_32.asm
src/filters/hq/asm/hq4x_16.asm
src/filters/hq/asm/hq4x_32.asm
src/filters/hq/asm/hq3x32.cpp
)
if( ENABLE_ASM_SCALERS )
SET(SRC_FILTERS ${SRC_FILTERS} ${SRC_HQ_ASM})
else( ENABLE_ASM_SCALERS )
SET(SRC_FILTERS ${SRC_FILTERS} ${SRC_HQ_C})
SET(HDR_FILTERS ${HDR_FILTERS} ${HDR_HQ_C})
ADD_DEFINITIONS ( -DNO_ASM )
endif( ENABLE_ASM_SCALERS )
if( ENABLE_DEBUGGER )
SET(SRC_DEBUGGER
src/gba/armdis.cpp
src/gba/elf.cpp
src/gba/remote.cpp
)
SET(HDR_DEBUGGER
src/gba/armdis.h
src/gba/elf.h
src/gba/remote.h
)
endif( ENABLE_DEBUGGER )
INCLUDE_DIRECTORIES(
${ZLIB_INCLUDE_DIR}
fex
${PNG_INCLUDE_DIR}
${SDL2_INCLUDE_DIR}
)
IF( ENABLE_FFMPEG )
INCLUDE_DIRECTORIES(
${FFMPEG_INCLUDE_DIRS}
)
ENDIF( ENABLE_FFMPEG )
ADD_LIBRARY (
vbamcore
STATIC
${PROJECT_SRCS}
${SRC_MAIN}
${HDR_MAIN}
${SRC_GBA}
${HDR_GBA}
${SRC_GB}
${HDR_GB}
${SRC_APU}
${HDR_APU}
${SRC_FILTERS}
${HDR_FILTERS}
${SRC_DEBUGGER}
${HDR_DEBUGGER}
)
set_property(TARGET vbamcore PROPERTY CXX_STANDARD 11)
set_property(TARGET vbamcore PROPERTY CXX_STANDARD_REQUIRED ON)
IF( ENABLE_SDL )
ADD_EXECUTABLE (
vbam
WIN32
${SRC_SDL}
${HDR_SDL}
)
set_property(TARGET vbam PROPERTY CXX_STANDARD 11)
set_property(TARGET vbam PROPERTY CXX_STANDARD_REQUIRED ON)
IF( WIN32 )
SET( WIN32_LIBRARIES wsock32 )
ENDIF( WIN32 )
IF( ENABLE_LIRC )
SET( LIRC_CLIENT_LIBRARY lirc_client )
ENDIF( ENABLE_LIRC )
TARGET_LINK_LIBRARIES (
vbam
${VBAMCORE_LIBS}
${WIN32_LIBRARIES}
${LIRC_CLIENT_LIBRARY}
)
IF( WIN32 )
INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/visualboyadvance-m${CMAKE_EXECUTABLE_SUFFIX} DESTINATION bin)
ELSE( WIN32 )
INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/vbam DESTINATION bin)
ENDIF( WIN32 )
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/sdl/vbam.cfg-example
DESTINATION ${CMAKE_INSTALL_PREFIX}/${SYSCONFDIR}
RENAME vbam.cfg)
ENDIF( ENABLE_SDL )
IF( ENABLE_GTK OR ENABLE_GTK3 )
add_subdirectory (src/gtk)
ENDIF( ENABLE_GTK OR ENABLE_GTK3 )
IF( ENABLE_WX )
add_subdirectory(src/wx)
ENDIF( ENABLE_WX )
if( ENABLE_GTK OR ENABLE_GTK3 OR ENABLE_WX )
# Native Language Support
if( ENABLE_NLS )
add_subdirectory(po)
endif( ENABLE_NLS )
endif( ENABLE_GTK OR ENABLE_GTK3 OR ENABLE_WX )
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/vba-over.ini DESTINATION ${DATA_INSTALL_DIR})
IF(NOT APPLE)
INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/gtk/icons/ DESTINATION share/icons/hicolor PATTERN ".svn" EXCLUDE)
ENDIF(NOT APPLE)
# manual pages
IF( UNIX )
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/debian/vbam.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1)
IF( ENABLE_GTK )
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/debian/gvbam.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1)
ENDIF( ENABLE_GTK )
IF( ENABLE_WX )
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/debian/wxvbam.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1)
ENDIF( ENABLE_WX )
ENDIF( UNIX )
SET(CPACK_GENERATOR "ZIP")
set(CPACK_GENERATOR "ZIP")
set(CPACK_SOURCE_GENERATOR "TGZ")
SET(CPACK_PACKAGE_VERSION_MAJOR "2")
SET(CPACK_PACKAGE_VERSION_MINOR "0")
SET(CPACK_PACKAGE_VERSION_PATCH "0-Git-" ${COMMITHASH})
list(APPEND CPACK_SOURCE_IGNORE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/dependencies")
INCLUDE(CPack)
set(CPACK_PACKAGE_VERSION_MAJOR "2")
set(CPACK_PACKAGE_VERSION_MINOR "0")
set(CPACK_PACKAGE_VERSION_PATCH "0-Git-${COMMITHASH}")
list(APPEND CPACK_SOURCE_IGNORE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/win32-deps")
include(CPack)

View File

@@ -1,54 +0,0 @@
#=============================================================================
# Copyright 2010 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
# support for the nasm assembler
set(CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS nasm asm)
if(NOT CMAKE_ASM_NASM_OBJECT_FORMAT)
if(WIN32)
if(CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
SET(CMAKE_ASM_NASM_OBJECT_FORMAT win64)
else()
SET(CMAKE_ASM_NASM_OBJECT_FORMAT win32)
endif()
elseif(APPLE)
EXECUTE_PROCESS(COMMAND ${CMAKE_ASM_NASM_COMPILER} -v COMMAND awk "{print \$3}" OUTPUT_VARIABLE NASM_VERSION)
IF(NASM_VERSION VERSION_LESS 2.0)
IF(CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
MESSAGE(FATAL_ERROR "Your nasm is too old to support AMD64, please install nasm from Homebrew or MacPorts.")
ENDIF()
SET(CMAKE_ASM_NAMS_OBJECT_FORMAT macho)
ELSE()
if(CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
SET(CMAKE_ASM_NASM_OBJECT_FORMAT macho64)
else()
SET(CMAKE_ASM_NASM_OBJECT_FORMAT macho32)
endif()
ENDIF()
else()
if(CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
SET(CMAKE_ASM_NASM_OBJECT_FORMAT elf64)
else()
SET(CMAKE_ASM_NASM_OBJECT_FORMAT elf32)
endif()
endif()
endif()
set(CMAKE_ASM_NASM_COMPILE_OBJECT "<CMAKE_ASM_NASM_COMPILER> <FLAGS> -f ${CMAKE_ASM_NASM_OBJECT_FORMAT} -o <OBJECT> <SOURCE>")
# Load the generic ASMInformation file:
set(ASM_DIALECT "_NASM")
include(CMakeASMInformation)
set(ASM_DIALECT)

View File

@@ -1,27 +0,0 @@
#=============================================================================
# Copyright 2010 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
# Find the nasm assembler. yasm (http://www.tortall.net/projects/yasm/) is nasm compatible
SET(CMAKE_ASM_NASM_COMPILER_INIT nasm yasm)
IF(NOT CMAKE_ASM_NASM_COMPILER)
FIND_PROGRAM(CMAKE_ASM_NASM_COMPILER nasm
"$ENV{ProgramFiles}/NASM")
ENDIF(NOT CMAKE_ASM_NASM_COMPILER)
# Load the generic DetermineASM compiler file with the DIALECT set properly:
SET(ASM_DIALECT "_NASM")
INCLUDE(CMakeDetermineASMCompiler)
SET(ASM_DIALECT)

View File

@@ -1,23 +0,0 @@
#=============================================================================
# Copyright 2010 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
# This file is used by EnableLanguage in cmGlobalGenerator to
# determine that the selected ASM_NASM "compiler" works.
# For assembler this can only check whether the compiler has been found,
# because otherwise there would have to be a separate assembler source file
# for each assembler on every architecture.
SET(ASM_DIALECT "_NASM")
INCLUDE(CMakeTestASMCompiler)
SET(ASM_DIALECT)

View File

@@ -1,79 +0,0 @@
# - Find GNU gettext tools
# This module looks for the GNU gettext tools. This module defines the
# following values:
# GETTEXT_MSGMERGE_EXECUTABLE: the full path to the msgmerge tool.
# GETTEXT_MSGFMT_EXECUTABLE: the full path to the msgfmt tool.
# GETTEXT_FOUND: True if gettext has been found.
#
# Additionally it provides the following macros:
# GETTEXT_CREATE_TRANSLATIONS ( outputFile [ALL] file1 ... fileN )
# This will create a target "translations" which will convert the
# given input po files into the binary output mo file. If the
# ALL option is used, the translations will also be created when
# building the default target.
#=============================================================================
# Copyright 2007-2009 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distributed this file outside of CMake, substitute the full
# License text for the above reference.)
FIND_PROGRAM(GETTEXT_MSGMERGE_EXECUTABLE msgmerge)
FIND_PROGRAM(GETTEXT_MSGFMT_EXECUTABLE msgfmt)
MACRO(GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFileArg)
# make it a real variable, so we can modify it here
SET(_firstPoFile "${_firstPoFileArg}")
SET(_gmoFiles)
GET_FILENAME_COMPONENT(_potBasename ${_potFile} NAME_WE)
GET_FILENAME_COMPONENT(_absPotFile ${_potFile} ABSOLUTE)
SET(_targetName "${_potBasename}_translations")
SET(_addToAll)
IF(${_firstPoFile} STREQUAL "ALL")
SET(_addToAll "ALL")
SET(_firstPoFile)
ENDIF(${_firstPoFile} STREQUAL "ALL")
FOREACH (_currentPoFile ${_firstPoFile} ${ARGN})
GET_FILENAME_COMPONENT(_absFile ${_currentPoFile} ABSOLUTE)
GET_FILENAME_COMPONENT(_abs_PATH ${_absFile} PATH)
GET_FILENAME_COMPONENT(_lang ${_absFile} NAME_WE)
SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo)
ADD_CUSTOM_COMMAND(
OUTPUT ${_gmoFile}
COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${_absFile} ${_absPotFile}
COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_absFile}
DEPENDS ${_absPotFile} ${_absFile}
)
INSTALL(FILES ${_gmoFile} DESTINATION share/locale/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo)
SET(_gmoFiles ${_gmoFiles} ${_gmoFile})
ENDFOREACH (_currentPoFile )
ADD_CUSTOM_TARGET(${_targetName} ${_addToAll} DEPENDS ${_gmoFiles})
ENDMACRO(GETTEXT_CREATE_TRANSLATIONS )
IF (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE )
SET(GETTEXT_FOUND TRUE)
ELSE (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE )
SET(GETTEXT_FOUND FALSE)
IF (GetText_REQUIRED)
MESSAGE(FATAL_ERROR "GetText not found")
ENDIF (GetText_REQUIRED)
ENDIF (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE )

View File

@@ -1,169 +0,0 @@
# This module defines
# SDL2_LIBRARY, the name of the library to link against
# SDL2_FOUND, if false, do not try to link to SDL2
# SDL2_INCLUDE_DIR, where to find SDL.h
#
# This module responds to the the flag:
# SDL2_BUILDING_LIBRARY
# If this is defined, then no SDL2main will be linked in because
# only applications need main().
# Otherwise, it is assumed you are building an application and this
# module will attempt to locate and set the the proper link flags
# as part of the returned SDL2_LIBRARY variable.
#
# Don't forget to include SDLmain.h and SDLmain.m your project for the
# OS X framework based version. (Other versions link to -lSDL2main which
# this module will try to find on your behalf.) Also for OS X, this
# module will automatically add the -framework Cocoa on your behalf.
#
#
# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration
# and no SDL2_LIBRARY, it means CMake did not find your SDL2 library
# (SDL2.dll, libsdl2.so, SDL2.framework, etc).
# Set SDL2_LIBRARY_TEMP to point to your SDL2 library, and configure again.
# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value
# as appropriate. These values are used to generate the final SDL2_LIBRARY
# variable, but when these values are unset, SDL2_LIBRARY does not get created.
#
#
# $SDL2DIR is an environment variable that would
# correspond to the ./configure --prefix=$SDL2DIR
# used in building SDL2.
# l.e.galup 9-20-02
#
# Modified by Eric Wing.
# Added code to assist with automated building by using environmental variables
# and providing a more controlled/consistent search behavior.
# Added new modifications to recognize OS X frameworks and
# additional Unix paths (FreeBSD, etc).
# Also corrected the header search path to follow "proper" SDL guidelines.
# Added a search for SDL2main which is needed by some platforms.
# Added a search for threads which is needed by some platforms.
# Added needed compile switches for MinGW.
#
# On OSX, this will prefer the Framework version (if found) over others.
# People will have to manually change the cache values of
# SDL2_LIBRARY to override this selection or set the CMake environment
# CMAKE_INCLUDE_PATH to modify the search paths.
#
# Note that the header path has changed from SDL2/SDL.h to just SDL.h
# This needed to change because "proper" SDL convention
# is #include "SDL.h", not <SDL2/SDL.h>. This is done for portability
# reasons because not all systems place things in SDL2/ (see FreeBSD).
#=============================================================================
# Copyright 2003-2009 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
message("<FindSDL2.cmake>")
SET(SDL2_SEARCH_PATHS
~/Library/Frameworks
/Library/Frameworks
/usr/local
/usr
/sw # Fink
/opt/local # DarwinPorts
/opt/csw # Blastwave
/opt
${SDL2_PATH}
)
FIND_PATH(SDL2_INCLUDE_DIR SDL.h
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES include/SDL2 include
PATHS ${SDL2_SEARCH_PATHS}
)
FIND_LIBRARY(SDL2_LIBRARY_TEMP
NAMES SDL2
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES lib64 lib
PATHS ${SDL2_SEARCH_PATHS}
)
IF(NOT SDL2_BUILDING_LIBRARY)
IF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework")
# Non-OS X framework versions expect you to also dynamically link to
# SDL2main. This is mainly for Windows and OS X. Other (Unix) platforms
# seem to provide SDL2main for compatibility even though they don't
# necessarily need it.
FIND_LIBRARY(SDL2MAIN_LIBRARY
NAMES SDL2main
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES lib64 lib
PATHS ${SDL2_SEARCH_PATHS}
)
ENDIF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework")
ENDIF(NOT SDL2_BUILDING_LIBRARY)
# SDL2 may require threads on your system.
# The Apple build may not need an explicit flag because one of the
# frameworks may already provide it.
# But for non-OSX systems, I will use the CMake Threads package.
IF(NOT APPLE)
FIND_PACKAGE(Threads)
ENDIF(NOT APPLE)
# MinGW needs an additional library, mwindows
# It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -lmwindows
# (Actually on second look, I think it only needs one of the m* libraries.)
IF(MINGW)
SET(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW")
ENDIF(MINGW)
IF(SDL2_LIBRARY_TEMP)
# For SDL2main
IF(NOT SDL2_BUILDING_LIBRARY)
IF(SDL2MAIN_LIBRARY)
SET(SDL2_LIBRARY_TEMP ${SDL2MAIN_LIBRARY} ${SDL2_LIBRARY_TEMP})
ENDIF(SDL2MAIN_LIBRARY)
ENDIF(NOT SDL2_BUILDING_LIBRARY)
# For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa.
# CMake doesn't display the -framework Cocoa string in the UI even
# though it actually is there if I modify a pre-used variable.
# I think it has something to do with the CACHE STRING.
# So I use a temporary variable until the end so I can set the
# "real" variable in one-shot.
IF(APPLE)
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa")
ENDIF(APPLE)
# For threads, as mentioned Apple doesn't need this.
# In fact, there seems to be a problem if I used the Threads package
# and try using this line, so I'm just skipping it entirely for OS X.
IF(NOT APPLE)
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT})
ENDIF(NOT APPLE)
# For MinGW library
IF(MINGW)
SET(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP})
ENDIF(MINGW)
# Set the final string here so the GUI reflects the final state.
SET(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL2 Library can be found")
# Set the temp variable to INTERNAL so it is not seen in the CMake GUI
SET(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "")
ENDIF(SDL2_LIBRARY_TEMP)
message("</FindSDL2.cmake>")
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR)

View File

@@ -1,359 +0,0 @@
# This script locates the SFML library
# ------------------------------------
#
# Usage
# -----
#
# When you try to locate the SFML libraries, you must specify which modules you want to use (system, window, graphics, network, audio, main).
# If none is given, the SFML_LIBRARIES variable will be empty and you'll end up linking to nothing.
# example:
# find_package(SFML COMPONENTS graphics window system) // find the graphics, window and system modules
#
# You can enforce a specific version, either MAJOR.MINOR or only MAJOR.
# If nothing is specified, the version won't be checked (i.e. any version will be accepted).
# example:
# find_package(SFML COMPONENTS ...) // no specific version required
# find_package(SFML 2 COMPONENTS ...) // any 2.x version
# find_package(SFML 2.4 COMPONENTS ...) // version 2.4 or greater
#
# By default, the dynamic libraries of SFML will be found. To find the static ones instead,
# you must set the SFML_STATIC_LIBRARIES variable to TRUE before calling find_package(SFML ...).
# Since you have to link yourself all the SFML dependencies when you link it statically, the following
# additional variables are defined: SFML_XXX_DEPENDENCIES and SFML_DEPENDENCIES (see their detailed
# description below).
# In case of static linking, the SFML_STATIC macro will also be defined by this script.
# example:
# set(SFML_STATIC_LIBRARIES TRUE)
# find_package(SFML 2 COMPONENTS network system)
#
# On Mac OS X if SFML_STATIC_LIBRARIES is not set to TRUE then by default CMake will search for frameworks unless
# CMAKE_FIND_FRAMEWORK is set to "NEVER" for example. Please refer to CMake documentation for more details.
# Moreover, keep in mind that SFML frameworks are only available as release libraries unlike dylibs which
# are available for both release and debug modes.
#
# If SFML is not installed in a standard path, you can use the SFML_ROOT CMake (or environment) variable
# to tell CMake where SFML is.
#
# Output
# ------
#
# This script defines the following variables:
# - For each specified module XXX (system, window, graphics, network, audio, main):
# - SFML_XXX_LIBRARY_DEBUG: the name of the debug library of the xxx module (set to SFML_XXX_LIBRARY_RELEASE is no debug version is found)
# - SFML_XXX_LIBRARY_RELEASE: the name of the release library of the xxx module (set to SFML_XXX_LIBRARY_DEBUG is no release version is found)
# - SFML_XXX_LIBRARY: the name of the library to link to for the xxx module (includes both debug and optimized names if necessary)
# - SFML_XXX_FOUND: true if either the debug or release library of the xxx module is found
# - SFML_XXX_DEPENDENCIES: the list of libraries the module depends on, in case of static linking
# - SFML_LIBRARIES: the list of all libraries corresponding to the required modules
# - SFML_FOUND: true if all the required modules are found
# - SFML_INCLUDE_DIR: the path where SFML headers are located (the directory containing the SFML/Config.hpp file)
# - SFML_DEPENDENCIES: the list of libraries SFML depends on, in case of static linking
#
# example:
# find_package(SFML 2 COMPONENTS system window graphics audio REQUIRED)
# include_directories(${SFML_INCLUDE_DIR})
# add_executable(myapp ...)
# target_link_libraries(myapp ${SFML_LIBRARIES})
# define the SFML_STATIC macro if static build was chosen
if(SFML_STATIC_LIBRARIES)
add_definitions(-DSFML_STATIC)
endif()
# define the list of search paths for headers and libraries
set(FIND_SFML_PATHS
${SFML_ROOT}
$ENV{SFML_ROOT}
~/Library/Frameworks
/Library/Frameworks
/usr/local
/usr
/sw
/opt/local
/opt/csw
/opt)
# find the SFML include directory
find_path(SFML_INCLUDE_DIR SFML/Config.hpp
PATH_SUFFIXES include
PATHS ${FIND_SFML_PATHS})
# check the version number
set(SFML_VERSION_OK TRUE)
if(SFML_FIND_VERSION AND SFML_INCLUDE_DIR)
# extract the major and minor version numbers from SFML/Config.hpp
# we have to handle framework a little bit differently:
if("${SFML_INCLUDE_DIR}" MATCHES "SFML.framework")
set(SFML_CONFIG_HPP_INPUT "${SFML_INCLUDE_DIR}/Headers/Config.hpp")
else()
set(SFML_CONFIG_HPP_INPUT "${SFML_INCLUDE_DIR}/SFML/Config.hpp")
endif()
FILE(READ "${SFML_CONFIG_HPP_INPUT}" SFML_CONFIG_HPP_CONTENTS)
STRING(REGEX MATCH ".*#define SFML_VERSION_MAJOR ([0-9]+).*#define SFML_VERSION_MINOR ([0-9]+).*#define SFML_VERSION_PATCH ([0-9]+).*" SFML_CONFIG_HPP_CONTENTS "${SFML_CONFIG_HPP_CONTENTS}")
STRING(REGEX REPLACE ".*#define SFML_VERSION_MAJOR ([0-9]+).*" "\\1" SFML_VERSION_MAJOR "${SFML_CONFIG_HPP_CONTENTS}")
STRING(REGEX REPLACE ".*#define SFML_VERSION_MINOR ([0-9]+).*" "\\1" SFML_VERSION_MINOR "${SFML_CONFIG_HPP_CONTENTS}")
STRING(REGEX REPLACE ".*#define SFML_VERSION_PATCH ([0-9]+).*" "\\1" SFML_VERSION_PATCH "${SFML_CONFIG_HPP_CONTENTS}")
math(EXPR SFML_REQUESTED_VERSION "${SFML_FIND_VERSION_MAJOR} * 10000 + ${SFML_FIND_VERSION_MINOR} * 100 + ${SFML_FIND_VERSION_PATCH}")
# if we could extract them, compare with the requested version number
if (SFML_VERSION_MAJOR)
# transform version numbers to an integer
math(EXPR SFML_VERSION "${SFML_VERSION_MAJOR} * 10000 + ${SFML_VERSION_MINOR} * 100 + ${SFML_VERSION_PATCH}")
# compare them
if(SFML_VERSION LESS SFML_REQUESTED_VERSION)
set(SFML_VERSION_OK FALSE)
endif()
else()
# SFML version is < 2.0
if (SFML_REQUESTED_VERSION GREATER 10900)
set(SFML_VERSION_OK FALSE)
set(SFML_VERSION_MAJOR 1)
set(SFML_VERSION_MINOR x)
set(SFML_VERSION_PATCH x)
endif()
endif()
endif()
# find the requested modules
set(SFML_FOUND TRUE) # will be set to false if one of the required modules is not found
foreach(FIND_SFML_COMPONENT ${SFML_FIND_COMPONENTS})
string(TOLOWER ${FIND_SFML_COMPONENT} FIND_SFML_COMPONENT_LOWER)
string(TOUPPER ${FIND_SFML_COMPONENT} FIND_SFML_COMPONENT_UPPER)
set(FIND_SFML_COMPONENT_NAME sfml-${FIND_SFML_COMPONENT_LOWER})
# no suffix for sfml-main, it is always a static library
if(FIND_SFML_COMPONENT_LOWER STREQUAL "main")
# release library
find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE
NAMES ${FIND_SFML_COMPONENT_NAME}
PATH_SUFFIXES lib64 lib
PATHS ${FIND_SFML_PATHS})
# debug library
find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG
NAMES ${FIND_SFML_COMPONENT_NAME}-d
PATH_SUFFIXES lib64 lib
PATHS ${FIND_SFML_PATHS})
else()
# static release library
find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_RELEASE
NAMES ${FIND_SFML_COMPONENT_NAME}-s
PATH_SUFFIXES lib64 lib
PATHS ${FIND_SFML_PATHS})
# static debug library
find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_DEBUG
NAMES ${FIND_SFML_COMPONENT_NAME}-s-d
PATH_SUFFIXES lib64 lib
PATHS ${FIND_SFML_PATHS})
# dynamic release library
find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_RELEASE
NAMES ${FIND_SFML_COMPONENT_NAME}
PATH_SUFFIXES lib64 lib
PATHS ${FIND_SFML_PATHS})
# dynamic debug library
find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_DEBUG
NAMES ${FIND_SFML_COMPONENT_NAME}-d
PATH_SUFFIXES lib64 lib
PATHS ${FIND_SFML_PATHS})
# choose the entries that fit the requested link type
if(SFML_STATIC_LIBRARIES)
if(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_RELEASE)
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_RELEASE})
endif()
if(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_DEBUG)
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_DEBUG})
endif()
else()
if(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_RELEASE)
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_RELEASE})
endif()
if(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_DEBUG)
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_DEBUG})
endif()
endif()
endif()
if (SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG OR SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE)
# library found
set(SFML_${FIND_SFML_COMPONENT_UPPER}_FOUND TRUE)
# if both are found, set SFML_XXX_LIBRARY to contain both
if (SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG AND SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE)
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY debug ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG}
optimized ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE})
endif()
# if only one debug/release variant is found, set the other to be equal to the found one
if (SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG AND NOT SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE)
# debug and not release
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG})
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG})
endif()
if (SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE AND NOT SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG)
# release and not debug
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE})
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE})
endif()
else()
# library not found
set(SFML_FOUND FALSE)
set(SFML_${FIND_SFML_COMPONENT_UPPER}_FOUND FALSE)
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY "")
set(FIND_SFML_MISSING "${FIND_SFML_MISSING} SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY")
endif()
# mark as advanced
MARK_AS_ADVANCED(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY
SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE
SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG
SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_RELEASE
SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_DEBUG
SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_RELEASE
SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_DEBUG)
# add to the global list of libraries
set(SFML_LIBRARIES ${SFML_LIBRARIES} "${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY}")
endforeach()
# in case of static linking, we must also define the list of all the dependencies of SFML libraries
if(SFML_STATIC_LIBRARIES)
# detect the OS
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
set(FIND_SFML_OS_WINDOWS 1)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
set(FIND_SFML_OS_LINUX 1)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
set(FIND_SFML_OS_FREEBSD 1)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(FIND_SFML_OS_MACOSX 1)
endif()
# start with an empty list
set(SFML_DEPENDENCIES)
set(FIND_SFML_DEPENDENCIES_NOTFOUND)
# macro that searches for a 3rd-party library
macro(find_sfml_dependency output friendlyname)
find_library(${output} NAMES ${ARGN} PATHS ${FIND_SFML_PATHS} PATH_SUFFIXES lib)
if(${${output}} STREQUAL "${output}-NOTFOUND")
unset(output)
set(FIND_SFML_DEPENDENCIES_NOTFOUND "${FIND_SFML_DEPENDENCIES_NOTFOUND} ${friendlyname}")
endif()
endmacro()
# sfml-system
list(FIND SFML_FIND_COMPONENTS "system" FIND_SFML_SYSTEM_COMPONENT)
if(NOT ${FIND_SFML_SYSTEM_COMPONENT} EQUAL -1)
# update the list -- these are only system libraries, no need to find them
if(FIND_SFML_OS_LINUX OR FIND_SFML_OS_FREEBSD OR FIND_SFML_OS_MACOSX)
set(SFML_SYSTEM_DEPENDENCIES "pthread")
endif()
if(FIND_SFML_OS_LINUX)
set(SFML_SYSTEM_DEPENDENCIES "rt")
endif()
if(FIND_SFML_OS_WINDOWS)
set(SFML_SYSTEM_DEPENDENCIES "winmm")
endif()
set(SFML_DEPENDENCIES ${SFML_SYSTEM_DEPENDENCIES} ${SFML_DEPENDENCIES})
endif()
# sfml-network
list(FIND SFML_FIND_COMPONENTS "network" FIND_SFML_NETWORK_COMPONENT)
if(NOT ${FIND_SFML_NETWORK_COMPONENT} EQUAL -1)
# update the list -- these are only system libraries, no need to find them
if(FIND_SFML_OS_WINDOWS)
set(SFML_NETWORK_DEPENDENCIES "ws2_32")
endif()
set(SFML_DEPENDENCIES ${SFML_NETWORK_DEPENDENCIES} ${SFML_DEPENDENCIES})
endif()
# sfml-window
list(FIND SFML_FIND_COMPONENTS "window" FIND_SFML_WINDOW_COMPONENT)
if(NOT ${FIND_SFML_WINDOW_COMPONENT} EQUAL -1)
# find libraries
if(FIND_SFML_OS_LINUX)
find_sfml_dependency(X11_LIBRARY "X11" X11)
find_sfml_dependency(XRANDR_LIBRARY "Xrandr" Xrandr)
find_sfml_dependency(UDEV_LIBRARIES "UDev" udev)
endif()
# update the list
if(FIND_SFML_OS_WINDOWS)
set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "opengl32" "winmm" "gdi32")
elseif(FIND_SFML_OS_LINUX OR FIND_SFML_OS_FREEBSD)
set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "GL" ${X11_LIBRARY} ${XRANDR_LIBRARY})
if(FIND_SFML_OS_FREEBSD)
set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "usbhid")
else()
set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} ${UDEV_LIBRARIES})
endif()
elseif(FIND_SFML_OS_MACOSX)
set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "-framework OpenGL -framework Foundation -framework AppKit -framework IOKit -framework Carbon")
endif()
set(SFML_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} ${SFML_DEPENDENCIES})
endif()
# sfml-graphics
list(FIND SFML_FIND_COMPONENTS "graphics" FIND_SFML_GRAPHICS_COMPONENT)
if(NOT ${FIND_SFML_GRAPHICS_COMPONENT} EQUAL -1)
# find libraries
find_sfml_dependency(FREETYPE_LIBRARY "FreeType" freetype)
find_sfml_dependency(GLEW_LIBRARY "GLEW" glew GLEW glew32 glew32s glew64 glew64s)
find_sfml_dependency(JPEG_LIBRARY "libjpeg" jpeg)
# update the list
set(SFML_GRAPHICS_DEPENDENCIES ${FREETYPE_LIBRARY} ${GLEW_LIBRARY} ${JPEG_LIBRARY})
set(SFML_DEPENDENCIES ${SFML_GRAPHICS_DEPENDENCIES} ${SFML_DEPENDENCIES})
endif()
# sfml-audio
list(FIND SFML_FIND_COMPONENTS "audio" FIND_SFML_AUDIO_COMPONENT)
if(NOT ${FIND_SFML_AUDIO_COMPONENT} EQUAL -1)
# find libraries
find_sfml_dependency(OPENAL_LIBRARY "OpenAL" openal openal32)
find_sfml_dependency(SNDFILE_LIBRARY "libsndfile" sndfile)
# update the list
set(SFML_AUDIO_DEPENDENCIES ${OPENAL_LIBRARY} ${SNDFILE_LIBRARY})
set(SFML_DEPENDENCIES ${SFML_AUDIO_DEPENDENCIES} ${SFML_DEPENDENCIES})
endif()
endif()
# handle errors
if(NOT SFML_VERSION_OK)
# SFML version not ok
set(FIND_SFML_ERROR "SFML found but version too low (requested: ${SFML_FIND_VERSION}, found: ${SFML_VERSION_MAJOR}.${SFML_VERSION_MINOR}.${SFML_VERSION_PATCH})")
set(SFML_FOUND FALSE)
elseif(SFML_STATIC_LIBRARIES AND FIND_SFML_DEPENDENCIES_NOTFOUND)
set(FIND_SFML_ERROR "SFML found but some of its dependencies are missing (${FIND_SFML_DEPENDENCIES_NOTFOUND})")
set(SFML_FOUND FALSE)
elseif(NOT SFML_FOUND)
# include directory or library not found
set(FIND_SFML_ERROR "Could NOT find SFML (missing: ${FIND_SFML_MISSING})")
endif()
if (NOT SFML_FOUND)
if(SFML_FIND_REQUIRED)
# fatal error
message(FATAL_ERROR ${FIND_SFML_ERROR})
elseif(NOT SFML_FIND_QUIETLY)
# error but continue
message("${FIND_SFML_ERROR}")
endif()
endif()
# handle success
if(SFML_FOUND)
message(STATUS "Found SFML ${SFML_VERSION_MAJOR}.${SFML_VERSION_MINOR}.${SFML_VERSION_PATCH} in ${SFML_INCLUDE_DIR}")
endif()

View File

@@ -1,155 +0,0 @@
# - Returns a version string from Git
#
# These functions force a re-configure on each git commit so that you can
# trust the values of the variables in your build system.
#
# get_git_head_revision(<refspecvar> <hashvar> [<additional arguments to git describe> ...])
#
# Returns the refspec and sha hash of the current head revision
#
# git_describe(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe on the source tree, and adjusting
# the output so that it tests false if an error occurs.
#
# git_get_exact_tag(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe --exact-match on the source tree,
# and adjusting the output so that it tests false if there was no exact
# matching tag.
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright Iowa State University 2009-2010.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
if(__get_git_revision_description)
return()
endif()
set(__get_git_revision_description YES)
# We must run the following at "include" time, not at function call time,
# to find the path to this module rather than the path to a calling list file
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
function(get_git_head_revision _refspecvar _hashvar)
set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories
set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
# We have reached the root directory, we are not in git
set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
return()
endif()
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
endwhile()
# check if this is a submodule
if(NOT IS_DIRECTORY ${GIT_DIR})
file(READ ${GIT_DIR} submodule)
string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule})
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
endif()
set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
if(NOT EXISTS "${GIT_DATA}")
file(MAKE_DIRECTORY "${GIT_DATA}")
endif()
if(NOT EXISTS "${GIT_DIR}/HEAD")
return()
endif()
set(HEAD_FILE "${GIT_DATA}/HEAD")
configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)
configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
"${GIT_DATA}/grabRef.cmake" @ONLY)
include("${GIT_DATA}/grabRef.cmake")
set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE)
set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE)
endfunction()
function(git_describe _var)
#get_git_head_revision(refspec hash)
if(NOT GIT_FOUND)
set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
return()
endif()
#if(NOT hash)
# set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
# return()
#endif()
# TODO sanitize
#if((${ARGN}" MATCHES "&&") OR
# (ARGN MATCHES "||") OR
# (ARGN MATCHES "\\;"))
# message("Please report the following error to the project!")
# message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
#endif()
#message(STATUS "Arguments to execute_process: ${ARGN}")
execute_process(COMMAND
"${GIT_EXECUTABLE}"
describe
#${hash}
${ARGN}
WORKING_DIRECTORY
"${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE
res
OUTPUT_VARIABLE
out
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT res EQUAL 0)
set(out "${out}-${res}-NOTFOUND")
endif()
set(${_var} "${out}" PARENT_SCOPE)
endfunction()
function(get_git_tag_revision _var)
if(NOT GIT_FOUND)
set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
return()
endif()
execute_process(COMMAND
"${GIT_EXECUTABLE}"
rev-list
${ARGN}
WORKING_DIRECTORY
"${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE
res
OUTPUT_VARIABLE
out
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT res EQUAL 0)
set(out "${out}-${res}-NOTFOUND")
endif()
set(${_var} "${out}" PARENT_SCOPE)
endfunction()

95
CMakeSettings.json Normal file
View File

@@ -0,0 +1,95 @@
{
"configurations": [
{
"name": "x64-static-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [
"msvc_x64"
],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "-DVCPKG_TARGET_TRIPLET=x64-windows-static -DENABLE_SDL=TRUE"
}, {
"name": "x64-static-Release",
"generator": "Ninja",
"configurationType": "Release",
"inheritEnvironments": [
"msvc_x64"
],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "-DVCPKG_TARGET_TRIPLET=x64-windows-static -DENABLE_SDL=TRUE"
}, {
"name": "x64-static-RelWithDebInfo",
"generator": "Ninja",
"configurationType": "RelWithDebInfo",
"inheritEnvironments": [
"msvc_x64"
],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "-DVCPKG_TARGET_TRIPLET=x64-windows-static -DENABLE_SDL=TRUE"
}, {
"name": "x86-static-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [
"msvc_x86"
],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "-DVCPKG_TARGET_TRIPLET=x86-windows-static -DENABLE_SDL=TRUE"
}, {
"name": "x86-static-Release",
"generator": "Ninja",
"configurationType": "Release",
"inheritEnvironments": [
"msvc_x86"
],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "-DVCPKG_TARGET_TRIPLET=x86-windows-static -DENABLE_SDL=TRUE"
}, {
"name": "x86-static-RelWithDebInfo",
"generator": "Ninja",
"configurationType": "RelWithDebInfo",
"inheritEnvironments": [
"msvc_x86"
],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "-DVCPKG_TARGET_TRIPLET=x86-windows-static -DENABLE_SDL=TRUE"
}, {
"name": "arm64-static-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [
"msvc_arm64"
],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "-DVCPKG_TARGET_TRIPLET=arm64-windows-static -DENABLE_SDL=TRUE"
}, {
"name": "arm64-static-Release",
"generator": "Ninja",
"configurationType": "Release",
"inheritEnvironments": [
"msvc_arm64"
],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "-DVCPKG_TARGET_TRIPLET=arm64-windows-static -DENABLE_SDL=TRUE"
}, {
"name": "arm64-static-RelWithDebInfo",
"generator": "Ninja",
"configurationType": "RelWithDebInfo",
"inheritEnvironments": [
"msvc_arm64"
],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "-DVCPKG_TARGET_TRIPLET=arm64-windows-static -DENABLE_SDL=TRUE"
}
]
}

482
DEVELOPER-MANUAL.md Normal file
View File

@@ -0,0 +1,482 @@
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
- [visualboyadvance-m Developer Manual](#visualboyadvance-m-developer-manual)
- [Issues Policies](#issues-policies)
- [Processing New Issues](#processing-new-issues)
- [Resolving Issues](#resolving-issues)
- [Pull Request and Commit Policies](#pull-request-and-commit-policies)
- [Commit Message](#commit-message)
- [Collaboration on a Branch](#collaboration-on-a-branch)
- [Commits from Maintainers](#commits-from-maintainers)
- [Miscellaneous](#miscellaneous)
- [Debug Messages](#debug-messages)
- [Release Process](#release-process)
- [Certificates](#certificates)
- [Release Commit and Tag](#release-commit-and-tag)
- [64-bit Windows Binary](#64-bit-windows-binary)
- [32-bit Windows Binary](#32-bit-windows-binary)
- [ARM64 Windows Binary](#arm64-windows-binary)
- [macOS Binary](#macos-binary)
- [Final steps](#final-steps)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
## visualboyadvance-m Developer Manual
Here we will keep notes about our development process, policies and environment
setup guides.
### Issues Policies
#### Processing New Issues
Follow the following steps to process newly submitted issues:
- Edit the user's post to remove any links to illegal content such as ROM files.
- Edit the user's post to remove unused template sections etc.. Rephrase the
issue title if it needs to be clarified.
- Label the issue as a question, bug or enhancement. This label can be changed
later upon clarification if necessary.
- Add any other relevant labels, for example for the code subsystem.
- If it is strongly related to a work by a developer that you know of, assign
them to the issue. If this is not the case, they can be unassigned.
- Ask the user for clarification of any details if needed.
#### Resolving Issues
- An issue is resolved by closing it in GitHub. A commit that fixes the issue
should have the following line near the end of the body of the commit message:
```
Fix #999.
```
This will automatically close the issue and assign the closing commit in the
GitHub metadata when it is merged to master. The issue can be reopened if
needed.
- A commit that is work towards resolving an issue, should have the issue number
preceded by a pound sign either at the end of a commit message title, if it is
of primary relevance to the issue, or the body otherwise.
### Pull Request and Commit Policies
#### Commit Message
Follow these guidelines always:
https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
, the description of your work should be in the **commit message NOT the pull
request description**.
The title line must be no more than 50 characters and the description must be
wrapped at 72 characters. Most commit message editor interfaces will help you
with this. The title line must not end with a period.
Write everything in the imperative mood, e.g. change, fix, **NOT** changes,
changed, fixed, fixes etc..
A commit message must always have a title and a description, the description
must be independent of the title line, if necessary repeat the information in
the title line in the description.
The commit message must **ALL** changes, unless it's a minor refactor or
white space change or something and is not important.
The commit title line should be prefixed with an area, unless it involves the
wxWidgets GUI app, in which case it should **NOT** have a prefix.
If the commit is a user-facing functionality change or enhancement, the title
line of the commit must be a non-technical description of this change. For
example "Mute on speedup" because this will go into the changelog.
The text after the area prefix should not be capitalized.
Please use one of these area prefixes for non-main-GUI-app commits:
- doc: documentation, README.md etc..
- build: CMake, installdeps, preprocessor compatibility defines, compatibility
headers, macOS build system etc..
- gb: the GameBoy emulator core or changes related to it.
- gba: the GameBoy Advance emulator core or changes related to it.
- libretro: the libretro core glue and build.
- sdl: anything for the SDL port, but **NOT** SDL functionality in the wxWidgets
GUI app.
- translations: anything related to translations.
. Add other areas here if needed.
If a commit fixes a regression, use a title line such as:
```console
Fix regression <PROBLEM> in <SHORT-SHA>
```
, you can get the short SHA from `git log --oneline -100` or similar.
The commit description for a regression must refer to the breaking change in
reference format, which you can get from e.g. `git log --format=reference -20`.
#### Working on Pull Requests
When opening a pull request, push your branch to our repository if you were
given access, or a branch in your fork if you have not yet been given access. Do
**NOT** use `master`, use a specific branch.
If you are using a fork, set up your workflow like this:
```bash
git clone git@github.com:visualboyadvance-m/visualboyadvance-m
git remote add fork git@github.com:<your-GitHub-user>/visualboyadvance-m
git fetch --all --prune
git checkout -b your-work-branch-name
git commit -a --verbose --signoff -S
```
.
The `-S` flags tells Git to sign your commit with GnuPG. If you do not have a
GnuPG key, you will need to create one and upload it to a keyserver. I recommend
removing the password on your private key to not deal with `gpg-agent` and all
of this stuff.
All of this works fine on Windows, just install `GnuPG.GnuPG` from WinGet.
Your first push will then be:
```bash
git push -u fork HEAD
```
.
Subsequent commits will then be:
```bash
git commit -a --verbose --amend --reset-author --signoff -S
git push -f
```
. If you are a project member, then the workflow will be roughly:
```bash
git clone git@github.com:visualboyadvance-m/visualboyadvance-m
git fetch --all --prune
git checkout -b your-work-branch-name
git commit -a --verbose --signoff -S
```
. Your first push will be:
```bash
git push -u origin HEAD
```
. And subsequent pushes will be:
```bash
git commit -a --verbose --signoff -S --amend --reset-author
git push -f
```
. Please push frequently so that we can track your progress and review it.
Make sure the git history in your branch is clean and logical, edit when
necessary with `rebase -i`. In most cases a single commit with all of the
changes will be good. Sometimes you may want to split it up into multiple
logical commits for a large work, but a single commit is also fine if the title
line encapsulates all of the work for the changelog.
See the previous section on how to write commit messages.
If you are using Windows as your development environment, I recommend reading my
manual on Windows development environments
[here](https://github.com/rkitover/windows-dev-guide).
#### Collaboration on a Branch
To update when multiple people are working on a git branch, keep a couple of
things in mind:
- Always `push -f` unless you're adding a commit on top. And it's almost always
better to edit the history than to add more commits. Never add commits fixing
previous commits, only improving or adding to them.
- To update when someone else updated the branch with a `git push -f`:
```bash
git status # should be clean, with your work having been already pushed
git fetch --all --prune
git reset --hard origin/<work-branch-name>
```
.
- While actively working on a branch, keep it rebased on top of master, like
this:
```bash
git fetch --all --prune
git rebase origin/master
git push -f
```
. You may sometimes need to fix conflicts, follow the instructions.
#### Commits from Admins
Maintainers and project members have the power to commit directly to master.
This power must be used responsibly.
Make your best attempt to follow these general guidelines:
- Things that are a minor fix or improvement that does not require discussion
can be committed directly, keeping the following guidelines in mind.
- Bigger new features, code refactors and changes in architecture should go
through the PR process.
- Absolutely **NEVER** `git push -f` on `master`. If you make a mistake, revert
or push a fix commit.
- Push code changes to a branch first, so they can run through the CI. When you
open the commit in GitHub there is a little icon in the upper left corner that
shows the CI status for this commit. Differences in what different compilers
allow is a problem that comes up **VERY** frequently. As well as
incompatibilities between different configurations for both the C++ code and
any supporting code. Once the CI is clear, you can merge your branch like
this:
```bash
git push -f
git checkout master
git merge --ff-only <your-work-branch-name>
git push
git branch -D <your-work-branch-name>
git push origin ':refs/heads/your-work-branch-nbame'
```
. The last line there deletes the branch in our repository.
### Miscellaneous
#### Debug Messages
We have an override for `wxLogDebug()` to make it work even in non-debug builds
of wxWidgets and on windows, even in mintty.
It works like `printf()`, e.g.:
```cpp
int foo = 42;
wxLogDebug(wxT("the value of foo = %d"), foo);
```
From the core etc. the usual:
```cpp
fprintf(stderr, "...", ...);
```
, will work fine.
You need a debug build for this to work or to even have a console on Windows.
Pass `-DCMAKE_BUILD_TYPE=Debug` to CMake.
### Release Process
#### GnuPG Key
You will need to create a GnuPG key for signing your commits and release tags,
and upload it to a keyserver.
Make sure to install GnuPG on all environments where you will be making commits
and tags.
#### Certificates
Make sure you have set up a Windows code signing certificate with the right
password and a Mac 'Developer ID Application' certificate.
Put the Windows certificate into `~/.codesign/windows_comodo.pkcs12` as a PKCS12
file that is password protected, and put the password for it into
`~/.codesign/windows_comodo.pkcs12.password`.
#### Release Commit and Tag
Once you are sure you're ready to release, and you are in a git clone on master
with a clean working tree, use the cmake script to make the release commit and
tag:
```bash
mkdir build && cd build
cmake .. -DTAG_RELEASE=TRUE
```
, follow the instructions to edit the `CHANGELOG.md` and then push the release:
To reiterate, **make sure you edit the `CHANGELOG.md`** to remove any
non-user-facing changes before you make the release commit.
```bash
git push
git push --tags
```
If you don't want to push the release, to back out the change do:
```bash
cmake .. -DTAG_RELEASE=UNDO
```
#### 64-bit Windows Binary
For this you will preferably need the PowerShell environment setup described
[here](https://github.com/rkitover/windows-dev-guide), or by starting the `x64
Native Tools Command Prompt` from your Start Menu.
```powershell
mkdir build-msvc64
cd build-msvc64
cmake .. -DCMAKE_BUILD_TYPE=Release -DUPSTREAM_RELEASE=TRUE -G Ninja
ninja
```
Collect the following files for the release:
- `visualboyadvance-m-Win-x86_64.zip`
- `translations.zip`
Repeat the process for the debug build, with `-DCMAKE_BUILD_TYPE=Debug` and
collect this file:
- `visualboyadvance-m-Win-x86_64-debug.zip`
.
#### 32-bit Windows Binary
The 32-bit build is a legacy build for Windows XP compatibility. You will need
the MinGW toolchain to build it. The easiest method is to use the MINGW32 MSYS2
environment.
Make sure the Visual Studio `signtool.exe` is in your path, you can start MSYS2
with an inherited `PATH` from a Visual Studio enabled environment or add it to
your shell configuration.
First install dependencies with:
```bash
./installdeps
```
. Then build the 32-bit binary as follows:
```bash
mkdir build-mingw32
cd build-mingw32
cmake .. -DCMAKE_BUILD_TYPE=Release -DUPSTREAM_RELEASE=TRUE -G Ninja
ninja
```
. Collect this file for the release:
- `visualboyadvance-m-Win-x86_32.zip`
. Then repeat the process for the debug build with `-DCMAKE_BUILD_TYPE=Debug`,
and collect this file:
- `visualboyadvance-m-Win-x86_32-debug.zip`
.
#### ARM64 Windows Binary
You will need the MSVC ARM64 cross toolchain to build this binary, if you used
the install script from [here](https://github.com/rkitover/windows-dev-guide)
you will have it installed, otherwise run Visual Studio Installer and install
the component.
To enter the ARM64 cross environment, edit the PowerShell profile described
[here](https://github.com/rkitover/windows-dev-guide) or use the `vcvarsall.bat`
script with the `amd64_arm64` argument as described
[here](https://learn.microsoft.com/en-us/cpp/build/building-on-the-command-line?view=msvc-170).
From there the process is the same as for the 64-bit build, collect the
following files for the release:
- `visualboyadvance-m-Win-arm64.zip`
- 'visualboyadvance-m-Win-arm64-debug.zip'
.
#### macOS Binary
Install the latest Xcode for your OS.
You will need bash from Homebrew/nix/MacPorts/whatever to run the build script.
You will need a codesigning certificate from Apple, which you will be able to
generate once you join their developer program from XCode. This is the
certificate of the type 'Developer ID Application' stored in your login
keychain.
If you are not using a GUI session, you will need to use a method to unlock your
login keychain before building so that your codesigning certificate can be used.
Adding the certificate and key to the System keychain is also a method that some
people use.
To unlock your keychain on login, you can add something like this to your
`~/.zshrc`:
```bash
security unlock-keychain -p "$(cat ~/.login-keychain-password)" login.keychain
```
, with your login password in that file.
For notarization to work, you will need to create an app-specific password on
https://appleid.apple.com , get your Team ID from your Apple Developer account,
and store them with this command:
```bash
xcrun notarytool store-credentials AC_PASSWORD \
--apple-id you@domain.com \
--team-id <DeveloperTeamID> \
--password <secret_app_specific_2FA_password>
```
. Once all of this is set up, run:
```bash
tools/osx/builder
```
, this will take a while because it builds all of the dependencies.
Collect the following files from `~/vbam-build-mac-64bit/project`:
- `visualboyadvance-m-Mac-x86_64.zip`
- `visualboyadvance-m-Mac-x86_64-debug.zip`
.
#### Final steps
Go to the github releases tab, and make a release for the tag you pushed
earlier.
Put any notes to users and distro maintainers into the description as well as
the generated entries from `CHANGELOG.md` you edited earlier.
Upload all files collected during the earlier builds, the complete list is:
- `translations.zip`
- `visualboyadvance-m-Win-x86_64.zip`
- `visualboyadvance-m-Win-x86_64-debug.zip`
- `visualboyadvance-m-Win-x86_32.zip`
- `visualboyadvance-m-Win-x86_32-debug.zip`
- `visualboyadvance-m-Win-arm64.zip`
- 'visualboyadvance-m-Win-arm64-debug.zip'
- `visualboyadvance-m-Mac-x86_64.zip`
- `visualboyadvance-m-Mac-x86_64-debug.zip`
Update the winsparkle `appcast.xml` by running this cmake command:
```bash
cmake .. -DUPDATE_APPCAST=TRUE
```
, follow the instructions to push the change to the web data repo.
Announce the release on reddit r/emulation and the forum.

279
README.md Normal file
View File

@@ -0,0 +1,279 @@
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
- [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)
- [MSys2 Notes](#msys2-notes)
- [Debug Messages](#debug-messages)
- [Reporting Crash Bugs](#reporting-crash-bugs)
- [Contributing](#contributing)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
Our bridged Discord server is [Here](https://discord.gg/EpfxEuGMKH).
We are also on *`#vba-m`* on [Libera IRC](https://libera.chat/) which has a [Web
Chat](https://web.libera.chat/).
[![Get it from flathub](https://dl.flathub.org/assets/badges/flathub-badge-en.svg)](https://flathub.org/apps/com.vba_m.visualboyadvance-m)
[![Get it from the Snap Store](https://snapcraft.io/static/images/badges/en/snap-store-black.svg)](https://snapcraft.io/visualboyadvance-m)
***Want to know where you can install visualboyadvance-m in your linux distribution?***
[![Packaging status](https://repology.org/badge/vertical-allrepos/visualboyadvance-m.svg)](https://repology.org/project/visualboyadvance-m/versions)
# Visual Boy Advance - M
Game Boy and Game Boy Advance Emulator
The forums are [here](https://board.visualboyadvance-m.org/).
Windows and Mac builds are in the [releases tab](https://github.com/visualboyadvance-m/visualboyadvance-m/releases).
Nightly builds for Windows and macOS are at [https://nightly.visualboyadvance-m.org/](https://nightly.visualboyadvance-m.org/).
**PLEASE TEST THE NIGHTLY OR MASTER WITH A FACTORY RESET BEFORE REPORTING
ISSUES**
Your distribution may have packages available as well, search for
`visualboyadvance-m` or `vbam`.
It is also generally very easy to build from source, see below.
If you are using the windows binary release and you need localization, unzip
the `translations.zip` to the same directory as the executable.
If you are having issues, try resetting the config file first, go to `Help ->
Factory Reset`.
## System Requirements
Windows XP, Vista, 7, 8.1 or 10/11, Linux distros or macOS.
2Ghz x86 (or x86-64) Intel Core 2 or AMD Athlon processor with SSE, Snapdragon 835
or newer CPU compatible with Arm for Windows.
- Just a guideline, lower clock speeds and Celeron processors may be able to run at full
speed on lower settings, and Linux based ARM Operating systems have wider CPU support.
DirectX June 2010 Redist
[Full](https://www.microsoft.com/en-au/download/details.aspx?id=8109) /
[Websetup](https://www.microsoft.com/en-au/download/details.aspx?id=35) for
Xaudio (Remember to uncheck Bing on the websetup.)
## Building
The basic formula to build vba-m is:
```bash
cd ~ && mkdir src && cd src
git clone https://github.com/visualboyadvance-m/visualboyadvance-m.git
cd visualboyadvance-m
./installdeps # On Linux or macOS
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -G Ninja
ninja
```
`./installdeps` is supported on MSYS2, Linux (Debian/Ubuntu, Fedora, Arch,
Solus, OpenSUSE, Gentoo and RHEL/CentOS) and Mac OS X (homebrew, MacPorts or
Fink.)
## Building a Libretro core
Clone this repo and then,
```bash
cd src/libretro
make -j`nproc`
```
Copy `vbam_libretro.so` to your RetroArch cores directory.
## Visual Studio Support
For visual studio, dependency management is handled automatically with vcpkg,
From the Visual Studio GUI, just clone the repository with git and build with
the cmake configurations provided.
If the GUI does not detect cmake, go to `File -> Open -> CMake` and open the
`CMakeLists.txt`.
If you are using 2017, make sure you have all the latest updates, some issues
with cmake projects in the GUI have been fixed.
You can also build from the developer command prompt or powershell with the
environment loaded.
Using your own user-wide installation of vcpkg is supported, just make sure the
environment variable `VCPKG_ROOT` is set.
To build in the Visual Studio `x64 Native Tools Command Prompt`, use something
like this:
```
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -G Ninja
ninja
```
.
## Visual Studio Code Support
Make sure the
[C/C++](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools)
and [CMake
Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools)
extensions are installed.
Add the following to your `settings.json`:
```json
{
"cmake.configureOnOpen": true,
"cmake.preferredGenerators": [ "Ninja" ]
}
```
.
## Dependencies
If your OS is not supported, you will need the following:
- C++ compiler and binutils
- [make](https://en.wikipedia.org/wiki/Make_(software))
- [CMake](https://cmake.org/)
- [git](https://git-scm.com/)
- [nasm](https://www.nasm.us/) (optional, for 32 bit builds)
And the following development libraries:
- [zlib](https://zlib.net/) (required)
- [mesa](https://mesa3d.org/) (if using X11 or any OpenGL otherwise)
- [ffmpeg](https://ffmpeg.org/) (optional, at least version `4.0.4`, for game recording)
- [gettext](https://www.gnu.org/software/gettext/) and gettext-tools
- [SDL2](https://www.libsdl.org/) (required)
- [openal-soft](https://kcat.strangesoft.net/openal.html) (optional, a sound interface)
- [wxWidgets](https://wxwidgets.org/) (required for GUI, 2.8 and non-stl builds are no longer supported)
On Linux and similar, you also need the version of GTK your wxWidgets is linked
to (usually 2 or 3) and the xorg development libraries.
Support for more OSes/distributions for `./installdeps` is planned.
## Cross compiling for 32 bit on a 64 bit host
`./installdeps m32` will set things up to build a 32 bit binary.
This is supported on Fedora, Arch, Solus and MSYS2.
## Cross Compiling for Win32
`./installdeps` takes one optional parameter for cross-compiling target, which
may be `win32` which is an alias for `mingw-w64-i686` to target 32 bit Windows,
or `mingw-w64-x86_64` for 64 bit Windows targets.
The target is implicit on MSYS2 depending on which MINGW shell you started (the
value of `$MSYSTEM`.)
On Debian/Ubuntu this uses the MXE apt repository and works quite well.
## CMake Options
The CMake code tries to guess reasonable defaults for options, but you can
override them, for example:
```shell
cmake .. -DCMAKE_BUILD_TYPE=Release -DENABLE_LINK=NO -G Ninja
```
. Here is the complete list:
| **CMake Option** | **What it Does** | **Defaults** |
|-----------------------|----------------------------------------------------------------------|-----------------------|
| `ENABLE_SDL` | Build the SDL port | OFF |
| `ENABLE_WX` | Build the wxWidgets port | ON |
| `ENABLE_DEBUGGER` | Enable the debugger | ON |
| `ENABLE_ASM_CORE` | Enable x86 ASM CPU cores (**BUGGY AND DANGEROUS**) | OFF |
| `ENABLE_ASM` | Enable the following two ASM options | ON for 32 bit builds |
| `ENABLE_ASM_SCALERS` | Enable x86 ASM graphic filters | ON for 32 bit builds |
| `ENABLE_MMX` | Enable MMX | ON for 32 bit builds |
| `ENABLE_LINK` | Enable GBA linking functionality | AUTO |
| `ENABLE_LIRC` | Enable LIRC support | OFF |
| `ENABLE_FFMPEG` | Enable ffmpeg A/V recording | AUTO |
| `ENABLE_ONLINEUPDATES` | Enable online update checks | ON |
| `ENABLE_LTO` | Compile with Link Time Optimization (gcc and clang only) | ON for release build |
| `ENABLE_GBA_LOGGING` | Enable extended GBA logging | ON |
| `ENABLE_OPENAL` | Enable openal-soft sound output for wxWidgets | ON, not 32 bit Win |
| `ENABLE_XAUDIO2` | Enable xaudio2 sound output for wxWidgets (Windows only) | ON |
| `ENABLE_FAUDIO` | Enable faudio sound output for wxWidgets, | ON, not 32 bit Win |
| `ENABLE_ASAN` | Enable libasan sanitizers (by default address, only in debug mode) | OFF |
| `UPSTREAM_RELEASE` | Do some release tasks, like codesigning, making zip and gpg sigs. | OFF |
| `BUILD_TESTING` | Build the tests and enable ctest support. | ON |
| `VBAM_STATIC` | Try link all libs statically (the following are set to ON if ON) | OFF |
| `SDL2_STATIC` | Try to link static SDL2 libraries | OFF |
| `FFMPEG_STATIC` | Try to link static ffmpeg libraries | OFF |
| `OPENAL_STATIC` | Try to link static OpenAL libraries | OFF |
| `TRANSLATIONS_ONLY` | Build only the translations.zip and nothing else | OFF |
Note for distro packagers, we use the CMake module
[GNUInstallDirs](https://cmake.org/cmake/help/v2.8.12/cmake.html#module:GNUInstallDirs)
to configure installation directories.
On Unix to use a different version of wxWidgets, set
`wxWidgets_CONFIG_EXECUTABLE` to the path to the `wx-config` script you want to
use.
## Reporting Crash Bugs
If the emulator crashes and you wish to report the bug, a backtrace made with
debug symbols would be immensely helpful.
To generate one (on Linux and MSYS2) first build in debug mode by invoking
`cmake` as:
```shell
cmake .. -DCMAKE_BUILD_TYPE=Debug
```
After you've reproduced the crash, you need the core dump file, you may need to
do something such as:
```shell
ulimit -c unlimited
```
, in your shell to enable core files.
[This
post](https://ask.fedoraproject.org/en/question/98776/where-is-core-dump-located/?answer=98779#post-id-98779)
explains how to retrieve core dump on some distributions, when they are managed
by systemd.
Once you have the core file, open it with `gdb`, for example:
```shell
gdb -c core ./visualboyadvance-m
```
. In the `gdb` shell, to start the process and print the backtrace, type:
```
run
bt
```
. This may be a bit of a hassle, but it helps us out immensely.
## Contributing
See the [Developer Manual](/DEVELOPER-MANUAL.md).

52
cmake-variants.yaml Normal file
View File

@@ -0,0 +1,52 @@
buildType:
default: debug
choices:
debug:
short: Debug
long: Emit debug information
buildType: Debug
release:
short: Release
long: Optimize generated code
buildType: Release
linkage:
default: static
choices:
static:
short: Static
long: Create static libraries
linkage: static
shared:
short: Shared
long: Create shared libraries/DLLs
linkage: shared
useLink:
default: withlink
choices:
withlink:
short: WithLink
long: Enable the Link feature
settings:
ENABLE_LINK: ON
nolink:
short: NoLink
long: Disable the Link feature
settings:
ENABLE_LINK: OFF
useDebugger:
default: withdebugger
choices:
withdebugger:
short: WithDebugger
long: Enable the Debugger feature
settings:
ENABLE_DEBUGGER: ON
nodebugger:
short: NoDebugger
long: Disable the Debugger feature
settings:
ENABLE_DEBUGGER: OFF
ENABLE_SDL: OFF

79
cmake/Architecture.cmake Normal file
View File

@@ -0,0 +1,79 @@
if(TRANSLATIONS_ONLY)
return()
endif()
# TODO: Use compiler CPU not CMake.
if(NOT CMAKE_SYSTEM_PROCESSOR)
if(NOT CMAKE_TOOLCHAIN_FILE AND CMAKE_HOST_SYSTEM_PROCESSOR)
set(CMAKE_SYSTEM_PROCESSOR ${CMAKE_HOST_SYSTEM_PROCESSOR})
elseif(CMAKE_TOOLCHAIN_FILE MATCHES mxe)
if(CMAKE_TOOLCHAIN_FILE MATCHES "i[3-9]86")
set(CMAKE_SYSTEM_PROCESSOR i686)
else()
set(CMAKE_SYSTEM_PROCESSOR x86_64)
endif()
elseif(CROSS_ARCH STREQUAL x86_64)
set(CMAKE_SYSTEM_PROCESSOR x86_64)
elseif(CROSS_ARCH STREQUAL i686)
set(CMAKE_SYSTEM_PROCESSOR i686)
endif()
endif()
# The processor may not be set, but set BITS regardless.
if(CMAKE_C_SIZEOF_DATA_PTR EQUAL 4)
set(BITS 32)
elseif(CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
set(BITS 64)
endif()
if(VCPKG_TARGET_TRIPLET MATCHES "^[aA][rR][mM]64")
set(CMAKE_SYSTEM_PROCESSOR ARM64)
elseif(VCPKG_TARGET_TRIPLET MATCHES "^[aA][rR][mM]-")
set(CMAKE_SYSTEM_PROCESSOR ARM)
endif()
if(APPLE AND
(CMAKE_OSX_ARCHITECTURES MATCHES "[xX]86_64") OR
(ENV{CFLAGS} MATCHES "[xX]86_64") OR
(ENV{CXXFLAGS} MATCHES "[xX]86_64") OR
(ENV{LDFLAGS} MATCHES "[xX]86_64"))
set(CMAKE_SYSTEM_PROCESSOR "x86_64")
endif()
# Turn asm on by default on 32bit x86 and set WINARCH for windows stuff.
if(CMAKE_SYSTEM_PROCESSOR MATCHES "[xX]86|i[3-9]86|[aA][mM][dD]64")
if(CMAKE_C_SIZEOF_DATA_PTR EQUAL 4) # 32 bit
set(ASM_DEFAULT ON)
set(X86_32 ON)
set(X86 ON)
set(WINARCH x86)
set(ARCH_NAME x86_32)
elseif(CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
set(AMD64 ON)
set(X64 ON)
set(X86_64 ON)
set(WINARCH x64)
set(ARCH_NAME x86_64)
endif()
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "[aA][aA][rR][cC][hH]|[aA][rR][mM]")
if(CMAKE_C_SIZEOF_DATA_PTR EQUAL 4) # 32 bit
set(ARM32 ON)
set(ARCH_NAME ARM32)
set(WINARCH arm)
elseif(CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
set(ARM64 ON)
set(ARCH_NAME ARM64)
set(WINARCH arm64)
endif()
if(NOT CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "[aA][aA][rR][cC][hH]|[aA][rR][mM]")
set(CMAKE_CROSSCOMPILING TRUE)
endif()
endif()
# We do not support amd64 asm yet
if(X86_64 AND (ENABLE_ASM_CORE OR ENABLE_ASM_SCALERS OR ENABLE_MMX))
message(FATAL_ERROR "The options ASM_CORE, ASM_SCALERS and MMX are not supported on X86_64 yet.")
endif()

View File

@@ -0,0 +1,85 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file LICENCE.txt or https://cmake.org/licensing for details.
# CMakeDetermine(LANG)Compiler.cmake -> this should find the compiler for LANG and configure CMake(LANG)Compiler.cmake.in
include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
if(NOT CMAKE_Metal_COMPILER_NAMES)
set(CMAKE_Metal_COMPILER_NAMES metal)
endif()
if("${CMAKE_GENERATOR}" STREQUAL "Xcode")
set(CMAKE_Metal_COMPILER_XCODE_TYPE sourcecode.metal)
execute_process(COMMAND xcrun --find metal
OUTPUT_VARIABLE _xcrun_out OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_VARIABLE _xcrun_err RESULT_VARIABLE _xcrun_result
)
if(_xcrun_result EQUAL 0 AND EXISTS "${_xcrun_out}")
set(CMAKE_Metal_COMPILER "${_xcrun_out}")
else()
_cmake_find_compiler_path(Metal)
endif()
else()
if(CMAKE_Metal_COMPILER)
_cmake_find_compiler_path(Metal)
else()
set(CMAKE_Metal_COMPILER_INIT NOTFOUND)
if(NOT $ENV{METALC} STREQUAL "")
get_filename_component(CMAKE_Metal_COMPILER_INIT $ENV{METALC} PROGRAM PROGRAM_ARGS CMAKE_Metal_FLAGS_ENV_INIT)
if(CMAKE_Metal_FLAGS_ENV_INIT)
set(CMAKE_Metal_COMPILER_ARG1 "${CMAKE_Metal_FLAGS_ENV_INIT}" CACHE STRING "Arguments to the Metal compiler")
endif()
if(NOT EXISTS ${CMAKE_Metal_COMPILER_INIT})
message(FATAL_ERROR "Could not find compiler set in environment variable METALC\n$ENV{METALC}.\n${CMAKE_Metal_COMPILER_INIT}")
endif()
endif()
if(NOT CMAKE_Metal_COMPILER_INIT)
set(CMAKE_Metal_COMPILER_LIST metal ${_CMAKE_TOOLCHAIN_PREFIX}metal)
endif()
_cmake_find_compiler(Metal)
endif()
mark_as_advanced(CMAKE_Metal_COMPILER)
endif()
# For Metal we need to explicitly query the version.
if(CMAKE_Metal_COMPILER AND NOT CMAKE_Metal_COMPILER_VERSION)
execute_process(
COMMAND "${CMAKE_Metal_COMPILER}" --version
OUTPUT_VARIABLE output ERROR_VARIABLE output
RESULT_VARIABLE result
TIMEOUT 10
)
message(CONFIGURE_LOG
"Running the Metal compiler: \"${CMAKE_Metal_COMPILER}\" --version\n"
"${output}\n"
)
if(output MATCHES [[metal version ([0-9]+\.[0-9]+(\.[0-9]+)?)]])
set(CMAKE_Metal_COMPILER_VERSION "${CMAKE_MATCH_1}")
if(NOT CMAKE_Metal_COMPILER_ID)
set(CMAKE_Metal_COMPILER_ID "Apple")
endif()
endif()
endif()
if(NOT _CMAKE_TOOLCHAIN_LOCATION)
get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_Metal_COMPILER}" PATH)
endif ()
set(_CMAKE_PROCESSING_LANGUAGE "Metal")
include(CMakeFindBinUtils)
unset(_CMAKE_PROCESSING_LANGUAGE)
configure_file(
${CMAKE_CURRENT_LIST_DIR}/CMakeMetalCompiler.cmake.in
${CMAKE_PLATFORM_INFO_DIR}/CMakeMetalCompiler.cmake
)
set(CMAKE_Metal_COMPILER_ENV_VAR "METALC")

View File

@@ -0,0 +1,27 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file LICENCE.txt or https://cmake.org/licensing for details.
# CMake(LANG)Compiler.cmake.in -> used by CMakeDetermine(LANG)Compiler.cmake
# This file is used to store compiler information and is copied down into try
# compile directories so that try compiles do not need to re-determine and test
# the LANG
set(CMAKE_Metal_COMPILER "@CMAKE_Metal_COMPILER@")
set(CMAKE_Metal_COMPILER_ID "@CMAKE_Metal_COMPILER_ID@")
set(CMAKE_Metal_COMPILER_VERSION "@CMAKE_Metal_COMPILER_VERSION@")
set(CMAKE_Metal_COMPILER_LOADED 1)
set(CMAKE_Metal_COMPILER_WORKS "@CMAKE_Metal_COMPILER_WORKS@")
set(CMAKE_Metal_COMPILER_ENV_VAR "METALC")
set(CMAKE_Metal_COMPILER_ID_RUN "@CMAKE_Metal_COMPILER_ID_RUN@")
set(CMAKE_Metal_SOURCE_FILE_EXTENSIONS metal)
set(CMAKE_Metal_OUTPUT_EXTENSION ".air")
set(CMAKE_STATIC_LIBRARY_PREFIX_Metal "")
set(CMAKE_STATIC_LIBRARY_SUFFIX_Metal ".metal-ar")
set(CMAKE_SHARED_LIBRARY_PREFIX_Metal "")
set(CMAKE_SHARED_LIBRARY_SUFFIX_Metal ".metallib")
set(CMAKE_SHARED_MODULE_PREFIX_Metal "")
set(CMAKE_SHARED_MODULE_SUFFIX_Metal ".metallib")
set(CMAKE_EXECUTABLE_SUFFIX_Metal ".metallib")

View File

@@ -0,0 +1,85 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file LICENCE.txt or https://cmake.org/licensing for details.
# CMake(LANG)Information.cmake -> set up rule variables for LANG :
# CMAKE_(LANG)_CREATE_SHARED_LIBRARY
# CMAKE_(LANG)_CREATE_SHARED_MODULE
# CMAKE_(LANG)_CREATE_STATIC_LIBRARY
# CMAKE_(LANG)_COMPILE_OBJECT
# CMAKE_(LANG)_LINK_EXECUTABLE
include(CMakeCommonLanguageInclude)
set(CMAKE_Metal_FLAGS_INIT "-ffast-math")
set(CMAKE_Metal_FLAGS_DEBUG_INIT "-gline-tables-only -frecord-sources")
set(CMAKE_Metal_FLAGS_RELWITHDEBINFO_INIT "-gline-tables-only -frecord-sources")
cmake_initialize_per_config_variable(CMAKE_Metal_FLAGS "Flags used by the Metal compiler")
set(CMAKE_INCLUDE_FLAG_Metal "-I ")
set(CMAKE_Metal_COMPILER_ARG1 "")
set(CMAKE_Metal_DEFINE_FLAG -D)
set(CMAKE_Metal_FRAMEWORK_SEARCH_FLAG "-F ")
set(CMAKE_Metal_LIBRARY_PATH_FLAG "-L ")
set(CMAKE_Metal_SYSROOT_FLAG "-isysroot")
set(CMAKE_Metal_COMPILE_OPTIONS_TARGET "-target ")
set(CMAKE_DEPFILE_FLAGS_Metal "-MMD -MT dependencies -MF <DEP_FILE>")
if(CMAKE_GENERATOR MATCHES "Makefiles")
set(CMAKE_Metal_DEPFILE_FORMAT gcc)
set(CMAKE_Metal_DEPENDS_USE_COMPILER TRUE)
endif()
set(CMAKE_Metal_COMPILER_PREDEFINES_COMMAND "${CMAKE_Metal_COMPILER}")
if(CMAKE_Metal_COMPILER_TARGET)
list(APPEND CMAKE_Metal_COMPILER_PREDEFINES_COMMAND "-target" "${CMAKE_Metal_COMPILER_TARGET}")
endif()
# now define the following rule variables
# CMAKE_Metal_CREATE_SHARED_LIBRARY
# CMAKE_Metal_CREATE_SHARED_MODULE
# CMAKE_Metal_COMPILE_OBJECT
# CMAKE_Metal_LINK_EXECUTABLE
# variables supplied by the generator at use time
# <TARGET>
# <TARGET_BASE> the target without the suffix
# <OBJECTS>
# <OBJECT>
# <LINK_LIBRARIES>
# <FLAGS>
# <LINK_FLAGS>
# Metal compiler information
# <CMAKE_Metal_COMPILER>
# <CMAKE_SHARED_LIBRARY_CREATE_Metal_FLAGS>
# <CMAKE_SHARED_MODULE_CREATE_Metal_FLAGS>
# <CMAKE_Metal_LINK_FLAGS>
if(NOT CMAKE_Metal_COMPILE_OBJECT)
set(CMAKE_Metal_COMPILE_OBJECT
"<CMAKE_Metal_COMPILER> -c <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> <SOURCE>"
)
endif()
if(NOT CMAKE_Metal_CREATE_SHARED_LIBRARY)
set(CMAKE_Metal_CREATE_SHARED_LIBRARY
"<CMAKE_Metal_COMPILER> <CMAKE_SHARED_LIBRARY_Metal_FLAGS> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_Metal_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>"
)
endif()
if(NOT CMAKE_Metal_CREATE_SHARED_MODULE)
set(CMAKE_Metal_CREATE_SHARED_MODULE
"${CMAKE_Metal_CREATE_SHARED_LIBRARY}"
)
endif()
if(NOT CMAKE_Metal_LINK_EXECUTABLE)
# Metal shaders don't really have "executables", but we need this for the try_compile to work properly, so we'll just have it output a metallib file
set(CMAKE_Metal_LINK_EXECUTABLE
"<CMAKE_Metal_COMPILER> <FLAGS> <CMAKE_Metal_LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>"
)
endif()
set(CMAKE_Metal_INFORMATION_LOADED 1)

View File

@@ -0,0 +1,78 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file LICENCE.txt or https://cmake.org/licensing for details.
# CMakeTest(LANG)Compiler.cmake -> test the compiler and set:
# SET(CMAKE_(LANG)_COMPILER_WORKS 1 CACHE INTERNAL "")
if(CMAKE_Metal_COMPILER_FORCED)
# The compiler configuration was forced by the user.
# Assume the user has configured all compiler information.
set(CMAKE_Metal_COMPILER_WORKS TRUE)
return()
endif()
include(CMakeTestCompilerCommon)
if("${CMAKE_GENERATOR}" STREQUAL "Xcode")
if(XCODE_VERSION VERSION_GREATER 7.0)
set(CMAKE_Metal_COMPILER_WORKS 1)
endif()
endif()
# This file is used by EnableLanguage in cmGlobalGenerator to
# determine that that selected Metal compiler can actually compile
# and link the most basic of programs. If not, a fatal error
# is set and cmake stops processing commands and will not generate
# any makefiles or projects.
if(NOT CMAKE_Metal_COMPILER_WORKS)
PrintTestCompilerStatus("Metal")
__TestCompiler_setTryCompileTargetType()
string(CONCAT __TestCompiler_testMetalCompilerSource
"#ifndef __METAL_VERSION__\n"
"# error \"The CMAKE_Metal_COMPILER is not a Metal compiler\"\n"
"#endif\n"
"#import <metal_stdlib>\n"
"using namespace metal;\n"
)
# Clear result from normal variable.
unset(CMAKE_Metal_COMPILER_WORKS)
# Puts test result in cache variable.
try_compile(CMAKE_Metal_COMPILER_WORKS
SOURCE_FROM_VAR testMetalCompiler.metal __TestCompiler_testMetalCompilerSource
OUTPUT_VARIABLE __CMAKE_Metal_COMPILER_OUTPUT
)
unset(__TestCompiler_testMetalCompilerSource)
# Move result from cache to normal variable.
set(CMAKE_Metal_COMPILER_WORKS ${CMAKE_Metal_COMPILER_WORKS})
unset(CMAKE_Metal_COMPILER_WORKS CACHE)
__TestCompiler_restoreTryCompileTargetType()
set(METAL_TEST_WAS_RUN 1)
endif()
if(NOT CMAKE_Metal_COMPILER_WORKS)
PrintTestCompilerResult(CHECK_FAIL "broken")
string(REPLACE "\n" "\n " _output "${__CMAKE_Metal_COMPILER_OUTPUT}")
message(FATAL_ERROR "The Metal compiler\n \"${CMAKE_Metal_COMPILER}\"\n"
"is not able to compile a simple test program.\nIt fails "
"with the following output:\n ${_output}\n\n"
"CMake will not be able to correctly generate this project."
)
else()
if(METAL_TEST_WAS_RUN)
PrintTestCompilerResult(CHECK_PASS "works")
endif()
# Re-configure to save learned information.
configure_file(
${CMAKE_CURRENT_LIST_DIR}/CMakeMetalCompiler.cmake.in
${CMAKE_PLATFORM_INFO_DIR}/CMakeMetalCompiler.cmake
@ONLY
)
include(${CMAKE_PLATFORM_INFO_DIR}/CMakeMetalCompiler.cmake)
endif()
unset(__CMAKE_Metal_COMPILER_OUTPUT)

View File

@@ -0,0 +1,25 @@
function(changelog_version version revision version_release)
set(${version} "" CACHE STRING "Latest ChangeLog Version" FORCE)
set(${revision} "" CACHE STRING "Latest ChangeLog Revision" FORCE)
set(${version_release} 0 CACHE STRING "Is this a versioned release without revision" FORCE)
file(READ CHANGELOG.md changelog_file)
if(NOT changelog_file)
return()
endif()
string(REGEX MATCH "\n## +\\[([0-9.]+)(-([^] ]+))?\\] *.* *[0-9][0-9]?/" match_out "${changelog_file}")
set(changelog_version "${CMAKE_MATCH_1}")
set(is_version_release 0)
set(changelog_revision "${CMAKE_MATCH_3}")
if(NOT changelog_revision)
set(is_version_release 1)
endif()
set(${version} "${changelog_version}" CACHE STRING "Latest ChangeLog Version" FORCE)
set(${revision} "${changelog_revision}" CACHE STRING "Latest ChangeLog Revision" FORCE)
set(${version_release} "${is_version_release}" CACHE STRING "Is this a versioned release without revision" FORCE)
endfunction()

169
cmake/CheckLanguage.cmake Normal file
View File

@@ -0,0 +1,169 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file LICENCE.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
CheckLanguage
-------------
Check whether a language can be enabled by the :command:`enable_language`
or :command:`project` commands:
.. command:: check_language
.. code-block:: cmake
check_language(<lang>)
Try enabling language ``<lang>`` in a test project and record results
in the cache:
:variable:`CMAKE_<LANG>_COMPILER`
If the language can be enabled, this variable is set to the compiler
that was found. If the language cannot be enabled, this variable is
set to ``NOTFOUND``.
If this variable is already set, either explicitly or cached by
a previous call, the check is skipped.
:variable:`CMAKE_<LANG>_HOST_COMPILER`
This variable is set when ``<lang>`` is ``CUDA`` or ``HIP``.
If the check detects an explicit host compiler that is required for
compilation, this variable will be set to that compiler.
If the check detects that no explicit host compiler is needed,
this variable will be cleared.
If this variable is already set, its value is preserved only if
:variable:`CMAKE_<LANG>_COMPILER` is also set.
Otherwise, the check runs and overwrites
:variable:`CMAKE_<LANG>_HOST_COMPILER` with a new result.
Note that :variable:`CMAKE_<LANG>_HOST_COMPILER` documents it should
not be set without also setting
:variable:`CMAKE_<LANG>_COMPILER` to a NVCC compiler.
:variable:`CMAKE_<LANG>_PLATFORM <CMAKE_HIP_PLATFORM>`
This variable is set to the detected GPU platform when ``<lang>`` is ``HIP``.
If the variable is already set its value is always preserved. Only compatible values
will be considered for :variable:`CMAKE_<LANG>_COMPILER`.
For example:
.. code-block:: cmake
check_language(Fortran)
if(CMAKE_Fortran_COMPILER)
enable_language(Fortran)
else()
message(STATUS "No Fortran support")
endif()
#]=======================================================================]
# This file has been modified to take into account the CMAKE_MODULES path when trying to build the test project
# Ref https://gitlab.kitware.com/cmake/cmake/-/issues/26020
# This was merged in to CMake 3.30.0, so we only need this for older versions
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.30)
include(${CMAKE_ROOT}/Modules/CheckLanguage.cmake)
else()
include_guard(GLOBAL)
block(SCOPE_FOR POLICIES)
cmake_policy(SET CMP0126 NEW)
macro(check_language lang)
if(NOT DEFINED CMAKE_${lang}_COMPILER)
set(_desc "Looking for a ${lang} compiler")
message(CHECK_START "${_desc}")
file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang})
set(extra_compiler_variables)
if("${lang}" MATCHES "^(CUDA|HIP)$" AND NOT CMAKE_GENERATOR MATCHES "Visual Studio")
set(extra_compiler_variables "set(CMAKE_${lang}_HOST_COMPILER \\\"\${CMAKE_${lang}_HOST_COMPILER}\\\")")
endif()
if("${lang}" STREQUAL "HIP")
list(APPEND extra_compiler_variables "set(CMAKE_${lang}_PLATFORM \\\"\${CMAKE_${lang}_PLATFORM}\\\")")
endif()
list(TRANSFORM extra_compiler_variables PREPEND "\"")
list(TRANSFORM extra_compiler_variables APPEND "\\n\"")
list(JOIN extra_compiler_variables "\n " extra_compiler_variables)
set(_cl_content
"cmake_minimum_required(VERSION ${CMAKE_VERSION})
set(CMAKE_MODULE_PATH \"${CMAKE_MODULE_PATH}\")
project(Check${lang} ${lang})
file(WRITE \"\${CMAKE_CURRENT_BINARY_DIR}/result.cmake\"
\"set(CMAKE_${lang}_COMPILER \\\"\${CMAKE_${lang}_COMPILER}\\\")\\n\"
${extra_compiler_variables}
)"
)
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}/CMakeLists.txt"
"${_cl_content}")
if(CMAKE_GENERATOR_INSTANCE)
set(_D_CMAKE_GENERATOR_INSTANCE "-DCMAKE_GENERATOR_INSTANCE:INTERNAL=${CMAKE_GENERATOR_INSTANCE}")
else()
set(_D_CMAKE_GENERATOR_INSTANCE "")
endif()
if(CMAKE_GENERATOR MATCHES "^(Xcode$|Green Hills MULTI$|Visual Studio)")
set(_D_CMAKE_MAKE_PROGRAM "")
else()
set(_D_CMAKE_MAKE_PROGRAM "-DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_MAKE_PROGRAM}")
endif()
if(CMAKE_TOOLCHAIN_FILE)
set(_D_CMAKE_TOOLCHAIN_FILE "-DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE}")
else()
set(_D_CMAKE_TOOLCHAIN_FILE "")
endif()
if(CMAKE_${lang}_PLATFORM)
set(_D_CMAKE_LANG_PLATFORM "-DCMAKE_${lang}_PLATFORM:STRING=${CMAKE_${lang}_PLATFORM}")
else()
set(_D_CMAKE_LANG_PLATFORM "")
endif()
execute_process(
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}
COMMAND ${CMAKE_COMMAND} . -G ${CMAKE_GENERATOR}
-A "${CMAKE_GENERATOR_PLATFORM}"
-T "${CMAKE_GENERATOR_TOOLSET}"
${_D_CMAKE_GENERATOR_INSTANCE}
${_D_CMAKE_MAKE_PROGRAM}
${_D_CMAKE_TOOLCHAIN_FILE}
${_D_CMAKE_LANG_PLATFORM}
OUTPUT_VARIABLE _cl_output
ERROR_VARIABLE _cl_output
RESULT_VARIABLE _cl_result
)
include(${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}/result.cmake OPTIONAL)
if(CMAKE_${lang}_COMPILER AND "${_cl_result}" STREQUAL "0")
message(CONFIGURE_LOG
"${_desc} passed with the following output:\n"
"${_cl_output}\n")
set(_CHECK_COMPILER_STATUS CHECK_PASS)
else()
set(CMAKE_${lang}_COMPILER NOTFOUND)
set(_CHECK_COMPILER_STATUS CHECK_FAIL)
message(CONFIGURE_LOG
"${_desc} failed with the following output:\n"
"${_cl_output}\n")
endif()
message(${_CHECK_COMPILER_STATUS} "${CMAKE_${lang}_COMPILER}")
set(CMAKE_${lang}_COMPILER "${CMAKE_${lang}_COMPILER}" CACHE FILEPATH "${lang} compiler")
mark_as_advanced(CMAKE_${lang}_COMPILER)
if(CMAKE_${lang}_HOST_COMPILER)
message(STATUS "Looking for a ${lang} host compiler - ${CMAKE_${lang}_HOST_COMPILER}")
set(CMAKE_${lang}_HOST_COMPILER "${CMAKE_${lang}_HOST_COMPILER}" CACHE FILEPATH "${lang} host compiler")
mark_as_advanced(CMAKE_${lang}_HOST_COMPILER)
endif()
if(CMAKE_${lang}_PLATFORM)
set(CMAKE_${lang}_PLATFORM "${CMAKE_${lang}_PLATFORM}" CACHE STRING "${lang} platform")
mark_as_advanced(CMAKE_${lang}_PLATFORM)
endif()
endif()
endmacro()
endblock()
endif()

146
cmake/Dependencies.cmake Normal file
View File

@@ -0,0 +1,146 @@
if(TRANSLATIONS_ONLY)
return()
endif()
# Look for some dependencies using CMake scripts
find_package(ZLIB REQUIRED)
set(OpenGL_GL_PREFERENCE GLVND)
if(CMAKE_SYSTEM_NAME STREQUAL FreeBSD)
set(OpenGL_GL_PREFERENCE LEGACY)
endif()
if(NOT DISABLE_OPENGL)
find_package(OpenGL)
if(NOT OpenGL_FOUND)
set(CMAKE_C_FLAGS "-DNO_OPENGL -DNO_OGL ${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS "-DNO_OPENGL -DNO_OGL ${CMAKE_CXX_FLAGS}")
endif()
endif()
# Add libsamplerate to SDL2 with vcpkg
unset(SDL_LIBRARY_TEMP)
if((NOT ENABLE_SDL3) AND CMAKE_TOOLCHAIN_FILE MATCHES "vcpkg")
if(WIN32)
unset(arch_suffix)
unset(path_prefix)
if(VCPKG_TARGET_TRIPLET MATCHES -static)
set(arch_suffix -static)
endif()
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(path_prefix debug)
endif()
set(samplerate_lib_name samplerate)
set(installed_prefix ${_VCPKG_INSTALLED_DIR}/${WINARCH}-windows${arch_suffix}/${path_prefix})
if(MINGW)
set(installed_prefix ${_VCPKG_INSTALLED_DIR}/${WINARCH}-mingw${arch_suffix}/${path_prefix})
set(samplerate_lib_name lib${samplerate_lib_name})
endif()
SET(SDL_LIBRARY_TEMP ${SDL_LIBRARY_TEMP} "${installed_prefix}/lib/${samplerate_lib_name}${CMAKE_STATIC_LIBRARY_SUFFIX}")
else()
SET(SDL_LIBRARY_TEMP ${SDL_LIBRARY_TEMP} -lsamplerate)
endif()
endif()
if(ENABLE_SDL3)
if(UNIX AND NOT APPLE)
set(VBAM_SDL_LIBS "${SDL3_LIBRARIES}")
else()
if(VBAM_STATIC)
set(VBAM_SDL_LIBS SDL3::SDL3-static ${SDL_LIBRARY_TEMP})
else()
set(VBAM_SDL_LIBS SDL3::SDL3 ${SDL_LIBRARY_TEMP})
endif()
endif()
else()
if(VBAM_STATIC)
set(VBAM_SDL_LIBS SDL2::SDL2-static ${SDL_LIBRARY_TEMP})
else()
set(VBAM_SDL_LIBS SDL2::SDL2 ${SDL_LIBRARY_TEMP})
endif()
endif()
if(ENABLE_FFMPEG)
if(NOT FFMPEG_LIBRARIES)
message(FATAL_ERROR "ENABLE_FFMPEG was specified, but required versions of ffmpeg libraries cannot be found!")
endif()
if(APPLE)
list(APPEND FFMPEG_LDFLAGS "SHELL:-framework CoreText" "SHELL:-framework ApplicationServices")
if(UPSTREAM_RELEASE)
list(APPEND FFMPEG_LDFLAGS -lbz2 -ltiff "SHELL:-framework DiskArbitration" -lfreetype -lfontconfig -llzma -lxml2 -lharfbuzz -lcrypto -lssl)
endif()
elseif(WIN32)
set(WIN32_MEDIA_FOUNDATION_LIBS dxva2 evr mf mfplat mfplay mfreadwrite mfuuid amstrmid)
list(APPEND FFMPEG_LIBRARIES secur32 bcrypt ${WIN32_MEDIA_FOUNDATION_LIBS})
if(MSYS AND VBAM_STATIC)
foreach(lib tiff jbig lzma)
cygpath(lib "$ENV{MSYSTEM_PREFIX}/lib/lib${lib}.a")
list(APPEND FFMPEG_LIBRARIES "${lib}")
endforeach()
endif()
endif()
else()
add_compile_definitions(NO_FFMPEG)
endif()
if(ENABLE_LINK)
# IPC linking code needs sem_timedwait which can be either in librt or pthreads
if(NOT WIN32)
find_library(RT_LIB rt)
if(RT_LIB)
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${RT_LIB})
set(VBAMCORE_LIBS ${VBAMCORE_LIBS} ${RT_LIB})
endif()
endif()
include(CheckFunctionExists)
check_function_exists(sem_timedwait SEM_TIMEDWAIT)
if(SEM_TIMEDWAIT)
add_compile_definitions(HAVE_SEM_TIMEDWAIT)
endif()
else()
add_compile_definitions(NO_LINK)
endif()
# for now, only GBALink.cpp uses gettext() directly
if(APPLE)
# use Homebrew gettext if available
if(EXISTS "/usr/local/opt/gettext")
set(CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH};/usr/local/opt/gettext/include")
set(CMAKE_LIBRARY_PATH "${CMAKE_LIBRARY_PATH};/usr/local/opt/gettext/lib")
set(CMAKE_PROGRAM_PATH "${CMAKE_PROGRAM_PATH};/usr/local/opt/gettext/bin")
endif()
endif()
if(ENABLE_LINK OR ENABLE_WX)
find_path(LIBINTL_INC libintl.h)
find_library(LIBINTL_LIB NAMES libintl intl)
find_library(LIBICONV_LIB NAMES libiconv iconv)
find_library(LIBCHARSET_LIB NAMES libcharset charset)
if(LIBINTL_LIB)
list(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBINTL_LIB})
list(APPEND NLS_LIBS ${LIBINTL_LIB})
endif()
if(LIBICONV_LIB)
list(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBICONV_LIB})
list(APPEND NLS_LIBS ${LIBICONV_LIB})
endif()
if(LIBCHARSET_LIB)
list(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBCHARSET_LIB})
list(APPEND NLS_LIBS ${LIBCHARSET_LIB})
endif()
include(CheckFunctionExists)
check_function_exists(gettext GETTEXT_FN)
if(NOT (LIBINTL_INC OR GETTEXT_FN))
message(FATAL_ERROR "NLS requires libintl/gettext")
endif()
endif()

44
cmake/FileIterator.cmake Normal file
View File

@@ -0,0 +1,44 @@
# Interface for iterating over a text file by line.
#
# Example usage:
#
# fi_open_file(${some_file})
#
# while(NOT fi_done)
# fi_get_next_line()
#
# message(STATUS "read line: ${fi_line}")
# endwhile()
macro(fi_check_done)
string(LENGTH "${fi_file_contents}" len)
set(fi_done FALSE PARENT_SCOPE)
if(len EQUAL 0)
set(fi_done TRUE PARENT_SCOPE)
endif()
endmacro()
function(fi_open_file file)
file(READ "${file}" fi_file_contents)
set(fi_file_contents "${fi_file_contents}" PARENT_SCOPE)
fi_check_done()
endfunction()
function(fi_get_next_line)
string(FIND "${fi_file_contents}" "\n" pos)
string(SUBSTRING "${fi_file_contents}" 0 ${pos} fi_line)
math(EXPR pos "${pos} + 1")
string(SUBSTRING "${fi_file_contents}" ${pos} -1 fi_file_contents)
fi_check_done()
set(fi_line "${fi_line}" PARENT_SCOPE)
set(fi_file_contents "${fi_file_contents}" PARENT_SCOPE)
endfunction()

158
cmake/FindFFmpeg.cmake Normal file
View File

@@ -0,0 +1,158 @@
# vim: ts=2 sw=2
# - Try to find the required ffmpeg components(default: AVFORMAT, AVUTIL, AVCODEC)
#
# Once done this will define
# FFMPEG_FOUND - System has the all required components.
# FFMPEG_INCLUDE_DIRS - Include directory necessary for using the required components headers.
# FFMPEG_LIBRARIES - Link these to use the required ffmpeg components.
# FFMPEG_DEFINITIONS - Compiler switches required for using the required ffmpeg components.
#
# For each of the components it will additionally set.
# - AVCODEC
# - AVDEVICE
# - AVFORMAT
# - AVFILTER
# - AVUTIL
# - POSTPROC
# - SWSCALE
# the following variables will be defined
# <component>_FOUND - System has <component>
# <component>_INCLUDE_DIRS - Include directory necessary for using the <component> headers
# <component>_LIBRARIES - Link these to use <component>
# <component>_DEFINITIONS - Compiler switches required for using <component>
# <component>_VERSION - The components version
#
# Copyright (c) 2006, Matthias Kretz, <kretz@kde.org>
# Copyright (c) 2008, Alexander Neundorf, <neundorf@kde.org>
# Copyright (c) 2011, Michael Jansen, <kde@michael-jansen.biz>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
include(FindPackageHandleStandardArgs)
# The default components were taken from a survey over other FindFFMPEG.cmake files
if (NOT FFmpeg_FIND_COMPONENTS)
set(FFmpeg_FIND_COMPONENTS AVFORMAT AVCODEC AVUTIL SWSCALE SWRESAMPLE X264 X265)
endif ()
#
### Macro: set_component_found
#
# Marks the given component as found if both *_LIBRARIES AND *_INCLUDE_DIRS is present.
#
macro(set_component_found _component )
if (${_component}_LIBRARIES AND ${_component}_INCLUDE_DIRS)
# message(STATUS " - ${_component} found.")
set(${_component}_FOUND TRUE)
else ()
# message(STATUS " - ${_component} not found.")
endif ()
endmacro()
#
### Macro: find_component
#
# Checks for the given component by invoking pkgconfig and then looking up the libraries and
# include directories.
#
macro(find_component _component _pkgconfig _library _header)
if (NOT WIN32)
# use pkg-config to get the directories and then use these values
# in the FIND_PATH() and FIND_LIBRARY() calls
find_package(PkgConfig)
if (PKG_CONFIG_FOUND)
pkg_check_modules(PC_${_component} ${_pkgconfig})
endif ()
endif (NOT WIN32)
find_path(${_component}_INCLUDE_DIRS ${_header}
HINTS
${PC_${_component}_INCLUDEDIR}
${PC_${_component}_INCLUDE_DIRS}
PATH_SUFFIXES
ffmpeg
)
find_library(${_component}_LIBRARIES NAMES ${_library}
HINTS
${PC_${_component}_LIBDIR}
${PC_${_component}_LIBRARY_DIRS}
)
set(${_component}_DEFINITIONS ${PC_${_component}_CFLAGS_OTHER} CACHE STRING "The ${_component} CFLAGS.")
set(${_component}_VERSION ${PC_${_component}_VERSION} CACHE STRING "The ${_component} version number.")
set_component_found(${_component})
mark_as_advanced(
${_component}_INCLUDE_DIRS
${_component}_LIBRARIES
${_component}_DEFINITIONS
${_component}_VERSION)
endmacro()
# Check for cached results. If there are skip the costly part.
if (NOT FFMPEG_LIBRARIES)
set(x265_lib "x265")
if(CMAKE_TOOLCHAIN_FILE MATCHES "vcpkg" AND FFMPEG_STATIC)
set(x265_lib "x265-static")
endif()
# Check for all possible component.
find_component(AVFORMAT libavformat avformat libavformat/avformat.h)
find_component(AVCODEC libavcodec avcodec libavcodec/avcodec.h)
find_component(AVDEVICE libavdevice avdevice libavdevice/avdevice.h)
find_component(AVUTIL libavutil avutil libavutil/avutil.h)
find_component(AVFILTER libavfilter avfilter libavfilter/avfilter.h)
find_component(SWSCALE libswscale swscale libswscale/swscale.h)
find_component(POSTPROC libpostproc postproc libpostproc/postprocess.h)
find_component(SWRESAMPLE libswresample swresample libswresample/swresample.h)
find_component(X264 x264 x264 x264.h)
find_component(X265 x265 "${x265_lib}" x265.h)
# Check if the required components were found and add their stuff to the FFMPEG_* vars.
foreach (_component ${FFmpeg_FIND_COMPONENTS})
if (${_component}_FOUND)
# message(STATUS "Required component ${_component} present.")
set(FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES} ${${_component}_LIBRARIES})
set(FFMPEG_DEFINITIONS ${FFMPEG_DEFINITIONS} ${${_component}_DEFINITIONS})
list(APPEND FFMPEG_INCLUDE_DIRS ${${_component}_INCLUDE_DIRS})
else ()
# message(STATUS "Required component ${_component} missing.")
endif ()
endforeach ()
# Build the include path with duplicates removed.
if (FFMPEG_INCLUDE_DIRS)
list(REMOVE_DUPLICATES FFMPEG_INCLUDE_DIRS)
endif ()
# cache the vars.
set(FFMPEG_INCLUDE_DIRS ${FFMPEG_INCLUDE_DIRS} CACHE STRING "The FFmpeg include directories." FORCE)
set(FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES} CACHE STRING "The FFmpeg libraries." FORCE)
set(FFMPEG_DEFINITIONS ${FFMPEG_DEFINITIONS} CACHE STRING "The FFmpeg cflags." FORCE)
mark_as_advanced(FFMPEG_INCLUDE_DIRS
FFMPEG_LIBRARIES
FFMPEG_DEFINITIONS)
endif ()
# Now set the noncached _FOUND vars for the components.
foreach (_component AVCODEC AVDEVICE AVFORMAT AVUTIL POSTPROCESS SWSCALE)
set_component_found(${_component})
endforeach ()
# Compile the list of required vars
set(_FFmpeg_REQUIRED_VARS FFMPEG_LIBRARIES FFMPEG_INCLUDE_DIRS)
foreach (_component ${FFmpeg_FIND_COMPONENTS})
list(APPEND _FFmpeg_REQUIRED_VARS ${_component}_LIBRARIES ${_component}_INCLUDE_DIRS)
endforeach ()
# Give a nice error message if some of the required vars are missing.
find_package_handle_standard_args(FFmpeg DEFAULT_MSG ${_FFmpeg_REQUIRED_VARS})

232
cmake/FindGettext.cmake Normal file
View File

@@ -0,0 +1,232 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindGettext
-----------
Find GNU gettext tools
This module looks for the GNU gettext tools. This module defines the
following values:
::
GETTEXT_MSGMERGE_EXECUTABLE: the full path to the msgmerge tool.
GETTEXT_MSGFMT_EXECUTABLE: the full path to the msgfmt tool.
GETTEXT_FOUND: True if gettext has been found.
GETTEXT_VERSION_STRING: the version of gettext found (since CMake 2.8.8)
Additionally it provides the following macros:
GETTEXT_CREATE_TRANSLATIONS ( outputFile [ALL] file1 ... fileN )
::
This will create a target "translations" which will convert the
given input po files into the binary output mo file. If the
ALL option is used, the translations will also be created when
building the default target.
GETTEXT_PROCESS_POT_FILE( <potfile> [ALL] [INSTALL_DESTINATION <destdir>]
LANGUAGES <lang1> <lang2> ... )
::
Process the given pot file to mo files.
If INSTALL_DESTINATION is given then automatically install rules will
be created, the language subdirectory will be taken into account
(by default use share/locale/).
If ALL is specified, the pot file is processed when building the all target.
It creates a custom target "potfile".
GETTEXT_PROCESS_PO_FILES( <lang> [ALL] [INSTALL_DESTINATION <dir>]
PO_FILES <po1> <po2> ... )
::
Process the given po files to mo files for the given language.
If INSTALL_DESTINATION is given then automatically install rules will
be created, the language subdirectory will be taken into account
(by default use share/locale/).
If ALL is specified, the po files are processed when building the all target.
It creates a custom target "pofiles".
.. versionadded:: 3.2
If you wish to use the Gettext library (libintl), use :module:`FindIntl`.
#]=======================================================================]
find_program(GETTEXT_MSGMERGE_EXECUTABLE msgmerge)
find_program(GETTEXT_MSGFMT_EXECUTABLE msgfmt)
if(GETTEXT_MSGMERGE_EXECUTABLE)
execute_process(COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --version
OUTPUT_VARIABLE gettext_version
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
get_filename_component(msgmerge_name ${GETTEXT_MSGMERGE_EXECUTABLE} NAME)
get_filename_component(msgmerge_namewe ${GETTEXT_MSGMERGE_EXECUTABLE} NAME_WE)
if (gettext_version MATCHES "^(${msgmerge_name}|${msgmerge_namewe}) \\([^\\)]*\\) ([0-9\\.]+[^ \n]*)")
set(GETTEXT_VERSION_STRING "${CMAKE_MATCH_2}")
endif()
unset(gettext_version)
unset(msgmerge_name)
unset(msgmerge_namewe)
endif()
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Gettext
REQUIRED_VARS GETTEXT_MSGMERGE_EXECUTABLE GETTEXT_MSGFMT_EXECUTABLE
VERSION_VAR GETTEXT_VERSION_STRING)
function(_GETTEXT_GET_UNIQUE_TARGET_NAME _name _unique_name)
set(propertyName "_GETTEXT_UNIQUE_COUNTER_${_name}")
get_property(currentCounter GLOBAL PROPERTY "${propertyName}")
if(NOT currentCounter)
set(currentCounter 1)
endif()
set(${_unique_name} "${_name}_${currentCounter}" PARENT_SCOPE)
math(EXPR currentCounter "${currentCounter} + 1")
set_property(GLOBAL PROPERTY ${propertyName} ${currentCounter} )
endfunction()
macro(GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFileArg)
# make it a real variable, so we can modify it here
set(_firstPoFile "${_firstPoFileArg}")
set(_gmoFiles)
get_filename_component(_potName ${_potFile} NAME)
string(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _potBasename ${_potName})
get_filename_component(_absPotFile ${_potFile} ABSOLUTE)
set(_addToAll)
if(${_firstPoFile} STREQUAL "ALL")
set(_addToAll "ALL")
set(_firstPoFile)
endif()
foreach (_currentPoFile ${_firstPoFile} ${ARGN})
get_filename_component(_absFile ${_currentPoFile} ABSOLUTE)
get_filename_component(_abs_PATH ${_absFile} PATH)
get_filename_component(_lang ${_absFile} NAME_WE)
set(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo)
add_custom_command(
OUTPUT ${_gmoFile}
# COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${_absFile} ${_absPotFile}
COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_absFile}
DEPENDS ${_absPotFile} ${_absFile}
)
install(FILES ${_gmoFile} DESTINATION share/locale/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo)
set(_gmoFiles ${_gmoFiles} ${_gmoFile})
endforeach ()
if(NOT TARGET translations)
add_custom_target(translations)
endif()
_GETTEXT_GET_UNIQUE_TARGET_NAME(translations uniqueTargetName)
add_custom_target(${uniqueTargetName} ${_addToAll} DEPENDS ${_gmoFiles})
add_dependencies(translations ${uniqueTargetName})
endmacro()
function(GETTEXT_PROCESS_POT_FILE _potFile)
set(_gmoFiles)
set(_options ALL)
set(_oneValueArgs INSTALL_DESTINATION)
set(_multiValueArgs LANGUAGES)
CMAKE_PARSE_ARGUMENTS(_parsedArguments "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN})
get_filename_component(_potName ${_potFile} NAME)
string(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _potBasename ${_potName})
get_filename_component(_absPotFile ${_potFile} ABSOLUTE)
foreach (_lang ${_parsedArguments_LANGUAGES})
set(_poFile "${CMAKE_CURRENT_BINARY_DIR}/${_lang}.po")
set(_gmoFile "${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo")
add_custom_command(
OUTPUT "${_poFile}"
COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${_poFile} ${_absPotFile}
DEPENDS ${_absPotFile}
)
add_custom_command(
OUTPUT "${_gmoFile}"
COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_poFile}
DEPENDS ${_absPotFile} ${_poFile}
)
if(_parsedArguments_INSTALL_DESTINATION)
install(FILES ${_gmoFile} DESTINATION ${_parsedArguments_INSTALL_DESTINATION}/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo)
endif()
list(APPEND _gmoFiles ${_gmoFile})
endforeach ()
if(NOT TARGET potfiles)
add_custom_target(potfiles)
endif()
_GETTEXT_GET_UNIQUE_TARGET_NAME( potfiles uniqueTargetName)
if(_parsedArguments_ALL)
add_custom_target(${uniqueTargetName} ALL DEPENDS ${_gmoFiles})
else()
add_custom_target(${uniqueTargetName} DEPENDS ${_gmoFiles})
endif()
add_dependencies(potfiles ${uniqueTargetName})
endfunction()
function(GETTEXT_PROCESS_PO_FILES _lang)
set(_options ALL)
set(_oneValueArgs INSTALL_DESTINATION)
set(_multiValueArgs PO_FILES)
set(_gmoFiles)
CMAKE_PARSE_ARGUMENTS(_parsedArguments "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN})
foreach(_current_PO_FILE ${_parsedArguments_PO_FILES})
get_filename_component(_name ${_current_PO_FILE} NAME)
string(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _basename ${_name})
set(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.gmo)
add_custom_command(OUTPUT ${_gmoFile}
COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_current_PO_FILE}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
DEPENDS ${_current_PO_FILE}
)
if(_parsedArguments_INSTALL_DESTINATION)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.gmo DESTINATION ${_parsedArguments_INSTALL_DESTINATION}/${_lang}/LC_MESSAGES/ RENAME ${_basename}.mo)
endif()
list(APPEND _gmoFiles ${_gmoFile})
endforeach()
if(NOT TARGET pofiles)
add_custom_target(pofiles)
endif()
_GETTEXT_GET_UNIQUE_TARGET_NAME( pofiles uniqueTargetName)
if(_parsedArguments_ALL)
add_custom_target(${uniqueTargetName} ALL DEPENDS ${_gmoFiles})
else()
add_custom_target(${uniqueTargetName} DEPENDS ${_gmoFiles})
endif()
add_dependencies(pofiles ${uniqueTargetName})
endfunction()

View File

@@ -0,0 +1,70 @@
# - Returns a version string from Git
#
# These functions force a re-configure on each git commit so that you can
# trust the values of the variables in your build system.
#
# get_git_head_revision(<refspecvar> <hashvar> [<additional arguments to git describe> ...])
#
# Returns the refspec and sha hash of the current head revision
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright Iowa State University 2009-2010.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
if(__get_git_revision_description)
return()
endif()
set(__get_git_revision_description YES)
# We must run the following at "include" time, not at function call time,
# to find the path to this module rather than the path to a calling list file
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
function(get_git_head_revision _refspecvar _hashvar)
set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories
set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
# We have reached the root directory, we are not in git
set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
return()
endif()
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
endwhile()
# check if this is a submodule
if(NOT IS_DIRECTORY ${GIT_DIR})
file(READ ${GIT_DIR} submodule)
string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule})
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
endif()
set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
if(NOT EXISTS "${GIT_DATA}")
file(MAKE_DIRECTORY "${GIT_DATA}")
endif()
if(NOT EXISTS "${GIT_DIR}/HEAD")
return()
endif()
set(HEAD_FILE "${GIT_DATA}/HEAD")
configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)
configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
"${GIT_DATA}/grabRef.cmake"
@ONLY)
include("${GIT_DATA}/grabRef.cmake")
set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE)
set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE)
endfunction()

View File

@@ -1,4 +1,4 @@
#
#
# Internal file for GetGitRevisionDescription.cmake
#
# Requires CMake 2.6 or newer (uses the 'function' command)
@@ -23,9 +23,12 @@ if(HEAD_CONTENTS MATCHES "ref")
string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
if(EXISTS "@GIT_DIR@/${HEAD_REF}")
configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
elseif(EXISTS "@GIT_DIR@/logs/${HEAD_REF}")
configure_file("@GIT_DIR@/logs/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
set(HEAD_HASH "${HEAD_REF}")
else()
configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
set(HEAD_HASH "${CMAKE_MATCH_1}")
endif()
endif()
else()
# detached HEAD

59
cmake/GitTagVersion.cmake Normal file
View File

@@ -0,0 +1,59 @@
function(git_version version revision version_release)
set(${version} "" CACHE STRING "Latest Git Tag Version" FORCE)
set(${revision} "" CACHE STRING "Latest Git Tag Revision" FORCE)
set(${version_release} 0 CACHE STRING "Is this a versioned release without revision" FORCE)
if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
# get latest version from tag history
execute_process(COMMAND "${GIT_EXECUTABLE}" tag "--format=%(align:width=20)%(refname:short)%(end)%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end)" --sort=-v:refname OUTPUT_VARIABLE tags OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}")
# if no tags (e.g. shallow clone) do nothing
if(tags STREQUAL "")
return()
endif()
# convert to list of the form [tag0, ref0, tag1, ref1, ...]
string(REGEX REPLACE "[ \n]+" ";" tags "${tags}")
execute_process(COMMAND "${GIT_EXECUTABLE}" rev-parse HEAD OUTPUT_VARIABLE current_ref OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}")
# if cannot get current ref, do nothing
if(current_ref STREQUAL "")
return()
endif()
list(LENGTH tags cnt)
set(i 0)
set(j 1)
while(i LESS cnt AND "${${version}}" STREQUAL "")
list(GET tags ${i} tag)
list(GET tags ${j} ref)
# tag is a version number with or without a "-revision"
if(tag MATCHES "^v?(([0-9]+\\.?)*[0-9]*)(-(.*))?$")
set(${version} "${CMAKE_MATCH_1}" CACHE STRING "Latest Git Tag Version" FORCE)
if(i EQUAL 0)
if(NOT "${CMAKE_MATCH_4}" STREQUAL "")
set(${revision} "${CMAKE_MATCH_4}" CACHE STRING "Latest Git Tag Revision" FORCE)
elseif(ref STREQUAL current_ref)
set(${version_release} 1 CACHE STRING "Is this a versioned release without revision" FORCE)
endif()
endif()
elseif(i EQUAL 0 AND ref STREQUAL current_ref)
# revision name tagged
set(${revision} "${tag}" CACHE STRING "Latest Git Tag Revision" FORCE)
endif()
math(EXPR i "${i} + 2")
math(EXPR j "${j} + 2")
endwhile()
if(NOT "${${version_release}}" AND "${${revision}}" STREQUAL "")
# dev version, use short sha for ref
execute_process(COMMAND "${GIT_EXECUTABLE}" rev-parse --short HEAD OUTPUT_VARIABLE short_sha OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}")
set(${revision} "${short_sha}" CACHE STRING "Latest Git Tag Revision" FORCE)
endif()
endif()
endfunction()

40
cmake/HostCompile.cmake Normal file
View File

@@ -0,0 +1,40 @@
function(host_compile src dst_cmd)
if(CMAKE_CROSSCOMPILING)
unset(link_flags)
set(dst "${dst_cmd}")
if(CMAKE_HOST_WIN32)
if(CMAKE_COMPILER_IS_GNUCXX)
set(link_flags -Wl,--subsystem,console)
endif()
endif()
if(MSVC)
set(msvc_compile_script ${CMAKE_SOURCE_DIR}/cmake/MSVC_x86_Host_Compile.cmake)
add_custom_command(
OUTPUT ${dst}
DEPENDS ${src} ${msvc_compile_script}
COMMAND ${CMAKE_COMMAND} -D "src=${src}" -D "dst=${dst}" -P ${msvc_compile_script}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
else()
set(dst ${dst_cmd})
# Assume: cc foo.c -o foo # will work on most hosts
add_custom_command(
OUTPUT ${dst}
DEPENDS ${src}
COMMAND cc ${src} -o ${dst} ${link_flags}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
endif()
else()
get_filename_component(dst ${dst_cmd} NAME)
add_executable(${dst} ${src})
# this is necessary because we override main with SDL_main
target_compile_definitions(${dst} PRIVATE -Dmain=main)
endif()
endfunction()

View File

@@ -0,0 +1,24 @@
# This is a hack to be run with cmake -P to compile a source C program passed
# in `src` to the `dst` executable using the host MSVC x86 toolchain.
find_program(cl_path NAME cl.exe HINTS ENV PATH)
string(REGEX REPLACE "[^/]+/cl\\.exe$" "x86/cl.exe" cl_path "${cl_path}")
set(orig_lib "$ENV{LIB}")
set(new_lib)
foreach(lib $ENV{LIB})
string(REGEX REPLACE "[^\\]+$" "x86" lib "${lib}")
list(APPEND new_lib "${lib}")
endforeach()
set(ENV{LIB} "${new_lib}")
execute_process(
COMMAND ${cl_path} /nologo ${src} /Fe:${dst}
OUTPUT_QUIET
)
set(ENV{LIB} "${orig_lib}")

View File

@@ -0,0 +1,115 @@
# This module checks for Mac Homebrew, MacPorts, or Fink, in that order, on Mac
# OS X.
#
# It will prepend the active package manager's paths to:
#
# CMAKE_FRAMEWORK_PATH
# CMAKE_INCLUDE_PATH
# CMAKE_LIBRARY_PATH
# CMAKE_PROGRAM_PATH
#
# In addition, the following commands are called with the package manager's
# paths:
#
# include_directories()
# link_directories()
#
# The paths of package managers not currently in $ENV{PATH} are added to
# CMAKE_IGNORE_PATH .
#
# Copyright (c) 2016, Rafael Kitover
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
if(NOT APPLE)
return()
endif()
if(NOT "$ENV{IN_NIX_SHELL}" STREQUAL "")
message(STATUS "Configuring for Nix")
set(NIX ON)
set(CMAKE_IGNORE_PATH /opt/local /opt/local/bin /opt/local/include /opt/local/Library/Frameworks /opt/local/lib ${CMAKE_IGNORE_PATH})
set(CMAKE_IGNORE_PATH /sw /sw/bin /sw/include /sw/Library/Frameworks /sw/lib ${CMAKE_IGNORE_PATH})
elseif(EXISTS /usr/local/bin/brew AND $ENV{PATH} MATCHES "(^|:)/usr/local/bin/?(:|$)")
message(STATUS "Configuring for Mac Homebrew")
set(MAC_HOMEBREW ON)
set(CMAKE_IGNORE_PATH /opt/local /opt/local/bin /opt/local/include /opt/local/Library/Frameworks /opt/local/lib ${CMAKE_IGNORE_PATH})
set(CMAKE_IGNORE_PATH /sw /sw/bin /sw/include /sw/Library/Frameworks /sw/lib ${CMAKE_IGNORE_PATH})
set(CMAKE_FRAMEWORK_PATH /usr/local/Frameworks ${CMAKE_FRAMEWORK_PATH})
set(CMAKE_INCLUDE_PATH /usr/local/include ${CMAKE_INCLUDE_PATH})
include_directories("/usr/local/include")
set(CMAKE_LIBRARY_PATH /usr/local/lib ${CMAKE_LIBRARY_PATH})
link_directories("/usr/local/lib")
set(CMAKE_PROGRAM_PATH /usr/local/bin ${CMAKE_PROGRAM_PATH})
set(ZLIB_ROOT /usr/local/opt/zlib)
elseif(EXISTS /opt/local/bin/port AND $ENV{PATH} MATCHES "(^|:)/opt/local/bin/?(:|$)")
message(STATUS "Configuring for MacPorts")
set(MACPORTS ON)
set(CMAKE_IGNORE_PATH /sw /sw/bin /sw/include /sw/Library/Frameworks /sw/lib ${CMAKE_IGNORE_PATH})
set(CMAKE_FRAMEWORK_PATH /opt/local/Library/Frameworks ${CMAKE_FRAMEWORK_PATH})
set(CMAKE_INCLUDE_PATH /opt/local/include ${CMAKE_INCLUDE_PATH})
include_directories("/opt/local/include")
set(CMAKE_LIBRARY_PATH /opt/local/lib ${CMAKE_LIBRARY_PATH})
link_directories("/opt/local/lib")
set(CMAKE_PROGRAM_PATH /opt/local/bin ${CMAKE_PROGRAM_PATH})
elseif(EXISTS /sw/bin/fink AND $ENV{PATH} MATCHES "(^|:)/sw/bin/?(:|$)")
message(STATUS "Configuring for Fink")
set(FINK ON)
set(CMAKE_IGNORE_PATH /opt/local /opt/local/bin /opt/local/include /opt/local/Library/Frameworks /opt/local/lib ${CMAKE_IGNORE_PATH})
set(CMAKE_FRAMEWORK_PATH /sw/Library/Frameworks ${CMAKE_FRAMEWORK_PATH})
set(CMAKE_INCLUDE_PATH /sw/include ${CMAKE_INCLUDE_PATH})
include_directories("/sw/include")
set(CMAKE_LIBRARY_PATH /sw/lib ${CMAKE_LIBRARY_PATH})
link_directories("/sw/lib")
set(CMAKE_PROGRAM_PATH /sw/bin ${CMAKE_PROGRAM_PATH})
else()
# no package manager found or active, do nothing
return()
endif()
# only ignore /usr/local if brew is installed and not in the PATH
# in other cases, it is the user's personal installations
if(NOT MAC_HOMEBREW AND EXISTS /usr/local/bin/brew)
set(CMAKE_IGNORE_PATH /usr/local /usr/local/bin /usr/local/include /usr/local/Library/Frameworks /usr/local/lib /usr/local/opt/gettext/bin /usr/local/opt/gettext/lib ${CMAKE_IGNORE_PATH})
endif()

View File

@@ -0,0 +1,244 @@
# Set TAG_RELEASE to ON/TRUE/1 to increment minor, or to new version, or to
# UNDO to undo release.
# Increment version.
# Update CHANGELOG.md with git log.
# Make release commit.
# Tag release commit.
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/.git")
message(FATAL_ERROR "releases can only be done from a git clone")
endif()
find_program(GPG_EXECUTABLE gpg)
if(NOT GPG_EXECUTABLE)
message(FATAL_ERROR "gpg must be installed and set up with your key to make a release")
endif()
# From: https://gist.github.com/alorence/59d18896aaad5188b7b4.
macro(CURRENT_DATE RESULT)
if(CMAKE_HOST_SYSTEM MATCHES Windows OR ((NOT DEFINED CMAKE_HOST_SYSTEM) AND WIN32))
execute_process(COMMAND "cmd" " /C date /T" OUTPUT_VARIABLE ${RESULT})
string(REGEX REPLACE ".*(..)/(..)/(....).*" "\\3-\\1-\\2" ${RESULT} ${${RESULT}})
else()
execute_process(COMMAND "date" "+%Y-%m-%d" OUTPUT_VARIABLE ${RESULT})
endif()
endmacro()
function(make_release_commit_and_tag)
# First make sure we are on master.
execute_process(
COMMAND git rev-parse --short --abbrev-ref=strict HEAD
OUTPUT_VARIABLE git_branch
OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
if(NOT git_branch STREQUAL master)
message(FATAL_ERROR "you must be on the git master branch to release")
endif()
execute_process(
COMMAND git status --porcelain=2
OUTPUT_VARIABLE git_status
OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
string(LENGTH "${git_status}" git_status_length)
if(NOT git_status_length EQUAL 0)
message(FATAL_ERROR "working tree must be clean to do a release")
endif()
execute_process(
COMMAND git tag --sort=-v:refname
OUTPUT_VARIABLE git_tags
OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
string(REGEX REPLACE ";" "\\\\;" git_tags_lines "${git_tags}")
string(REGEX REPLACE "\r?\n" ";" git_tags_lines "${git_tags_lines}")
foreach(line ${git_tags_lines})
if(line MATCHES "^v[0-9]")
set(git_last_tag ${line})
break()
endif()
endforeach()
if(NOT DEFINED git_last_tag)
message(FATAL_ERROR "cannot find last release tag")
endif()
execute_process(
COMMAND git log ${git_last_tag}.. "--pretty=format:* %h - %s [%aL]"
OUTPUT_VARIABLE release_log
OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
# Calculate new release version, unless it was passed in.
if(TAG_RELEASE STREQUAL UNDO)
execute_process(
COMMAND git tag -d ${git_last_tag}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
execute_process(
COMMAND git reset HEAD~1
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
execute_process(
COMMAND git checkout HEAD CHANGELOG.md
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
message(FATAL_ERROR [=[
**** RELEASE COMMIT AND TAG HAVE BEEN REMOVED ****"
The git and working tree state have been restored to their state before the
TAG_RELEASE operation.
Ignore the following cmake error.
]=])
elseif(NOT (TAG_RELEASE STREQUAL TRUE OR TAG_RELEASE STREQUAL ON OR TAG_RELEASE STREQUAL 1))
set(new_tag ${TAG_RELEASE})
else()
string(REGEX MATCH "\\.[0-9]+$" last_tag_minor_part ${git_last_tag})
string(REGEX REPLACE "\\.[0-9]+$" "" last_tag_minor_stripped ${git_last_tag})
string(SUBSTRING ${last_tag_minor_part} 1 -1 last_tag_minor)
math(EXPR last_minor_incremented "${last_tag_minor} + 1")
string(CONCAT new_tag ${last_tag_minor_stripped} . ${last_minor_incremented})
endif()
# Make sure tag begins with "v".
if(NOT new_tag MATCHES "^v")
set(new_tag "v${new_tag}")
endif()
# But remove the "v" for the version string.
string(REGEX REPLACE "^v" "" new_version ${new_tag})
current_date(current_date)
# Rewrite CHANGELOG.md
# First make a copy for backing out.
configure_file(
${CMAKE_SOURCE_DIR}/CHANGELOG.md
${CMAKE_BINARY_DIR}/CHANGELOG.md.orig
COPYONLY
)
# Now read it and add the new release.
include(FileIterator)
fi_open_file(${CMAKE_SOURCE_DIR}/CHANGELOG.md)
set(work_file ${CMAKE_BINARY_DIR}/CHANGELOG.md.work)
file(REMOVE ${work_file})
set(last_release_found FALSE)
while(NOT fi_done)
fi_get_next_line()
if(NOT last_release_found AND fi_line MATCHES "^## \\[[0-9]")
set(last_release_found TRUE)
set(tag_line "## [${new_version}] - ${current_date}")
string(LENGTH "${tag_line}" tag_line_length)
unset(tag_line_under_bar)
foreach(i RANGE 1 ${tag_line_length})
set(tag_line_under_bar "=${tag_line_under_bar}")
endforeach()
file(APPEND ${work_file} ${tag_line} "\n")
file(APPEND ${work_file} ${tag_line_under_bar} "\n")
file(APPEND ${work_file} "${release_log}" "\n")
file(APPEND ${work_file} "\n")
endif()
file(APPEND ${work_file} "${fi_line}" "\n")
endwhile()
# Convert to UNIX line endings on Windows, just copy the file otherwise.
if(CMAKE_HOST_SYSTEM MATCHES Windows OR ((NOT DEFINED CMAKE_HOST_SYSTEM) AND WIN32))
if(NOT DEFINED POWERSHELL)
message(FATAL_ERROR "Powershell is required to convert line endings on Windows.")
endif()
execute_process(
COMMAND ${POWERSHELL} -NoLogo -NoProfile -ExecutionPolicy Bypass -Command [=[
$text = [IO.File]::ReadAllText("CHANGELOG.md.work") -replace "`r`n", "`n"
[IO.File]::WriteAllText("CHANGELOG.md", $text)
]=]
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
else()
configure_file(
${CMAKE_BINARY_DIR}/CHANGELOG.md.work
${CMAKE_BINARY_DIR}/CHANGELOG.md
COPYONLY
)
endif()
# Copy the new file and add it to the commit.
configure_file(
${CMAKE_BINARY_DIR}/CHANGELOG.md
${CMAKE_SOURCE_DIR}/CHANGELOG.md
COPYONLY
)
execute_process(
COMMAND git add CHANGELOG.md
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
message(FATAL_ERROR "
Release prepared.
Edit CHANGELOG.md to remove any non-user-facing commits, and optionally add any
release notes.
Run the following commands to commit the change:
git commit -a -m'release ${new_tag}' --signoff -S
git tag -s -m'${new_tag}' ${new_tag}
To rollback these changes, run this command:
cmake .. -DTAG_RELEASE=UNDO
==== IF YOU ARE SURE YOU WANT TO RELEASE, THIS **CANNOT** BE REVERSED ====
Run the following to push the release commit and tag:
git push
git push --tags
Ignore the 'configuration incomplete' message following, this mode does not
build anything.
")
endfunction()
make_release_commit_and_tag()

View File

@@ -0,0 +1,53 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file LICENCE.txt or https://cmake.org/licensing for details.
function(add_metal_shader_library TARGET)
cmake_parse_arguments(PARSE_ARGV 1 _amsl
""
"STANDARD"
""
)
add_library(${TARGET} MODULE ${_amsl_UNPARSED_ARGUMENTS})
set_target_properties(${TARGET} PROPERTIES
DEBUG_POSTFIX ""
XCODE_PRODUCT_TYPE com.apple.product-type.metal-library
XCODE_ATTRIBUTE_MTL_FAST_MATH "YES"
XCODE_ATTRIBUTE_MTL_ENABLE_DEBUG_INFO[variant=Debug] "INCLUDE_SOURCE"
XCODE_ATTRIBUTE_MTL_ENABLE_DEBUG_INFO[variant=RelWithDebInfo] "INCLUDE_SOURCE"
XCODE_ATTRIBUTE_MTL_HEADER_SEARCH_PATHS "$(HEADER_SEARCH_PATHS)"
)
if(_amsl_STANDARD AND _amsl_STANDARD MATCHES "metal([0-9]+)\.([0-9]+)")
target_compile_options(${TARGET}
PRIVATE "-std=${_amsl_STANDARD}"
)
set_target_properties(${TARGET} PROPERTIES
XCODE_ATTRIBUTE_MTL_LANGUAGE_REVISION "Metal${CMAKE_MATCH_1}${CMAKE_MATCH_2}"
)
endif()
endfunction()
function(target_embed_metal_shader_libraries TARGET)
cmake_parse_arguments(PARSE_ARGV 1 _temsl
""
""
""
)
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.28 AND ${CMAKE_GENERATOR} STREQUAL "Xcode")
set_target_properties(${TARGET} PROPERTIES
XCODE_EMBED_RESOURCES "${_temsl_UNPARSED_ARGUMENTS}"
)
else()
foreach(SHADERLIB IN LISTS _temsl_UNPARSED_ARGUMENTS)
add_dependencies(${TARGET} ${SHADERLIB})
add_custom_command(TARGET ${TARGET} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_FILE:${SHADERLIB}>" "$<TARGET_BUNDLE_CONTENT_DIR:${TARGET}>/Resources/$<TARGET_FILE_NAME:${SHADERLIB}>"
VERBATIM
)
endforeach()
endif()
endfunction()

230
cmake/Options.cmake Normal file
View File

@@ -0,0 +1,230 @@
option(BUILD_TESTING "Build testing" ON)
option(BUILD_SHARED_LIBS "Build dynamic libraries" OFF)
option(TRANSLATIONS_ONLY "Build only the translations.zip" OFF)
if(TRANSLATIONS_ONLY)
set(BUILD_DEFAULT OFF)
else()
set(BUILD_DEFAULT ON)
endif()
set(ENABLE_SDL_DEFAULT ${BUILD_DEFAULT})
if(WIN32 OR APPLE)
set(ENABLE_SDL_DEFAULT OFF)
endif()
# Static linking
set(VBAM_STATIC_DEFAULT OFF)
if(VCPKG_TARGET_TRIPLET MATCHES -static OR CMAKE_TOOLCHAIN_FILE MATCHES "mxe|-static")
set(VBAM_STATIC_DEFAULT ON)
elseif(MINGW OR MSYS)
# Default to static builds on MinGW and all MSYS2 envs.
set(VBAM_STATIC_DEFAULT ON)
endif()
option(VBAM_STATIC "Try to link all libraries statically" ${VBAM_STATIC_DEFAULT})
if(VBAM_STATIC)
set(SDL2_STATIC ON)
set(SDL3_STATIC ON)
set(SFML_STATIC_LIBRARIES ON)
set(FFMPEG_STATIC ON)
set(OPENAL_STATIC ON)
set_property(GLOBAL PROPERTY LINK_SEARCH_START_STATIC ON)
set_property(GLOBAL PROPERTY LINK_SEARCH_END_STATIC ON)
if(MSVC)
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib)
else()
list(INSERT CMAKE_FIND_LIBRARY_SUFFIXES 0 .a)
endif()
endif()
if(CMAKE_TOOLCHAIN_FILE MATCHES "vcpkg")
set(PKG_CONFIG_EXECUTABLE "$ENV{VCPKG_ROOT}/installed/x64-windows/tools/pkgconf/pkgconf.exe")
endif()
find_package(PkgConfig)
if(UNIX AND NOT APPLE)
pkg_check_modules(SDL3 sdl3 QUIET)
else()
find_package(SDL3 QUIET)
endif()
option(ENABLE_SDL3 "Use SDL3" "${SDL3_FOUND}")
if(NOT TRANSLATIONS_ONLY)
if(ENABLE_SDL3)
if(NOT UNIX)
find_package(SDL3 REQUIRED)
endif()
else()
find_package(SDL2 REQUIRED)
endif()
endif()
option(ENABLE_GENERIC_FILE_DIALOGS "Use generic file dialogs" OFF)
option(DISABLE_OPENGL "Disable OpenGL" OFF)
option(ENABLE_SDL "Build the SDL port" ${ENABLE_SDL_DEFAULT})
option(ENABLE_WX "Build the wxWidgets port" ${BUILD_DEFAULT})
option(ENABLE_DEBUGGER "Enable the debugger" ON)
option(ENABLE_ASAN "Enable -fsanitize=address by default. Requires debug build with GCC/Clang" OFF)
option(ENABLE_BZ2 "Enable BZ2 archive support" ON)
option(ENABLE_LZMA "Enable LZMA archive support" ON)
if(ENABLE_SDL3)
set(CMAKE_C_FLAGS "-DENABLE_SDL3 ${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS "-DENABLE_SDL3 ${CMAKE_CXX_FLAGS}")
include(CheckSourceCompiles)
check_source_compiles(CXX
"#include <SDL3/SDL.h>
int main() { return SDL_SCALEMODE_PIXELART; }
" HAVE_SDL_SCALEMODE_PIXELART)
if(HAVE_SDL_SCALEMODE_PIXELART)
set(CMAKE_C_FLAGS "-DHAVE_SDL3_PIXELART ${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS "-DHAVE_SDL3_PIXELART ${CMAKE_CXX_FLAGS}")
endif()
endif()
if(DISABLE_OPENGL)
set(CMAKE_C_FLAGS "-DNO_OPENGL -DNO_OGL ${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS "-DNO_OPENGL -DNO_OGL ${CMAKE_CXX_FLAGS}")
endif()
option(ENABLE_ASM "Enable x86 ASM related options" OFF)
# The ARM ASM core seems to be very buggy, see #98 and #54. Default to it being
# OFF for the time being, until it is either fixed or replaced.
option(ENABLE_ASM_CORE "Enable x86 ASM CPU cores (EXPERIMENTAL)" OFF)
set(ASM_SCALERS_DEFAULT ${ENABLE_ASM})
set(MMX_DEFAULT ${ENABLE_ASM})
option(ENABLE_ASM_SCALERS "Enable x86 ASM graphic filters" ${ASM_SCALERS_DEFAULT})
include(CMakeDependentOption)
cmake_dependent_option(ENABLE_MMX "Enable MMX" ${MMX_DEFAULT} "ENABLE_ASM_SCALERS" OFF)
option(ENABLE_LIRC "Enable LIRC support" OFF)
# Add support for Homebrew, MacPorts and Fink on macOS
option(DISABLE_MACOS_PACKAGE_MANAGERS "Set to TRUE to disable support for macOS Homebrew, MacPorts and Fink." FALSE)
if(APPLE AND NOT DISABLE_MACOS_PACKAGE_MANAGERS)
include(MacPackageManagers)
endif()
# Link / SFML
if(NOT TRANSLATIONS_ONLY)
set(ENABLE_LINK_DEFAULT ON)
endif()
option(ENABLE_LINK "Enable GBA linking functionality" ${ENABLE_LINK_DEFAULT})
# FFMpeg
set(FFMPEG_DEFAULT OFF)
set(FFMPEG_COMPONENTS AVFORMAT AVCODEC SWSCALE AVUTIL SWRESAMPLE X264 X265)
set(FFMPEG_COMPONENT_VERSIONS AVFORMAT>=58.12.100 AVCODEC>=58.18.100 SWSCALE>=5.1.100 AVUTIL>=56.14.100 SWRESAMPLE>=3.1.100 X264>=0 X265>=0)
if(NOT TRANSLATIONS_ONLY AND (NOT DEFINED ENABLE_FFMPEG OR ENABLE_FFMPEG))
set(FFMPEG_DEFAULT ON)
find_package(FFmpeg COMPONENTS ${FFMPEG_COMPONENTS})
# check versions, but only if pkgconfig is available
if(FFmpeg_FOUND AND PKG_CONFIG_FOUND AND NOT CMAKE_TOOLCHAIN_FILE MATCHES vcpkg)
foreach(component ${FFMPEG_COMPONENT_VERSIONS})
string(REPLACE ">=" ";" parts ${component})
list(GET parts 0 name)
list(GET parts 1 version)
if((NOT DEFINED ${name}_VERSION) OR ${name}_VERSION VERSION_LESS ${version})
set(FFmpeg_FOUND OFF)
endif()
endforeach()
endif()
if(NOT FFmpeg_FOUND)
set(FFMPEG_DEFAULT OFF)
endif()
endif()
option(ENABLE_FFMPEG "Enable ffmpeg A/V recording" ${FFMPEG_DEFAULT})
# Online Updates
set(ONLINEUPDATES_DEFAULT OFF)
if(DEFINED(UPSTREAM_RELEASE) AND UPSTREAM_RELEASE)
set(ONLINEUPDATES_DEFAULT ON)
endif()
option(ENABLE_ONLINEUPDATES "Enable online update checks" ${ONLINEUPDATES_DEFAULT})
option(HTTPS "Use https URL for winsparkle" ON)
# We generally don't want LTO when debugging because it makes linking slow
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(LTO_DEFAULT OFF)
else()
set(LTO_DEFAULT ON)
endif()
option(ENABLE_LTO "Compile with Link Time Optimization" ${LTO_DEFAULT})
option(ENABLE_GBA_LOGGING "Enable extended GBA logging" ON)
option(UPSTREAM_RELEASE "do some optimizations and release automation tasks" OFF)
if(WIN32)
# not yet implemented
option(ENABLE_DIRECT3D "Enable Direct3D rendering for the wxWidgets port" OFF)
set(XAUDIO2_DEFAULT ON)
if ((MSVC AND CMAKE_CXX_COMPILER_ID STREQUAL Clang) OR (MINGW AND X86))
# TODO: We should update the XAudio headers to build with clang-cl. See
# https://github.com/visualboyadvance-m/visualboyadvance-m/issues/1021
set(XAUDIO2_DEFAULT OFF)
endif()
option(ENABLE_XAUDIO2 "Enable xaudio2 sound output for the wxWidgets port" ${XAUDIO2_DEFAULT})
endif()
find_package(OpenAL QUIET)
set(OPENAL_DEFAULT ${OpenAL_FOUND})
if(MINGW AND X86)
# OpenAL-Soft uses avrt.dll which is not available on Windows XP.
set(OPENAL_DEFAULT OFF)
endif()
option(ENABLE_OPENAL "Enable OpenAL-Soft sound output for the wxWidgets port" ${OPENAL_DEFAULT})
set(ENABLE_FAUDIO_DEFAULT OFF)
find_package(FAudio QUIET)
if(FAudio_FOUND AND NOT (MINGW AND X86))
set(ENABLE_FAUDIO_DEFAULT ON)
endif()
option(ENABLE_FAUDIO "Enable FAudio sound output for the wxWidgets port" ${ENABLE_FAUDIO_DEFAULT})
option(ZIP_SUFFIX [=[suffix for release zip files, e.g. "-somebranch".zip]=] OFF)
# The SDL port can't be built without debugging support
if(NOT ENABLE_DEBUGGER AND ENABLE_SDL)
message(FATAL_ERROR "The SDL port can't be built without debugging support")
endif()
if(TRANSLATIONS_ONLY AND (ENABLE_SDL OR ENABLE_WX))
message(FATAL_ERROR "The SDL and wxWidgets ports can't be built when TRANSLATIONS_ONLY is enabled")
endif()
option(GPG_SIGNATURES "Create GPG signatures for release files" OFF)
if(APPLE)
set(wx_mac_patched_default OFF)
if(UPSTREAM_RELEASE)
set(wx_mac_patched_default ON)
endif()
option(WX_MAC_PATCHED "A build of wxWidgets that is patched for the alert sound bug is being used" ${wx_mac_patched_default})
endif()

View File

@@ -0,0 +1,13 @@
# Remove StrawberryPerl from the PATH environment variable due to various build
# pollution.
unset(new_path)
foreach(p $ENV{PATH})
if(NOT p MATCHES "(^|\\\\)[Ss]trawberry\\\\([Pp]erl|[Cc])\\\\(.*\\\\)?[Bb]in$")
list(APPEND new_path ${p})
endif()
endforeach()
set(ENV{PATH} "${new_path}")
# vim:sw=4 et sts=4 ts=8:

View File

@@ -0,0 +1,664 @@
if(TRANSLATIONS_ONLY)
return()
endif()
if(NOT DEFINED VCPKG_TARGET_TRIPLET)
if(NOT WIN32)
return()
endif()
# Check if we are in an MSVC environment.
find_program(cl_exe_path NAME cl.exe HINTS ENV PATH)
if(ENV{CXX} MATCHES "cl.exe$" OR cl_exe_path)
# Infer the architecture from the LIB folders.
foreach(lib $ENV{LIB})
if(lib MATCHES "x64$")
set(VBAM_VCPKG_PLATFORM "x64-windows-static")
break()
endif()
if(lib MATCHES "x86$")
set(VBAM_VCPKG_PLATFORM "x86-windows-static")
break()
endif()
if(lib MATCHES "ARM64$")
set(VBAM_VCPKG_PLATFORM "arm64-windows-static")
foreach(path $ENV{PATH})
if(path MATCHES "[Hh]ost[Xx]64")
set(VCPKG_HOST_TRIPLET "x64-windows" CACHE STRING "Vcpkg host triplet" FORCE)
set(VCPKG_USE_HOST_TOOLS ON CACHE BOOL "Use vcpkg host tools" FORCE)
endif()
endforeach()
break()
endif()
endforeach()
# If all else fails, try to use a sensible default.
if(NOT DEFINED VBAM_VCPKG_PLATFORM)
set(VBAM_VCPKG_PLATFORM "x64-windows-static")
endif()
unset(cl_exe_path)
elseif (NOT DEFINED CMAKE_CXX_COMPILER)
# No way to infer the compiler.
return()
elseif(${CMAKE_CXX_COMPILER} MATCHES "clang-cl.exe$" OR ${CMAKE_CXX_COMPILER} MATCHES "clang-cl$")
# For stand-alone clang-cl, assume x64.
set(VBAM_VCPKG_PLATFORM "x64-windows-static")
endif()
if (NOT DEFINED VBAM_VCPKG_PLATFORM)
# Probably not an MSVC environment.
return()
endif()
set(VCPKG_TARGET_TRIPLET ${VBAM_VCPKG_PLATFORM} CACHE STRING "Vcpkg target triplet (ex. x64-windows-static)" FORCE)
message(STATUS "Inferred VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET}")
endif()
function(vcpkg_seconds)
if(CMAKE_HOST_SYSTEM MATCHES Windows OR ((NOT DEFINED CMAKE_HOST_SYSTEM) AND WIN32))
execute_process(
COMMAND cmd /c echo %TIME:~0,8%
OUTPUT_VARIABLE time
)
else()
execute_process(
COMMAND date +%H:%M:%S
OUTPUT_VARIABLE time
)
endif()
string(SUBSTRING "${time}" 0 2 hours)
string(SUBSTRING "${time}" 3 2 minutes)
string(SUBSTRING "${time}" 6 2 secs)
math(EXPR seconds "(${hours} * 60 * 60) + (${minutes} * 60) + ${secs}")
set(seconds ${seconds} PARENT_SCOPE)
endfunction()
function(vcpkg_check_git_status git_status)
# The VS vcpkg component cannot be written to without elevation.
if(NOT git_status EQUAL 0 AND NOT VCPKG_ROOT MATCHES "Visual Studio")
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")
endif()
endfunction()
function(vcpkg_get_first_upgrade vcpkg_exe)
# First get the list of upgraded ports.
execute_process(
COMMAND ${vcpkg_exe} upgrade
OUTPUT_VARIABLE upgradable
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
WORKING_DIRECTORY ${VCPKG_ROOT}
)
string(REGEX REPLACE "\r?\n" ";" upgrade_lines "${upgradable}")
unset(first_upgrade)
foreach(line ${upgrade_lines})
if(line MATCHES "^ [* ] [^ ]*:")
string(REGEX REPLACE "^ [* ] ([^[]+).*" "\\1" pkg ${line})
string(REGEX REPLACE "^[^:]+:(.+)$" "\\1" triplet ${line})
if(triplet STREQUAL "${VCPKG_TARGET_TRIPLET}")
# Prefer upgrading zlib before anything else.
if(NOT first_upgrade OR pkg MATCHES zlib)
set(first_upgrade ${pkg})
endif()
endif()
endif()
endforeach()
if(DEFINED first_upgrade)
set(first_upgrade ${first_upgrade} PARENT_SCOPE)
endif()
endfunction()
function(vcpkg_deps_fixup vcpkg_exe)
# Get installed list.
execute_process(
COMMAND ${vcpkg_exe} list
OUTPUT_VARIABLE pkg_list
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
WORKING_DIRECTORY ${VCPKG_ROOT}
)
# If libvorbis is NOT installed but libogg is, remove libvorbis recursively.
if(pkg_list MATCHES libogg AND (NOT pkg_list MATCHES libvorbis))
execute_process(
COMMAND ${vcpkg_exe} remove --recurse libogg:${VCPKG_TARGET_TRIPLET}
WORKING_DIRECTORY ${VCPKG_ROOT}
)
endif()
endfunction()
function(vcpkg_is_installed vcpkg_exe pkg_name pkg_ver pkg_triplet powershell outvar)
set(${outvar} FALSE PARENT_SCOPE)
unset(CMAKE_MATCH_1)
string(REGEX REPLACE "-r([0-9]+)\$" "" pkg_ver ${pkg_ver})
set(pkg_rev ${CMAKE_MATCH_1})
string(REPLACE "-" "." pkg_ver ${pkg_ver})
if(NOT DEFINED VCPKG_INSTALLED_COUNT)
execute_process(
COMMAND ${powershell}
-executionpolicy bypass -noprofile
-command "import-module '${CMAKE_BINARY_DIR}/vcpkg-binpkg/vcpkg-binpkg.psm1'; vcpkg-list"
OUTPUT_VARIABLE vcpkg_list_text
)
string(REGEX REPLACE "\r?\n" ";" vcpkg_list_raw "${vcpkg_list_text}")
set(VCPKG_INSTALLED_COUNT 0 CACHE INTERNAL "Number of installed vcpkg packages" FORCE)
foreach(pkg ${vcpkg_list_raw})
if(NOT pkg MATCHES "^([^:[]+)[^:]*:([^ ]+) +([0-9][^ ]*) +.*\$")
continue()
endif()
set(inst_pkg_name ${CMAKE_MATCH_1})
set(inst_pkg_ver ${CMAKE_MATCH_3})
set(inst_pkg_triplet ${CMAKE_MATCH_2})
unset(CMAKE_MATCH_1)
string(REGEX REPLACE "#([0-9]+)\$" "" inst_pkg_ver ${inst_pkg_ver})
if(CMAKE_MATCH_1)
set(inst_pkg_rev ${CMAKE_MATCH_1})
else()
set(inst_pkg_rev FALSE)
endif()
string(REPLACE "-" "." inst_pkg_ver ${inst_pkg_ver})
list(APPEND VCPKG_INSTALLED ${inst_pkg_name} ${inst_pkg_ver} ${inst_pkg_rev} ${inst_pkg_triplet})
math(EXPR VCPKG_INSTALLED_COUNT "${VCPKG_INSTALLED_COUNT} + 1")
endforeach()
set(VCPKG_INSTALLED ${VCPKG_INSTALLED} CACHE INTERNAL "List of installed vcpkg packages" FORCE)
set(VCPKG_INSTALLED_COUNT ${VCPKG_INSTALLED_COUNT} CACHE INTERNAL "Number of installed vcpkg packages" FORCE)
endif()
if(NOT VCPKG_INSTALLED_COUNT GREATER 0)
return()
endif()
math(EXPR idx_max "(${VCPKG_INSTALLED_COUNT} - 1) * 4")
foreach(idx RANGE 0 ${idx_max} 4)
math(EXPR idx_ver "${idx} + 1")
math(EXPR idx_rev "${idx} + 2")
math(EXPR idx_triplet "${idx} + 3")
list(GET VCPKG_INSTALLED ${idx} inst_pkg_name)
list(GET VCPKG_INSTALLED ${idx_ver} inst_pkg_ver)
list(GET VCPKG_INSTALLED ${idx_rev} inst_pkg_rev)
list(GET VCPKG_INSTALLED ${idx_triplet} inst_pkg_triplet)
if(NOT inst_pkg_triplet STREQUAL pkg_triplet)
continue()
endif()
if(inst_pkg_name STREQUAL pkg_name
AND pkg_ver VERSION_LESS inst_pkg_ver
OR (pkg_ver VERSION_EQUAL inst_pkg_ver
AND ((NOT pkg_rev AND NOT inst_pkg_rev)
OR (pkg_rev AND inst_pkg_rev AND (NOT pkg_rev GREATER inst_pkg_rev)))))
set(${outvar} TRUE PARENT_SCOPE)
return()
endif()
endforeach()
endfunction()
function(get_triplet_package_list triplet)
if(EXISTS "${CMAKE_BINARY_DIR}/binary_package_list_${triplet}.html")
return()
endif()
file(
DOWNLOAD "https://nightly.visualboyadvance-m.org/vcpkg/${triplet}/" "${CMAKE_BINARY_DIR}/binary_package_list_${triplet}.html"
STATUS pkg_list_status
)
list(GET pkg_list_status 1 pkg_list_error)
list(GET pkg_list_status 0 pkg_list_status)
if(NOT pkg_list_status EQUAL 0)
message(STATUS "Failed to download vcpkg binary package list: ${pkg_list_status} - ${pkg_list_error}")
return()
endif()
endfunction()
function(download_package pkg pkgs_dir)
string(REGEX REPLACE "^[^_]+_[^_]+_([^.]+)[.]zip\$" "\\1" pkg_triplet ${pkg})
message(STATUS "Downloading https://nightly.visualboyadvance-m.org/vcpkg/${pkg_triplet}/${pkg} ...")
file(
DOWNLOAD "https://nightly.visualboyadvance-m.org/vcpkg/${pkg_triplet}/${pkg}" "${pkgs_dir}/${pkg}"
STATUS pkg_download_status
)
list(GET pkg_download_status 1 pkg_download_error)
list(GET pkg_download_status 0 pkg_download_status)
if(NOT pkg_download_status EQUAL 0)
message(STATUS "Failed to download vcpkg binary package '${pkg}': ${pkg_download_status} - ${pkg_download_error}")
return()
endif()
message(STATUS "done.")
endfunction()
function(zip_is_installed vcpkg_exe zip outvar)
if(NOT zip MATCHES "([^_]+)_([^_]+)_([^.]+)[.]zip")
return()
endif()
set(pkg_name ${CMAKE_MATCH_1})
set(pkg_version ${CMAKE_MATCH_2})
set(pkg_triplet ${CMAKE_MATCH_3})
vcpkg_is_installed(${vcpkg_exe} ${pkg_name} ${pkg_version} ${pkg_triplet} ${POWERSHELL} pkg_installed)
set(${outvar} ${pkg_installed} PARENT_SCOPE)
endfunction()
function(cleanup_binary_packages)
file(REMOVE_RECURSE "${CMAKE_BINARY_DIR}/vcpkg-binary-packages")
unset(VCPKG_INSTALLED CACHE)
unset(VCPKG_INSTALLED_COUNT CACHE)
endfunction()
function(get_binary_packages vcpkg_exe)
set(binary_packages_installed FALSE PARENT_SCOPE)
get_triplet_package_list(${VCPKG_TARGET_TRIPLET})
if(NOT EXISTS "${CMAKE_BINARY_DIR}/binary_package_list_${VCPKG_TARGET_TRIPLET}.html")
message(STATUS "Failed to download binary package list found for triplet '${VCPKG_TARGET_TRIPLET}', aborting.")
return()
endif()
file(READ "${CMAKE_BINARY_DIR}/binary_package_list_${VCPKG_TARGET_TRIPLET}.html" raw_html)
string(REGEX MATCHALL "<a href=\"[^\"]+[.]zip\"" links ${raw_html})
foreach(link ${links})
string(REGEX REPLACE "<a href=\"([^\"]+[.]zip)\"" "\\1" pkg ${link})
list(APPEND binary_packages ${pkg})
endforeach()
set(vcpkg_binpkg_dir ${CMAKE_BINARY_DIR}/vcpkg-binpkg)
include(FetchContent)
FetchContent_Declare(
vcpkg_binpkg
URL "https://github.com/rkitover/vcpkg-binpkg-prototype/archive/refs/heads/master.zip"
SOURCE_DIR ${vcpkg_binpkg_dir}
)
FetchContent_GetProperties(vcpkg_binpkg)
if(NOT vcpkg_binpkg_POPULATED)
FetchContent_MakeAvailable(vcpkg_binpkg)
endif()
foreach(pkg ${binary_packages})
zip_is_installed(${vcpkg_exe} ${pkg} pkg_installed)
if(NOT pkg_installed)
list(APPEND to_install ${pkg})
endif()
endforeach()
if(to_install)
set(bin_pkgs_dir ${CMAKE_BINARY_DIR}/vcpkg-binary-packages)
file(MAKE_DIRECTORY ${bin_pkgs_dir})
foreach(pkg ${to_install})
download_package("${pkg}" "${bin_pkgs_dir}")
if(NOT EXISTS "${bin_pkgs_dir}/${pkg}")
message(STATUS "Failed to download package '${pkg}', aborting.")
return()
endif()
endforeach()
unset(installed_host_deps)
while(TRUE)
# -command "import-module ($env:USERPROFILE + '/source/repos/vcpkg-binpkg-prototype/vcpkg-binpkg.psm1'); vcpkg-listmissing ."
execute_process(
COMMAND ${POWERSHELL}
-executionpolicy bypass -noprofile
-command "import-module '${CMAKE_BINARY_DIR}/vcpkg-binpkg/vcpkg-binpkg.psm1'; vcpkg-listmissing ."
WORKING_DIRECTORY ${bin_pkgs_dir}
OUTPUT_VARIABLE host_deps
RESULT_VARIABLE host_deps_status
)
if(NOT host_deps_status EQUAL 0)
message(STATUS "Failed to calculate host dependencies: ${host_deps_status}")
return()
endif()
string(REGEX REPLACE "\r?\n" ";" host_deps "${host_deps}")
string(REGEX REPLACE " *;+ *$" "" host_deps "${host_deps}")
list(LENGTH host_deps host_deps_count)
list(LENGTH installed_host_deps installed_host_deps_count)
if(host_deps_count EQUAL installed_host_deps_count)
break()
endif()
foreach(host_dep ${host_deps})
if(NOT host_dep MATCHES "^([^:]+):([^:]+)\$")
continue()
endif()
set(host_dep_name ${CMAKE_MATCH_1})
set(host_dep_triplet ${CMAKE_MATCH_2})
get_triplet_package_list(${host_dep_triplet})
file(READ "${CMAKE_BINARY_DIR}/binary_package_list_${host_dep_triplet}.html" raw_html)
string(REGEX MATCHALL "<a href=\"${host_dep_name}_[^\"]+[.]zip\"" links ${raw_html})
list(LENGTH links links_count)
if(NOT links_count EQUAL 1)
message(STATUS "Multiple host dependencies found for '${host_dep_name}' for triplet '${host_dep_triplet}', aborting.")
return()
endif()
string(REGEX REPLACE "<a href=\"([^\"]+[.]zip)\"" "\\1" pkg ${links})
list(FIND installed_host_deps "${pkg}" found_idx)
if(found_idx EQUAL -1)
zip_is_installed(${vcpkg_exe} ${pkg} pkg_installed)
if(NOT pkg_installed)
download_package("${pkg}" "${bin_pkgs_dir}")
if(NOT EXISTS "${bin_pkgs_dir}/${pkg}")
message(STATUS "Failed to download host dependency package '${pkg}', aborting.")
return()
endif()
else()
list(APPEND installed_host_deps "${pkg}")
endif()
endif()
endforeach()
endwhile()
execute_process(
COMMAND ${POWERSHELL}
-executionpolicy bypass -noprofile
-command "import-module '${CMAKE_BINARY_DIR}/vcpkg-binpkg/vcpkg-binpkg.psm1'; vcpkg-instpkg ."
WORKING_DIRECTORY ${bin_pkgs_dir}
)
file(REMOVE_RECURSE ${bin_pkgs_dir})
endif()
cleanup_binary_packages()
set(binary_packages_installed TRUE PARENT_SCOPE)
endfunction()
function(vcpkg_remove_optional_deps vcpkg_exe)
list(LENGTH VCPKG_DEPS_OPTIONAL optionals_list_len)
math(EXPR optionals_list_last "${optionals_list_len} - 1")
unset(deps)
foreach(i RANGE 0 ${optionals_list_last} 2)
list(GET VCPKG_DEPS_OPTIONAL ${i} dep)
list(APPEND deps ${dep}:${VCPKG_TARGET_TRIPLET})
endforeach()
execute_process(
COMMAND ${vcpkg_exe} remove --recurse ${deps}
WORKING_DIRECTORY ${VCPKG_ROOT}
)
endfunction()
function(vcpkg_set_toolchain)
get_filename_component(preferred_root ${CMAKE_SOURCE_DIR}/../vcpkg ABSOLUTE)
if(NOT DEFINED POWERSHELL)
message(FATAL_ERROR "Powershell is required to use vcpkg binaries.")
endif()
if(NOT DEFINED ENV{VCPKG_ROOT})
if(WIN32)
if(DEFINED ENV{CI} OR EXISTS /vcpkg)
set(VCPKG_ROOT /vcpkg)
elseif(EXISTS c:/vcpkg)
set(VCPKG_ROOT c:/vcpkg)
# Prefer the preferred root to the VS default which is more difficult to deal with, if it exists.
elseif(EXISTS ${preferred_root})
set(VCPKG_ROOT ${preferred_root})
else()
find_program(vcpkg_exe_path NAME vcpkg.exe HINTS ENV PATH)
if(vcpkg_exe_path)
get_filename_component(VCPKG_ROOT ${vcpkg_exe_path} DIRECTORY)
get_filename_component(VCPKG_ROOT ${VCPKG_ROOT} ABSOLUTE)
endif()
unset(vcpkg_exe_path)
endif()
endif()
if(NOT DEFINED VCPKG_ROOT)
set(VCPKG_ROOT ${preferred_root})
endif()
set(ENV{VCPKG_ROOT} ${VCPKG_ROOT})
else()
set(VCPKG_ROOT $ENV{VCPKG_ROOT})
endif()
# Avoid using Visual Studio default vcpkg, because that requires elevaction.
if(VCPKG_ROOT MATCHES "Visual Studio")
set(mkdir_status 0)
if(NOT EXISTS "${preferred_root}")
file(
MAKE_DIRECTORY "${preferred_root}"
RESULT mkdir_status
)
endif()
if(mkdir_status EQUAL 0)
set(VCPKG_ROOT "${preferred_root}")
set(ENV{VCPKG_ROOT} ${VCPKG_ROOT})
endif()
endif()
set(VCPKG_ROOT ${VCPKG_ROOT} CACHE FILEPATH "vcpkg installation root path" FORCE)
if(NOT EXISTS ${VCPKG_ROOT})
get_filename_component(root_parent ${VCPKG_ROOT}/.. ABSOLUTE)
execute_process(
COMMAND git clone https://github.com/microsoft/vcpkg.git
RESULT_VARIABLE git_status
WORKING_DIRECTORY ${root_parent}
)
vcpkg_check_git_status(${git_status})
else()
# this is the case when we cache vcpkg/installed with the appveyor build cache
if(NOT EXISTS ${VCPKG_ROOT}/.git)
set(git_commands
"git init"
"git remote add origin https://github.com/microsoft/vcpkg.git"
"git fetch --all --prune"
"git reset --hard origin/master"
"git branch --set-upstream-to=origin/master master"
)
foreach(git_command ${git_commands})
separate_arguments(git_command)
execute_process(
COMMAND ${git_command}
RESULT_VARIABLE git_status
WORKING_DIRECTORY ${VCPKG_ROOT}
)
vcpkg_check_git_status(${git_status})
endforeach()
else()
execute_process(
COMMAND git fetch origin
RESULT_VARIABLE git_status
WORKING_DIRECTORY ${VCPKG_ROOT}
)
vcpkg_check_git_status(${git_status})
execute_process(
COMMAND git status
RESULT_VARIABLE git_status
OUTPUT_VARIABLE git_status_text
WORKING_DIRECTORY ${VCPKG_ROOT}
)
vcpkg_check_git_status(${git_status})
set(git_up_to_date FALSE)
if(git_status_text MATCHES "Your branch is up to date with")
set(git_up_to_date TRUE)
endif()
if(NOT git_up_to_date)
execute_process(
COMMAND git pull --rebase
RESULT_VARIABLE git_status
WORKING_DIRECTORY ${VCPKG_ROOT}
)
vcpkg_check_git_status(${git_status})
endif()
endif()
endif()
# build latest vcpkg, if needed
if(NOT git_up_to_date)
if(WIN32)
execute_process(
COMMAND bootstrap-vcpkg.bat
WORKING_DIRECTORY ${VCPKG_ROOT}
)
else()
execute_process(
COMMAND ./bootstrap-vcpkg.sh
WORKING_DIRECTORY ${VCPKG_ROOT}
)
endif()
endif()
foreach(pkg ${VCPKG_DEPS})
list(APPEND VCPKG_DEPS_QUALIFIED ${pkg}:${VCPKG_TARGET_TRIPLET})
if(VCPKG_TARGET_TRIPLET STREQUAL "x86-mingw-static")
list(APPEND VCPKG_DEPS_QUALIFIED libsamplerate:x86-mingw-static)
endif()
endforeach()
if(WIN32)
set(vcpkg_exe "${VCPKG_ROOT}/vcpkg.exe")
else()
set(vcpkg_exe "${VCPKG_ROOT}/vcpkg")
endif()
if (NOT (NO_VCPKG_UPDATES OR (NOT VCPKG_BINARY_PACKAGES)))
get_binary_packages(${vcpkg_exe})
endif()
if(NOT binary_packages_installed)
# Get number of seconds since midnight (might be wrong if am/pm is in effect on Windows.)
vcpkg_seconds()
set(began ${seconds})
# Limit total installation time to 20 minutes to not overrun CI time limit.
math(EXPR time_limit "${began} + (20 * 60)")
vcpkg_deps_fixup("${vcpkg_exe}")
# Install core deps.
execute_process(
COMMAND ${vcpkg_exe} --triplet ${VCPKG_TARGET_TRIPLET} install ${pkg}
WORKING_DIRECTORY ${VCPKG_ROOT}
)
# If ports have been updated, and there is time, rebuild cache one at a time to not overrun the CI time limit.
vcpkg_seconds()
if(seconds LESS time_limit)
vcpkg_get_first_upgrade(${vcpkg_exe})
if(DEFINED first_upgrade)
# If we have to upgrade zlib, remove optional deps first so that
# the build doesn't overrun the CI time limit.
if(first_upgrade STREQUAL "zlib")
vcpkg_remove_optional_deps(${vcpkg_exe})
endif()
execute_process(
COMMAND ${vcpkg_exe} upgrade --no-dry-run "${first_upgrade}:${VCPKG_TARGET_TRIPLET}"
WORKING_DIRECTORY ${VCPKG_ROOT}
)
endif()
endif()
# Install optional deps, within time limit.
list(LENGTH VCPKG_DEPS_OPTIONAL optionals_list_len)
math(EXPR optionals_list_last "${optionals_list_len} - 1")
foreach(i RANGE 0 ${optionals_list_last} 2)
list(GET VCPKG_DEPS_OPTIONAL ${i} dep)
math(EXPR var_idx "${i} + 1")
list(GET VCPKG_DEPS_OPTIONAL ${var_idx} var)
set(val "${${var}}")
vcpkg_seconds()
if("${val}" OR (seconds LESS time_limit AND ("${val}" OR "${val}" STREQUAL "")))
set(dep_qualified "${dep}:${VCPKG_TARGET_TRIPLET}")
execute_process(
COMMAND --triplet ${VCPKG_TARGET_TRIPLET} ${vcpkg_exe} install ${dep}
WORKING_DIRECTORY ${VCPKG_ROOT}
)
set(${var} ON)
else()
set(${var} OFF)
endif()
endforeach()
endif()
if(WIN32 AND VCPKG_TARGET_TRIPLET MATCHES x64 AND CMAKE_GENERATOR MATCHES "Visual Studio")
set(CMAKE_GENERATOR_PLATFORM x64 CACHE STRING "visual studio build architecture" FORCE)
endif()
if(WIN32 AND NOT CMAKE_GENERATOR MATCHES "Visual Studio" AND NOT DEFINED CMAKE_CXX_COMPILER)
if(VCPKG_TARGET_TRIPLET MATCHES "-windows-")
# set toolchain to VS for e.g. Ninja or jom
set(CMAKE_C_COMPILER cl CACHE STRING "Microsoft C/C++ Compiler" FORCE)
set(CMAKE_CXX_COMPILER cl CACHE STRING "Microsoft C/C++ Compiler" FORCE)
endif()
endif()
set(CMAKE_TOOLCHAIN_FILE ${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake CACHE FILEPATH "vcpkg toolchain" FORCE)
endfunction()
vcpkg_set_toolchain()
include(${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake)

View File

@@ -0,0 +1,37 @@
if(NOT ENABLE_ASAN)
return()
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
check_cxx_compiler_flag(/fsanitize=address MSVC_ASAN_SUPPORTED)
if(MSVC_ASAN_SUPPORTED)
add_compile_options(/fsanitize=address)
add_compile_definitions(_DISABLE_VECTOR_ANNOTATION _DISABLE_STRING_ANNOTATION)
else()
message(WARNING "ASAN not available for the compiler, disabling.")
set(ENABLE_ASAN OFF)
return()
endif()
else()
# ASAN does not work on non-debug builds for GCC and Clang.
if(NOT CMAKE_BUILD_TYPE STREQUAL Debug)
message(WARNING "ASAN requires debug build, set -DCMAKE_BUILD_TYPE=Debug, disabling.")
set(ENABLE_ASAN OFF)
return()
endif()
# It is necessary to modify the linker flagas for the compiler check to work.
set(BACKUP_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS})
set(CMAKE_EXE_LINKER_FLAGS "-fsanitize=address")
check_cxx_compiler_flag(-fsanitize=address ASAN_SUPPORTED)
set(CMAKE_EXE_LINKER_FLAGS ${BACKUP_LINKER_FLAGS})
if(ASAN_SUPPORTED)
add_compile_options(-fsanitize=address)
add_link_options(-fsanitize=address)
else()
message(WARNING "ASAN not available for the compiler, disabling.")
set(ENABLE_ASAN OFF)
return()
endif()
endif()

View File

@@ -0,0 +1,78 @@
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_SYSTEM_PROCESSOR ${CROSS_ARCH})
set(COMPILER_PREFIX "${CROSS_ARCH}-w64-mingw32")
unset(CMAKE_RC_COMPILER CACHE)
unset(CMAKE_C_COMPILER CACHE)
unset(CMAKE_CXX_COMPILER CACHE)
unset(PKG_CONFIG_EXECUTABLE CACHE)
# Which compilers to use for C and C++.
find_program(CMAKE_RC_COMPILER NAMES ${COMPILER_PREFIX}-windres)
find_program(CMAKE_C_COMPILER NAMES ${COMPILER_PREFIX}-gcc)
find_program(CMAKE_CXX_COMPILER NAMES ${COMPILER_PREFIX}-g++)
SET(CMAKE_FIND_ROOT_PATH
/usr/${COMPILER_PREFIX}
/usr/${COMPILER_PREFIX}/usr
/usr/${COMPILER_PREFIX}/sys-root/mingw
/usr/local/opt/mingw-w64/toolchain-${CROSS_ARCH}/${COMPILER_PREFIX}
/home/linuxbrew/.linuxbrew/opt/mingw-w64/toolchain-${CROSS_ARCH}/${COMPILER_PREFIX}
$ENV{HOME}/.linuxbrew/opt/mingw-w64/toolchain-${CROSS_ARCH}/${COMPILER_PREFIX}
)
# find wx-config
foreach(p ${CMAKE_FIND_ROOT_PATH})
file(GLOB paths ${p}/lib/wx/config/${COMPILER_PREFIX}-msw-*)
list(APPEND wx_confs ${paths})
endforeach()
foreach(p ${wx_confs})
if(CMAKE_TOOLCHAIN_FILE MATCHES -static)
string(REGEX MATCH "(static-)?([0-9]+\\.?)+$" wx_conf_ver ${p})
else()
string(REGEX MATCH "([0-9]+\\.?)+$" wx_conf_ver ${p})
endif()
list(APPEND wx_conf_vers ${wx_conf_ver})
endforeach()
list(SORT wx_conf_vers)
list(REVERSE wx_conf_vers)
list(GET wx_conf_vers 0 wx_conf_ver)
foreach(p ${wx_confs})
if(p MATCHES "${wx_conf_ver}$")
set(wx_conf ${p})
break()
endif()
endforeach()
set(wxWidgets_CONFIG_EXECUTABLE ${wx_conf} CACHE FILEPATH "path to wx-config script for the desired wxWidgets configuration" FORCE)
if(CMAKE_TOOLCHAIN_FILE MATCHES -static)
# find the right static zlib
foreach(p ${CMAKE_FIND_ROOT_PATH})
if(EXISTS ${p}/lib/libz.a)
set(ZLIB_ROOT ${p} CACHE FILEPATH "where to find zlib" FORCE)
break()
endif()
endforeach()
endif()
if(CMAKE_PREFIX_PATH)
set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${CMAKE_PREFIX_PATH})
endif()
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment too
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# pkg-config may be under the prefix
find_program(PKG_CONFIG_EXECUTABLE NAMES ${COMPILER_PREFIX}-pkg-config)

View File

@@ -0,0 +1 @@
include(${CMAKE_CURRENT_LIST_DIR}/Toolchain-cross-MinGW-w64-i686.cmake)

View File

@@ -0,0 +1,3 @@
set(CROSS_ARCH i686)
set(CMAKE_SIZEOF_VOID_P 4)
include(${CMAKE_CURRENT_LIST_DIR}/Toolchain-cross-MinGW-w64-common.cmake)

View File

@@ -0,0 +1 @@
include(${CMAKE_CURRENT_LIST_DIR}/Toolchain-cross-MinGW-w64-x86_64.cmake)

View File

@@ -0,0 +1,3 @@
set(CROSS_ARCH x86_64)
set(CMAKE_SIZEOF_VOID_P 8)
include(${CMAKE_CURRENT_LIST_DIR}/Toolchain-cross-MinGW-w64-common.cmake)

View File

@@ -0,0 +1,51 @@
SET(CMAKE_C_FLAGS "-m32" CACHE STRING "C compiler flags" FORCE)
SET(CMAKE_CXX_FLAGS "-m32" CACHE STRING "C++ compiler flags" FORCE)
SET(LIB32 /usr/lib) # Fedora
IF(EXISTS /usr/lib32)
SET(LIB32 /usr/lib32) # Arch, Solus
ENDIF()
SET(CMAKE_SYSTEM_LIBRARY_PATH ${LIB32} CACHE STRING "system library search path" FORCE)
SET(CMAKE_LIBRARY_PATH ${LIB32} CACHE STRING "library search path" FORCE)
# this is probably unlikely to be needed, but just in case
SET(CMAKE_EXE_LINKER_FLAGS "-m32 -L${LIB32}" CACHE STRING "executable linker flags" FORCE)
SET(CMAKE_SHARED_LINKER_FLAGS "-m32 -L${LIB32}" CACHE STRING "shared library linker flags" FORCE)
SET(CMAKE_MODULE_LINKER_FLAGS "-m32 -L${LIB32}" CACHE STRING "module linker flags" FORCE)
# find Wx config script on Fedora for the highest version of 32 bit Wx installed
IF(EXISTS ${LIB32}/wx/config)
FILE(GLOB WX_INSTALLS ${LIB32}/wx/config/*)
SET(MAX_WX_VERSION 0.0)
FOREACH(WX_INSTALL ${WX_INSTALLS})
STRING(REGEX MATCH "[0-9]+(\\.[0-9]+)+" WX_VERSION ${WX_INSTALL})
IF(WX_VERSION VERSION_GREATER MAX_WX_VERSION)
SET(MAX_WX_VERSION ${WX_VERSION})
ENDIF()
ENDFOREACH()
FILE(GLOB WX_INSTALL_CONFIGS "${LIB32}/wx/config/*${MAX_WX_VERSION}*")
LIST(GET WX_INSTALL_CONFIGS 0 WX_INSTALL_CONFIG)
SET(WX_CONFIG_TRANSFORM_SCRIPT_LINES
""
)
FILE(WRITE ${CMAKE_BINARY_DIR}/wx-config-wrapper
"#!/bin/sh
${WX_INSTALL_CONFIG} \"\$@\" | sed 's!/emul32/!/usr/!g'
")
EXECUTE_PROCESS(COMMAND chmod +x ${CMAKE_BINARY_DIR}/wx-config-wrapper)
SET(wxWidgets_CONFIG_EXECUTABLE ${CMAKE_BINARY_DIR}/wx-config-wrapper)
ENDIF()
# on Fedora and Arch and similar, point pkgconfig at 32 bit .pc files. We have
# to include the regular system .pc files as well (at the end), because some
# are not always present in the 32 bit directory
IF(EXISTS ${LIB32}/pkgconfig)
SET(ENV{PKG_CONFIG_LIBDIR} ${LIB32}/pkgconfig:/usr/share/pkgconfig:/usr/lib/pkgconfig:/usr/lib64/pkgconfig)
ENDIF()

View File

@@ -0,0 +1,82 @@
if(X86_32 OR X86_64)
add_compile_options(-msse2)
endif()
if(UPSTREAM_RELEASE)
if(X86_64)
# Require and optimize for Core2 level support, tune for generic.
if(APPLE)
add_compile_options(-march=core2 -mtune=skylake)
else()
add_compile_options(-march=core2 -mtune=generic)
endif()
elseif(X86_32)
# Optimize for pentiumi3 and tune for generic for Windows XP builds.
set(WINXP TRUE)
add_compile_options(-march=pentium3 -mtune=generic)
add_compile_definitions(-DWINXP)
endif()
endif()
# Common flags.
add_compile_options(
-pipe
$<$<COMPILE_LANGUAGE:CXX>:-Wno-deprecated-copy>
-Wformat
-Wformat-security
-fdiagnostics-color=always
)
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
add_compile_options(-Wno-unused-command-line-argument)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
add_compile_options(-feliminate-unused-debug-types)
endif()
# check if ssp flags are supported.
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
check_cxx_compiler_flag(-fstack-protector-strong STACK_PROTECTOR_SUPPORTED)
if(STACK_PROTECTOR_SUPPORTED)
add_compile_options(-fstack-protector-strong)
check_cxx_compiler_flag("--param ssp-buffer-size=4" SSP_BUFFER_SIZE_SUPPORTED)
if(SSP_BUFFER_SIZE_SUPPORTED)
add_compile_options(--param ssp-buffer-size=4)
endif()
endif()
endif()
#add_compile_options(-std=c++14)
if(NOT ENABLE_ASM) # inline asm is not allowed with -fPIC
add_compile_options(-fPIC)
endif()
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
add_compile_options(-ggdb3 -fno-omit-frame-pointer -Wall -Wextra)
else()
add_compile_options(-O3 -ffast-math -fomit-frame-pointer)
endif()
# for some reason this is necessary
if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
include_directories(/usr/local/include)
endif()
if(VBAM_STATIC)
if(APPLE)
add_link_options(-static-libstdc++)
else()
add_link_options(-static-libgcc -static-libstdc++ -Wl,-Bstatic -lstdc++ -lpthread)
endif()
endif()
# To support LTO, this must always fail.
add_compile_options(-Werror=odr -Werror=strict-aliasing)
add_link_options( -Werror=odr -Werror=strict-aliasing)
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
add_compile_options(-Werror=lto-type-mismatch)
add_link_options( -Werror=lto-type-mismatch)
endif()

View File

@@ -0,0 +1,10 @@
if (NOT MINGW)
return()
endif()
# this has to run after the toolchain is initialized.
include_directories("${CMAKE_SOURCE_DIR}/win32-deps/mingw-include")
include_directories("${CMAKE_SOURCE_DIR}/win32-deps/mingw-xaudio/include")
# Add Winsock as the last library linked because of broken link precedence.
set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} -lws2_32")

View File

@@ -0,0 +1,85 @@
# Set the runtime library properly.
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:DEBUG>:Debug>" CACHE INTERNAL "")
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
# MSVC-specific flags (not supported by clang-cl).
add_compile_options(/nologo)
if (NOT CMAKE_GENERATOR MATCHES "Ninja")
# Multi-processor compilation does not work well with Ninja.
add_compile_options(/MP)
endif()
endif()
include_directories("${CMAKE_SOURCE_DIR}/win32-deps/msvc")
add_compile_definitions(
_FORCENAMELESSUNION
WIN32_LEAN_AND_MEAN
WIN32
_WINDOWS
__STDC_LIMIT_MACROS
__STDC_CONSTANT_MACROS
_CRT_SECURE_NO_WARNINGS
_UNICODE
UNICODE
WINVER=0x0A00
NTDDI_VERSION=0x0A000007
NOMINMAX
)
add_compile_options(
/W4
/GR
/EHsc
)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
add_compile_definitions(_DEBUG)
add_compile_options(/Ob0 /Od /RTC1)
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" AND NOT ENABLE_ASAN)
# Use Edit and Continue with MSVC.
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "EditAndContinue" CACHE STRING "" FORCE)
else()
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "ProgramDatabase" CACHE STRING "" FORCE)
endif()
else()
add_compile_options(/MT /Oi /Gy)
add_link_options(/OPT:REF /OPT:ICF)
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "ProgramDatabase" CACHE STRING "" FORCE)
if (CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
add_compile_options(/O1 /Ob1)
elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
add_compile_options(/O2 /Ob1)
else()
add_compile_options(/O2)
endif()
endif()
if(CMAKE_VERSION VERSION_LESS "3.25")
# Backwards-compatible way of setting the /Z option.
if(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT STREQUAL "EditAndContinue")
add_compile_options(/ZI)
elseif(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT STREQUAL "ProgramDatabase")
add_compile_options(/Zi)
elseif(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT STREQUAL "Embedded")
add_compile_options(/Z7)
else()
message(FATAL_ERROR "Unknown value for CMAKE_MSVC_DEBUG_INFORMATION_FORMAT: ${CMAKE_MSVC_DEBUG_INFORMATION_FORMAT}")
endif()
endif()
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:/std:c++17>)
set(CMAKE_RC_FLAGS "-c65001 /DWIN32" CACHE STRING "" FORCE)
# We need to explicitly set all of these to override the CMake defaults.
set(CMAKE_CXX_FLAGS "" CACHE STRING "" FORCE)
set(CMAKE_C_FLAGS "" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_DEBUG "" CACHE STRING "" FORCE)
set(CMAKE_C_FLAGS_DEBUG "" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_RELEASE "" CACHE STRING "" FORCE)
set(CMAKE_C_FLAGS_RELEASE "" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "" CACHE STRING "" FORCE)
set(CMAKE_C_FLAGS_RELWITHDEBINFO "" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_MINSIZEREL "" CACHE STRING "" FORCE)
set(CMAKE_C_FLAGS_MINSIZEREL "" CACHE STRING "" FORCE)

126
cmake/Toolchain.cmake Normal file
View File

@@ -0,0 +1,126 @@
if(TRANSLATIONS_ONLY)
return()
endif()
# Compiler stuff
include(CheckCXXCompilerFlag)
include(ProcessorCount)
ProcessorCount(num_cpus)
if(ENABLE_LTO)
include(CheckIPOSupported)
check_ipo_supported(RESULT LTO_SUPPORTED)
# MINGW64 does not support LTO
if(WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(LTO_SUPPORTED FALSE)
endif()
if(LTO_SUPPORTED)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
else()
message(WARNING "LTO is not supported by the compiler, diasabling LTO")
set(ENABLE_LTO OFF)
endif()
endif()
# Output all binaries at top level
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
if(NOT HTTPS)
add_compile_definitions(NO_HTTPS)
endif()
if(ENABLE_GBA_LOGGING)
add_compile_definitions(GBA_LOGGING )
endif()
if(ENABLE_MMX)
add_compile_definitions(MMX)
endif()
if(NOT ENABLE_ONLINEUPDATES)
add_compile_definitions(NO_ONLINEUPDATES)
endif()
# The debugger is enabled by default
if(ENABLE_DEBUGGER)
add_compile_definitions(VBAM_ENABLE_DEBUGGER)
endif()
# The ASM core is disabled by default because we don't know on which platform we are
if(NOT ENABLE_ASM_CORE)
add_compile_definitions(C_CORE)
endif()
# Set up "src" and generated directory as a global include directory.
set(VBAM_GENERATED_DIR ${CMAKE_BINARY_DIR}/generated)
include_directories(
${CMAKE_SOURCE_DIR}/src
${VBAM_GENERATED_DIR}
)
# C defines
add_compile_definitions(HAVE_NETINET_IN_H HAVE_ARPA_INET_H HAVE_ZLIB_H FINAL_VERSION SDL USE_OPENGL SYSCONF_INSTALL_DIR="${CMAKE_INSTALL_FULL_SYSCONFDIR}")
add_compile_definitions(PKGDATADIR="${CMAKE_INSTALL_FULL_DATADIR}/vbam")
add_compile_definitions(__STDC_FORMAT_MACROS)
add_compile_definitions(LOCALEDIR="${LOCALEDIR}")
# Common compiler settings.
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
add_compile_definitions(DEBUG)
else()
add_compile_definitions(NDEBUG)
endif()
if(APPLE)
add_compile_definitions(MACHO)
elseif("${CMAKE_SYSTEM}" MATCHES "Linux")
add_compile_definitions(ELF)
endif()
if(X86_64)
add_compile_definitions(__AMD64__ __X86_64__)
endif()
# Enable ASAN if requested and supported.
include(Toolchain-asan)
# MINGW/MSYS-specific settings.
include(Toolchain-mingw)
# Toolchain-specific settings.
if(MSVC)
# This also includes clang-cl.
include(Toolchain-msvc)
else()
include(Toolchain-gcc-clang)
endif()
# Assembler flags.
if(ENABLE_ASM_CORE OR ENABLE_ASM_SCALERS)
if(MSVC)
if(NOT EXISTS ${CMAKE_BINARY_DIR}/nuget.exe)
file(DOWNLOAD "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" ${CMAKE_BINARY_DIR}/nuget.exe)
endif()
execute_process(
COMMAND nuget.exe install nasm2 -OutputDirectory ${CMAKE_BINARY_DIR}/nuget
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
file(GLOB pkg ${CMAKE_BINARY_DIR}/nuget/nasm2*)
list(APPEND CMAKE_PROGRAM_PATH ${pkg}/tools)
endif()
enable_language(ASM_NASM)
set(ASM_ENABLED ON)
endif()
if(ASM_ENABLED)
string(REGEX REPLACE "<FLAGS>" "-I${CMAKE_SOURCE_DIR}/src/filters/hq/asm/ -O1 -w-orphan-labels" CMAKE_ASM_NASM_COMPILE_OBJECT ${CMAKE_ASM_NASM_COMPILE_OBJECT})
endif()

148
cmake/UpdateAppcast.cmake Normal file
View File

@@ -0,0 +1,148 @@
# Clone web-data.
# Update version in appcast.xml to latest tag.
# Commit web-data.
function(update_appcast)
if(UPDATE_APPCAST STREQUAL UNDO)
file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/web-data)
message(FATAL_ERROR [=[
**** APPCAST.XML UPDATE HAS BEEN UNDONE ****"
Ignore the following cmake error.
]=])
endif()
# Get last tag.
execute_process(
COMMAND git tag --sort=-v:refname
OUTPUT_VARIABLE git_tags
OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
string(REGEX REPLACE ";" "\\\\;" git_tags_lines "${git_tags}")
string(REGEX REPLACE "\r?\n" ";" git_tags_lines "${git_tags_lines}")
foreach(line ${git_tags_lines})
if(line MATCHES "^v[0-9]")
set(new_tag ${line})
break()
endif()
endforeach()
if(NOT DEFINED new_tag)
message(FATAL_ERROR "cannot find last release tag")
endif()
# Remove the "v" for the version string.
string(REGEX REPLACE "^v" "" new_version ${new_tag})
# Clone repo.
execute_process(
COMMAND git clone git@github.com:visualboyadvance-m/visualboyadvance-m.github.io web-data
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
# Rewrite appcast.xml.
# First make a copy for backing out.
configure_file(
${CMAKE_BINARY_DIR}/web-data/appcast.xml
${CMAKE_BINARY_DIR}/appcast.xml.orig
COPYONLY
)
# Now read it and replace the versions.
include(FileIterator)
fi_open_file(${CMAKE_BINARY_DIR}/web-data/appcast.xml)
set(work_file ${CMAKE_BINARY_DIR}/appcast.xml.work)
file(REMOVE ${work_file})
while(NOT fi_done)
fi_get_next_line()
string(REGEX REPLACE [=[(:version="|v)([0-9.]+)([/"])]=] "\\1${new_version}\\3" fi_line "${fi_line}")
file(APPEND ${work_file} "${fi_line}" "\n")
endwhile()
# Convert to UNIX line endings on Windows, just copy the file otherwise.
if(CMAKE_HOST_SYSTEM MATCHES Windows OR ((NOT DEFINED CMAKE_HOST_SYSTEM) AND WIN32))
if(NOT DEFINED POWERSHELL)
message(FATAL_ERROR "Powershell is required to convert line endings on Windows.")
endif()
execute_process(
COMMAND ${POWERSHELL} -NoLogo -NoProfile -ExecutionPolicy Bypass -Command [=[
$text = [IO.File]::ReadAllText("appcast.xml.work") -replace "`r`n", "`n"
[IO.File]::WriteAllText("appcast.xml", $text)
]=]
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
else()
configure_file(
${CMAKE_BINARY_DIR}/appcast.xml.work
${CMAKE_BINARY_DIR}/appcast.xml
COPYONLY
)
endif()
# Copy the new file and add it to the commit.
configure_file(
${CMAKE_BINARY_DIR}/appcast.xml
${CMAKE_BINARY_DIR}/web-data/appcast.xml
COPYONLY
)
execute_process(
COMMAND git add appcast.xml
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/web-data
)
# Commit the change.
execute_process(
COMMAND git commit -m "release ${new_tag}" --signoff -S
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/web-data
)
# Make release tag.
execute_process(
COMMAND git tag -s -m${new_tag} ${new_tag}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/web-data
)
message(FATAL_ERROR [=[
appcast.xml updated.
**** IF YOU ARE SURE YOU WANT TO RELEASE ****
Run the following commands to push the release commit and tag:
cd web-data
git push
git push --tags
**** TO UNDO THE RELEASE ****
To rollback these changes, run this command:
cmake .. -DUPDATE_APPCAST=UNDO
Ignore the "configuration incomplete" message following, this mode does not
build anything.
]=])
endfunction()
update_appcast()

140
cmake/VbamFunctions.cmake Normal file
View File

@@ -0,0 +1,140 @@
function(cygpath var path)
execute_process(
COMMAND cygpath -m ${path}
OUTPUT_VARIABLE cyg_path
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
set(${var} ${cyg_path} PARENT_SCOPE)
endfunction()
function(check_clean_exit var)
execute_process(
COMMAND ${ARGN}
RESULT_VARIABLE exit_status
OUTPUT_QUIET
ERROR_QUIET
)
if(NOT ${exit_status} EQUAL 0)
# special case for msys2, where programs might complain about
# not being win32 programs
unset(cmd_str)
foreach(param IN LISTS ARGN)
set(cmd_str "${cmd_str} ${param}")
endforeach()
string(STRIP "${cmd_str}" cmd_str)
execute_process(
COMMAND sh -c "${cmd_str}"
RESULT_VARIABLE exit_status
OUTPUT_QUIET
ERROR_QUIET
)
endif()
set(${var} ${exit_status} PARENT_SCOPE)
endfunction()
function(try_wx_util var util conf_suffix major_version minor_version)
unset(suffix)
if(conf_suffix)
set(suffix "-${conf_suffix}")
endif()
if(major_version)
set(suffix "${suffix}-${major_version}")
if(NOT minor_version EQUAL -1)
set(suffix "${suffix}.${minor_version}")
endif()
endif()
# find_program caches the result
set(exe NOTFOUND CACHE INTERNAL "" FORCE)
find_program(exe NAMES "${util}${suffix}")
# try infix variant, as on FreeBSD
if(NOT EXISTS "${exe}")
string(REGEX REPLACE "^-" "" suffix "${suffix}")
string(REGEX REPLACE "-" "${suffix}-" try "${util}")
set(exe NOTFOUND CACHE INTERNAL "" FORCE)
find_program(exe NAMES "${try}")
endif()
if(EXISTS "${exe}")
# check that the utility can be executed cleanly
# in case we find e.g. the wrong architecture binary
# when cross-compiling
check_clean_exit(exit_status "${exe}" --help)
if(exit_status EQUAL 0)
set("${var}" "${exe}" PARENT_SCOPE)
return()
endif()
endif()
endfunction()
function(find_wx_util var util)
if((WIN32 AND (NOT CMAKE_TOOLCHAIN_FILE MATCHES "vcpkg")) OR EXISTS /etc/gentoo-release)
# On win32, including cross builds we prefer the plain utility
# name first from PATH, with the exception of -static for static
# builds.
#
# On Gentoo /usr/bin/wx-config loads the eselected build, so we
# want to try that first.
#
# This makes a one element of empty string list.
if(VBAM_STATIC)
set(conf_suffixes "static;")
else()
set(conf_suffixes ";")
endif()
set(major_versions ";")
endif()
list(APPEND conf_suffixes "" gtk3u gtk3 gtk2u gtk2)
list(APPEND major_versions "" 3)
get_target_property(wx_base_lib_prop wx::base LOCATION)
string(STRIP "${wx_base_lib_prop}" wx_base_lib)
if(wx_base_lib MATCHES "wx_baseu?-([0-9]+)\\.([0-9]+)\\.")
set(lib_major "${CMAKE_MATCH_1}")
set(lib_minor "${CMAKE_MATCH_2}")
endif()
foreach(conf_suffix IN LISTS conf_suffixes)
if(lib_major AND lib_minor)
try_wx_util(exe "${util}" "${conf_suffix}" "${lib_major}" "${lib_minor}")
if(exe)
set("${var}" "${exe}" PARENT_SCOPE)
return()
endif()
endif()
foreach(major_version IN LISTS major_versions)
foreach(minor_version RANGE 30 -1 -1)
try_wx_util(exe "${util}" "${conf_suffix}" "${major_version}" "${minor_version}")
if(exe)
set("${var}" "${exe}" PARENT_SCOPE)
return()
endif()
# don't iterate over minor versions for empty major version
if(major_version STREQUAL "")
break()
endif()
endforeach()
endforeach()
# default to util name if not found, so the error is more clear
set(${var} ${util} PARENT_SCOPE)
endforeach()
endfunction()

33
data/appcast.xml Normal file
View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle">
<channel>
<item>
<link>https://github.com/visualboyadvance-m/visualboyadvance-m/releases/download/v2.1.4/visualboyadvance-m-Win-64bit.zip</link>
<enclosure
sparkle:os="windows-x64"
sparkle:version="2.1.4"
length="0"
type="application/octet-stream"
/>
</item>
<item>
<link>https://github.com/visualboyadvance-m/visualboyadvance-m/releases/download/v2.1.4/visualboyadvance-m-Win-32bit.zip</link>
<enclosure
sparkle:os="windows-x86"
sparkle:version="2.1.4"
length="0"
type="application/octet-stream"
/>
</item>
<item>
<link>https://github.com/visualboyadvance-m/visualboyadvance-m/releases/download/v2.1.4/visualboyadvance-m-Mac-64bit.zip</link>
<enclosure
sparkle:os="macos"
sparkle:version="2.1.4"
length="0"
type="application/octet-stream"
/>
</item>
</channel>
</rss>

8
default.nix Normal file
View File

@@ -0,0 +1,8 @@
with import <nixpkgs> {};
stdenv.mkDerivation {
name = "visualboyadvance-m";
buildInputs = if stdenv.isDarwin then
[ ninja cmake nasm faudio gettext libintl libtiff pkg-config zip zlib openal ffmpeg wxGTK32 sdl3 pcre pcre2 llvmPackages_latest.clang llvmPackages_latest.bintools ]
else
[ ninja cmake gcc clang llvm llvmPackages.libcxx nasm faudio gettext libintl libtiff pkg-config zip zlib openal ffmpeg wxGTK32 libGL libGLU glfw sdl3 gtk3-x11 pcre pcre2 util-linuxMinimal libselinux libsepol libthai libdatrie xorg.libXdmcp xorg.libXtst libxkbcommon libepoxy dbus at-spi2-core ];
}

Submodule dependencies deleted from 76e2d57b89

View File

@@ -2,59 +2,27 @@
Developer Information File
==========================
Known preprocessor switches:
- SDL: Defined for the SDL version
- GBA_LOGGING: Enables logging for the GBA core
- 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)
- NO_LINK: Exclude linking code (joybus, multilink, ...)
- WIN64: This macro is only defined for 64 bit builds
Download locations:
NASM: http://nasm.us/
DirectX SDK: http://msdn.microsoft.com/en-us/xna/aa937788.aspx
OpenAL SDK: http://connect.creativelabs.com/openal/default.aspx
OpenGL files: http://www.opengl.org/registry/
zlib: http://zlib.net/
libpng: http://libpng.org/pub/png/libpng.html
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.

View File

@@ -9,7 +9,7 @@
VisualBoyAdvance-M
Nintendo Game Boy & Game Boy Advance Emulator
Project Homepage: http://vba-m.com
Project Homepage: http://visualboyadvance-m.org
This program is distributed under the GNU General Public License
http://www.gnu.org/licenses/gpl.html

View File

@@ -1,200 +0,0 @@
/* 7z.h -- 7z interface
2010-03-11 : Igor Pavlov : Public domain */
#ifndef __7Z_H
#define __7Z_H
#include "7zBuf.h"
EXTERN_C_BEGIN
#define k7zStartHeaderSize 0x20
#define k7zSignatureSize 6
extern Byte k7zSignature[k7zSignatureSize];
#define k7zMajorVersion 0
enum EIdEnum {
k7zIdEnd,
k7zIdHeader,
k7zIdArchiveProperties,
k7zIdAdditionalStreamsInfo,
k7zIdMainStreamsInfo,
k7zIdFilesInfo,
k7zIdPackInfo,
k7zIdUnpackInfo,
k7zIdSubStreamsInfo,
k7zIdSize,
k7zIdCRC,
k7zIdFolder,
k7zIdCodersUnpackSize,
k7zIdNumUnpackStream,
k7zIdEmptyStream,
k7zIdEmptyFile,
k7zIdAnti,
k7zIdName,
k7zIdCTime,
k7zIdATime,
k7zIdMTime,
k7zIdWinAttributes,
k7zIdComment,
k7zIdEncodedHeader,
k7zIdStartPos,
k7zIdDummy
};
typedef struct
{
UInt32 NumInStreams;
UInt32 NumOutStreams;
UInt64 MethodID;
CBuf Props;
} CSzCoderInfo;
void SzCoderInfo_Init(CSzCoderInfo* p);
void SzCoderInfo_Free(CSzCoderInfo* p, ISzAlloc* alloc);
typedef struct
{
UInt32 InIndex;
UInt32 OutIndex;
} CSzBindPair;
typedef struct
{
CSzCoderInfo* Coders;
CSzBindPair* BindPairs;
UInt32* PackStreams;
UInt64* UnpackSizes;
UInt32 NumCoders;
UInt32 NumBindPairs;
UInt32 NumPackStreams;
int UnpackCRCDefined;
UInt32 UnpackCRC;
UInt32 NumUnpackStreams;
} CSzFolder;
void SzFolder_Init(CSzFolder* p);
UInt64 SzFolder_GetUnpackSize(CSzFolder* p);
int SzFolder_FindBindPairForInStream(CSzFolder* p, UInt32 inStreamIndex);
UInt32 SzFolder_GetNumOutStreams(CSzFolder* p);
UInt64 SzFolder_GetUnpackSize(CSzFolder* p);
SRes SzFolder_Decode(const CSzFolder* folder, const UInt64* packSizes,
ILookInStream* stream, UInt64 startPos,
Byte* outBuffer, size_t outSize, ISzAlloc* allocMain);
typedef struct
{
UInt32 Low;
UInt32 High;
} CNtfsFileTime;
typedef struct
{
CNtfsFileTime MTime;
UInt64 Size;
UInt32 Crc;
UInt32 Attrib;
Byte HasStream;
Byte IsDir;
Byte IsAnti;
Byte CrcDefined;
Byte MTimeDefined;
Byte AttribDefined;
} CSzFileItem;
void SzFile_Init(CSzFileItem* p);
typedef struct
{
UInt64* PackSizes;
Byte* PackCRCsDefined;
UInt32* PackCRCs;
CSzFolder* Folders;
CSzFileItem* Files;
UInt32 NumPackStreams;
UInt32 NumFolders;
UInt32 NumFiles;
} CSzAr;
void SzAr_Init(CSzAr* p);
void SzAr_Free(CSzAr* p, ISzAlloc* alloc);
/*
SzExtract extracts file from archive
*outBuffer must be 0 before first call for each new archive.
Extracting cache:
If you need to decompress more than one file, you can send
these values from previous call:
*blockIndex,
*outBuffer,
*outBufferSize
You can consider "*outBuffer" as cache of solid block. If your archive is solid,
it will increase decompression speed.
If you use external function, you can declare these 3 cache variables
(blockIndex, outBuffer, outBufferSize) as static in that external function.
Free *outBuffer and set *outBuffer to 0, if you want to flush cache.
*/
typedef struct
{
CSzAr db;
UInt64 startPosAfterHeader;
UInt64 dataPos;
UInt32* FolderStartPackStreamIndex;
UInt64* PackStreamStartPositions;
UInt32* FolderStartFileIndex;
UInt32* FileIndexToFolderIndexMap;
size_t* FileNameOffsets; /* in 2-byte steps */
CBuf FileNames; /* UTF-16-LE */
} CSzArEx;
void SzArEx_Init(CSzArEx* p);
void SzArEx_Free(CSzArEx* p, ISzAlloc* alloc);
UInt64 SzArEx_GetFolderStreamPos(const CSzArEx* p, UInt32 folderIndex, UInt32 indexInFolder);
int SzArEx_GetFolderFullPackSize(const CSzArEx* p, UInt32 folderIndex, UInt64* resSize);
/*
if dest == NULL, the return value specifies the required size of the buffer,
in 16-bit characters, including the null-terminating character.
if dest != NULL, the return value specifies the number of 16-bit characters that
are written to the dest, including the null-terminating character. */
size_t SzArEx_GetFileNameUtf16(const CSzArEx* p, size_t fileIndex, UInt16* dest);
SRes SzArEx_Extract(
const CSzArEx* db,
ILookInStream* inStream,
UInt32 fileIndex, /* index of file */
UInt32* blockIndex, /* index of solid block */
Byte** outBuffer, /* pointer to pointer to output buffer (allocated with allocMain) */
size_t* outBufferSize, /* buffer size for output buffer */
size_t* offset, /* offset of stream for required file in *outBuffer */
size_t* outSizeProcessed, /* size of file in *outBuffer */
ISzAlloc* allocMain,
ISzAlloc* allocTemp);
/*
SzArEx_Open Errors:
SZ_ERROR_NO_ARCHIVE
SZ_ERROR_ARCHIVE
SZ_ERROR_UNSUPPORTED
SZ_ERROR_MEM
SZ_ERROR_CRC
SZ_ERROR_INPUT_EOF
SZ_ERROR_FAIL
*/
SRes SzArEx_Open(CSzArEx* p, ILookInStream* inStream, ISzAlloc* allocMain, ISzAlloc* allocTemp);
EXTERN_C_END
#endif

View File

@@ -1,74 +0,0 @@
/* 7zAlloc.c -- Allocation functions
2010-10-29 : Igor Pavlov : Public domain */
#include "7zAlloc.h"
/* #define _SZ_ALLOC_DEBUG */
/* use _SZ_ALLOC_DEBUG to debug alloc/free operations */
#ifdef _SZ_ALLOC_DEBUG
#ifdef _WIN32
#include <windows.h>
#endif
#include <stdio.h>
int g_allocCount = 0;
int g_allocCountTemp = 0;
#endif
void* SzAlloc(void* p, size_t size)
{
p = p;
if (size == 0)
return 0;
#ifdef _SZ_ALLOC_DEBUG
fprintf(stderr, "\nAlloc %10d bytes; count = %10d", size, g_allocCount);
g_allocCount++;
#endif
return malloc(size);
}
void SzFree(void* p, void* address)
{
p = p;
#ifdef _SZ_ALLOC_DEBUG
if (address != 0) {
g_allocCount--;
fprintf(stderr, "\nFree; count = %10d", g_allocCount);
}
#endif
free(address);
}
void* SzAllocTemp(void* p, size_t size)
{
p = p;
if (size == 0)
return 0;
#ifdef _SZ_ALLOC_DEBUG
fprintf(stderr, "\nAlloc_temp %10d bytes; count = %10d", size, g_allocCountTemp);
g_allocCountTemp++;
#ifdef _WIN32
return HeapAlloc(GetProcessHeap(), 0, size);
#endif
#endif
return malloc(size);
}
void SzFreeTemp(void* p, void* address)
{
p = p;
#ifdef _SZ_ALLOC_DEBUG
if (address != 0) {
g_allocCountTemp--;
fprintf(stderr, "\nFree_temp; count = %10d", g_allocCountTemp);
}
#ifdef _WIN32
HeapFree(GetProcessHeap(), 0, address);
return;
#endif
#endif
free(address);
}

View File

@@ -1,15 +0,0 @@
/* 7zAlloc.h -- Allocation functions
2010-10-29 : Igor Pavlov : Public domain */
#ifndef __7Z_ALLOC_H
#define __7Z_ALLOC_H
#include <stdlib.h>
void* SzAlloc(void* p, size_t size);
void SzFree(void* p, void* address);
void* SzAllocTemp(void* p, size_t size);
void SzFreeTemp(void* p, void* address);
#endif

View File

@@ -1,34 +0,0 @@
/* 7zBuf.c -- Byte Buffer
2008-03-28
Igor Pavlov
Public domain */
#include "7zBuf.h"
void Buf_Init(CBuf* p)
{
p->data = 0;
p->size = 0;
}
int Buf_Create(CBuf* p, size_t size, ISzAlloc* alloc)
{
p->size = 0;
if (size == 0) {
p->data = 0;
return 1;
}
p->data = (Byte*)alloc->Alloc(alloc, size);
if (p->data != 0) {
p->size = size;
return 1;
}
return 0;
}
void Buf_Free(CBuf* p, ISzAlloc* alloc)
{
alloc->Free(alloc, p->data);
p->data = 0;
p->size = 0;
}

View File

@@ -1,39 +0,0 @@
/* 7zBuf.h -- Byte Buffer
2009-02-07 : Igor Pavlov : Public domain */
#ifndef __7Z_BUF_H
#define __7Z_BUF_H
#include "Types.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct
{
Byte* data;
size_t size;
} CBuf;
void Buf_Init(CBuf* p);
int Buf_Create(CBuf* p, size_t size, ISzAlloc* alloc);
void Buf_Free(CBuf* p, ISzAlloc* alloc);
typedef struct
{
Byte* data;
size_t size;
size_t pos;
} CDynBuf;
void DynBuf_Construct(CDynBuf* p);
void DynBuf_SeekToBeg(CDynBuf* p);
int DynBuf_Write(CDynBuf* p, const Byte* buf, size_t size, ISzAlloc* alloc);
void DynBuf_Free(CDynBuf* p, ISzAlloc* alloc);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -1,80 +0,0 @@
/* 7zCrc.c -- CRC32 init
2010-12-01 : Igor Pavlov : Public domain */
#include "7zCrc.h"
#include "CpuArch.h"
#define kCrcPoly 0xEDB88320
#ifdef MY_CPU_X86_OR_AMD64
#define CRC_NUM_TABLES 8
UInt32 MY_FAST_CALL CrcUpdateT8(UInt32 v, const void* data, size_t size, const UInt32* table);
#elif defined(MY_CPU_LE)
#define CRC_NUM_TABLES 4
#else
#define CRC_NUM_TABLES 5
#define CRC_UINT32_SWAP(v) ((v >> 24) | ((v >> 8) & 0xFF00) | ((v << 8) & 0xFF0000) | (v << 24))
UInt32 MY_FAST_CALL CrcUpdateT1_BeT4(UInt32 v, const void* data, size_t size, const UInt32* table);
#endif
#ifndef MY_CPU_BE
UInt32 MY_FAST_CALL CrcUpdateT4(UInt32 v, const void* data, size_t size, const UInt32* table);
#endif
typedef UInt32(MY_FAST_CALL* CRC_FUNC)(UInt32 v, const void* data, size_t size, const UInt32* table);
static CRC_FUNC g_CrcUpdate;
UInt32 g_CrcTable[256 * CRC_NUM_TABLES];
UInt32 MY_FAST_CALL CrcUpdate(UInt32 v, const void* data, size_t size)
{
return g_CrcUpdate(v, data, size, g_CrcTable);
}
UInt32 MY_FAST_CALL CrcCalc(const void* data, size_t size)
{
return g_CrcUpdate(CRC_INIT_VAL, data, size, g_CrcTable) ^ CRC_INIT_VAL;
}
void MY_FAST_CALL CrcGenerateTable()
{
UInt32 i;
for (i = 0; i < 256; i++) {
UInt32 r = i;
unsigned j;
for (j = 0; j < 8; j++)
r = (r >> 1) ^ (kCrcPoly & ~((r & 1) - 1));
g_CrcTable[i] = r;
}
for (; i < 256 * CRC_NUM_TABLES; i++) {
UInt32 r = g_CrcTable[i - 256];
g_CrcTable[i] = g_CrcTable[r & 0xFF] ^ (r >> 8);
}
#ifdef MY_CPU_LE
g_CrcUpdate = CrcUpdateT4;
#if CRC_NUM_TABLES == 8
if (!CPU_Is_InOrder())
g_CrcUpdate = CrcUpdateT8;
#endif
#else
{
#ifndef MY_CPU_BE
UInt32 k = 1;
if (*(const Byte*)&k == 1)
g_CrcUpdate = CrcUpdateT4;
else
#endif
{
for (i = 256 * CRC_NUM_TABLES - 1; i >= 256; i--) {
UInt32 x = g_CrcTable[i - 256];
g_CrcTable[i] = CRC_UINT32_SWAP(x);
}
g_CrcUpdate = CrcUpdateT1_BeT4;
}
}
#endif
}

View File

@@ -1,25 +0,0 @@
/* 7zCrc.h -- CRC32 calculation
2009-11-21 : Igor Pavlov : Public domain */
#ifndef __7Z_CRC_H
#define __7Z_CRC_H
#include "Types.h"
EXTERN_C_BEGIN
extern UInt32 g_CrcTable[];
/* Call CrcGenerateTable one time before other CRC functions */
void MY_FAST_CALL CrcGenerateTable(void);
#define CRC_INIT_VAL 0xFFFFFFFF
#define CRC_GET_DIGEST(crc) ((crc) ^ CRC_INIT_VAL)
#define CRC_UPDATE_BYTE(crc, b) (g_CrcTable[((crc) ^ (b)) & 0xFF] ^ ((crc) >> 8))
UInt32 MY_FAST_CALL CrcUpdate(UInt32 crc, const void* data, size_t size);
UInt32 MY_FAST_CALL CrcCalc(const void* data, size_t size);
EXTERN_C_END
#endif

View File

@@ -1,53 +0,0 @@
/* 7zCrcOpt.c -- CRC32 calculation
2010-12-01 : Igor Pavlov : Public domain */
#include "CpuArch.h"
#define CRC_UPDATE_BYTE_2(crc, b) (table[((crc) ^ (b)) & 0xFF] ^ ((crc) >> 8))
#ifndef MY_CPU_BE
UInt32 MY_FAST_CALL CrcUpdateT4(UInt32 v, const void* data, size_t size, const UInt32* table)
{
const Byte* p = (const Byte*)data;
for (; size > 0 && ((unsigned)(ptrdiff_t)p & 3) != 0; size--, p++)
v = CRC_UPDATE_BYTE_2(v, *p);
for (; size >= 4; size -= 4, p += 4) {
v ^= *(const UInt32*)p;
v = table[0x300 + (v & 0xFF)] ^ table[0x200 + ((v >> 8) & 0xFF)] ^ table[0x100 + ((v >> 16) & 0xFF)] ^ table[0x000 + ((v >> 24))];
}
for (; size > 0; size--, p++)
v = CRC_UPDATE_BYTE_2(v, *p);
return v;
}
UInt32 MY_FAST_CALL CrcUpdateT8(UInt32 v, const void* data, size_t size, const UInt32* table)
{
return CrcUpdateT4(v, data, size, table);
}
#endif
#ifndef MY_CPU_LE
#define CRC_UINT32_SWAP(v) ((v >> 24) | ((v >> 8) & 0xFF00) | ((v << 8) & 0xFF0000) | (v << 24))
UInt32 MY_FAST_CALL CrcUpdateT1_BeT4(UInt32 v, const void* data, size_t size, const UInt32* table)
{
const Byte* p = (const Byte*)data;
for (; size > 0 && ((unsigned)(ptrdiff_t)p & 3) != 0; size--, p++)
v = CRC_UPDATE_BYTE_2(v, *p);
v = CRC_UINT32_SWAP(v);
table += 0x100;
for (; size >= 4; size -= 4, p += 4) {
v ^= *(const UInt32*)p;
v = table[0x000 + (v & 0xFF)] ^ table[0x100 + ((v >> 8) & 0xFF)] ^ table[0x200 + ((v >> 16) & 0xFF)] ^ table[0x300 + ((v >> 24))];
}
table -= 0x100;
v = CRC_UINT32_SWAP(v);
for (; size > 0; size--, p++)
v = CRC_UPDATE_BYTE_2(v, *p);
return v;
}
#endif

View File

@@ -1,413 +0,0 @@
/* 7zDec.c -- Decoding from 7z folder
2010-11-02 : Igor Pavlov : Public domain */
#include <string.h>
/* #define _7ZIP_PPMD_SUPPPORT */
#include "7z.h"
#include "Bcj2.h"
#include "Bra.h"
#include "CpuArch.h"
#include "Lzma2Dec.h"
#include "LzmaDec.h"
#ifdef _7ZIP_PPMD_SUPPPORT
#include "Ppmd7.h"
#endif
#define k_Copy 0
#define k_LZMA2 0x21
#define k_LZMA 0x30101
#define k_BCJ 0x03030103
#define k_PPC 0x03030205
#define k_ARM 0x03030501
#define k_ARMT 0x03030701
#define k_SPARC 0x03030805
#define k_BCJ2 0x0303011B
#ifdef _7ZIP_PPMD_SUPPPORT
#define k_PPMD 0x30401
typedef struct
{
IByteIn p;
const Byte* cur;
const Byte* end;
const Byte* begin;
UInt64 processed;
Bool extra;
SRes res;
ILookInStream* inStream;
} CByteInToLook;
static Byte ReadByte(void* pp)
{
CByteInToLook* p = (CByteInToLook*)pp;
if (p->cur != p->end)
return *p->cur++;
if (p->res == SZ_OK) {
size_t size = p->cur - p->begin;
p->processed += size;
p->res = p->inStream->Skip(p->inStream, size);
size = (1 << 25);
p->res = p->inStream->Look(p->inStream, (const void**)&p->begin, &size);
p->cur = p->begin;
p->end = p->begin + size;
if (size != 0)
return *p->cur++;
;
}
p->extra = True;
return 0;
}
static SRes SzDecodePpmd(CSzCoderInfo* coder, UInt64 inSize, ILookInStream* inStream,
Byte* outBuffer, SizeT outSize, ISzAlloc* allocMain)
{
CPpmd7 ppmd;
CByteInToLook s;
SRes res = SZ_OK;
s.p.Read = ReadByte;
s.inStream = inStream;
s.begin = s.end = s.cur = NULL;
s.extra = False;
s.res = SZ_OK;
s.processed = 0;
if (coder->Props.size != 5)
return SZ_ERROR_UNSUPPORTED;
{
unsigned order = coder->Props.data[0];
UInt32 memSize = GetUi32(coder->Props.data + 1);
if (order < PPMD7_MIN_ORDER || order > PPMD7_MAX_ORDER || memSize < PPMD7_MIN_MEM_SIZE || memSize > PPMD7_MAX_MEM_SIZE)
return SZ_ERROR_UNSUPPORTED;
Ppmd7_Construct(&ppmd);
if (!Ppmd7_Alloc(&ppmd, memSize, allocMain))
return SZ_ERROR_MEM;
Ppmd7_Init(&ppmd, order);
}
{
CPpmd7z_RangeDec rc;
Ppmd7z_RangeDec_CreateVTable(&rc);
rc.Stream = &s.p;
if (!Ppmd7z_RangeDec_Init(&rc))
res = SZ_ERROR_DATA;
else if (s.extra)
res = (s.res != SZ_OK ? s.res : SZ_ERROR_DATA);
else {
SizeT i;
for (i = 0; i < outSize; i++) {
int sym = Ppmd7_DecodeSymbol(&ppmd, &rc.p);
if (s.extra || sym < 0)
break;
outBuffer[i] = (Byte)sym;
}
if (i != outSize)
res = (s.res != SZ_OK ? s.res : SZ_ERROR_DATA);
else if (s.processed + (s.cur - s.begin) != inSize || !Ppmd7z_RangeDec_IsFinishedOK(&rc))
res = SZ_ERROR_DATA;
}
}
Ppmd7_Free(&ppmd, allocMain);
return res;
}
#endif
static SRes SzDecodeLzma(CSzCoderInfo* coder, UInt64 inSize, ILookInStream* inStream,
Byte* outBuffer, SizeT outSize, ISzAlloc* allocMain)
{
CLzmaDec state;
SRes res = SZ_OK;
LzmaDec_Construct(&state);
RINOK(LzmaDec_AllocateProbs(&state, coder->Props.data, (unsigned)coder->Props.size, allocMain));
state.dic = outBuffer;
state.dicBufSize = outSize;
LzmaDec_Init(&state);
for (;;) {
Byte* inBuf = NULL;
size_t lookahead = (1 << 18);
if (lookahead > inSize)
lookahead = (size_t)inSize;
res = inStream->Look((void*)inStream, (const void**)&inBuf, &lookahead);
if (res != SZ_OK)
break;
{
SizeT inProcessed = (SizeT)lookahead, dicPos = state.dicPos;
ELzmaStatus status;
res = LzmaDec_DecodeToDic(&state, outSize, inBuf, &inProcessed, LZMA_FINISH_END, &status);
lookahead -= inProcessed;
inSize -= inProcessed;
if (res != SZ_OK)
break;
if (state.dicPos == state.dicBufSize || (inProcessed == 0 && dicPos == state.dicPos)) {
if (state.dicBufSize != outSize || lookahead != 0 || (status != LZMA_STATUS_FINISHED_WITH_MARK && status != LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK))
res = SZ_ERROR_DATA;
break;
}
res = inStream->Skip((void*)inStream, inProcessed);
if (res != SZ_OK)
break;
}
}
LzmaDec_FreeProbs(&state, allocMain);
return res;
}
static SRes SzDecodeLzma2(CSzCoderInfo* coder, UInt64 inSize, ILookInStream* inStream,
Byte* outBuffer, SizeT outSize, ISzAlloc* allocMain)
{
CLzma2Dec state;
SRes res = SZ_OK;
Lzma2Dec_Construct(&state);
if (coder->Props.size != 1)
return SZ_ERROR_DATA;
RINOK(Lzma2Dec_AllocateProbs(&state, coder->Props.data[0], allocMain));
state.decoder.dic = outBuffer;
state.decoder.dicBufSize = outSize;
Lzma2Dec_Init(&state);
for (;;) {
Byte* inBuf = NULL;
size_t lookahead = (1 << 18);
if (lookahead > inSize)
lookahead = (size_t)inSize;
res = inStream->Look((void*)inStream, (const void**)&inBuf, &lookahead);
if (res != SZ_OK)
break;
{
SizeT inProcessed = (SizeT)lookahead, dicPos = state.decoder.dicPos;
ELzmaStatus status;
res = Lzma2Dec_DecodeToDic(&state, outSize, inBuf, &inProcessed, LZMA_FINISH_END, &status);
lookahead -= inProcessed;
inSize -= inProcessed;
if (res != SZ_OK)
break;
if (state.decoder.dicPos == state.decoder.dicBufSize || (inProcessed == 0 && dicPos == state.decoder.dicPos)) {
if (state.decoder.dicBufSize != outSize || lookahead != 0 || (status != LZMA_STATUS_FINISHED_WITH_MARK))
res = SZ_ERROR_DATA;
break;
}
res = inStream->Skip((void*)inStream, inProcessed);
if (res != SZ_OK)
break;
}
}
Lzma2Dec_FreeProbs(&state, allocMain);
return res;
}
static SRes SzDecodeCopy(UInt64 inSize, ILookInStream* inStream, Byte* outBuffer)
{
while (inSize > 0) {
void* inBuf;
size_t curSize = (1 << 18);
if (curSize > inSize)
curSize = (size_t)inSize;
RINOK(inStream->Look((void*)inStream, (const void**)&inBuf, &curSize));
if (curSize == 0)
return SZ_ERROR_INPUT_EOF;
memcpy(outBuffer, inBuf, curSize);
outBuffer += curSize;
inSize -= curSize;
RINOK(inStream->Skip((void*)inStream, curSize));
}
return SZ_OK;
}
static Bool IS_MAIN_METHOD(UInt32 m)
{
switch (m) {
case k_Copy:
case k_LZMA:
case k_LZMA2:
#ifdef _7ZIP_PPMD_SUPPPORT
case k_PPMD:
#endif
return True;
}
return False;
}
static Bool IS_SUPPORTED_CODER(const CSzCoderInfo* c)
{
return c->NumInStreams == 1 && c->NumOutStreams == 1 && c->MethodID <= (UInt32)0xFFFFFFFF && IS_MAIN_METHOD((UInt32)c->MethodID);
}
#define IS_BCJ2(c) ((c)->MethodID == k_BCJ2 && (c)->NumInStreams == 4 && (c)->NumOutStreams == 1)
static SRes CheckSupportedFolder(const CSzFolder* f)
{
if (f->NumCoders < 1 || f->NumCoders > 4)
return SZ_ERROR_UNSUPPORTED;
if (!IS_SUPPORTED_CODER(&f->Coders[0]))
return SZ_ERROR_UNSUPPORTED;
if (f->NumCoders == 1) {
if (f->NumPackStreams != 1 || f->PackStreams[0] != 0 || f->NumBindPairs != 0)
return SZ_ERROR_UNSUPPORTED;
return SZ_OK;
}
if (f->NumCoders == 2) {
CSzCoderInfo* c = &f->Coders[1];
if (c->MethodID > (UInt32)0xFFFFFFFF || c->NumInStreams != 1 || c->NumOutStreams != 1 || f->NumPackStreams != 1 || f->PackStreams[0] != 0 || f->NumBindPairs != 1 || f->BindPairs[0].InIndex != 1 || f->BindPairs[0].OutIndex != 0)
return SZ_ERROR_UNSUPPORTED;
switch ((UInt32)c->MethodID) {
case k_BCJ:
case k_ARM:
break;
default:
return SZ_ERROR_UNSUPPORTED;
}
return SZ_OK;
}
if (f->NumCoders == 4) {
if (!IS_SUPPORTED_CODER(&f->Coders[1]) || !IS_SUPPORTED_CODER(&f->Coders[2]) || !IS_BCJ2(&f->Coders[3]))
return SZ_ERROR_UNSUPPORTED;
if (f->NumPackStreams != 4 || f->PackStreams[0] != 2 || f->PackStreams[1] != 6 || f->PackStreams[2] != 1 || f->PackStreams[3] != 0 || f->NumBindPairs != 3 || f->BindPairs[0].InIndex != 5 || f->BindPairs[0].OutIndex != 0 || f->BindPairs[1].InIndex != 4 || f->BindPairs[1].OutIndex != 1 || f->BindPairs[2].InIndex != 3 || f->BindPairs[2].OutIndex != 2)
return SZ_ERROR_UNSUPPORTED;
return SZ_OK;
}
return SZ_ERROR_UNSUPPORTED;
}
static UInt64 GetSum(const UInt64* values, UInt32 index)
{
UInt64 sum = 0;
UInt32 i;
for (i = 0; i < index; i++)
sum += values[i];
return sum;
}
#define CASE_BRA_CONV(isa) \
case k_##isa: \
isa##_Convert(outBuffer, outSize, 0, 0); \
break;
static SRes SzFolder_Decode2(const CSzFolder* folder, const UInt64* packSizes,
ILookInStream* inStream, UInt64 startPos,
Byte* outBuffer, SizeT outSize, ISzAlloc* allocMain,
Byte* tempBuf[])
{
UInt32 ci;
SizeT tempSizes[3] = { 0, 0, 0 };
SizeT tempSize3 = 0;
Byte* tempBuf3 = 0;
RINOK(CheckSupportedFolder(folder));
for (ci = 0; ci < folder->NumCoders; ci++) {
CSzCoderInfo* coder = &folder->Coders[ci];
if (IS_MAIN_METHOD((UInt32)coder->MethodID)) {
UInt32 si = 0;
UInt64 offset;
UInt64 inSize;
Byte* outBufCur = outBuffer;
SizeT outSizeCur = outSize;
if (folder->NumCoders == 4) {
UInt32 indices[] = { 3, 2, 0 };
UInt64 unpackSize = folder->UnpackSizes[ci];
si = indices[ci];
if (ci < 2) {
Byte* temp;
outSizeCur = (SizeT)unpackSize;
if (outSizeCur != unpackSize)
return SZ_ERROR_MEM;
temp = (Byte*)IAlloc_Alloc(allocMain, outSizeCur);
if (temp == 0 && outSizeCur != 0)
return SZ_ERROR_MEM;
outBufCur = tempBuf[1 - ci] = temp;
tempSizes[1 - ci] = outSizeCur;
} else if (ci == 2) {
if (unpackSize > outSize) /* check it */
return SZ_ERROR_PARAM;
tempBuf3 = outBufCur = outBuffer + (outSize - (size_t)unpackSize);
tempSize3 = outSizeCur = (SizeT)unpackSize;
} else
return SZ_ERROR_UNSUPPORTED;
}
offset = GetSum(packSizes, si);
inSize = packSizes[si];
RINOK(LookInStream_SeekTo(inStream, startPos + offset));
if (coder->MethodID == k_Copy) {
if (inSize != outSizeCur) /* check it */
return SZ_ERROR_DATA;
RINOK(SzDecodeCopy(inSize, inStream, outBufCur));
} else if (coder->MethodID == k_LZMA) {
RINOK(SzDecodeLzma(coder, inSize, inStream, outBufCur, outSizeCur, allocMain));
} else if (coder->MethodID == k_LZMA2) {
RINOK(SzDecodeLzma2(coder, inSize, inStream, outBufCur, outSizeCur, allocMain));
} else {
#ifdef _7ZIP_PPMD_SUPPPORT
RINOK(SzDecodePpmd(coder, inSize, inStream, outBufCur, outSizeCur, allocMain));
#else
return SZ_ERROR_UNSUPPORTED;
#endif
}
} else if (coder->MethodID == k_BCJ2) {
UInt64 offset = GetSum(packSizes, 1);
UInt64 s3Size = packSizes[1];
SRes res;
if (ci != 3)
return SZ_ERROR_UNSUPPORTED;
RINOK(LookInStream_SeekTo(inStream, startPos + offset));
tempSizes[2] = (SizeT)s3Size;
if (tempSizes[2] != s3Size)
return SZ_ERROR_MEM;
tempBuf[2] = (Byte*)IAlloc_Alloc(allocMain, tempSizes[2]);
if (tempBuf[2] == 0 && tempSizes[2] != 0)
return SZ_ERROR_MEM;
res = SzDecodeCopy(s3Size, inStream, tempBuf[2]);
RINOK(res)
res = Bcj2_Decode(
tempBuf3, tempSize3,
tempBuf[0], tempSizes[0],
tempBuf[1], tempSizes[1],
tempBuf[2], tempSizes[2],
outBuffer, outSize);
RINOK(res)
} else {
if (ci != 1)
return SZ_ERROR_UNSUPPORTED;
switch (coder->MethodID) {
case k_BCJ: {
UInt32 state;
x86_Convert_Init(state);
x86_Convert(outBuffer, outSize, 0, &state, 0);
break;
}
CASE_BRA_CONV(ARM)
default:
return SZ_ERROR_UNSUPPORTED;
}
}
}
return SZ_OK;
}
SRes SzFolder_Decode(const CSzFolder* folder, const UInt64* packSizes,
ILookInStream* inStream, UInt64 startPos,
Byte* outBuffer, size_t outSize, ISzAlloc* allocMain)
{
Byte* tempBuf[3] = { 0, 0, 0 };
int i;
SRes res = SzFolder_Decode2(folder, packSizes, inStream, startPos,
outBuffer, (SizeT)outSize, allocMain, tempBuf);
for (i = 0; i < 3; i++)
IAlloc_Free(allocMain, tempBuf[i]);
return res;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,163 +0,0 @@
/* 7zStream.c -- 7z Stream functions
2010-03-11 : Igor Pavlov : Public domain */
#include <string.h>
#include "Types.h"
SRes SeqInStream_Read2(ISeqInStream* stream, void* buf, size_t size, SRes errorType)
{
while (size != 0) {
size_t processed = size;
RINOK(stream->Read(stream, buf, &processed));
if (processed == 0)
return errorType;
buf = (void*)((Byte*)buf + processed);
size -= processed;
}
return SZ_OK;
}
SRes SeqInStream_Read(ISeqInStream* stream, void* buf, size_t size)
{
return SeqInStream_Read2(stream, buf, size, SZ_ERROR_INPUT_EOF);
}
SRes SeqInStream_ReadByte(ISeqInStream* stream, Byte* buf)
{
size_t processed = 1;
RINOK(stream->Read(stream, buf, &processed));
return (processed == 1) ? SZ_OK : SZ_ERROR_INPUT_EOF;
}
SRes LookInStream_SeekTo(ILookInStream* stream, UInt64 offset)
{
Int64 t = offset;
return stream->Seek(stream, &t, SZ_SEEK_SET);
}
SRes LookInStream_LookRead(ILookInStream* stream, void* buf, size_t* size)
{
const void* lookBuf;
if (*size == 0)
return SZ_OK;
RINOK(stream->Look(stream, &lookBuf, size));
memcpy(buf, lookBuf, *size);
return stream->Skip(stream, *size);
}
SRes LookInStream_Read2(ILookInStream* stream, void* buf, size_t size, SRes errorType)
{
while (size != 0) {
size_t processed = size;
RINOK(stream->Read(stream, buf, &processed));
if (processed == 0)
return errorType;
buf = (void*)((Byte*)buf + processed);
size -= processed;
}
return SZ_OK;
}
SRes LookInStream_Read(ILookInStream* stream, void* buf, size_t size)
{
return LookInStream_Read2(stream, buf, size, SZ_ERROR_INPUT_EOF);
}
static SRes LookToRead_Look_Lookahead(void* pp, const void** buf, size_t* size)
{
SRes res = SZ_OK;
CLookToRead* p = (CLookToRead*)pp;
size_t size2 = p->size - p->pos;
if (size2 == 0 && *size > 0) {
p->pos = 0;
size2 = LookToRead_BUF_SIZE;
res = p->realStream->Read(p->realStream, p->buf, &size2);
p->size = size2;
}
if (size2 < *size)
*size = size2;
*buf = p->buf + p->pos;
return res;
}
static SRes LookToRead_Look_Exact(void* pp, const void** buf, size_t* size)
{
SRes res = SZ_OK;
CLookToRead* p = (CLookToRead*)pp;
size_t size2 = p->size - p->pos;
if (size2 == 0 && *size > 0) {
p->pos = 0;
if (*size > LookToRead_BUF_SIZE)
*size = LookToRead_BUF_SIZE;
res = p->realStream->Read(p->realStream, p->buf, size);
size2 = p->size = *size;
}
if (size2 < *size)
*size = size2;
*buf = p->buf + p->pos;
return res;
}
static SRes LookToRead_Skip(void* pp, size_t offset)
{
CLookToRead* p = (CLookToRead*)pp;
p->pos += offset;
return SZ_OK;
}
static SRes LookToRead_Read(void* pp, void* buf, size_t* size)
{
CLookToRead* p = (CLookToRead*)pp;
size_t rem = p->size - p->pos;
if (rem == 0)
return p->realStream->Read(p->realStream, buf, size);
if (rem > *size)
rem = *size;
memcpy(buf, p->buf + p->pos, rem);
p->pos += rem;
*size = rem;
return SZ_OK;
}
static SRes LookToRead_Seek(void* pp, Int64* pos, ESzSeek origin)
{
CLookToRead* p = (CLookToRead*)pp;
p->pos = p->size = 0;
return p->realStream->Seek(p->realStream, pos, origin);
}
void LookToRead_CreateVTable(CLookToRead* p, int lookahead)
{
p->s.Look = lookahead ? LookToRead_Look_Lookahead : LookToRead_Look_Exact;
p->s.Skip = LookToRead_Skip;
p->s.Read = LookToRead_Read;
p->s.Seek = LookToRead_Seek;
}
void LookToRead_Init(CLookToRead* p)
{
p->pos = p->size = 0;
}
static SRes SecToLook_Read(void* pp, void* buf, size_t* size)
{
CSecToLook* p = (CSecToLook*)pp;
return LookInStream_LookRead(p->realStream, buf, size);
}
void SecToLook_CreateVTable(CSecToLook* p)
{
p->s.Read = SecToLook_Read;
}
static SRes SecToRead_Read(void* pp, void* buf, size_t* size)
{
CSecToRead* p = (CSecToRead*)pp;
return p->realStream->Read(p->realStream, buf, size);
}
void SecToRead_CreateVTable(CSecToRead* p)
{
p->s.Read = SecToRead_Read;
}

View File

@@ -1,153 +0,0 @@
/* Bcj2.c -- Converter for x86 code (BCJ2)
2008-10-04 : Igor Pavlov : Public domain */
#include "Bcj2.h"
#ifdef _LZMA_PROB32
#define CProb UInt32
#else
#define CProb UInt16
#endif
#define IsJcc(b0, b1) ((b0) == 0x0F && ((b1)&0xF0) == 0x80)
#define IsJ(b0, b1) ((b1 & 0xFE) == 0xE8 || IsJcc(b0, b1))
#define kNumTopBits 24
#define kTopValue ((UInt32)1 << kNumTopBits)
#define kNumBitModelTotalBits 11
#define kBitModelTotal (1 << kNumBitModelTotalBits)
#define kNumMoveBits 5
#define RC_READ_BYTE (*buffer++)
#define RC_TEST \
{ \
if (buffer == bufferLim) \
return SZ_ERROR_DATA; \
}
#define RC_INIT2 \
code = 0; \
range = 0xFFFFFFFF; \
{ \
int i; \
for (i = 0; i < 5; i++) { \
RC_TEST; \
code = (code << 8) | RC_READ_BYTE; \
} \
}
#define NORMALIZE \
if (range < kTopValue) { \
RC_TEST; \
range <<= 8; \
code = (code << 8) | RC_READ_BYTE; \
}
#define IF_BIT_0(p) \
ttt = *(p); \
bound = (range >> kNumBitModelTotalBits) * ttt; \
if (code < bound)
#define UPDATE_0(p) \
range = bound; \
*(p) = (CProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); \
NORMALIZE;
#define UPDATE_1(p) \
range -= bound; \
code -= bound; \
*(p) = (CProb)(ttt - (ttt >> kNumMoveBits)); \
NORMALIZE;
int Bcj2_Decode(
const Byte* buf0, SizeT size0,
const Byte* buf1, SizeT size1,
const Byte* buf2, SizeT size2,
const Byte* buf3, SizeT size3,
Byte* outBuf, SizeT outSize)
{
CProb p[256 + 2];
SizeT inPos = 0, outPos = 0;
const Byte *buffer, *bufferLim;
UInt32 range, code;
Byte prevByte = 0;
unsigned int i;
for (i = 0; i < sizeof(p) / sizeof(p[0]); i++)
p[i] = kBitModelTotal >> 1;
buffer = buf3;
bufferLim = buffer + size3;
RC_INIT2
if (outSize == 0)
return SZ_OK;
for (;;) {
Byte b;
CProb* prob;
UInt32 bound;
UInt32 ttt;
SizeT limit = size0 - inPos;
if (outSize - outPos < limit)
limit = outSize - outPos;
while (limit != 0) {
Byte b = buf0[inPos];
outBuf[outPos++] = b;
if (IsJ(prevByte, b))
break;
inPos++;
prevByte = b;
limit--;
}
if (limit == 0 || outPos == outSize)
break;
b = buf0[inPos++];
if (b == 0xE8)
prob = p + prevByte;
else if (b == 0xE9)
prob = p + 256;
else
prob = p + 257;
IF_BIT_0(prob)
{
UPDATE_0(prob)
prevByte = b;
}
else
{
UInt32 dest;
const Byte* v;
UPDATE_1(prob)
if (b == 0xE8) {
v = buf1;
if (size1 < 4)
return SZ_ERROR_DATA;
buf1 += 4;
size1 -= 4;
} else {
v = buf2;
if (size2 < 4)
return SZ_ERROR_DATA;
buf2 += 4;
size2 -= 4;
}
dest = (((UInt32)v[0] << 24) | ((UInt32)v[1] << 16) | ((UInt32)v[2] << 8) | ((UInt32)v[3])) - ((UInt32)outPos + 4);
outBuf[outPos++] = (Byte)dest;
if (outPos == outSize)
break;
outBuf[outPos++] = (Byte)(dest >> 8);
if (outPos == outSize)
break;
outBuf[outPos++] = (Byte)(dest >> 16);
if (outPos == outSize)
break;
outBuf[outPos++] = prevByte = (Byte)(dest >> 24);
}
}
return (outPos == outSize) ? SZ_OK : SZ_ERROR_DATA;
}

View File

@@ -1,38 +0,0 @@
/* Bcj2.h -- Converter for x86 code (BCJ2)
2009-02-07 : Igor Pavlov : Public domain */
#ifndef __BCJ2_H
#define __BCJ2_H
#include "Types.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
Conditions:
outSize <= FullOutputSize,
where FullOutputSize is full size of output stream of x86_2 filter.
If buf0 overlaps outBuf, there are two required conditions:
1) (buf0 >= outBuf)
2) (buf0 + size0 >= outBuf + FullOutputSize).
Returns:
SZ_OK
SZ_ERROR_DATA - Data error
*/
int Bcj2_Decode(
const Byte* buf0, SizeT size0,
const Byte* buf1, SizeT size1,
const Byte* buf2, SizeT size2,
const Byte* buf3, SizeT size3,
Byte* outBuf, SizeT outSize);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -1,112 +0,0 @@
/* Bra.c -- Converters for RISC code
2010-04-16 : Igor Pavlov : Public domain */
#include "Bra.h"
SizeT ARM_Convert(Byte* data, SizeT size, UInt32 ip, int encoding)
{
SizeT i;
if (size < 4)
return 0;
size -= 4;
ip += 8;
for (i = 0; i <= size; i += 4) {
if (data[i + 3] == 0xEB) {
UInt32 dest;
UInt32 src = ((UInt32)data[i + 2] << 16) | ((UInt32)data[i + 1] << 8) | (data[i + 0]);
src <<= 2;
if (encoding)
dest = ip + (UInt32)i + src;
else
dest = src - (ip + (UInt32)i);
dest >>= 2;
data[i + 2] = (Byte)(dest >> 16);
data[i + 1] = (Byte)(dest >> 8);
data[i + 0] = (Byte)dest;
}
}
return i;
}
SizeT ARMT_Convert(Byte* data, SizeT size, UInt32 ip, int encoding)
{
SizeT i;
if (size < 4)
return 0;
size -= 4;
ip += 4;
for (i = 0; i <= size; i += 2) {
if ((data[i + 1] & 0xF8) == 0xF0 && (data[i + 3] & 0xF8) == 0xF8) {
UInt32 dest;
UInt32 src = (((UInt32)data[i + 1] & 0x7) << 19) | ((UInt32)data[i + 0] << 11) | (((UInt32)data[i + 3] & 0x7) << 8) | (data[i + 2]);
src <<= 1;
if (encoding)
dest = ip + (UInt32)i + src;
else
dest = src - (ip + (UInt32)i);
dest >>= 1;
data[i + 1] = (Byte)(0xF0 | ((dest >> 19) & 0x7));
data[i + 0] = (Byte)(dest >> 11);
data[i + 3] = (Byte)(0xF8 | ((dest >> 8) & 0x7));
data[i + 2] = (Byte)dest;
i += 2;
}
}
return i;
}
SizeT PPC_Convert(Byte* data, SizeT size, UInt32 ip, int encoding)
{
SizeT i;
if (size < 4)
return 0;
size -= 4;
for (i = 0; i <= size; i += 4) {
if ((data[i] >> 2) == 0x12 && (data[i + 3] & 3) == 1) {
UInt32 src = ((UInt32)(data[i + 0] & 3) << 24) | ((UInt32)data[i + 1] << 16) | ((UInt32)data[i + 2] << 8) | ((UInt32)data[i + 3] & (~3));
UInt32 dest;
if (encoding)
dest = ip + (UInt32)i + src;
else
dest = src - (ip + (UInt32)i);
data[i + 0] = (Byte)(0x48 | ((dest >> 24) & 0x3));
data[i + 1] = (Byte)(dest >> 16);
data[i + 2] = (Byte)(dest >> 8);
data[i + 3] &= 0x3;
data[i + 3] |= dest;
}
}
return i;
}
SizeT SPARC_Convert(Byte* data, SizeT size, UInt32 ip, int encoding)
{
UInt32 i;
if (size < 4)
return 0;
size -= 4;
for (i = 0; i <= size; i += 4) {
if ((data[i] == 0x40 && (data[i + 1] & 0xC0) == 0x00) || (data[i] == 0x7F && (data[i + 1] & 0xC0) == 0xC0)) {
UInt32 src = ((UInt32)data[i + 0] << 24) | ((UInt32)data[i + 1] << 16) | ((UInt32)data[i + 2] << 8) | ((UInt32)data[i + 3]);
UInt32 dest;
src <<= 2;
if (encoding)
dest = ip + i + src;
else
dest = src - (ip + i);
dest >>= 2;
dest = (((0 - ((dest >> 22) & 1)) << 22) & 0x3FFFFFFF) | (dest & 0x3FFFFF) | 0x40000000;
data[i + 0] = (Byte)(dest >> 24);
data[i + 1] = (Byte)(dest >> 16);
data[i + 2] = (Byte)(dest >> 8);
data[i + 3] = (Byte)dest;
}
}
return i;
}

View File

@@ -1,71 +0,0 @@
/* Bra.h -- Branch converters for executables
2009-02-07 : Igor Pavlov : Public domain */
#ifndef __BRA_H
#define __BRA_H
#include "Types.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
These functions convert relative addresses to absolute addresses
in CALL instructions to increase the compression ratio.
In:
data - data buffer
size - size of data
ip - current virtual Instruction Pinter (IP) value
state - state variable for x86 converter
encoding - 0 (for decoding), 1 (for encoding)
Out:
state - state variable for x86 converter
Returns:
The number of processed bytes. If you call these functions with multiple calls,
you must start next call with first byte after block of processed bytes.
Type Endian Alignment LookAhead
x86 little 1 4
ARMT little 2 2
ARM little 4 0
PPC big 4 0
SPARC big 4 0
IA64 little 16 0
size must be >= Alignment + LookAhead, if it's not last block.
If (size < Alignment + LookAhead), converter returns 0.
Example:
UInt32 ip = 0;
for ()
{
; size must be >= Alignment + LookAhead, if it's not last block
SizeT processed = Convert(data, size, ip, 1);
data += processed;
size -= processed;
ip += processed;
}
*/
#define x86_Convert_Init(state) \
{ \
state = 0; \
}
SizeT x86_Convert(Byte* data, SizeT size, UInt32 ip, UInt32* state, int encoding);
SizeT ARM_Convert(Byte* data, SizeT size, UInt32 ip, int encoding);
SizeT ARMT_Convert(Byte* data, SizeT size, UInt32 ip, int encoding);
SizeT PPC_Convert(Byte* data, SizeT size, UInt32 ip, int encoding);
SizeT SPARC_Convert(Byte* data, SizeT size, UInt32 ip, int encoding);
SizeT IA64_Convert(Byte* data, SizeT size, UInt32 ip, int encoding);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -1,77 +0,0 @@
/* Bra86.c -- Converter for x86 code (BCJ)
2008-10-04 : Igor Pavlov : Public domain */
#include "Bra.h"
#define Test86MSByte(b) ((b) == 0 || (b) == 0xFF)
const Byte kMaskToAllowedStatus[8] = { 1, 1, 1, 0, 1, 0, 0, 0 };
const Byte kMaskToBitNumber[8] = { 0, 1, 2, 2, 3, 3, 3, 3 };
SizeT x86_Convert(Byte* data, SizeT size, UInt32 ip, UInt32* state, int encoding)
{
SizeT bufferPos = 0, prevPosT;
UInt32 prevMask = *state & 0x7;
if (size < 5)
return 0;
ip += 5;
prevPosT = (SizeT)0 - 1;
for (;;) {
Byte* p = data + bufferPos;
Byte* limit = data + size - 4;
for (; p < limit; p++)
if ((*p & 0xFE) == 0xE8)
break;
bufferPos = (SizeT)(p - data);
if (p >= limit)
break;
prevPosT = bufferPos - prevPosT;
if (prevPosT > 3)
prevMask = 0;
else {
prevMask = (prevMask << ((int)prevPosT - 1)) & 0x7;
if (prevMask != 0) {
Byte b = p[4 - kMaskToBitNumber[prevMask]];
if (!kMaskToAllowedStatus[prevMask] || Test86MSByte(b)) {
prevPosT = bufferPos;
prevMask = ((prevMask << 1) & 0x7) | 1;
bufferPos++;
continue;
}
}
}
prevPosT = bufferPos;
if (Test86MSByte(p[4])) {
UInt32 src = ((UInt32)p[4] << 24) | ((UInt32)p[3] << 16) | ((UInt32)p[2] << 8) | ((UInt32)p[1]);
UInt32 dest;
for (;;) {
Byte b;
int index;
if (encoding)
dest = (ip + (UInt32)bufferPos) + src;
else
dest = src - (ip + (UInt32)bufferPos);
if (prevMask == 0)
break;
index = kMaskToBitNumber[prevMask] * 8;
b = (Byte)(dest >> (24 - index));
if (!Test86MSByte(b))
break;
src = dest ^ ((1 << (32 - index)) - 1);
}
p[4] = (Byte)(~(((dest >> 24) & 1) - 1));
p[3] = (Byte)(dest >> 16);
p[2] = (Byte)(dest >> 8);
p[1] = (Byte)dest;
bufferPos += 5;
} else {
prevMask = ((prevMask << 1) & 0x7) | 1;
bufferPos++;
}
}
prevPosT = bufferPos - prevPosT;
*state = ((prevPosT > 3) ? 0 : ((prevMask << ((int)prevPosT - 1)) & 0x7));
return bufferPos;
}

View File

@@ -1,171 +0,0 @@
/* CpuArch.c -- CPU specific code
2010-10-26: Igor Pavlov : Public domain */
#include "CpuArch.h"
#ifdef MY_CPU_X86_OR_AMD64
#if (defined(_MSC_VER) && !defined(MY_CPU_AMD64)) || defined(__GNUC__)
#define USE_ASM
#endif
#if defined(USE_ASM) && !defined(MY_CPU_AMD64)
static UInt32 CheckFlag(UInt32 flag)
{
#ifdef _MSC_VER
__asm pushfd;
__asm pop EAX;
__asm mov EDX, EAX;
__asm xor EAX, flag;
__asm push EAX;
__asm popfd;
__asm pushfd;
__asm pop EAX;
__asm xor EAX, EDX;
__asm push EDX;
__asm popfd;
__asm and flag, EAX;
#else
__asm__ __volatile__(
"pushf\n\t"
"pop %%EAX\n\t"
"movl %%EAX,%%EDX\n\t"
"xorl %0,%%EAX\n\t"
"push %%EAX\n\t"
"popf\n\t"
"pushf\n\t"
"pop %%EAX\n\t"
"xorl %%EDX,%%EAX\n\t"
"push %%EDX\n\t"
"popf\n\t"
"andl %%EAX, %0\n\t"
: "=c"(flag)
: "c"(flag));
#endif
return flag;
}
#define CHECK_CPUID_IS_SUPPORTED \
if (CheckFlag(1 << 18) == 0 || CheckFlag(1 << 21) == 0) \
return False;
#else
#define CHECK_CPUID_IS_SUPPORTED
#endif
static void MyCPUID(UInt32 function, UInt32* a, UInt32* b, UInt32* c, UInt32* d)
{
#ifdef USE_ASM
#ifdef _MSC_VER
UInt32 a2, b2, c2, d2;
__asm xor EBX, EBX;
__asm xor ECX, ECX;
__asm xor EDX, EDX;
__asm mov EAX, function;
__asm cpuid;
__asm mov a2, EAX;
__asm mov b2, EBX;
__asm mov c2, ECX;
__asm mov d2, EDX;
*a = a2;
*b = b2;
*c = c2;
*d = d2;
#else
__asm__ __volatile__(
"cpuid"
: "=a"(*a),
"=b"(*b),
"=c"(*c),
"=d"(*d)
: "0"(function));
#endif
#else
int CPUInfo[4];
__cpuid(CPUInfo, function);
*a = CPUInfo[0];
*b = CPUInfo[1];
*c = CPUInfo[2];
*d = CPUInfo[3];
#endif
}
Bool x86cpuid_CheckAndRead(Cx86cpuid* p)
{
CHECK_CPUID_IS_SUPPORTED
MyCPUID(0, &p->maxFunc, &p->vendor[0], &p->vendor[2], &p->vendor[1]);
MyCPUID(1, &p->ver, &p->b, &p->c, &p->d);
return True;
}
static UInt32 kVendors[][3] = {
{ 0x756E6547, 0x49656E69, 0x6C65746E },
{ 0x68747541, 0x69746E65, 0x444D4163 },
{ 0x746E6543, 0x48727561, 0x736C7561 }
};
int x86cpuid_GetFirm(const Cx86cpuid* p)
{
unsigned i;
for (i = 0; i < sizeof(kVendors) / sizeof(kVendors[i]); i++) {
const UInt32* v = kVendors[i];
if (v[0] == p->vendor[0] && v[1] == p->vendor[1] && v[2] == p->vendor[2])
return (int)i;
}
return -1;
}
Bool CPU_Is_InOrder()
{
Cx86cpuid p;
int firm;
UInt32 family, model;
if (!x86cpuid_CheckAndRead(&p))
return True;
family = x86cpuid_GetFamily(&p);
model = x86cpuid_GetModel(&p);
firm = x86cpuid_GetFirm(&p);
switch (firm) {
case CPU_FIRM_INTEL:
return (family < 6 || (family == 6 && model == 0x100C));
case CPU_FIRM_AMD:
return (family < 5 || (family == 5 && (model < 6 || model == 0xA)));
case CPU_FIRM_VIA:
return (family < 6 || (family == 6 && model < 0xF));
}
return True;
}
#if !defined(MY_CPU_AMD64) && defined(_WIN32)
static Bool CPU_Sys_Is_SSE_Supported()
{
OSVERSIONINFO vi;
vi.dwOSVersionInfoSize = sizeof(vi);
if (!GetVersionEx(&vi))
return False;
return (vi.dwMajorVersion >= 5);
}
#define CHECK_SYS_SSE_SUPPORT \
if (!CPU_Sys_Is_SSE_Supported()) \
return False;
#else
#define CHECK_SYS_SSE_SUPPORT
#endif
Bool CPU_Is_Aes_Supported()
{
Cx86cpuid p;
CHECK_SYS_SSE_SUPPORT
if (!x86cpuid_CheckAndRead(&p))
return False;
return (p.c >> 25) & 1;
}
#endif

View File

@@ -1,156 +0,0 @@
/* CpuArch.h -- CPU specific code
2010-12-01: Igor Pavlov : Public domain */
#ifndef __CPU_ARCH_H
#define __CPU_ARCH_H
#include "Types.h"
EXTERN_C_BEGIN
/*
MY_CPU_LE means that CPU is LITTLE ENDIAN.
If MY_CPU_LE is not defined, we don't know about that property of platform (it can be LITTLE ENDIAN).
MY_CPU_LE_UNALIGN means that CPU is LITTLE ENDIAN and CPU supports unaligned memory accesses.
If MY_CPU_LE_UNALIGN is not defined, we don't know about these properties of platform.
*/
#if defined(_M_X64) || defined(_M_AMD64) || defined(__x86_64__)
#define MY_CPU_AMD64
#endif
#if defined(MY_CPU_AMD64) || defined(_M_IA64)
#define MY_CPU_64BIT
#endif
#if defined(_M_IX86) || defined(__i386__)
#define MY_CPU_X86
#endif
#if defined(MY_CPU_X86) || defined(MY_CPU_AMD64)
#define MY_CPU_X86_OR_AMD64
#endif
#if defined(MY_CPU_X86) || defined(_M_ARM)
#define MY_CPU_32BIT
#endif
#if defined(_WIN32) && defined(_M_ARM)
#define MY_CPU_ARM_LE
#endif
#if defined(_WIN32) && defined(_M_IA64)
#define MY_CPU_IA64_LE
#endif
#if defined(MY_CPU_X86_OR_AMD64)
#define MY_CPU_LE_UNALIGN
#endif
#if defined(MY_CPU_X86_OR_AMD64) || defined(MY_CPU_ARM_LE) || defined(MY_CPU_IA64_LE) || defined(__ARMEL__) || defined(__MIPSEL__) || defined(__LITTLE_ENDIAN__)
#define MY_CPU_LE
#endif
#if defined(__BIG_ENDIAN__) || defined(__m68k__) || defined(__ARMEB__) || defined(__MIPSEB__)
#define MY_CPU_BE
#endif
#if defined(MY_CPU_LE) && defined(MY_CPU_BE)
Stop_Compiling_Bad_Endian
#endif
#ifdef MY_CPU_LE_UNALIGN
#define GetUi16(p) (*(const UInt16*)(p))
#define GetUi32(p) (*(const UInt32*)(p))
#define GetUi64(p) (*(const UInt64*)(p))
#define SetUi16(p, d) *(UInt16*)(p) = (d);
#define SetUi32(p, d) *(UInt32*)(p) = (d);
#define SetUi64(p, d) *(UInt64*)(p) = (d);
#else
#define GetUi16(p) (((const Byte*)(p))[0] | ((UInt16)((const Byte*)(p))[1] << 8))
#define GetUi32(p) ( \
((const Byte*)(p))[0] | ((UInt32)((const Byte*)(p))[1] << 8) | ((UInt32)((const Byte*)(p))[2] << 16) | ((UInt32)((const Byte*)(p))[3] << 24))
#define GetUi64(p) (GetUi32(p) | ((UInt64)GetUi32(((const Byte*)(p)) + 4) << 32))
#define SetUi16(p, d) \
{ \
UInt32 _x_ = (d); \
((Byte*)(p))[0] = (Byte)_x_; \
((Byte*)(p))[1] = (Byte)(_x_ >> 8); \
}
#define SetUi32(p, d) \
{ \
UInt32 _x_ = (d); \
((Byte*)(p))[0] = (Byte)_x_; \
((Byte*)(p))[1] = (Byte)(_x_ >> 8); \
((Byte*)(p))[2] = (Byte)(_x_ >> 16); \
((Byte*)(p))[3] = (Byte)(_x_ >> 24); \
}
#define SetUi64(p, d) \
{ \
UInt64 _x64_ = (d); \
SetUi32(p, (UInt32)_x64_); \
SetUi32(((Byte*)(p)) + 4, (UInt32)(_x64_ >> 32)); \
}
#endif
#if defined(MY_CPU_LE_UNALIGN) && defined(_WIN64) && (_MSC_VER >= 1300)
#pragma intrinsic(_byteswap_ulong)
#pragma intrinsic(_byteswap_uint64)
#define GetBe32(p) _byteswap_ulong(*(const UInt32*)(const Byte*)(p))
#define GetBe64(p) _byteswap_uint64(*(const UInt64*)(const Byte*)(p))
#else
#define GetBe32(p) ( \
((UInt32)((const Byte*)(p))[0] << 24) | ((UInt32)((const Byte*)(p))[1] << 16) | ((UInt32)((const Byte*)(p))[2] << 8) | ((const Byte*)(p))[3])
#define GetBe64(p) (((UInt64)GetBe32(p) << 32) | GetBe32(((const Byte*)(p)) + 4))
#endif
#define GetBe16(p) (((UInt16)((const Byte*)(p))[0] << 8) | ((const Byte*)(p))[1])
#ifdef MY_CPU_X86_OR_AMD64
typedef struct
{
UInt32 maxFunc;
UInt32 vendor[3];
UInt32 ver;
UInt32 b;
UInt32 c;
UInt32 d;
} Cx86cpuid;
enum {
CPU_FIRM_INTEL,
CPU_FIRM_AMD,
CPU_FIRM_VIA
};
Bool x86cpuid_CheckAndRead(Cx86cpuid* p);
int x86cpuid_GetFirm(const Cx86cpuid* p);
#define x86cpuid_GetFamily(p) (((p)->ver >> 8) & 0xFF00F)
#define x86cpuid_GetModel(p) (((p)->ver >> 4) & 0xF00F)
#define x86cpuid_GetStepping(p) ((p)->ver & 0xF)
Bool CPU_Is_InOrder();
Bool CPU_Is_Aes_Supported();
#endif
EXTERN_C_END
#endif

View File

@@ -1,327 +0,0 @@
/* Lzma2Dec.c -- LZMA2 Decoder
2010-12-15 : Igor Pavlov : Public domain */
/* #define SHOW_DEBUG_INFO */
#ifdef SHOW_DEBUG_INFO
#include <stdio.h>
#endif
#include <string.h>
#include "Lzma2Dec.h"
/*
00000000 - EOS
00000001 U U - Uncompressed Reset Dic
00000010 U U - Uncompressed No Reset
100uuuuu U U P P - LZMA no reset
101uuuuu U U P P - LZMA reset state
110uuuuu U U P P S - LZMA reset state + new prop
111uuuuu U U P P S - LZMA reset state + new prop + reset dic
u, U - Unpack Size
P - Pack Size
S - Props
*/
#define LZMA2_CONTROL_LZMA (1 << 7)
#define LZMA2_CONTROL_COPY_NO_RESET 2
#define LZMA2_CONTROL_COPY_RESET_DIC 1
#define LZMA2_CONTROL_EOF 0
#define LZMA2_IS_UNCOMPRESSED_STATE(p) (((p)->control & LZMA2_CONTROL_LZMA) == 0)
#define LZMA2_GET_LZMA_MODE(p) (((p)->control >> 5) & 3)
#define LZMA2_IS_THERE_PROP(mode) ((mode) >= 2)
#define LZMA2_LCLP_MAX 4
#define LZMA2_DIC_SIZE_FROM_PROP(p) (((UInt32)2 | ((p)&1)) << ((p) / 2 + 11))
#ifdef SHOW_DEBUG_INFO
#define PRF(x) x
#else
#define PRF(x)
#endif
typedef enum {
LZMA2_STATE_CONTROL,
LZMA2_STATE_UNPACK0,
LZMA2_STATE_UNPACK1,
LZMA2_STATE_PACK0,
LZMA2_STATE_PACK1,
LZMA2_STATE_PROP,
LZMA2_STATE_DATA,
LZMA2_STATE_DATA_CONT,
LZMA2_STATE_FINISHED,
LZMA2_STATE_ERROR
} ELzma2State;
static SRes Lzma2Dec_GetOldProps(Byte prop, Byte* props)
{
UInt32 dicSize;
if (prop > 40)
return SZ_ERROR_UNSUPPORTED;
dicSize = (prop == 40) ? 0xFFFFFFFF : LZMA2_DIC_SIZE_FROM_PROP(prop);
props[0] = (Byte)LZMA2_LCLP_MAX;
props[1] = (Byte)(dicSize);
props[2] = (Byte)(dicSize >> 8);
props[3] = (Byte)(dicSize >> 16);
props[4] = (Byte)(dicSize >> 24);
return SZ_OK;
}
SRes Lzma2Dec_AllocateProbs(CLzma2Dec* p, Byte prop, ISzAlloc* alloc)
{
Byte props[LZMA_PROPS_SIZE];
RINOK(Lzma2Dec_GetOldProps(prop, props));
return LzmaDec_AllocateProbs(&p->decoder, props, LZMA_PROPS_SIZE, alloc);
}
SRes Lzma2Dec_Allocate(CLzma2Dec* p, Byte prop, ISzAlloc* alloc)
{
Byte props[LZMA_PROPS_SIZE];
RINOK(Lzma2Dec_GetOldProps(prop, props));
return LzmaDec_Allocate(&p->decoder, props, LZMA_PROPS_SIZE, alloc);
}
void Lzma2Dec_Init(CLzma2Dec* p)
{
p->state = LZMA2_STATE_CONTROL;
p->needInitDic = True;
p->needInitState = True;
p->needInitProp = True;
LzmaDec_Init(&p->decoder);
}
static ELzma2State Lzma2Dec_UpdateState(CLzma2Dec* p, Byte b)
{
switch (p->state) {
case LZMA2_STATE_CONTROL:
p->control = b;
PRF(printf("\n %4X ", p->decoder.dicPos));
PRF(printf(" %2X", b));
if (p->control == 0)
return LZMA2_STATE_FINISHED;
if (LZMA2_IS_UNCOMPRESSED_STATE(p)) {
if ((p->control & 0x7F) > 2)
return LZMA2_STATE_ERROR;
p->unpackSize = 0;
} else
p->unpackSize = (UInt32)(p->control & 0x1F) << 16;
return LZMA2_STATE_UNPACK0;
case LZMA2_STATE_UNPACK0:
p->unpackSize |= (UInt32)b << 8;
return LZMA2_STATE_UNPACK1;
case LZMA2_STATE_UNPACK1:
p->unpackSize |= (UInt32)b;
p->unpackSize++;
PRF(printf(" %8d", p->unpackSize));
return (LZMA2_IS_UNCOMPRESSED_STATE(p)) ? LZMA2_STATE_DATA : LZMA2_STATE_PACK0;
case LZMA2_STATE_PACK0:
p->packSize = (UInt32)b << 8;
return LZMA2_STATE_PACK1;
case LZMA2_STATE_PACK1:
p->packSize |= (UInt32)b;
p->packSize++;
PRF(printf(" %8d", p->packSize));
return LZMA2_IS_THERE_PROP(LZMA2_GET_LZMA_MODE(p)) ? LZMA2_STATE_PROP : (p->needInitProp ? LZMA2_STATE_ERROR : LZMA2_STATE_DATA);
case LZMA2_STATE_PROP: {
int lc, lp;
if (b >= (9 * 5 * 5))
return LZMA2_STATE_ERROR;
lc = b % 9;
b /= 9;
p->decoder.prop.pb = b / 5;
lp = b % 5;
if (lc + lp > LZMA2_LCLP_MAX)
return LZMA2_STATE_ERROR;
p->decoder.prop.lc = lc;
p->decoder.prop.lp = lp;
p->needInitProp = False;
return LZMA2_STATE_DATA;
}
}
return LZMA2_STATE_ERROR;
}
static void LzmaDec_UpdateWithUncompressed(CLzmaDec* p, const Byte* src, SizeT size)
{
memcpy(p->dic + p->dicPos, src, size);
p->dicPos += size;
if (p->checkDicSize == 0 && p->prop.dicSize - p->processedPos <= size)
p->checkDicSize = p->prop.dicSize;
p->processedPos += (UInt32)size;
}
void LzmaDec_InitDicAndState(CLzmaDec* p, Bool initDic, Bool initState);
SRes Lzma2Dec_DecodeToDic(CLzma2Dec* p, SizeT dicLimit,
const Byte* src, SizeT* srcLen, ELzmaFinishMode finishMode, ELzmaStatus* status)
{
SizeT inSize = *srcLen;
*srcLen = 0;
*status = LZMA_STATUS_NOT_SPECIFIED;
while (p->state != LZMA2_STATE_FINISHED) {
SizeT dicPos = p->decoder.dicPos;
if (p->state == LZMA2_STATE_ERROR)
return SZ_ERROR_DATA;
if (dicPos == dicLimit && finishMode == LZMA_FINISH_ANY) {
*status = LZMA_STATUS_NOT_FINISHED;
return SZ_OK;
}
if (p->state != LZMA2_STATE_DATA && p->state != LZMA2_STATE_DATA_CONT) {
if (*srcLen == inSize) {
*status = LZMA_STATUS_NEEDS_MORE_INPUT;
return SZ_OK;
}
(*srcLen)++;
p->state = Lzma2Dec_UpdateState(p, *src++);
continue;
}
{
SizeT destSizeCur = dicLimit - dicPos;
SizeT srcSizeCur = inSize - *srcLen;
ELzmaFinishMode curFinishMode = LZMA_FINISH_ANY;
if (p->unpackSize <= destSizeCur) {
destSizeCur = (SizeT)p->unpackSize;
curFinishMode = LZMA_FINISH_END;
}
if (LZMA2_IS_UNCOMPRESSED_STATE(p)) {
if (*srcLen == inSize) {
*status = LZMA_STATUS_NEEDS_MORE_INPUT;
return SZ_OK;
}
if (p->state == LZMA2_STATE_DATA) {
Bool initDic = (p->control == LZMA2_CONTROL_COPY_RESET_DIC);
if (initDic)
p->needInitProp = p->needInitState = True;
else if (p->needInitDic)
return SZ_ERROR_DATA;
p->needInitDic = False;
LzmaDec_InitDicAndState(&p->decoder, initDic, False);
}
if (srcSizeCur > destSizeCur)
srcSizeCur = destSizeCur;
if (srcSizeCur == 0)
return SZ_ERROR_DATA;
LzmaDec_UpdateWithUncompressed(&p->decoder, src, srcSizeCur);
src += srcSizeCur;
*srcLen += srcSizeCur;
p->unpackSize -= (UInt32)srcSizeCur;
p->state = (p->unpackSize == 0) ? LZMA2_STATE_CONTROL : LZMA2_STATE_DATA_CONT;
} else {
SizeT outSizeProcessed;
SRes res;
if (p->state == LZMA2_STATE_DATA) {
int mode = LZMA2_GET_LZMA_MODE(p);
Bool initDic = (mode == 3);
Bool initState = (mode > 0);
if ((!initDic && p->needInitDic) || (!initState && p->needInitState))
return SZ_ERROR_DATA;
LzmaDec_InitDicAndState(&p->decoder, initDic, initState);
p->needInitDic = False;
p->needInitState = False;
p->state = LZMA2_STATE_DATA_CONT;
}
if (srcSizeCur > p->packSize)
srcSizeCur = (SizeT)p->packSize;
res = LzmaDec_DecodeToDic(&p->decoder, dicPos + destSizeCur, src, &srcSizeCur, curFinishMode, status);
src += srcSizeCur;
*srcLen += srcSizeCur;
p->packSize -= (UInt32)srcSizeCur;
outSizeProcessed = p->decoder.dicPos - dicPos;
p->unpackSize -= (UInt32)outSizeProcessed;
RINOK(res);
if (*status == LZMA_STATUS_NEEDS_MORE_INPUT)
return res;
if (srcSizeCur == 0 && outSizeProcessed == 0) {
if (*status != LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK || p->unpackSize != 0 || p->packSize != 0)
return SZ_ERROR_DATA;
p->state = LZMA2_STATE_CONTROL;
}
if (*status == LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK)
*status = LZMA_STATUS_NOT_FINISHED;
}
}
}
*status = LZMA_STATUS_FINISHED_WITH_MARK;
return SZ_OK;
}
SRes Lzma2Dec_DecodeToBuf(CLzma2Dec* p, Byte* dest, SizeT* destLen, const Byte* src, SizeT* srcLen, ELzmaFinishMode finishMode, ELzmaStatus* status)
{
SizeT outSize = *destLen, inSize = *srcLen;
*srcLen = *destLen = 0;
for (;;) {
SizeT srcSizeCur = inSize, outSizeCur, dicPos;
ELzmaFinishMode curFinishMode;
SRes res;
if (p->decoder.dicPos == p->decoder.dicBufSize)
p->decoder.dicPos = 0;
dicPos = p->decoder.dicPos;
if (outSize > p->decoder.dicBufSize - dicPos) {
outSizeCur = p->decoder.dicBufSize;
curFinishMode = LZMA_FINISH_ANY;
} else {
outSizeCur = dicPos + outSize;
curFinishMode = finishMode;
}
res = Lzma2Dec_DecodeToDic(p, outSizeCur, src, &srcSizeCur, curFinishMode, status);
src += srcSizeCur;
inSize -= srcSizeCur;
*srcLen += srcSizeCur;
outSizeCur = p->decoder.dicPos - dicPos;
memcpy(dest, p->decoder.dic + dicPos, outSizeCur);
dest += outSizeCur;
outSize -= outSizeCur;
*destLen += outSizeCur;
if (res != 0)
return res;
if (outSizeCur == 0 || outSize == 0)
return SZ_OK;
}
}
SRes Lzma2Decode(Byte* dest, SizeT* destLen, const Byte* src, SizeT* srcLen,
Byte prop, ELzmaFinishMode finishMode, ELzmaStatus* status, ISzAlloc* alloc)
{
CLzma2Dec p;
SRes res;
SizeT outSize = *destLen, inSize = *srcLen;
*destLen = *srcLen = 0;
*status = LZMA_STATUS_NOT_SPECIFIED;
Lzma2Dec_Construct(&p);
RINOK(Lzma2Dec_AllocateProbs(&p, prop, alloc));
p.decoder.dic = dest;
p.decoder.dicBufSize = outSize;
Lzma2Dec_Init(&p);
*srcLen = inSize;
res = Lzma2Dec_DecodeToDic(&p, outSize, src, srcLen, finishMode, status);
*destLen = p.decoder.dicPos;
if (res == SZ_OK && *status == LZMA_STATUS_NEEDS_MORE_INPUT)
res = SZ_ERROR_INPUT_EOF;
Lzma2Dec_FreeProbs(&p, alloc);
return res;
}

View File

@@ -1,82 +0,0 @@
/* Lzma2Dec.h -- LZMA2 Decoder
2009-05-03 : Igor Pavlov : Public domain */
#ifndef __LZMA2_DEC_H
#define __LZMA2_DEC_H
#include "LzmaDec.h"
#ifdef __cplusplus
extern "C" {
#endif
/* ---------- State Interface ---------- */
typedef struct
{
CLzmaDec decoder;
UInt32 packSize;
UInt32 unpackSize;
int state;
Byte control;
Bool needInitDic;
Bool needInitState;
Bool needInitProp;
} CLzma2Dec;
#define Lzma2Dec_Construct(p) LzmaDec_Construct(&(p)->decoder)
#define Lzma2Dec_FreeProbs(p, alloc) LzmaDec_FreeProbs(&(p)->decoder, alloc);
#define Lzma2Dec_Free(p, alloc) LzmaDec_Free(&(p)->decoder, alloc);
SRes Lzma2Dec_AllocateProbs(CLzma2Dec* p, Byte prop, ISzAlloc* alloc);
SRes Lzma2Dec_Allocate(CLzma2Dec* p, Byte prop, ISzAlloc* alloc);
void Lzma2Dec_Init(CLzma2Dec* p);
/*
finishMode:
It has meaning only if the decoding reaches output limit (*destLen or dicLimit).
LZMA_FINISH_ANY - use smallest number of input bytes
LZMA_FINISH_END - read EndOfStream marker after decoding
Returns:
SZ_OK
status:
LZMA_STATUS_FINISHED_WITH_MARK
LZMA_STATUS_NOT_FINISHED
LZMA_STATUS_NEEDS_MORE_INPUT
SZ_ERROR_DATA - Data error
*/
SRes Lzma2Dec_DecodeToDic(CLzma2Dec* p, SizeT dicLimit,
const Byte* src, SizeT* srcLen, ELzmaFinishMode finishMode, ELzmaStatus* status);
SRes Lzma2Dec_DecodeToBuf(CLzma2Dec* p, Byte* dest, SizeT* destLen,
const Byte* src, SizeT* srcLen, ELzmaFinishMode finishMode, ELzmaStatus* status);
/* ---------- One Call Interface ---------- */
/*
finishMode:
It has meaning only if the decoding reaches output limit (*destLen).
LZMA_FINISH_ANY - use smallest number of input bytes
LZMA_FINISH_END - read EndOfStream marker after decoding
Returns:
SZ_OK
status:
LZMA_STATUS_FINISHED_WITH_MARK
LZMA_STATUS_NOT_FINISHED
SZ_ERROR_DATA - Data error
SZ_ERROR_MEM - Memory allocation error
SZ_ERROR_UNSUPPORTED - Unsupported properties
SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src).
*/
SRes Lzma2Decode(Byte* dest, SizeT* destLen, const Byte* src, SizeT* srcLen,
Byte prop, ELzmaFinishMode finishMode, ELzmaStatus* status, ISzAlloc* alloc);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -1,980 +0,0 @@
/* LzmaDec.c -- LZMA Decoder
2010-12-15 : Igor Pavlov : Public domain */
#include "LzmaDec.h"
#include <string.h>
#define kNumTopBits 24
#define kTopValue ((UInt32)1 << kNumTopBits)
#define kNumBitModelTotalBits 11
#define kBitModelTotal (1 << kNumBitModelTotalBits)
#define kNumMoveBits 5
#define RC_INIT_SIZE 5
#define NORMALIZE \
if (range < kTopValue) { \
range <<= 8; \
code = (code << 8) | (*buf++); \
}
#define IF_BIT_0(p) \
ttt = *(p); \
NORMALIZE; \
bound = (range >> kNumBitModelTotalBits) * ttt; \
if (code < bound)
#define UPDATE_0(p) \
range = bound; \
*(p) = (CLzmaProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits));
#define UPDATE_1(p) \
range -= bound; \
code -= bound; \
*(p) = (CLzmaProb)(ttt - (ttt >> kNumMoveBits));
#define GET_BIT2(p, i, A0, A1) \
IF_BIT_0(p) \
{ \
UPDATE_0(p); \
i = (i + i); \
A0; \
} \
else \
{ \
UPDATE_1(p); \
i = (i + i) + 1; \
A1; \
}
#define GET_BIT(p, i) GET_BIT2(p, i, ;, ;)
#define TREE_GET_BIT(probs, i) \
{ \
GET_BIT((probs + i), i); \
}
#define TREE_DECODE(probs, limit, i) \
{ \
i = 1; \
do { \
TREE_GET_BIT(probs, i); \
} while (i < limit); \
i -= limit; \
}
/* #define _LZMA_SIZE_OPT */
#ifdef _LZMA_SIZE_OPT
#define TREE_6_DECODE(probs, i) TREE_DECODE(probs, (1 << 6), i)
#else
#define TREE_6_DECODE(probs, i) \
{ \
i = 1; \
TREE_GET_BIT(probs, i); \
TREE_GET_BIT(probs, i); \
TREE_GET_BIT(probs, i); \
TREE_GET_BIT(probs, i); \
TREE_GET_BIT(probs, i); \
TREE_GET_BIT(probs, i); \
i -= 0x40; \
}
#endif
#define NORMALIZE_CHECK \
if (range < kTopValue) { \
if (buf >= bufLimit) \
return DUMMY_ERROR; \
range <<= 8; \
code = (code << 8) | (*buf++); \
}
#define IF_BIT_0_CHECK(p) \
ttt = *(p); \
NORMALIZE_CHECK; \
bound = (range >> kNumBitModelTotalBits) * ttt; \
if (code < bound)
#define UPDATE_0_CHECK range = bound;
#define UPDATE_1_CHECK \
range -= bound; \
code -= bound;
#define GET_BIT2_CHECK(p, i, A0, A1) \
IF_BIT_0_CHECK(p) \
{ \
UPDATE_0_CHECK; \
i = (i + i); \
A0; \
} \
else \
{ \
UPDATE_1_CHECK; \
i = (i + i) + 1; \
A1; \
}
#define GET_BIT_CHECK(p, i) GET_BIT2_CHECK(p, i, ;, ;)
#define TREE_DECODE_CHECK(probs, limit, i) \
{ \
i = 1; \
do { \
GET_BIT_CHECK(probs + i, i) \
} while (i < limit); \
i -= limit; \
}
#define kNumPosBitsMax 4
#define kNumPosStatesMax (1 << kNumPosBitsMax)
#define kLenNumLowBits 3
#define kLenNumLowSymbols (1 << kLenNumLowBits)
#define kLenNumMidBits 3
#define kLenNumMidSymbols (1 << kLenNumMidBits)
#define kLenNumHighBits 8
#define kLenNumHighSymbols (1 << kLenNumHighBits)
#define LenChoice 0
#define LenChoice2 (LenChoice + 1)
#define LenLow (LenChoice2 + 1)
#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits))
#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits))
#define kNumLenProbs (LenHigh + kLenNumHighSymbols)
#define kNumStates 12
#define kNumLitStates 7
#define kStartPosModelIndex 4
#define kEndPosModelIndex 14
#define kNumFullDistances (1 << (kEndPosModelIndex >> 1))
#define kNumPosSlotBits 6
#define kNumLenToPosStates 4
#define kNumAlignBits 4
#define kAlignTableSize (1 << kNumAlignBits)
#define kMatchMinLen 2
#define kMatchSpecLenStart (kMatchMinLen + kLenNumLowSymbols + kLenNumMidSymbols + kLenNumHighSymbols)
#define IsMatch 0
#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax))
#define IsRepG0 (IsRep + kNumStates)
#define IsRepG1 (IsRepG0 + kNumStates)
#define IsRepG2 (IsRepG1 + kNumStates)
#define IsRep0Long (IsRepG2 + kNumStates)
#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax))
#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits))
#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex)
#define LenCoder (Align + kAlignTableSize)
#define RepLenCoder (LenCoder + kNumLenProbs)
#define Literal (RepLenCoder + kNumLenProbs)
#define LZMA_BASE_SIZE 1846
#define LZMA_LIT_SIZE 768
#define LzmaProps_GetNumProbs(p) ((UInt32)LZMA_BASE_SIZE + (LZMA_LIT_SIZE << ((p)->lc + (p)->lp)))
#if Literal != LZMA_BASE_SIZE
StopCompilingDueBUG
#endif
#define LZMA_DIC_MIN (1 << 12)
/* First LZMA-symbol is always decoded.
And it decodes new LZMA-symbols while (buf < bufLimit), but "buf" is without last normalization
Out:
Result:
SZ_OK - OK
SZ_ERROR_DATA - Error
p->remainLen:
< kMatchSpecLenStart : normal remain
= kMatchSpecLenStart : finished
= kMatchSpecLenStart + 1 : Flush marker
= kMatchSpecLenStart + 2 : State Init Marker
*/
static int MY_FAST_CALL
LzmaDec_DecodeReal(CLzmaDec* p, SizeT limit, const Byte* bufLimit)
{
CLzmaProb* probs = p->probs;
unsigned state = p->state;
UInt32 rep0 = p->reps[0], rep1 = p->reps[1], rep2 = p->reps[2], rep3 = p->reps[3];
unsigned pbMask = ((unsigned)1 << (p->prop.pb)) - 1;
unsigned lpMask = ((unsigned)1 << (p->prop.lp)) - 1;
unsigned lc = p->prop.lc;
Byte* dic = p->dic;
SizeT dicBufSize = p->dicBufSize;
SizeT dicPos = p->dicPos;
UInt32 processedPos = p->processedPos;
UInt32 checkDicSize = p->checkDicSize;
unsigned len = 0;
const Byte* buf = p->buf;
UInt32 range = p->range;
UInt32 code = p->code;
do {
CLzmaProb* prob;
UInt32 bound;
unsigned ttt;
unsigned posState = processedPos & pbMask;
prob = probs + IsMatch + (state << kNumPosBitsMax) + posState;
IF_BIT_0(prob)
{
unsigned symbol;
UPDATE_0(prob);
prob = probs + Literal;
if (checkDicSize != 0 || processedPos != 0)
prob += (LZMA_LIT_SIZE * (((processedPos & lpMask) << lc) + (dic[(dicPos == 0 ? dicBufSize : dicPos) - 1] >> (8 - lc))));
if (state < kNumLitStates) {
state -= (state < 4) ? state : 3;
symbol = 1;
do {
GET_BIT(prob + symbol, symbol)
} while (symbol < 0x100);
} else {
unsigned matchByte = p->dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)];
unsigned offs = 0x100;
state -= (state < 10) ? 3 : 6;
symbol = 1;
do {
unsigned bit;
CLzmaProb* probLit;
matchByte <<= 1;
bit = (matchByte & offs);
probLit = prob + offs + bit + symbol;
GET_BIT2(probLit, symbol, offs &= ~bit, offs &= bit)
} while (symbol < 0x100);
}
dic[dicPos++] = (Byte)symbol;
processedPos++;
continue;
}
else
{
UPDATE_1(prob);
prob = probs + IsRep + state;
IF_BIT_0(prob)
{
UPDATE_0(prob);
state += kNumStates;
prob = probs + LenCoder;
}
else
{
UPDATE_1(prob);
if (checkDicSize == 0 && processedPos == 0)
return SZ_ERROR_DATA;
prob = probs + IsRepG0 + state;
IF_BIT_0(prob)
{
UPDATE_0(prob);
prob = probs + IsRep0Long + (state << kNumPosBitsMax) + posState;
IF_BIT_0(prob)
{
UPDATE_0(prob);
dic[dicPos] = dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)];
dicPos++;
processedPos++;
state = state < kNumLitStates ? 9 : 11;
continue;
}
UPDATE_1(prob);
}
else
{
UInt32 distance;
UPDATE_1(prob);
prob = probs + IsRepG1 + state;
IF_BIT_0(prob)
{
UPDATE_0(prob);
distance = rep1;
}
else
{
UPDATE_1(prob);
prob = probs + IsRepG2 + state;
IF_BIT_0(prob)
{
UPDATE_0(prob);
distance = rep2;
}
else
{
UPDATE_1(prob);
distance = rep3;
rep3 = rep2;
}
rep2 = rep1;
}
rep1 = rep0;
rep0 = distance;
}
state = state < kNumLitStates ? 8 : 11;
prob = probs + RepLenCoder;
}
{
unsigned limit, offset;
CLzmaProb* probLen = prob + LenChoice;
IF_BIT_0(probLen)
{
UPDATE_0(probLen);
probLen = prob + LenLow + (posState << kLenNumLowBits);
offset = 0;
limit = (1 << kLenNumLowBits);
}
else
{
UPDATE_1(probLen);
probLen = prob + LenChoice2;
IF_BIT_0(probLen)
{
UPDATE_0(probLen);
probLen = prob + LenMid + (posState << kLenNumMidBits);
offset = kLenNumLowSymbols;
limit = (1 << kLenNumMidBits);
}
else
{
UPDATE_1(probLen);
probLen = prob + LenHigh;
offset = kLenNumLowSymbols + kLenNumMidSymbols;
limit = (1 << kLenNumHighBits);
}
}
TREE_DECODE(probLen, limit, len);
len += offset;
}
if (state >= kNumStates) {
UInt32 distance;
prob = probs + PosSlot + ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << kNumPosSlotBits);
TREE_6_DECODE(prob, distance);
if (distance >= kStartPosModelIndex) {
unsigned posSlot = (unsigned)distance;
int numDirectBits = (int)(((distance >> 1) - 1));
distance = (2 | (distance & 1));
if (posSlot < kEndPosModelIndex) {
distance <<= numDirectBits;
prob = probs + SpecPos + distance - posSlot - 1;
{
UInt32 mask = 1;
unsigned i = 1;
do {
GET_BIT2(prob + i, i, ;, distance |= mask);
mask <<= 1;
} while (--numDirectBits != 0);
}
} else {
numDirectBits -= kNumAlignBits;
do {
NORMALIZE
range >>= 1;
{
UInt32 t;
code -= range;
t = (0 - ((UInt32)code >> 31)); /* (UInt32)((Int32)code >> 31) */
distance = (distance << 1) + (t + 1);
code += range & t;
}
/*
distance <<= 1;
if (code >= range)
{
code -= range;
distance |= 1;
}
*/
} while (--numDirectBits != 0);
prob = probs + Align;
distance <<= kNumAlignBits;
{
unsigned i = 1;
GET_BIT2(prob + i, i, ;, distance |= 1);
GET_BIT2(prob + i, i, ;, distance |= 2);
GET_BIT2(prob + i, i, ;, distance |= 4);
GET_BIT2(prob + i, i, ;, distance |= 8);
}
if (distance == (UInt32)0xFFFFFFFF) {
len += kMatchSpecLenStart;
state -= kNumStates;
break;
}
}
}
rep3 = rep2;
rep2 = rep1;
rep1 = rep0;
rep0 = distance + 1;
if (checkDicSize == 0) {
if (distance >= processedPos)
return SZ_ERROR_DATA;
} else if (distance >= checkDicSize)
return SZ_ERROR_DATA;
state = (state < kNumStates + kNumLitStates) ? kNumLitStates : kNumLitStates + 3;
}
len += kMatchMinLen;
if (limit == dicPos)
return SZ_ERROR_DATA;
{
SizeT rem = limit - dicPos;
unsigned curLen = ((rem < len) ? (unsigned)rem : len);
SizeT pos = (dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0);
processedPos += curLen;
len -= curLen;
if (pos + curLen <= dicBufSize) {
Byte* dest = dic + dicPos;
ptrdiff_t src = (ptrdiff_t)pos - (ptrdiff_t)dicPos;
const Byte* lim = dest + curLen;
dicPos += curLen;
do
*(dest) = (Byte) * (dest + src);
while (++dest != lim);
} else {
do {
dic[dicPos++] = dic[pos];
if (++pos == dicBufSize)
pos = 0;
} while (--curLen != 0);
}
}
}
} while (dicPos < limit && buf < bufLimit);
NORMALIZE;
p->buf = buf;
p->range = range;
p->code = code;
p->remainLen = len;
p->dicPos = dicPos;
p->processedPos = processedPos;
p->reps[0] = rep0;
p->reps[1] = rep1;
p->reps[2] = rep2;
p->reps[3] = rep3;
p->state = state;
return SZ_OK;
}
static void MY_FAST_CALL LzmaDec_WriteRem(CLzmaDec* p, SizeT limit)
{
if (p->remainLen != 0 && p->remainLen < kMatchSpecLenStart) {
Byte* dic = p->dic;
SizeT dicPos = p->dicPos;
SizeT dicBufSize = p->dicBufSize;
unsigned len = p->remainLen;
UInt32 rep0 = p->reps[0];
if (limit - dicPos < len)
len = (unsigned)(limit - dicPos);
if (p->checkDicSize == 0 && p->prop.dicSize - p->processedPos <= len)
p->checkDicSize = p->prop.dicSize;
p->processedPos += len;
p->remainLen -= len;
while (len != 0) {
len--;
dic[dicPos] = dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)];
dicPos++;
}
p->dicPos = dicPos;
}
}
static int MY_FAST_CALL LzmaDec_DecodeReal2(CLzmaDec* p, SizeT limit, const Byte* bufLimit)
{
do {
SizeT limit2 = limit;
if (p->checkDicSize == 0) {
UInt32 rem = p->prop.dicSize - p->processedPos;
if (limit - p->dicPos > rem)
limit2 = p->dicPos + rem;
}
RINOK(LzmaDec_DecodeReal(p, limit2, bufLimit));
if (p->processedPos >= p->prop.dicSize)
p->checkDicSize = p->prop.dicSize;
LzmaDec_WriteRem(p, limit);
} while (p->dicPos < limit && p->buf < bufLimit && p->remainLen < kMatchSpecLenStart);
if (p->remainLen > kMatchSpecLenStart) {
p->remainLen = kMatchSpecLenStart;
}
return 0;
}
typedef enum {
DUMMY_ERROR, /* unexpected end of input stream */
DUMMY_LIT,
DUMMY_MATCH,
DUMMY_REP
} ELzmaDummy;
static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec* p, const Byte* buf, SizeT inSize)
{
UInt32 range = p->range;
UInt32 code = p->code;
const Byte* bufLimit = buf + inSize;
CLzmaProb* probs = p->probs;
unsigned state = p->state;
ELzmaDummy res;
{
CLzmaProb* prob;
UInt32 bound;
unsigned ttt;
unsigned posState = (p->processedPos) & ((1 << p->prop.pb) - 1);
prob = probs + IsMatch + (state << kNumPosBitsMax) + posState;
IF_BIT_0_CHECK(prob)
{
UPDATE_0_CHECK
/* if (bufLimit - buf >= 7) return DUMMY_LIT; */
prob = probs + Literal;
if (p->checkDicSize != 0 || p->processedPos != 0)
prob += (LZMA_LIT_SIZE * ((((p->processedPos) & ((1 << (p->prop.lp)) - 1)) << p->prop.lc) + (p->dic[(p->dicPos == 0 ? p->dicBufSize : p->dicPos) - 1] >> (8 - p->prop.lc))));
if (state < kNumLitStates) {
unsigned symbol = 1;
do {
GET_BIT_CHECK(prob + symbol, symbol)
} while (symbol < 0x100);
} else {
unsigned matchByte = p->dic[p->dicPos - p->reps[0] + ((p->dicPos < p->reps[0]) ? p->dicBufSize : 0)];
unsigned offs = 0x100;
unsigned symbol = 1;
do {
unsigned bit;
CLzmaProb* probLit;
matchByte <<= 1;
bit = (matchByte & offs);
probLit = prob + offs + bit + symbol;
GET_BIT2_CHECK(probLit, symbol, offs &= ~bit, offs &= bit)
} while (symbol < 0x100);
}
res = DUMMY_LIT;
}
else
{
unsigned len;
UPDATE_1_CHECK;
prob = probs + IsRep + state;
IF_BIT_0_CHECK(prob)
{
UPDATE_0_CHECK;
state = 0;
prob = probs + LenCoder;
res = DUMMY_MATCH;
}
else
{
UPDATE_1_CHECK;
res = DUMMY_REP;
prob = probs + IsRepG0 + state;
IF_BIT_0_CHECK(prob)
{
UPDATE_0_CHECK;
prob = probs + IsRep0Long + (state << kNumPosBitsMax) + posState;
IF_BIT_0_CHECK(prob)
{
UPDATE_0_CHECK;
NORMALIZE_CHECK;
return DUMMY_REP;
}
else
{
UPDATE_1_CHECK;
}
}
else
{
UPDATE_1_CHECK;
prob = probs + IsRepG1 + state;
IF_BIT_0_CHECK(prob)
{
UPDATE_0_CHECK;
}
else
{
UPDATE_1_CHECK;
prob = probs + IsRepG2 + state;
IF_BIT_0_CHECK(prob)
{
UPDATE_0_CHECK;
}
else
{
UPDATE_1_CHECK;
}
}
}
state = kNumStates;
prob = probs + RepLenCoder;
}
{
unsigned limit, offset;
CLzmaProb* probLen = prob + LenChoice;
IF_BIT_0_CHECK(probLen)
{
UPDATE_0_CHECK;
probLen = prob + LenLow + (posState << kLenNumLowBits);
offset = 0;
limit = 1 << kLenNumLowBits;
}
else
{
UPDATE_1_CHECK;
probLen = prob + LenChoice2;
IF_BIT_0_CHECK(probLen)
{
UPDATE_0_CHECK;
probLen = prob + LenMid + (posState << kLenNumMidBits);
offset = kLenNumLowSymbols;
limit = 1 << kLenNumMidBits;
}
else
{
UPDATE_1_CHECK;
probLen = prob + LenHigh;
offset = kLenNumLowSymbols + kLenNumMidSymbols;
limit = 1 << kLenNumHighBits;
}
}
TREE_DECODE_CHECK(probLen, limit, len);
len += offset;
}
if (state < 4) {
unsigned posSlot;
prob = probs + PosSlot + ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << kNumPosSlotBits);
TREE_DECODE_CHECK(prob, 1 << kNumPosSlotBits, posSlot);
if (posSlot >= kStartPosModelIndex) {
int numDirectBits = ((posSlot >> 1) - 1);
/* if (bufLimit - buf >= 8) return DUMMY_MATCH; */
if (posSlot < kEndPosModelIndex) {
prob = probs + SpecPos + ((2 | (posSlot & 1)) << numDirectBits) - posSlot - 1;
} else {
numDirectBits -= kNumAlignBits;
do {
NORMALIZE_CHECK
range >>= 1;
code -= range & (((code - range) >> 31) - 1);
/* if (code >= range) code -= range; */
} while (--numDirectBits != 0);
prob = probs + Align;
numDirectBits = kNumAlignBits;
}
{
unsigned i = 1;
do {
GET_BIT_CHECK(prob + i, i);
} while (--numDirectBits != 0);
}
}
}
}
}
NORMALIZE_CHECK;
return res;
}
static void LzmaDec_InitRc(CLzmaDec* p, const Byte* data)
{
p->code = ((UInt32)data[1] << 24) | ((UInt32)data[2] << 16) | ((UInt32)data[3] << 8) | ((UInt32)data[4]);
p->range = 0xFFFFFFFF;
p->needFlush = 0;
}
void LzmaDec_InitDicAndState(CLzmaDec* p, Bool initDic, Bool initState)
{
p->needFlush = 1;
p->remainLen = 0;
p->tempBufSize = 0;
if (initDic) {
p->processedPos = 0;
p->checkDicSize = 0;
p->needInitState = 1;
}
if (initState)
p->needInitState = 1;
}
void LzmaDec_Init(CLzmaDec* p)
{
p->dicPos = 0;
LzmaDec_InitDicAndState(p, True, True);
}
static void LzmaDec_InitStateReal(CLzmaDec* p)
{
UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (p->prop.lc + p->prop.lp));
UInt32 i;
CLzmaProb* probs = p->probs;
for (i = 0; i < numProbs; i++)
probs[i] = kBitModelTotal >> 1;
p->reps[0] = p->reps[1] = p->reps[2] = p->reps[3] = 1;
p->state = 0;
p->needInitState = 0;
}
SRes LzmaDec_DecodeToDic(CLzmaDec* p, SizeT dicLimit, const Byte* src, SizeT* srcLen,
ELzmaFinishMode finishMode, ELzmaStatus* status)
{
SizeT inSize = *srcLen;
(*srcLen) = 0;
LzmaDec_WriteRem(p, dicLimit);
*status = LZMA_STATUS_NOT_SPECIFIED;
while (p->remainLen != kMatchSpecLenStart) {
int checkEndMarkNow;
if (p->needFlush != 0) {
for (; inSize > 0 && p->tempBufSize < RC_INIT_SIZE; (*srcLen)++, inSize--)
p->tempBuf[p->tempBufSize++] = *src++;
if (p->tempBufSize < RC_INIT_SIZE) {
*status = LZMA_STATUS_NEEDS_MORE_INPUT;
return SZ_OK;
}
if (p->tempBuf[0] != 0)
return SZ_ERROR_DATA;
LzmaDec_InitRc(p, p->tempBuf);
p->tempBufSize = 0;
}
checkEndMarkNow = 0;
if (p->dicPos >= dicLimit) {
if (p->remainLen == 0 && p->code == 0) {
*status = LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK;
return SZ_OK;
}
if (finishMode == LZMA_FINISH_ANY) {
*status = LZMA_STATUS_NOT_FINISHED;
return SZ_OK;
}
if (p->remainLen != 0) {
*status = LZMA_STATUS_NOT_FINISHED;
return SZ_ERROR_DATA;
}
checkEndMarkNow = 1;
}
if (p->needInitState)
LzmaDec_InitStateReal(p);
if (p->tempBufSize == 0) {
SizeT processed;
const Byte* bufLimit;
if (inSize < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow) {
int dummyRes = LzmaDec_TryDummy(p, src, inSize);
if (dummyRes == DUMMY_ERROR) {
memcpy(p->tempBuf, src, inSize);
p->tempBufSize = (unsigned)inSize;
(*srcLen) += inSize;
*status = LZMA_STATUS_NEEDS_MORE_INPUT;
return SZ_OK;
}
if (checkEndMarkNow && dummyRes != DUMMY_MATCH) {
*status = LZMA_STATUS_NOT_FINISHED;
return SZ_ERROR_DATA;
}
bufLimit = src;
} else
bufLimit = src + inSize - LZMA_REQUIRED_INPUT_MAX;
p->buf = src;
if (LzmaDec_DecodeReal2(p, dicLimit, bufLimit) != 0)
return SZ_ERROR_DATA;
processed = (SizeT)(p->buf - src);
(*srcLen) += processed;
src += processed;
inSize -= processed;
} else {
unsigned rem = p->tempBufSize, lookAhead = 0;
while (rem < LZMA_REQUIRED_INPUT_MAX && lookAhead < inSize)
p->tempBuf[rem++] = src[lookAhead++];
p->tempBufSize = rem;
if (rem < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow) {
int dummyRes = LzmaDec_TryDummy(p, p->tempBuf, rem);
if (dummyRes == DUMMY_ERROR) {
(*srcLen) += lookAhead;
*status = LZMA_STATUS_NEEDS_MORE_INPUT;
return SZ_OK;
}
if (checkEndMarkNow && dummyRes != DUMMY_MATCH) {
*status = LZMA_STATUS_NOT_FINISHED;
return SZ_ERROR_DATA;
}
}
p->buf = p->tempBuf;
if (LzmaDec_DecodeReal2(p, dicLimit, p->buf) != 0)
return SZ_ERROR_DATA;
lookAhead -= (rem - (unsigned)(p->buf - p->tempBuf));
(*srcLen) += lookAhead;
src += lookAhead;
inSize -= lookAhead;
p->tempBufSize = 0;
}
}
if (p->code == 0)
*status = LZMA_STATUS_FINISHED_WITH_MARK;
return (p->code == 0) ? SZ_OK : SZ_ERROR_DATA;
}
SRes LzmaDec_DecodeToBuf(CLzmaDec* p, Byte* dest, SizeT* destLen, const Byte* src, SizeT* srcLen, ELzmaFinishMode finishMode, ELzmaStatus* status)
{
SizeT outSize = *destLen;
SizeT inSize = *srcLen;
*srcLen = *destLen = 0;
for (;;) {
SizeT inSizeCur = inSize, outSizeCur, dicPos;
ELzmaFinishMode curFinishMode;
SRes res;
if (p->dicPos == p->dicBufSize)
p->dicPos = 0;
dicPos = p->dicPos;
if (outSize > p->dicBufSize - dicPos) {
outSizeCur = p->dicBufSize;
curFinishMode = LZMA_FINISH_ANY;
} else {
outSizeCur = dicPos + outSize;
curFinishMode = finishMode;
}
res = LzmaDec_DecodeToDic(p, outSizeCur, src, &inSizeCur, curFinishMode, status);
src += inSizeCur;
inSize -= inSizeCur;
*srcLen += inSizeCur;
outSizeCur = p->dicPos - dicPos;
memcpy(dest, p->dic + dicPos, outSizeCur);
dest += outSizeCur;
outSize -= outSizeCur;
*destLen += outSizeCur;
if (res != 0)
return res;
if (outSizeCur == 0 || outSize == 0)
return SZ_OK;
}
}
void LzmaDec_FreeProbs(CLzmaDec* p, ISzAlloc* alloc)
{
alloc->Free(alloc, p->probs);
p->probs = 0;
}
static void LzmaDec_FreeDict(CLzmaDec* p, ISzAlloc* alloc)
{
alloc->Free(alloc, p->dic);
p->dic = 0;
}
void LzmaDec_Free(CLzmaDec* p, ISzAlloc* alloc)
{
LzmaDec_FreeProbs(p, alloc);
LzmaDec_FreeDict(p, alloc);
}
SRes LzmaProps_Decode(CLzmaProps* p, const Byte* data, unsigned size)
{
UInt32 dicSize;
Byte d;
if (size < LZMA_PROPS_SIZE)
return SZ_ERROR_UNSUPPORTED;
else
dicSize = data[1] | ((UInt32)data[2] << 8) | ((UInt32)data[3] << 16) | ((UInt32)data[4] << 24);
if (dicSize < LZMA_DIC_MIN)
dicSize = LZMA_DIC_MIN;
p->dicSize = dicSize;
d = data[0];
if (d >= (9 * 5 * 5))
return SZ_ERROR_UNSUPPORTED;
p->lc = d % 9;
d /= 9;
p->pb = d / 5;
p->lp = d % 5;
return SZ_OK;
}
static SRes LzmaDec_AllocateProbs2(CLzmaDec* p, const CLzmaProps* propNew, ISzAlloc* alloc)
{
UInt32 numProbs = LzmaProps_GetNumProbs(propNew);
if (p->probs == 0 || numProbs != p->numProbs) {
LzmaDec_FreeProbs(p, alloc);
p->probs = (CLzmaProb*)alloc->Alloc(alloc, numProbs * sizeof(CLzmaProb));
p->numProbs = numProbs;
if (p->probs == 0)
return SZ_ERROR_MEM;
}
return SZ_OK;
}
SRes LzmaDec_AllocateProbs(CLzmaDec* p, const Byte* props, unsigned propsSize, ISzAlloc* alloc)
{
CLzmaProps propNew;
RINOK(LzmaProps_Decode(&propNew, props, propsSize));
RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc));
p->prop = propNew;
return SZ_OK;
}
SRes LzmaDec_Allocate(CLzmaDec* p, const Byte* props, unsigned propsSize, ISzAlloc* alloc)
{
CLzmaProps propNew;
SizeT dicBufSize;
RINOK(LzmaProps_Decode(&propNew, props, propsSize));
RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc));
dicBufSize = propNew.dicSize;
if (p->dic == 0 || dicBufSize != p->dicBufSize) {
LzmaDec_FreeDict(p, alloc);
p->dic = (Byte*)alloc->Alloc(alloc, dicBufSize);
if (p->dic == 0) {
LzmaDec_FreeProbs(p, alloc);
return SZ_ERROR_MEM;
}
}
p->dicBufSize = dicBufSize;
p->prop = propNew;
return SZ_OK;
}
SRes LzmaDecode(Byte* dest, SizeT* destLen, const Byte* src, SizeT* srcLen,
const Byte* propData, unsigned propSize, ELzmaFinishMode finishMode,
ELzmaStatus* status, ISzAlloc* alloc)
{
CLzmaDec p;
SRes res;
SizeT outSize = *destLen, inSize = *srcLen;
*destLen = *srcLen = 0;
*status = LZMA_STATUS_NOT_SPECIFIED;
if (inSize < RC_INIT_SIZE)
return SZ_ERROR_INPUT_EOF;
LzmaDec_Construct(&p);
RINOK(LzmaDec_AllocateProbs(&p, propData, propSize, alloc));
p.dic = dest;
p.dicBufSize = outSize;
LzmaDec_Init(&p);
*srcLen = inSize;
res = LzmaDec_DecodeToDic(&p, outSize, src, srcLen, finishMode, status);
*destLen = p.dicPos;
if (res == SZ_OK && *status == LZMA_STATUS_NEEDS_MORE_INPUT)
res = SZ_ERROR_INPUT_EOF;
LzmaDec_FreeProbs(&p, alloc);
return res;
}

View File

@@ -1,93 +0,0 @@
/* Ppmd.h -- PPMD codec common code
2011-01-27 : Igor Pavlov : Public domain
This code is based on PPMd var.H (2001): Dmitry Shkarin : Public domain */
#ifndef __PPMD_H
#define __PPMD_H
#include "CpuArch.h"
#include "Types.h"
EXTERN_C_BEGIN
#ifdef MY_CPU_32BIT
#define PPMD_32BIT
#endif
#define PPMD_INT_BITS 7
#define PPMD_PERIOD_BITS 7
#define PPMD_BIN_SCALE (1 << (PPMD_INT_BITS + PPMD_PERIOD_BITS))
#define PPMD_GET_MEAN_SPEC(summ, shift, round) (((summ) + (1 << ((shift) - (round)))) >> (shift))
#define PPMD_GET_MEAN(summ) PPMD_GET_MEAN_SPEC((summ), PPMD_PERIOD_BITS, 2)
#define PPMD_UPDATE_PROB_0(prob) ((prob) + (1 << PPMD_INT_BITS) - PPMD_GET_MEAN(prob))
#define PPMD_UPDATE_PROB_1(prob) ((prob)-PPMD_GET_MEAN(prob))
#define PPMD_N1 4
#define PPMD_N2 4
#define PPMD_N3 4
#define PPMD_N4 ((128 + 3 - 1 * PPMD_N1 - 2 * PPMD_N2 - 3 * PPMD_N3) / 4)
#define PPMD_NUM_INDEXES (PPMD_N1 + PPMD_N2 + PPMD_N3 + PPMD_N4)
#pragma pack(push, 1)
/* Most compilers works OK here even without #pragma pack(push, 1), but some GCC compilers need it. */
/* SEE-contexts for PPM-contexts with masked symbols */
typedef struct
{
UInt16 Summ; /* Freq */
Byte Shift; /* Speed of Freq change; low Shift is for fast change */
Byte Count; /* Count to next change of Shift */
} CPpmd_See;
#define Ppmd_See_Update(p) \
if ((p)->Shift < PPMD_PERIOD_BITS && --(p)->Count == 0) { \
(p)->Summ <<= 1; \
(p)->Count = (Byte)(3 << (p)->Shift++); \
}
typedef struct
{
Byte Symbol;
Byte Freq;
UInt16 SuccessorLow;
UInt16 SuccessorHigh;
} CPpmd_State;
#pragma pack(pop)
typedef
#ifdef PPMD_32BIT
CPpmd_State*
#else
UInt32
#endif
CPpmd_State_Ref;
typedef
#ifdef PPMD_32BIT
void*
#else
UInt32
#endif
CPpmd_Void_Ref;
typedef
#ifdef PPMD_32BIT
Byte*
#else
UInt32
#endif
CPpmd_Byte_Ref;
#define PPMD_SetAllBitsIn256Bytes(p) \
{ \
unsigned i; \
for (i = 0; i < 256 / sizeof(p[0]); i += 8) { \
p[i + 7] = p[i + 6] = p[i + 5] = p[i + 4] = p[i + 3] = p[i + 2] = p[i + 1] = p[i + 0] = ~(size_t)0; \
} \
}
EXTERN_C_END
#endif

View File

@@ -1,667 +0,0 @@
/* Ppmd7.c -- PPMdH codec
2010-03-12 : Igor Pavlov : Public domain
This code is based on PPMd var.H (2001): Dmitry Shkarin : Public domain */
#include <memory.h>
#include "Ppmd7.h"
const Byte PPMD7_kExpEscape[16] = { 25, 14, 9, 7, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 2 };
static const UInt16 kInitBinEsc[] = { 0x3CDD, 0x1F3F, 0x59BF, 0x48F3, 0x64A1, 0x5ABC, 0x6632, 0x6051 };
#define MAX_FREQ 124
#define UNIT_SIZE 12
#define U2B(nu) ((UInt32)(nu)*UNIT_SIZE)
#define U2I(nu) (p->Units2Indx[(nu)-1])
#define I2U(indx) (p->Indx2Units[indx])
#ifdef PPMD_32BIT
#define REF(ptr) (ptr)
#else
#define REF(ptr) ((UInt32)((Byte*)(ptr) - (p)->Base))
#endif
#define STATS_REF(ptr) ((CPpmd_State_Ref)REF(ptr))
#define CTX(ref) ((CPpmd7_Context*)Ppmd7_GetContext(p, ref))
#define STATS(ctx) Ppmd7_GetStats(p, ctx)
#define ONE_STATE(ctx) Ppmd7Context_OneState(ctx)
#define SUFFIX(ctx) CTX((ctx)->Suffix)
typedef CPpmd7_Context* CTX_PTR;
struct CPpmd7_Node_;
typedef
#ifdef PPMD_32BIT
struct CPpmd7_Node_*
#else
UInt32
#endif
CPpmd7_Node_Ref;
typedef struct CPpmd7_Node_ {
UInt16 Stamp; /* must be at offset 0 as CPpmd7_Context::NumStats. Stamp=0 means free */
UInt16 NU;
CPpmd7_Node_Ref Next; /* must be at offset >= 4 */
CPpmd7_Node_Ref Prev;
} CPpmd7_Node;
#ifdef PPMD_32BIT
#define NODE(ptr) (ptr)
#else
#define NODE(offs) ((CPpmd7_Node*)(p->Base + (offs)))
#endif
void Ppmd7_Construct(CPpmd7* p)
{
unsigned i, k, m;
p->Base = 0;
for (i = 0, k = 0; i < PPMD_NUM_INDEXES; i++) {
unsigned step = (i >= 12 ? 4 : (i >> 2) + 1);
do {
p->Units2Indx[k++] = (Byte)i;
} while (--step);
p->Indx2Units[i] = (Byte)k;
}
p->NS2BSIndx[0] = (0 << 1);
p->NS2BSIndx[1] = (1 << 1);
memset(p->NS2BSIndx + 2, (2 << 1), 9);
memset(p->NS2BSIndx + 11, (3 << 1), 256 - 11);
for (i = 0; i < 3; i++)
p->NS2Indx[i] = (Byte)i;
for (m = i, k = 1; i < 256; i++) {
p->NS2Indx[i] = (Byte)m;
if (--k == 0)
k = (++m) - 2;
}
memset(p->HB2Flag, 0, 0x40);
memset(p->HB2Flag + 0x40, 8, 0x100 - 0x40);
}
void Ppmd7_Free(CPpmd7* p, ISzAlloc* alloc)
{
alloc->Free(alloc, p->Base);
p->Size = 0;
p->Base = 0;
}
Bool Ppmd7_Alloc(CPpmd7* p, UInt32 size, ISzAlloc* alloc)
{
if (p->Base == 0 || p->Size != size) {
Ppmd7_Free(p, alloc);
p->AlignOffset =
#ifdef PPMD_32BIT
(4 - size) & 3;
#else
4 - (size & 3);
#endif
if ((p->Base = (Byte*)alloc->Alloc(alloc, p->AlignOffset + size
#ifndef PPMD_32BIT
+ UNIT_SIZE
#endif
))
== 0)
return False;
p->Size = size;
}
return True;
}
static void InsertNode(CPpmd7* p, void* node, unsigned indx)
{
*((CPpmd_Void_Ref*)node) = p->FreeList[indx];
p->FreeList[indx] = REF(node);
}
static void* RemoveNode(CPpmd7* p, unsigned indx)
{
CPpmd_Void_Ref* node = (CPpmd_Void_Ref*)Ppmd7_GetPtr(p, p->FreeList[indx]);
p->FreeList[indx] = *node;
return node;
}
static void SplitBlock(CPpmd7* p, void* ptr, unsigned oldIndx, unsigned newIndx)
{
unsigned i, nu = I2U(oldIndx) - I2U(newIndx);
ptr = (Byte*)ptr + U2B(I2U(newIndx));
if (I2U(i = U2I(nu)) != nu) {
unsigned k = I2U(--i);
InsertNode(p, ((Byte*)ptr) + U2B(k), nu - k - 1);
}
InsertNode(p, ptr, i);
}
static void GlueFreeBlocks(CPpmd7* p)
{
#ifdef PPMD_32BIT
CPpmd7_Node headItem;
CPpmd7_Node_Ref head = &headItem;
#else
CPpmd7_Node_Ref head = p->AlignOffset + p->Size;
#endif
CPpmd7_Node_Ref n = head;
unsigned i;
p->GlueCount = 255;
/* create doubly-linked list of free blocks */
for (i = 0; i < PPMD_NUM_INDEXES; i++) {
UInt16 nu = I2U(i);
CPpmd7_Node_Ref next = (CPpmd7_Node_Ref)p->FreeList[i];
p->FreeList[i] = 0;
while (next != 0) {
CPpmd7_Node* node = NODE(next);
node->Next = n;
n = NODE(n)->Prev = next;
next = *(const CPpmd7_Node_Ref*)node;
node->Stamp = 0;
node->NU = (UInt16)nu;
}
}
NODE(head)
->Stamp
= 1;
NODE(head)
->Next
= n;
NODE(n)
->Prev
= head;
if (p->LoUnit != p->HiUnit)
((CPpmd7_Node*)p->LoUnit)->Stamp = 1;
/* Glue free blocks */
while (n != head) {
CPpmd7_Node* node = NODE(n);
UInt32 nu = (UInt32)node->NU;
for (;;) {
CPpmd7_Node* node2 = NODE(n) + nu;
nu += node2->NU;
if (node2->Stamp != 0 || nu >= 0x10000)
break;
NODE(node2->Prev)
->Next
= node2->Next;
NODE(node2->Next)
->Prev
= node2->Prev;
node->NU = (UInt16)nu;
}
n = node->Next;
}
/* Fill lists of free blocks */
for (n = NODE(head)->Next; n != head;) {
CPpmd7_Node* node = NODE(n);
unsigned nu;
CPpmd7_Node_Ref next = node->Next;
for (nu = node->NU; nu > 128; nu -= 128, node += 128)
InsertNode(p, node, PPMD_NUM_INDEXES - 1);
if (I2U(i = U2I(nu)) != nu) {
unsigned k = I2U(--i);
InsertNode(p, node + k, nu - k - 1);
}
InsertNode(p, node, i);
n = next;
}
}
static void* AllocUnitsRare(CPpmd7* p, unsigned indx)
{
unsigned i;
void* retVal;
if (p->GlueCount == 0) {
GlueFreeBlocks(p);
if (p->FreeList[indx] != 0)
return RemoveNode(p, indx);
}
i = indx;
do {
if (++i == PPMD_NUM_INDEXES) {
UInt32 numBytes = U2B(I2U(indx));
p->GlueCount--;
return ((UInt32)(p->UnitsStart - p->Text) > numBytes) ? (p->UnitsStart -= numBytes) : (NULL);
}
} while (p->FreeList[i] == 0);
retVal = RemoveNode(p, i);
SplitBlock(p, retVal, i, indx);
return retVal;
}
static void* AllocUnits(CPpmd7* p, unsigned indx)
{
UInt32 numBytes;
if (p->FreeList[indx] != 0)
return RemoveNode(p, indx);
numBytes = U2B(I2U(indx));
if (numBytes <= (UInt32)(p->HiUnit - p->LoUnit)) {
void* retVal = p->LoUnit;
p->LoUnit += numBytes;
return retVal;
}
return AllocUnitsRare(p, indx);
}
#define MyMem12Cpy(dest, src, num) \
{ \
UInt32* d = (UInt32*)dest; \
const UInt32* s = (const UInt32*)src; \
UInt32 n = num; \
do { \
d[0] = s[0]; \
d[1] = s[1]; \
d[2] = s[2]; \
s += 3; \
d += 3; \
} while (--n); \
}
static void* ShrinkUnits(CPpmd7* p, void* oldPtr, unsigned oldNU, unsigned newNU)
{
unsigned i0 = U2I(oldNU);
unsigned i1 = U2I(newNU);
if (i0 == i1)
return oldPtr;
if (p->FreeList[i1] != 0) {
void* ptr = RemoveNode(p, i1);
MyMem12Cpy(ptr, oldPtr, newNU);
InsertNode(p, oldPtr, i0);
return ptr;
}
SplitBlock(p, oldPtr, i0, i1);
return oldPtr;
}
#define SUCCESSOR(p) ((CPpmd_Void_Ref)((p)->SuccessorLow | ((UInt32)(p)->SuccessorHigh << 16)))
static void SetSuccessor(CPpmd_State* p, CPpmd_Void_Ref v)
{
(p)->SuccessorLow = (UInt16)((UInt32)(v)&0xFFFF);
(p)->SuccessorHigh = (UInt16)(((UInt32)(v) >> 16) & 0xFFFF);
}
static void RestartModel(CPpmd7* p)
{
unsigned i, k, m;
memset(p->FreeList, 0, sizeof(p->FreeList));
p->Text = p->Base + p->AlignOffset;
p->HiUnit = p->Text + p->Size;
p->LoUnit = p->UnitsStart = p->HiUnit - p->Size / 8 / UNIT_SIZE * 7 * UNIT_SIZE;
p->GlueCount = 0;
p->OrderFall = p->MaxOrder;
p->RunLength = p->InitRL = -(Int32)((p->MaxOrder < 12) ? p->MaxOrder : 12) - 1;
p->PrevSuccess = 0;
p->MinContext = p->MaxContext = (CTX_PTR)(p->HiUnit -= UNIT_SIZE); /* AllocContext(p); */
p->MinContext->Suffix = 0;
p->MinContext->NumStats = 256;
p->MinContext->SummFreq = 256 + 1;
p->FoundState = (CPpmd_State*)p->LoUnit; /* AllocUnits(p, PPMD_NUM_INDEXES - 1); */
p->LoUnit += U2B(256 / 2);
p->MinContext->Stats = REF(p->FoundState);
for (i = 0; i < 256; i++) {
CPpmd_State* s = &p->FoundState[i];
s->Symbol = (Byte)i;
s->Freq = 1;
SetSuccessor(s, 0);
}
for (i = 0; i < 128; i++)
for (k = 0; k < 8; k++) {
UInt16* dest = p->BinSumm[i] + k;
UInt16 val = (UInt16)(PPMD_BIN_SCALE - kInitBinEsc[k] / (i + 2));
for (m = 0; m < 64; m += 8)
dest[m] = val;
}
for (i = 0; i < 25; i++)
for (k = 0; k < 16; k++) {
CPpmd_See* s = &p->See[i][k];
s->Summ = (UInt16)((5 * i + 10) << (s->Shift = PPMD_PERIOD_BITS - 4));
s->Count = 4;
}
}
void Ppmd7_Init(CPpmd7* p, unsigned maxOrder)
{
p->MaxOrder = maxOrder;
RestartModel(p);
p->DummySee.Shift = PPMD_PERIOD_BITS;
p->DummySee.Summ = 0; /* unused */
p->DummySee.Count = 64; /* unused */
}
static CTX_PTR CreateSuccessors(CPpmd7* p, Bool skip)
{
CPpmd_State upState;
CTX_PTR c = p->MinContext;
CPpmd_Byte_Ref upBranch = (CPpmd_Byte_Ref)SUCCESSOR(p->FoundState);
CPpmd_State* ps[PPMD7_MAX_ORDER];
unsigned numPs = 0;
if (!skip)
ps[numPs++] = p->FoundState;
while (c->Suffix) {
CPpmd_Void_Ref successor;
CPpmd_State* s;
c = SUFFIX(c);
if (c->NumStats != 1) {
for (s = STATS(c); s->Symbol != p->FoundState->Symbol; s++)
;
} else
s = ONE_STATE(c);
successor = SUCCESSOR(s);
if (successor != upBranch) {
c = CTX(successor);
if (numPs == 0)
return c;
break;
}
ps[numPs++] = s;
}
upState.Symbol = *(const Byte*)Ppmd7_GetPtr(p, upBranch);
SetSuccessor(&upState, upBranch + 1);
if (c->NumStats == 1)
upState.Freq = ONE_STATE(c)->Freq;
else {
UInt32 cf, s0;
CPpmd_State* s;
for (s = STATS(c); s->Symbol != upState.Symbol; s++)
;
cf = s->Freq - 1;
s0 = c->SummFreq - c->NumStats - cf;
upState.Freq = (Byte)(1 + ((2 * cf <= s0) ? (5 * cf > s0) : ((2 * cf + 3 * s0 - 1) / (2 * s0))));
}
do {
/* Create Child */
CTX_PTR c1; /* = AllocContext(p); */
if (p->HiUnit != p->LoUnit)
c1 = (CTX_PTR)(p->HiUnit -= UNIT_SIZE);
else if (p->FreeList[0] != 0)
c1 = (CTX_PTR)RemoveNode(p, 0);
else {
c1 = (CTX_PTR)AllocUnitsRare(p, 0);
if (!c1)
return NULL;
}
c1->NumStats = 1;
*ONE_STATE(c1) = upState;
c1->Suffix = REF(c);
SetSuccessor(ps[--numPs], REF(c1));
c = c1;
} while (numPs != 0);
return c;
}
static void SwapStates(CPpmd_State* t1, CPpmd_State* t2)
{
CPpmd_State tmp = *t1;
*t1 = *t2;
*t2 = tmp;
}
static void UpdateModel(CPpmd7* p)
{
CPpmd_Void_Ref successor, fSuccessor = SUCCESSOR(p->FoundState);
CTX_PTR c;
unsigned s0, ns;
if (p->FoundState->Freq < MAX_FREQ / 4 && p->MinContext->Suffix != 0) {
c = SUFFIX(p->MinContext);
if (c->NumStats == 1) {
CPpmd_State* s = ONE_STATE(c);
if (s->Freq < 32)
s->Freq++;
} else {
CPpmd_State* s = STATS(c);
if (s->Symbol != p->FoundState->Symbol) {
do {
s++;
} while (s->Symbol != p->FoundState->Symbol);
if (s[0].Freq >= s[-1].Freq) {
SwapStates(&s[0], &s[-1]);
s--;
}
}
if (s->Freq < MAX_FREQ - 9) {
s->Freq += 2;
c->SummFreq += 2;
}
}
}
if (p->OrderFall == 0) {
p->MinContext = p->MaxContext = CreateSuccessors(p, True);
if (p->MinContext == 0) {
RestartModel(p);
return;
}
SetSuccessor(p->FoundState, REF(p->MinContext));
return;
}
*p->Text++ = p->FoundState->Symbol;
successor = REF(p->Text);
if (p->Text >= p->UnitsStart) {
RestartModel(p);
return;
}
if (fSuccessor) {
if (fSuccessor <= successor) {
CTX_PTR cs = CreateSuccessors(p, False);
if (cs == NULL) {
RestartModel(p);
return;
}
fSuccessor = REF(cs);
}
if (--p->OrderFall == 0) {
successor = fSuccessor;
p->Text -= (p->MaxContext != p->MinContext);
}
} else {
SetSuccessor(p->FoundState, successor);
fSuccessor = REF(p->MinContext);
}
s0 = p->MinContext->SummFreq - (ns = p->MinContext->NumStats) - (p->FoundState->Freq - 1);
for (c = p->MaxContext; c != p->MinContext; c = SUFFIX(c)) {
unsigned ns1;
UInt32 cf, sf;
if ((ns1 = c->NumStats) != 1) {
if ((ns1 & 1) == 0) {
/* Expand for one UNIT */
unsigned oldNU = ns1 >> 1;
unsigned i = U2I(oldNU);
if (i != U2I(oldNU + 1)) {
void* ptr = AllocUnits(p, i + 1);
void* oldPtr;
if (!ptr) {
RestartModel(p);
return;
}
oldPtr = STATS(c);
MyMem12Cpy(ptr, oldPtr, oldNU);
InsertNode(p, oldPtr, i);
c->Stats = STATS_REF(ptr);
}
}
c->SummFreq = (UInt16)(c->SummFreq + (2 * ns1 < ns) + 2 * ((4 * ns1 <= ns) & (c->SummFreq <= 8 * ns1)));
} else {
CPpmd_State* s = (CPpmd_State*)AllocUnits(p, 0);
if (!s) {
RestartModel(p);
return;
}
*s = *ONE_STATE(c);
c->Stats = REF(s);
if (s->Freq < MAX_FREQ / 4 - 1)
s->Freq <<= 1;
else
s->Freq = MAX_FREQ - 4;
c->SummFreq = (UInt16)(s->Freq + p->InitEsc + (ns > 3));
}
cf = 2 * (UInt32)p->FoundState->Freq * (c->SummFreq + 6);
sf = (UInt32)s0 + c->SummFreq;
if (cf < 6 * sf) {
cf = 1 + (cf > sf) + (cf >= 4 * sf);
c->SummFreq += 3;
} else {
cf = 4 + (cf >= 9 * sf) + (cf >= 12 * sf) + (cf >= 15 * sf);
c->SummFreq = (UInt16)(c->SummFreq + cf);
}
{
CPpmd_State* s = STATS(c) + ns1;
SetSuccessor(s, successor);
s->Symbol = p->FoundState->Symbol;
s->Freq = (Byte)cf;
c->NumStats = (UInt16)(ns1 + 1);
}
}
p->MaxContext = p->MinContext = CTX(fSuccessor);
}
static void Rescale(CPpmd7* p)
{
unsigned i, adder, sumFreq, escFreq;
CPpmd_State* stats = STATS(p->MinContext);
CPpmd_State* s = p->FoundState;
{
CPpmd_State tmp = *s;
for (; s != stats; s--)
s[0] = s[-1];
*s = tmp;
}
escFreq = p->MinContext->SummFreq - s->Freq;
s->Freq += 4;
adder = (p->OrderFall != 0);
s->Freq = (Byte)((s->Freq + adder) >> 1);
sumFreq = s->Freq;
i = p->MinContext->NumStats - 1;
do {
escFreq -= (++s)->Freq;
s->Freq = (Byte)((s->Freq + adder) >> 1);
sumFreq += s->Freq;
if (s[0].Freq > s[-1].Freq) {
CPpmd_State* s1 = s;
CPpmd_State tmp = *s1;
do
s1[0] = s1[-1];
while (--s1 != stats && tmp.Freq > s1[-1].Freq);
*s1 = tmp;
}
} while (--i);
if (s->Freq == 0) {
unsigned numStats = p->MinContext->NumStats;
unsigned n0, n1;
do {
i++;
} while ((--s)->Freq == 0);
escFreq += i;
p->MinContext->NumStats = (UInt16)(p->MinContext->NumStats - i);
if (p->MinContext->NumStats == 1) {
CPpmd_State tmp = *stats;
do {
tmp.Freq = (Byte)(tmp.Freq - (tmp.Freq >> 1));
escFreq >>= 1;
} while (escFreq > 1);
InsertNode(p, stats, U2I(((numStats + 1) >> 1)));
*(p->FoundState = ONE_STATE(p->MinContext)) = tmp;
return;
}
n0 = (numStats + 1) >> 1;
n1 = (p->MinContext->NumStats + 1) >> 1;
if (n0 != n1)
p->MinContext->Stats = STATS_REF(ShrinkUnits(p, stats, n0, n1));
}
p->MinContext->SummFreq = (UInt16)(sumFreq + escFreq - (escFreq >> 1));
p->FoundState = STATS(p->MinContext);
}
CPpmd_See* Ppmd7_MakeEscFreq(CPpmd7* p, unsigned numMasked, UInt32* escFreq)
{
CPpmd_See* see;
unsigned nonMasked = p->MinContext->NumStats - numMasked;
if (p->MinContext->NumStats != 256) {
see = p->See[p->NS2Indx[nonMasked - 1]] + (nonMasked < (unsigned)SUFFIX(p->MinContext)->NumStats - p->MinContext->NumStats) + 2 * (p->MinContext->SummFreq < 11 * p->MinContext->NumStats) + 4 * (numMasked > nonMasked) + p->HiBitsFlag;
{
unsigned r = (see->Summ >> see->Shift);
see->Summ = (UInt16)(see->Summ - r);
*escFreq = r + (r == 0);
}
} else {
see = &p->DummySee;
*escFreq = 1;
}
return see;
}
static void NextContext(CPpmd7* p)
{
CTX_PTR c = CTX(SUCCESSOR(p->FoundState));
if (p->OrderFall == 0 && (Byte*)c > p->Text)
p->MinContext = p->MaxContext = c;
else
UpdateModel(p);
}
void Ppmd7_Update1(CPpmd7* p)
{
CPpmd_State* s = p->FoundState;
s->Freq += 4;
p->MinContext->SummFreq += 4;
if (s[0].Freq > s[-1].Freq) {
SwapStates(&s[0], &s[-1]);
p->FoundState = --s;
if (s->Freq > MAX_FREQ)
Rescale(p);
}
NextContext(p);
}
void Ppmd7_Update1_0(CPpmd7* p)
{
p->PrevSuccess = (2 * p->FoundState->Freq > p->MinContext->SummFreq);
p->RunLength += p->PrevSuccess;
p->MinContext->SummFreq += 4;
if ((p->FoundState->Freq += 4) > MAX_FREQ)
Rescale(p);
NextContext(p);
}
void Ppmd7_UpdateBin(CPpmd7* p)
{
p->FoundState->Freq = (Byte)(p->FoundState->Freq + (p->FoundState->Freq < 128 ? 1 : 0));
p->PrevSuccess = 1;
p->RunLength++;
NextContext(p);
}
void Ppmd7_Update2(CPpmd7* p)
{
p->MinContext->SummFreq += 4;
if ((p->FoundState->Freq += 4) > MAX_FREQ)
Rescale(p);
p->RunLength = p->InitRL;
UpdateModel(p);
}

View File

@@ -1,132 +0,0 @@
/* Ppmd7.h -- PPMdH compression codec
2010-03-12 : Igor Pavlov : Public domain
This code is based on PPMd var.H (2001): Dmitry Shkarin : Public domain */
/* This code supports virtual RangeDecoder and includes the implementation
of RangeCoder from 7z, instead of RangeCoder from original PPMd var.H.
If you need the compatibility with original PPMd var.H, you can use external RangeDecoder */
#ifndef __PPMD7_H
#define __PPMD7_H
#include "Ppmd.h"
EXTERN_C_BEGIN
#define PPMD7_MIN_ORDER 2
#define PPMD7_MAX_ORDER 64
#define PPMD7_MIN_MEM_SIZE (1 << 11)
#define PPMD7_MAX_MEM_SIZE (0xFFFFFFFF - 12 * 3)
struct CPpmd7_Context_;
typedef
#ifdef PPMD_32BIT
struct CPpmd7_Context_*
#else
UInt32
#endif
CPpmd7_Context_Ref;
typedef struct CPpmd7_Context_ {
UInt16 NumStats;
UInt16 SummFreq;
CPpmd_State_Ref Stats;
CPpmd7_Context_Ref Suffix;
} CPpmd7_Context;
#define Ppmd7Context_OneState(p) ((CPpmd_State*)&(p)->SummFreq)
typedef struct
{
CPpmd7_Context *MinContext, *MaxContext;
CPpmd_State* FoundState;
unsigned OrderFall, InitEsc, PrevSuccess, MaxOrder, HiBitsFlag;
Int32 RunLength, InitRL; /* must be 32-bit at least */
UInt32 Size;
UInt32 GlueCount;
Byte *Base, *LoUnit, *HiUnit, *Text, *UnitsStart;
UInt32 AlignOffset;
Byte Indx2Units[PPMD_NUM_INDEXES];
Byte Units2Indx[128];
CPpmd_Void_Ref FreeList[PPMD_NUM_INDEXES];
Byte NS2Indx[256], NS2BSIndx[256], HB2Flag[256];
CPpmd_See DummySee, See[25][16];
UInt16 BinSumm[128][64];
} CPpmd7;
void Ppmd7_Construct(CPpmd7* p);
Bool Ppmd7_Alloc(CPpmd7* p, UInt32 size, ISzAlloc* alloc);
void Ppmd7_Free(CPpmd7* p, ISzAlloc* alloc);
void Ppmd7_Init(CPpmd7* p, unsigned maxOrder);
#define Ppmd7_WasAllocated(p) ((p)->Base != NULL)
/* ---------- Internal Functions ---------- */
extern const Byte PPMD7_kExpEscape[16];
#ifdef PPMD_32BIT
#define Ppmd7_GetPtr(p, ptr) (ptr)
#define Ppmd7_GetContext(p, ptr) (ptr)
#define Ppmd7_GetStats(p, ctx) ((ctx)->Stats)
#else
#define Ppmd7_GetPtr(p, offs) ((void*)((p)->Base + (offs)))
#define Ppmd7_GetContext(p, offs) ((CPpmd7_Context*)Ppmd7_GetPtr((p), (offs)))
#define Ppmd7_GetStats(p, ctx) ((CPpmd_State*)Ppmd7_GetPtr((p), ((ctx)->Stats)))
#endif
void Ppmd7_Update1(CPpmd7* p);
void Ppmd7_Update1_0(CPpmd7* p);
void Ppmd7_Update2(CPpmd7* p);
void Ppmd7_UpdateBin(CPpmd7* p);
#define Ppmd7_GetBinSumm(p) \
&p->BinSumm[Ppmd7Context_OneState(p->MinContext)->Freq - 1][p->PrevSuccess + p->NS2BSIndx[Ppmd7_GetContext(p, p->MinContext->Suffix)->NumStats - 1] + (p->HiBitsFlag = p->HB2Flag[p->FoundState->Symbol]) + 2 * p->HB2Flag[Ppmd7Context_OneState(p->MinContext)->Symbol] + ((p->RunLength >> 26) & 0x20)]
CPpmd_See* Ppmd7_MakeEscFreq(CPpmd7* p, unsigned numMasked, UInt32* scale);
/* ---------- Decode ---------- */
typedef struct
{
UInt32 (*GetThreshold)(void* p, UInt32 total);
void (*Decode)(void* p, UInt32 start, UInt32 size);
UInt32 (*DecodeBit)(void* p, UInt32 size0);
} IPpmd7_RangeDec;
typedef struct
{
IPpmd7_RangeDec p;
UInt32 Range;
UInt32 Code;
IByteIn* Stream;
} CPpmd7z_RangeDec;
void Ppmd7z_RangeDec_CreateVTable(CPpmd7z_RangeDec* p);
Bool Ppmd7z_RangeDec_Init(CPpmd7z_RangeDec* p);
#define Ppmd7z_RangeDec_IsFinishedOK(p) ((p)->Code == 0)
int Ppmd7_DecodeSymbol(CPpmd7* p, IPpmd7_RangeDec* rc);
/* ---------- Encode ---------- */
typedef struct
{
UInt64 Low;
UInt32 Range;
Byte Cache;
UInt64 CacheSize;
IByteOut* Stream;
} CPpmd7z_RangeEnc;
void Ppmd7z_RangeEnc_Init(CPpmd7z_RangeEnc* p);
void Ppmd7z_RangeEnc_FlushData(CPpmd7z_RangeEnc* p);
void Ppmd7_EncodeSymbol(CPpmd7* p, CPpmd7z_RangeEnc* rc, int symbol);
EXTERN_C_END
#endif

View File

@@ -1,172 +0,0 @@
/* Ppmd7Dec.c -- PPMdH Decoder
2010-03-12 : Igor Pavlov : Public domain
This code is based on PPMd var.H (2001): Dmitry Shkarin : Public domain */
#include "Ppmd7.h"
#define kTopValue (1 << 24)
Bool Ppmd7z_RangeDec_Init(CPpmd7z_RangeDec* p)
{
unsigned i;
p->Code = 0;
p->Range = 0xFFFFFFFF;
if (p->Stream->Read((void*)p->Stream) != 0)
return False;
for (i = 0; i < 4; i++)
p->Code = (p->Code << 8) | p->Stream->Read((void*)p->Stream);
return (p->Code < 0xFFFFFFFF);
}
static UInt32 Range_GetThreshold(void* pp, UInt32 total)
{
CPpmd7z_RangeDec* p = (CPpmd7z_RangeDec*)pp;
return (p->Code) / (p->Range /= total);
}
static void Range_Normalize(CPpmd7z_RangeDec* p)
{
if (p->Range < kTopValue) {
p->Code = (p->Code << 8) | p->Stream->Read((void*)p->Stream);
p->Range <<= 8;
if (p->Range < kTopValue) {
p->Code = (p->Code << 8) | p->Stream->Read((void*)p->Stream);
p->Range <<= 8;
}
}
}
static void Range_Decode(void* pp, UInt32 start, UInt32 size)
{
CPpmd7z_RangeDec* p = (CPpmd7z_RangeDec*)pp;
p->Code -= start * p->Range;
p->Range *= size;
Range_Normalize(p);
}
static UInt32 Range_DecodeBit(void* pp, UInt32 size0)
{
CPpmd7z_RangeDec* p = (CPpmd7z_RangeDec*)pp;
UInt32 newBound = (p->Range >> 14) * size0;
UInt32 symbol;
if (p->Code < newBound) {
symbol = 0;
p->Range = newBound;
} else {
symbol = 1;
p->Code -= newBound;
p->Range -= newBound;
}
Range_Normalize(p);
return symbol;
}
void Ppmd7z_RangeDec_CreateVTable(CPpmd7z_RangeDec* p)
{
p->p.GetThreshold = Range_GetThreshold;
p->p.Decode = Range_Decode;
p->p.DecodeBit = Range_DecodeBit;
}
#define MASK(sym) ((signed char*)charMask)[sym]
int Ppmd7_DecodeSymbol(CPpmd7* p, IPpmd7_RangeDec* rc)
{
size_t charMask[256 / sizeof(size_t)];
if (p->MinContext->NumStats != 1) {
CPpmd_State* s = Ppmd7_GetStats(p, p->MinContext);
unsigned i;
UInt32 count, hiCnt;
if ((count = rc->GetThreshold(rc, p->MinContext->SummFreq)) < (hiCnt = s->Freq)) {
Byte symbol;
rc->Decode(rc, 0, s->Freq);
p->FoundState = s;
symbol = s->Symbol;
Ppmd7_Update1_0(p);
return symbol;
}
p->PrevSuccess = 0;
i = p->MinContext->NumStats - 1;
do {
if ((hiCnt += (++s)->Freq) > count) {
Byte symbol;
rc->Decode(rc, hiCnt - s->Freq, s->Freq);
p->FoundState = s;
symbol = s->Symbol;
Ppmd7_Update1(p);
return symbol;
}
} while (--i);
if (count >= p->MinContext->SummFreq)
return -2;
p->HiBitsFlag = p->HB2Flag[p->FoundState->Symbol];
rc->Decode(rc, hiCnt, p->MinContext->SummFreq - hiCnt);
PPMD_SetAllBitsIn256Bytes(charMask);
MASK(s->Symbol) = 0;
i = p->MinContext->NumStats - 1;
do {
MASK((--s)->Symbol) = 0;
} while (--i);
} else {
UInt16* prob = Ppmd7_GetBinSumm(p);
if (rc->DecodeBit(rc, *prob) == 0) {
Byte symbol;
*prob = (UInt16)PPMD_UPDATE_PROB_0(*prob);
symbol = (p->FoundState = Ppmd7Context_OneState(p->MinContext))->Symbol;
Ppmd7_UpdateBin(p);
return symbol;
}
*prob = (UInt16)PPMD_UPDATE_PROB_1(*prob);
p->InitEsc = PPMD7_kExpEscape[*prob >> 10];
PPMD_SetAllBitsIn256Bytes(charMask);
MASK(Ppmd7Context_OneState(p->MinContext)->Symbol) = 0;
p->PrevSuccess = 0;
}
for (;;) {
CPpmd_State *ps[256], *s;
UInt32 freqSum, count, hiCnt;
CPpmd_See* see;
unsigned i, num, numMasked = p->MinContext->NumStats;
do {
p->OrderFall++;
if (!p->MinContext->Suffix)
return -1;
p->MinContext = Ppmd7_GetContext(p, p->MinContext->Suffix);
} while (p->MinContext->NumStats == numMasked);
hiCnt = 0;
s = Ppmd7_GetStats(p, p->MinContext);
i = 0;
num = p->MinContext->NumStats - numMasked;
do {
int k = (int)(MASK(s->Symbol));
hiCnt += (s->Freq & k);
ps[i] = s++;
i -= k;
} while (i != num);
see = Ppmd7_MakeEscFreq(p, numMasked, &freqSum);
freqSum += hiCnt;
count = rc->GetThreshold(rc, freqSum);
if (count < hiCnt) {
Byte symbol;
CPpmd_State** pps = ps;
for (hiCnt = 0; (hiCnt += (*pps)->Freq) <= count; pps++)
;
s = *pps;
rc->Decode(rc, hiCnt - s->Freq, s->Freq);
Ppmd_See_Update(see);
p->FoundState = s;
symbol = s->Symbol;
Ppmd7_Update2(p);
return symbol;
}
if (count >= freqSum)
return -2;
rc->Decode(rc, hiCnt, freqSum - hiCnt);
see->Summ = (UInt16)(see->Summ + freqSum);
do {
MASK(ps[--i]->Symbol) = 0;
} while (i != 0);
}
}

View File

@@ -1,256 +0,0 @@
/* Types.h -- Basic types
2010-10-09 : Igor Pavlov : Public domain */
#ifndef __7Z_TYPES_H
#define __7Z_TYPES_H
#include <stddef.h>
#ifdef _WIN32
#include <windows.h>
#endif
#ifndef EXTERN_C_BEGIN
#ifdef __cplusplus
#define EXTERN_C_BEGIN extern "C" {
#define EXTERN_C_END }
#else
#define EXTERN_C_BEGIN
#define EXTERN_C_END
#endif
#endif
EXTERN_C_BEGIN
#define SZ_OK 0
#define SZ_ERROR_DATA 1
#define SZ_ERROR_MEM 2
#define SZ_ERROR_CRC 3
#define SZ_ERROR_UNSUPPORTED 4
#define SZ_ERROR_PARAM 5
#define SZ_ERROR_INPUT_EOF 6
#define SZ_ERROR_OUTPUT_EOF 7
#define SZ_ERROR_READ 8
#define SZ_ERROR_WRITE 9
#define SZ_ERROR_PROGRESS 10
#define SZ_ERROR_FAIL 11
#define SZ_ERROR_THREAD 12
#define SZ_ERROR_ARCHIVE 16
#define SZ_ERROR_NO_ARCHIVE 17
typedef int SRes;
#ifdef _WIN32
typedef DWORD WRes;
#else
typedef int WRes;
#endif
#ifndef RINOK
#define RINOK(x) \
{ \
int __result__ = (x); \
if (__result__ != 0) \
return __result__; \
}
#endif
typedef unsigned char Byte;
typedef short Int16;
typedef unsigned short UInt16;
#ifdef _LZMA_UINT32_IS_ULONG
typedef long Int32;
typedef unsigned long UInt32;
#else
typedef int Int32;
typedef unsigned int UInt32;
#endif
#ifdef _SZ_NO_INT_64
/* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers.
NOTES: Some code will work incorrectly in that case! */
typedef long Int64;
typedef unsigned long UInt64;
#else
#if defined(_MSC_VER) || defined(__BORLANDC__)
typedef __int64 Int64;
typedef unsigned __int64 UInt64;
#define UINT64_CONST(n) n
#else
typedef long long int Int64;
typedef unsigned long long int UInt64;
#define UINT64_CONST(n) n##ULL
#endif
#endif
#ifdef _LZMA_NO_SYSTEM_SIZE_T
typedef UInt32 SizeT;
#else
typedef size_t SizeT;
#endif
typedef int Bool;
#define True 1
#define False 0
#ifdef _WIN32
#define MY_STD_CALL __stdcall
#else
#define MY_STD_CALL
#endif
#ifdef _MSC_VER
#if _MSC_VER >= 1300
#define MY_NO_INLINE __declspec(noinline)
#else
#define MY_NO_INLINE
#endif
#define MY_CDECL __cdecl
#define MY_FAST_CALL __fastcall
#else
#define MY_CDECL
#define MY_FAST_CALL
#endif
/* The following interfaces use first parameter as pointer to structure */
typedef struct
{
Byte (*Read)(void* p); /* reads one byte, returns 0 in case of EOF or error */
} IByteIn;
typedef struct
{
void (*Write)(void* p, Byte b);
} IByteOut;
typedef struct
{
SRes (*Read)(void* p, void* buf, size_t* size);
/* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
(output(*size) < input(*size)) is allowed */
} ISeqInStream;
/* it can return SZ_ERROR_INPUT_EOF */
SRes SeqInStream_Read(ISeqInStream* stream, void* buf, size_t size);
SRes SeqInStream_Read2(ISeqInStream* stream, void* buf, size_t size, SRes errorType);
SRes SeqInStream_ReadByte(ISeqInStream* stream, Byte* buf);
typedef struct
{
size_t (*Write)(void* p, const void* buf, size_t size);
/* Returns: result - the number of actually written bytes.
(result < size) means error */
} ISeqOutStream;
typedef enum {
SZ_SEEK_SET = 0,
SZ_SEEK_CUR = 1,
SZ_SEEK_END = 2
} ESzSeek;
typedef struct
{
SRes (*Read)(void* p, void* buf, size_t* size); /* same as ISeqInStream::Read */
SRes (*Seek)(void* p, Int64* pos, ESzSeek origin);
} ISeekInStream;
typedef struct
{
SRes (*Look)(void* p, const void** buf, size_t* size);
/* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
(output(*size) > input(*size)) is not allowed
(output(*size) < input(*size)) is allowed */
SRes (*Skip)(void* p, size_t offset);
/* offset must be <= output(*size) of Look */
SRes (*Read)(void* p, void* buf, size_t* size);
/* reads directly (without buffer). It's same as ISeqInStream::Read */
SRes (*Seek)(void* p, Int64* pos, ESzSeek origin);
} ILookInStream;
SRes LookInStream_LookRead(ILookInStream* stream, void* buf, size_t* size);
SRes LookInStream_SeekTo(ILookInStream* stream, UInt64 offset);
/* reads via ILookInStream::Read */
SRes LookInStream_Read2(ILookInStream* stream, void* buf, size_t size, SRes errorType);
SRes LookInStream_Read(ILookInStream* stream, void* buf, size_t size);
#define LookToRead_BUF_SIZE (1 << 14)
typedef struct
{
ILookInStream s;
ISeekInStream* realStream;
size_t pos;
size_t size;
Byte buf[LookToRead_BUF_SIZE];
} CLookToRead;
void LookToRead_CreateVTable(CLookToRead* p, int lookahead);
void LookToRead_Init(CLookToRead* p);
typedef struct
{
ISeqInStream s;
ILookInStream* realStream;
} CSecToLook;
void SecToLook_CreateVTable(CSecToLook* p);
typedef struct
{
ISeqInStream s;
ILookInStream* realStream;
} CSecToRead;
void SecToRead_CreateVTable(CSecToRead* p);
typedef struct
{
SRes (*Progress)(void* p, UInt64 inSize, UInt64 outSize);
/* Returns: result. (result != SZ_OK) means break.
Value (UInt64)(Int64)-1 for size means unknown value. */
} ICompressProgress;
typedef struct
{
void* (*Alloc)(void* p, size_t size);
void (*Free)(void* p, void* address); /* address can be 0 */
} ISzAlloc;
#define IAlloc_Alloc(p, size) (p)->Alloc((p), size)
#define IAlloc_Free(p, a) (p)->Free((p), a)
#ifdef _WIN32
#define CHAR_PATH_SEPARATOR '\\'
#define WCHAR_PATH_SEPARATOR L'\\'
#define STRING_PATH_SEPARATOR "\\"
#define WSTRING_PATH_SEPARATOR L"\\"
#else
#define CHAR_PATH_SEPARATOR '/'
#define WCHAR_PATH_SEPARATOR L'/'
#define STRING_PATH_SEPARATOR "/"
#define WSTRING_PATH_SEPARATOR L"/"
#endif
EXTERN_C_END
#endif

View File

@@ -1,43 +0,0 @@
#Do not use this file directly. Always use the top level CMakeLists.txt file
#File extractors so the user doesn't have to extract the rom before playing it
# Source files definition
SET(SRC_FEX
7z_C/7zAlloc.c
7z_C/7zBuf.c
7z_C/7zCrc.c
7z_C/7zCrcOpt.c
7z_C/7zDec.c
7z_C/7zIn.c
7z_C/7zStream.c
7z_C/Bcj2.c
7z_C/Bra86.c
7z_C/Bra.c
7z_C/CpuArch.c
7z_C/Lzma2Dec.c
7z_C/LzmaDec.c
7z_C/Ppmd7.c
7z_C/Ppmd7Dec.c
fex/Binary_Extractor.cpp
fex/blargg_common.cpp
fex/blargg_errors.cpp
fex/Data_Reader.cpp
fex/fex.cpp
fex/File_Extractor.cpp
fex/Gzip_Extractor.cpp
fex/Gzip_Reader.cpp
fex/Rar_Extractor.cpp
fex/Zip7_Extractor.cpp
fex/Zip_Extractor.cpp
fex/Zlib_Inflater.cpp
)
INCLUDE_DIRECTORIES(
.
)
ADD_LIBRARY(
fex
STATIC
${SRC_FEX}
)

View File

@@ -1,20 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "File_Extractor", "File_Extractor2010.vcxproj", "{7AEC599C-7C82-4F00-AA60-411E0A359CB0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{7AEC599C-7C82-4F00-AA60-411E0A359CB0}.Debug|Win32.ActiveCfg = Debug|Win32
{7AEC599C-7C82-4F00-AA60-411E0A359CB0}.Debug|Win32.Build.0 = Debug|Win32
{7AEC599C-7C82-4F00-AA60-411E0A359CB0}.Release|Win32.ActiveCfg = Release|Win32
{7AEC599C-7C82-4F00-AA60-411E0A359CB0}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Some files were not shown because too many files have changed in this diff Show More