mgba icon indicating copy to clipboard operation
mgba copied to clipboard

WebAssembly support

Open nelsonxb opened this issue 6 years ago • 41 comments

Hey there. I'm curious if anyone has tried running mGBA under WebAssembly, since I might have a use case for such a thing (in the somewhat distant future). If so... how did it go?

If not, I'm keen for a bit of pioneering (though I'm pretty busy over the next couple of months, but should have time after that).

Is anyone able to forsee any potential issues off the bat?

nelsonxb avatar Feb 07 '19 19:02 nelsonxb

This is actually on the roadmap for mGBA 0.8, but I haven't tried it yet.

endrift avatar Feb 07 '19 20:02 endrift

Sweet! I'll follow up if I get the time to look into it. I'm comfortable with C myself, so if I get to it first then I'm happy to submit patches if need be.

nelsonxb avatar Feb 08 '19 04:02 nelsonxb

Also, would be stoked on this! 😀 Let me know if you need help on the JS side of things!

torch2424 avatar Feb 16 '19 12:02 torch2424

Just a tip if someone arrive here by google...

I'm wrapping the emulator on web app gbajs into a React component, so you'll can embed it on your project. I'm doing it because I need a GBA emulator that runs on browser, and gbajs was the unique option that I found.

image

I think that on the next weeks I'll launch this package, react-gbajs.


Edit: package published 🎉

www.github.com/macabeus/react-gbajs

macabeus avatar Nov 18 '19 05:11 macabeus

I have this mostly done but I'm still missing a decent frontend.

endrift avatar Jan 28 '21 04:01 endrift

@endrift Is there a branch or a commit I could test out :) I don't need much of a front end. Just want to mess around. What's the performance like?

patrickcorrigan avatar Mar 18 '21 16:03 patrickcorrigan

Branch is here: https://github.com/endrift/mgba/tree/feature/wasm but it's been a while since I toyed with it so I don't remember.

endrift avatar Mar 18 '21 20:03 endrift

Sweet. I just cloned it. How do I build it? I tried cmake -DCMAKE_TOOLCHAIN_FILE=../src/platform/wasm .. and got

CMake Error at src/platform/wasm/CMakeLists.txt:11 (set_target_properties):
  set_target_properties called with incorrect number of arguments.
Call Stack (most recent call first):
  CMakeFiles/3.15.2/CMakeSystem.cmake:6 (include)
  CMakeLists.txt:10 (project)


-- The C compiler identification is AppleClang 12.0.0.12000032
-- The CXX compiler identification is AppleClang 12.0.0.12000032
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
/usr/bin/cc
CMake Error at /Users/patrickcorrigan/Documents/GitHub/mgba/src/platform/wasm/CMakeLists.txt:11 (set_target_pro
perties):
  set_target_properties called with incorrect number of arguments.
Call Stack (most recent call first):
  /Users/patrickcorrigan/Documents/GitHub/mgba/CMakeFiles/3.15.2/CMakeSystem.cmake:6 (include)
  /Users/patrickcorrigan/Documents/GitHub/mgba/CMakeFiles/CMakeTmp/CMakeLists.txt:3 (project)


CMake Error at /opt/local/share/cmake-3.15/Modules/CMakeTestCCompiler.cmake:44 (try_compile):
  Failed to configure test project build system.
Call Stack (most recent call first):
  CMakeLists.txt:10 (project)


-- Configuring incomplete, errors occurred!
See also "/Users/patrickcorrigan/Documents/GitHub/mgba/CMakeFiles/CMakeOutput.log".
See also "/Users/patrickcorrigan/Documents/GitHub/mgba/CMakeFiles/CMakeError.log".```

patrickcorrigan avatar Mar 18 '21 22:03 patrickcorrigan

You'll need emscripten, but beyond that I don't know. I use a Docker image to build it (which is publicly available--https://hub.docker.com/r/mgba/wasm), but if you're on macOS Docker is a pain.

endrift avatar Mar 18 '21 23:03 endrift

Awesome. I installed virtual box and have a ubuntu image running. I can get the docker container to the point where it complains about emscripten

I get this error.

shared:ERROR: '/emsdk_portable/clang/tag-e1.39.4/build_tag-e1.39.4_64/bin/clang -target asmjs-unknown-emscripten -D__EMSCRIPTEN_major__=1 -D__EMSCRIPTEN_minor__=39 -D__EMSCRIPTEN_tiny__=4 -D_LIBCPP_ABI_VERSION=2 -Werror=implicit-function-declaration -Xclang -nostdsysteminc -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/include/libcxx -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/lib/libcxxabi/include -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/include/compat -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/include -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/include/libc -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/lib/libc/musl/arch/emscripten -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/local/include -DBUILD_GL -DENABLE_SCRIPTING -DHAVE_CHMOD -DHAVE_CRC32 -DHAVE_LOCALE -DHAVE_LOCALTIME_R -DHAVE_SETLOCALE -DHAVE_STRDUP -DHAVE_STRNDUP -DHAVE_STRTOF_L -DHAVE_UMASK -DM_CORE_GB -DM_CORE_GBA -DUSE_DEBUGGERS -DUSE_GDB_STUB -DUSE_LZMA -DUSE_PNG -DUSE_PTHREADS -DUSE_SQLITE3 -DUSE_ZLIB -D_7ZIP_PPMD_SUPPPORT -I/home/mgba/src/src -I/home/mgba/src/include -I/home/mgba/src/src/third-party/zlib -I/home/mgba/src/build-wasm/zlib -I/home/mgba/src/src/third-party/libpng -I/home/mgba/src/build-wasm/libpng -I/home/mgba/src/src/third-party/sqlite3 -I/home/mgba/src/src/third-party/lzma -Wall -Wextra -Wno-missing-field-initializers -std=c99 -pthread -DNDEBUG -O2 -c -DEMSCRIPTEN -D__EMSCRIPTEN_PTHREADS__=1 -mllvm -disable-llvm-optzns /home/mgba/src/src/core/cheats.c -Xclang -disable-O0-optnone -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/include/SDL -c -o CMakeFiles/mgba.dir/src/core/cheats.c.o -emit-llvm' failed (1)
CMakeFiles/mgba.dir/build.make:88: recipe for target 'CMakeFiles/mgba.dir/src/core/cheats.c.o' failed

Can you remember how you installed emscripten? I tried installing it globally on the host ubuntu machine. Looks like I need to put it in /emsdk_portable/???

Update - Nevermind I cloned the repo but forgot to check out the correct branch :)

patrickcorrigan avatar Mar 19 '21 15:03 patrickcorrigan

So I have the docker image running to this point now

error: invalid argument '-std=c++03' not allowed with 'C'
-- Symbol prefix:
-- Could NOT find PkgConfig (missing:  PKG_CONFIG_EXECUTABLE)
-- Checking for one of the modules 'sdl2'
-- Could NOT find SDL2 (missing:  SDL2_LIBRARIES SDL2_INCLUDE_DIRS)
-- Could NOT find SDL (missing:  SDL_LIBRARY) (found suitable version "1.3.0", minimum required is "1.2")
-- Build type: Release
-- Platforms:
--      Game Boy Advance: ON
--      Game Boy: ON
-- Features:
--      Debuggers: ON
--      Screenshot/advanced savestate support: ON
--      ZIP support: minizip (included)
--      7-Zip support: ON
--      ELF loading support: OFF
--      OpenGL support: OpenGL, OpenGL|ES 2
-- Frontends:
--      Qt:
--      SDL (2): ON
--      Profiling: OFF
--      Test harness: OFF
--      Test suite: OFF
--      Video test suite: OFF
--      Python bindings: OFF
--      Examples: OFF
-- Cores:
--      Libretro core: OFF
-- Libraries:
--      Static: ON
--      Shared: OFF
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
OPENGLES2_LIBRARY
    linked by target "mgba" in directory /home/mgba/src
 
-- Configuring incomplete, errors occurred!
See also "/home/mgba/src/build-wasm/CMakeFiles/CMakeOutput.log".
See also "/home/mgba/src/build-wasm/CMakeFiles/CMakeError.log".

Any ideas? Sorry I'm mostly a web developer

patrickcorrigan avatar Mar 19 '21 16:03 patrickcorrigan

So I have the docker image running to this point now

error: invalid argument '-std=c++03' not allowed with 'C'

Looks like it's trying to build mgba with a C++ standard. Try -std=c11 instead. I don't know whether that's what the code was written to conform with, but it's a start.

-- Symbol prefix: -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)

This should do the trick: sudo apt update && sudo apt install pkg-config

-- Checking for one of the modules 'sdl2' -- Could NOT find SDL2 (missing: SDL2_LIBRARIES SDL2_INCLUDE_DIRS) -- Could NOT find SDL (missing: SDL_LIBRARY) (found suitable version "1.3.0", minimum required is "1.2")

This should work for this one: sudo apt update && sudo apt install libsdl2 libsdl2-dev libsdl1.2-dev

-- Build type: Release -- Platforms: -- Game Boy Advance: ON -- Game Boy: ON -- Features: -- Debuggers: ON -- Screenshot/advanced savestate support: ON -- ZIP support: minizip (included) -- 7-Zip support: ON -- ELF loading support: OFF -- OpenGL support: OpenGL, OpenGL|ES 2 -- Frontends: -- Qt: -- SDL (2): ON -- Profiling: OFF -- Test harness: OFF -- Test suite: OFF -- Video test suite: OFF -- Python bindings: OFF -- Examples: OFF -- Cores: -- Libretro core: OFF -- Libraries: -- Static: ON -- Shared: OFF CMake Error: The following variables are used in this project, but they are set to NOTFOUND. Please set them or make sure they are set and tested correctly in the CMake files: OPENGLES2_LIBRARY linked by target "mgba" in directory /home/mgba/src

-- Configuring incomplete, errors occurred! See also "/home/mgba/src/build-wasm/CMakeFiles/CMakeOutput.log". See also "/home/mgba/src/build-wasm/CMakeFiles/CMakeError.log".


Any ideas? Sorry I'm mostly a web developer

Hopefully this helps

brainard52 avatar Mar 21 '21 18:03 brainard52

Looks like it's trying to build mgba with a C++ standard. Try -std=c11 instead. I don't know whether that's what the code was written to conform with, but it's a start.

Whatever is telling it to use a C++ standard isn't coming from mGBA's code, so tracking down where that's coming from would be the real issue here.

-- Symbol prefix: -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)

This should do the trick: sudo apt update && sudo apt install pkg-config

This isn't needed. It's not an error and none of the things found with pkg-config would be used here anyway.

-- Checking for one of the modules 'sdl2' -- Could NOT find SDL2 (missing: SDL2_LIBRARIES SDL2_INCLUDE_DIRS) -- Could NOT find SDL (missing: SDL_LIBRARY) (found suitable version "1.3.0", minimum required is "1.2")

This should work for this one: sudo apt update && sudo apt install libsdl2 libsdl2-dev libsdl1.2-dev

This is the webassembly build, a native version of SDL isn't going to help here.

endrift avatar Mar 21 '21 19:03 endrift

I've pushed a fix for the GLESv2 issue, it actually builds now despite the warnings.

endrift avatar Mar 21 '21 19:03 endrift

That's awesome! Are you building using the docker image?

patrickcorrigan avatar Mar 21 '21 20:03 patrickcorrigan

Yup.

endrift avatar Mar 21 '21 20:03 endrift

Building using you latest push and the docker image I now get this.

docker run --rm -t -v $PWD:/home/mgba/src  mgba/wasm
-- Checking for one of the modules 'libedit'
CMake Warning at CMakeLists.txt:144 (message):
  Requested module libedit missing for feature USE_EDITLINE.  Feature
  disabled.
Call Stack (most recent call first):
  CMakeLists.txt:407 (find_feature)


-- Checking for one of the modules 'libavcodec'
CMake Warning at CMakeLists.txt:144 (message):
  Requested module libavcodec missing for feature USE_FFMPEG.  Feature
  disabled.
Call Stack (most recent call first):
  CMakeLists.txt:434 (find_feature)


-- Checking for one of the modules 'ZLIB'
CMake Warning at CMakeLists.txt:144 (message):
  Requested module ZLIB missing for feature USE_ZLIB.  Feature disabled.
Call Stack (most recent call first):
  CMakeLists.txt:435 (find_feature)


-- Checking for one of the modules 'minizip'
CMake Warning at CMakeLists.txt:144 (message):
  Requested module minizip missing for feature USE_MINIZIP.  Feature
  disabled.
Call Stack (most recent call first):
  CMakeLists.txt:436 (find_feature)


-- Checking for one of the modules 'PNG'
CMake Warning at CMakeLists.txt:144 (message):
  Requested module PNG missing for feature USE_PNG.  Feature disabled.
Call Stack (most recent call first):
  CMakeLists.txt:437 (find_feature)


-- Checking for one of the modules 'libzip'
CMake Warning at CMakeLists.txt:144 (message):
  Requested module libzip missing for feature USE_LIBZIP.  Feature disabled.
Call Stack (most recent call first):
  CMakeLists.txt:438 (find_feature)


-- Checking for one of the modules 'MagickWand'
CMake Warning at CMakeLists.txt:144 (message):
  Requested module MagickWand missing for feature USE_MAGICK.  Feature
  disabled.
Call Stack (most recent call first):
  CMakeLists.txt:439 (find_feature)


-- Checking for one of the modules 'epoxy'
CMake Warning at CMakeLists.txt:144 (message):
  Requested module epoxy missing for feature USE_EPOXY.  Feature disabled.
Call Stack (most recent call first):
  CMakeLists.txt:440 (find_feature)


-- Checking for one of the modules 'sqlite3'
CMake Warning at CMakeLists.txt:144 (message):
  Requested module sqlite3 missing for feature USE_SQLITE3.  Feature
  disabled.
Call Stack (most recent call first):
  CMakeLists.txt:442 (find_feature)


-- Checking for one of the modules 'libelf'
CMake Warning at CMakeLists.txt:144 (message):
  Requested module libelf missing for feature USE_ELF.  Feature disabled.
Call Stack (most recent call first):
  CMakeLists.txt:443 (find_feature)


CMake Warning (dev) at src/third-party/zlib/CMakeLists.txt:186 (add_library):
  ADD_LIBRARY called with SHARED option but the target platform does not
  support dynamic linking.  Building a STATIC library instead.  This may lead
  to problems.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at CMakeLists.txt:799 (add_library):
  ADD_LIBRARY called with SHARED option but the target platform does not
  support dynamic linking.  Building a STATIC library instead.  This may lead
  to problems.
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Checking for one of the modules 'sdl2'
-- Could NOT find SDL (missing:  SDL_LIBRARY) (found suitable version "1.3.0", minimum required is "1.2")
CMake Warning at src/platform/qt/CMakeLists.txt:25 (find_package):
  By not providing "FindQt5Multimedia.cmake" in CMAKE_MODULE_PATH this
  project has asked CMake to find a package configuration file provided by
  "Qt5Multimedia", but CMake did not find one.

  Could not find a package configuration file provided by "Qt5Multimedia"
  with any of the following names:

    Qt5MultimediaConfig.cmake
    qt5multimedia-config.cmake

  Add the installation prefix of "Qt5Multimedia" to CMAKE_PREFIX_PATH or set
  "Qt5Multimedia_DIR" to a directory containing one of the above files.  If
  "Qt5Multimedia" provides a separate development package or SDK, be sure it
  has been installed.


CMake Warning at src/platform/qt/CMakeLists.txt:26 (find_package):
  By not providing "FindQt5OpenGL.cmake" in CMAKE_MODULE_PATH this project
  has asked CMake to find a package configuration file provided by
  "Qt5OpenGL", but CMake did not find one.

  Could not find a package configuration file provided by "Qt5OpenGL" with
  any of the following names:

    Qt5OpenGLConfig.cmake
    qt5opengl-config.cmake

  Add the installation prefix of "Qt5OpenGL" to CMAKE_PREFIX_PATH or set
  "Qt5OpenGL_DIR" to a directory containing one of the above files.  If
  "Qt5OpenGL" provides a separate development package or SDK, be sure it has
  been installed.


CMake Warning at src/platform/qt/CMakeLists.txt:27 (find_package):
  By not providing "FindQt5Widgets.cmake" in CMAKE_MODULE_PATH this project
  has asked CMake to find a package configuration file provided by
  "Qt5Widgets", but CMake did not find one.

  Could not find a package configuration file provided by "Qt5Widgets" with
  any of the following names:

    Qt5WidgetsConfig.cmake
    qt5widgets-config.cmake

  Add the installation prefix of "Qt5Widgets" to CMAKE_PREFIX_PATH or set
  "Qt5Widgets_DIR" to a directory containing one of the above files.  If
  "Qt5Widgets" provides a separate development package or SDK, be sure it has
  been installed.


CMake Warning at src/platform/qt/CMakeLists.txt:35 (message):
  Cannot find Qt modules


-- Build type: Release
-- Platforms:
-- 	Game Boy Advance: ON
-- 	Game Boy: ON
-- Features:
-- 	Debuggers: ON
-- 	CLI debugger: OFF
-- 	GDB stub: ON
-- 	Video recording: OFF
-- 	GIF recording: OFF
-- 	Screenshot/advanced savestate support: ON
-- 	ZIP support: minizip (included)
-- 	7-Zip support: ON
-- 	SQLite3 game database: ON
-- 	ELF loading support: OFF
-- 	OpenGL support: OpenGL
-- Frontends:
-- 	Qt: ON
-- 	SDL (2): ON
-- 	Profiling: OFF
-- 	Test harness: OFF
-- 	Test suite: OFF
-- 	Python bindings: OFF
-- 	Examples: OFF
-- Cores:
-- 	Libretro core: OFF
-- Libraries:
-- 	Static: OFF
-- 	Shared: ON
-- Configuring done
CMake Warning (dev) at src/third-party/libpng/CMakeLists.txt:130 (add_library):
  Policy CMP0003 should be set before this line.  Add code such as

    if(COMMAND cmake_policy)
      cmake_policy(SET CMP0003 NEW)
    endif(COMMAND cmake_policy)

  as early as possible but after the most recent call to
  cmake_minimum_required or cmake_policy(VERSION).  This warning appears
  because target "png16_static" links to some libraries for which the linker
  must search:

    m

  and other libraries with known full path:

    /home/mgba/src/build-wasm/zlib/libz.a

  CMake is adding directories in the second list to the linker search path in
  case they are needed to find libraries from the first list (for backwards
  compatibility with CMake 2.4).  Set policy CMP0003 to OLD or NEW to enable
  or disable this behavior explicitly.  Run "cmake --help-policy CMP0003" for
  more information.
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Generating done
-- Build files have been written to: /home/mgba/src/build-wasm
[  0%] Built target version-info
[  8%] Built target zlibstatic
[ 16%] Built target png16_static
[ 16%] Building C object CMakeFiles/mgba.dir/src/core/cheats.c.o
In file included from /home/mgba/src/src/core/cheats.c:8:
In file included from /home/mgba/src/include/mgba/core/core.h:15:
/home/mgba/src/include/mgba/core/directories.h:17:16: error: use of undeclared identifier 'PATH_MAX'
        char baseName[PATH_MAX];
                      ^
/home/mgba/src/src/core/cheats.c:77:15: error: implicit declaration of function 'strdup' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
                set->name = strdup(name);
                            ^
/home/mgba/src/src/core/cheats.c:77:13: warning: incompatible integer to pointer conversion assigning to 'char *' from 'int' [-Wint-conversion]
                set->name = strdup(name);
                          ^ ~~~~~~~~~~~~
/home/mgba/src/src/core/cheats.c:103:15: error: implicit declaration of function 'strdup' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
                set->name = strdup(name);
                            ^
/home/mgba/src/src/core/cheats.c:103:13: warning: incompatible integer to pointer conversion assigning to 'char *' from 'int' [-Wint-conversion]
                set->name = strdup(name);
                          ^ ~~~~~~~~~~~~
/home/mgba/src/src/core/cheats.c:111:35: error: implicit declaration of function 'strdup' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        *StringListAppend(&set->lines) = strdup(line);
                                         ^
/home/mgba/src/src/core/cheats.c:111:33: warning: incompatible integer to pointer conversion assigning to 'char *' from 'int' [-Wint-conversion]
        *StringListAppend(&set->lines) = strdup(line);
                                       ^ ~~~~~~~~~~~~
/home/mgba/src/src/core/cheats.c:189:37: error: implicit declaration of function 'strdup' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
                        *StringListAppend(&directives) = strdup(&cheat[i]);
                                                         ^
/home/mgba/src/src/core/cheats.c:189:35: warning: incompatible integer to pointer conversion assigning to 'char *' from 'int' [-Wint-conversion]
                        *StringListAppend(&directives) = strdup(&cheat[i]);
                                                       ^ ~~~~~~~~~~~~~~~~~
4 warnings and 5 errors generated.
shared:ERROR: '/emsdk_portable/clang/tag-e1.39.4/build_tag-e1.39.4_64/bin/clang -target asmjs-unknown-emscripten -D__EMSCRIPTEN_major__=1 -D__EMSCRIPTEN_minor__=39 -D__EMSCRIPTEN_tiny__=4 -D_LIBCPP_ABI_VERSION=2 -Werror=implicit-function-declaration -Xclang -nostdsysteminc -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/include/libcxx -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/lib/libcxxabi/include -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/include/compat -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/include -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/include/libc -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/lib/libc/musl/arch/emscripten -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/local/include -DBUILD_GL -DENABLE_SCRIPTING -DHAVE_CHMOD -DHAVE_CRC32 -DHAVE_LOCALE -DHAVE_LOCALTIME_R -DHAVE_SETLOCALE -DHAVE_STRDUP -DHAVE_STRNDUP -DHAVE_STRTOF_L -DHAVE_UMASK -DM_CORE_GB -DM_CORE_GBA -DUSE_DEBUGGERS -DUSE_GDB_STUB -DUSE_LZMA -DUSE_PNG -DUSE_PTHREADS -DUSE_SQLITE3 -DUSE_ZLIB -D_7ZIP_PPMD_SUPPPORT -I/home/mgba/src/src -I/home/mgba/src/include -I/home/mgba/src/src/third-party/zlib -I/home/mgba/src/build-wasm/zlib -I/home/mgba/src/src/third-party/libpng -I/home/mgba/src/build-wasm/libpng -I/home/mgba/src/src/third-party/sqlite3 -I/home/mgba/src/src/third-party/lzma -Wall -Wextra -Wno-missing-field-initializers -std=c99 -pthread -DNDEBUG -O2 -c -DEMSCRIPTEN -D__EMSCRIPTEN_PTHREADS__=1 -mllvm -disable-llvm-optzns /home/mgba/src/src/core/cheats.c -Xclang -disable-O0-optnone -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/include/SDL -c -o CMakeFiles/mgba.dir/src/core/cheats.c.o -emit-llvm' failed (1)
CMakeFiles/mgba.dir/build.make:88: recipe for target 'CMakeFiles/mgba.dir/src/core/cheats.c.o' failed
make[2]: *** [CMakeFiles/mgba.dir/src/core/cheats.c.o] Error 1
CMakeFiles/Makefile2:106: recipe for target 'CMakeFiles/mgba.dir/all' failed
make[1]: *** [CMakeFiles/mgba.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2

patrickcorrigan avatar Mar 21 '21 21:03 patrickcorrigan

Try deleting the build-wasm dir and trying again.

endrift avatar Mar 21 '21 21:03 endrift

Deleted it. Weird. Now it hangs looking for strdup

patrickcorrigan avatar Mar 21 '21 21:03 patrickcorrigan

Would you be able to post the output of the build just so I can mess around with the project. I'll keep trying to get the docker build going in the meantime.

patrickcorrigan avatar Mar 21 '21 21:03 patrickcorrigan

Sure thing, here's the build with an example index.html that does some loading. I'd love to merge the branch but I need a bit more than just an example page for testing it...

build.zip

endrift avatar Mar 21 '21 21:03 endrift

Thanks, @endrift. I really appreciate it :)

patrickcorrigan avatar Mar 21 '21 21:03 patrickcorrigan

It works! (Your build output. Not my build) I'd love to be able to help out. I was hoping I could help fill out the remain methods in the js file and build a ui

patrickcorrigan avatar Mar 21 '21 21:03 patrickcorrigan

A simple frontend for a demo (which I'll end up putting up on the site of course) that works with controllers and phone, plus a good list of functions that need to be exposed, are about all that's preventing this from being merged.

endrift avatar Mar 21 '21 21:03 endrift

Got it building :) Going to mess around with exporting functions :) Thanks for your help @endrift

patrickcorrigan avatar Mar 25 '21 13:03 patrickcorrigan

There are some forks of gbajs that had various frontends. I tried some of them, some were made for mobile, some not. None of them are amazing in all situations I don’t think. Why not start with the one you had for gbajs?

andychase avatar May 17 '21 00:05 andychase

@andychase, That's what I thought too so I made one https://www.youtube.com/watch?v=3K9iYbJ-1lQ

patrickcorrigan avatar May 27 '21 09:05 patrickcorrigan

Hey, I made a React wrapper of gbajs: https://github.com/macabeus/react-gbajs It is still at the beginning of the development, but it already works fine and I'm using it on my personagel project. Contributions are welcome.

macabeus avatar May 27 '21 09:05 macabeus

@andychase, That's what I thought too so I made one https://www.youtube.com/watch?v=3K9iYbJ-1lQ

Could you share the example code ?

whatwewant avatar Jun 29 '21 18:06 whatwewant

Hello, I tried today to build the project under windows using the latest docker 'mgba/wasm' image. I encountered some problem that I would like to report.

The first one was that PkgConfig seams to not be install on the image. I am not sure if I am doing something wrong or I am supposed to run it with some flags or environmental variables but... out of the box it doen't work. Cmake seam to be able to work without it but it will probably crash for me in a later stage.

I later encounter a wrong compiler flag, I tried to compile with c++03 and it failed. After some debug, I found out this comes from zlib. I fixed it by manually setting CMAKE_CXX_STANDARD to 11 in the to CMakeLists.txt

Next I got this error: CMake Error at CMakeLists.txt:866 (install): install TARGETS given no ARCHIVE DESTINATION for static library target "mgba".

I changed that line to: install(TARGETS ${BINARY_NAME} ARCHIVE DESTINATION ${LIBDIR} LIBRARY DESTINATION ${LIBDIR} COMPONENT ${BINARY_NAME}-dev NAMELINK_ONLY) It seams to fix it.

After that the compilation started. It never finished no matter what I did, probably because of the missing pkgconfig or something. Currently I am getting a lot of compilation error about missing strdup, strcpy and the last was about the uselocale() function. Since these are all supposed to be there probably my setup is wrong.

I used the latest commit of the master and wsl2 on Windows to do so, here is my final output: `-- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) -- Checking for one of the modules 'libavcodec' CMake Warning at src/platform/cmake/FindFeature.cmake:51 (message): Requested module libavcodec missing for feature USE_FFMPEG. Feature disabled. Call Stack (most recent call first): CMakeLists.txt:477 (find_feature)

-- Checking for one of the modules 'ZLIB' CMake Warning at src/platform/cmake/FindFeature.cmake:51 (message): Requested module ZLIB missing for feature USE_ZLIB. Feature disabled. Call Stack (most recent call first): CMakeLists.txt:479 (find_feature)

-- Checking for one of the modules 'minizip' CMake Warning at src/platform/cmake/FindFeature.cmake:51 (message): Requested module minizip missing for feature USE_MINIZIP. Feature disabled. Call Stack (most recent call first): CMakeLists.txt:480 (find_feature)

-- Checking for one of the modules 'PNG' CMake Warning at src/platform/cmake/FindFeature.cmake:51 (message): Requested module PNG missing for feature USE_PNG. Feature disabled. Call Stack (most recent call first): CMakeLists.txt:481 (find_feature)

-- Checking for one of the modules 'libzip' CMake Warning at src/platform/cmake/FindFeature.cmake:51 (message): Requested module libzip missing for feature USE_LIBZIP. Feature disabled. Call Stack (most recent call first): CMakeLists.txt:482 (find_feature)

-- Checking for one of the modules 'epoxy' CMake Warning at src/platform/cmake/FindFeature.cmake:51 (message): Requested module epoxy missing for feature USE_EPOXY. Feature disabled. Call Stack (most recent call first): CMakeLists.txt:483 (find_feature)

-- Checking for one of the modules 'SQLite3' -- Checking for one of the modules 'sqlite3' CMake Warning at src/platform/cmake/FindFeature.cmake:51 (message): Requested module SQLite3|sqlite3 missing for feature USE_SQLITE3. Feature disabled. Call Stack (most recent call first): CMakeLists.txt:485 (find_feature)

-- Checking for one of the modules 'libelf' CMake Warning at src/platform/cmake/FindFeature.cmake:51 (message): Requested module libelf missing for feature USE_ELF. Feature disabled. Call Stack (most recent call first): CMakeLists.txt:486 (find_feature)

CMake Warning (dev) at src/third-party/zlib/CMakeLists.txt:186 (add_library): ADD_LIBRARY called with SHARED option but the target platform does not support dynamic linking. Building a STATIC library instead. This may lead to problems. This warning is for project developers. Use -Wno-dev to suppress it.

error: invalid argument '-std=c++03' not allowed with 'C' -- Symbol prefix: CMake Warning (dev) at CMakeLists.txt:844 (add_library): ADD_LIBRARY called with SHARED option but the target platform does not support dynamic linking. Building a STATIC library instead. This may lead to problems. This warning is for project developers. Use -Wno-dev to suppress it.

-- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) -- Checking for one of the modules 'sdl2' -- Could NOT find SDL2 (missing: SDL2_LIBRARIES SDL2_INCLUDE_DIRS) -- Could NOT find SDL (missing: SDL_LIBRARY) (found suitable version "1.3.0", minimum required is "1.2") CMake Warning at src/platform/qt/CMakeLists.txt:25 (find_package): By not providing "FindQt5.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "Qt5", but CMake did not find one.

Could not find a package configuration file provided by "Qt5" with any of the following names:

Qt5Config.cmake
qt5-config.cmake

Add the installation prefix of "Qt5" to CMAKE_PREFIX_PATH or set "Qt5_DIR" to a directory containing one of the above files. If "Qt5" provides a separate development package or SDK, be sure it has been installed.

CMake Warning at src/platform/qt/CMakeLists.txt:33 (message): Cannot find Qt modules

-- Build type: Release -- Platforms: -- Game Boy Advance: ON -- Game Boy: ON -- Features: -- Debuggers: OFF -- CLI debugger: OFF -- GDB stub: OFF -- GIF/Video recording: OFF -- Screenshot/advanced savestate support: ON -- ZIP support: minizip (included) -- 7-Zip support: ON -- SQLite3 game database: ON -- ELF loading support: OFF -- Discord Rich Presence support: ON -- OpenGL support: OpenGL, OpenGL|ES 2, OpenGL|ES 3 -- Frontends: -- Qt: ON -- SDL (2): ON -- Profiling: OFF -- Test harness: OFF -- Test suite: OFF -- Video test suite: OFF -- Python bindings: OFF -- Examples: OFF -- Cores: -- Libretro core: OFF -- Libraries: -- Static: OFF -- Shared: ON -- Configuring done -- Generating done -- Build files have been written to: /home/mgba/src/build-wasm [ 0%] Built target mgba-version-info [ 6%] Built target genfiles Scanning dependencies of target zlibstatic [ 6%] Building C object zlib/CMakeFiles/zlibstatic.dir/adler32.o [ 7%] Building C object zlib/CMakeFiles/zlibstatic.dir/compress.o [ 7%] Building C object zlib/CMakeFiles/zlibstatic.dir/crc32.o [ 7%] Building C object zlib/CMakeFiles/zlibstatic.dir/deflate.o [ 8%] Building C object zlib/CMakeFiles/zlibstatic.dir/gzclose.o [ 8%] Building C object zlib/CMakeFiles/zlibstatic.dir/gzlib.o [ 9%] Building C object zlib/CMakeFiles/zlibstatic.dir/gzread.o [ 9%] Building C object zlib/CMakeFiles/zlibstatic.dir/gzwrite.o [ 10%] Building C object zlib/CMakeFiles/zlibstatic.dir/inflate.o /home/mgba/src/src/third-party/zlib/inflate.c:1507:61: warning: shifting a negative signed value is undefined [-Wshift-negative-value] if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16; ~~~ ^ 1 warning generated. [ 10%] Building C object zlib/CMakeFiles/zlibstatic.dir/infback.o [ 10%] Building C object zlib/CMakeFiles/zlibstatic.dir/inftrees.o [ 12%] Building C object zlib/CMakeFiles/zlibstatic.dir/inffast.o [ 12%] Building C object zlib/CMakeFiles/zlibstatic.dir/trees.o [ 13%] Building C object zlib/CMakeFiles/zlibstatic.dir/uncompr.o [ 13%] Building C object zlib/CMakeFiles/zlibstatic.dir/zutil.o [ 14%] Linking C static library libz.a [ 14%] Built target zlibstatic Scanning dependencies of target png_static [ 15%] Building C object libpng/CMakeFiles/png_static.dir/png.c.o [ 15%] Building C object libpng/CMakeFiles/png_static.dir/pngerror.c.o [ 17%] Building C object libpng/CMakeFiles/png_static.dir/pngget.c.o [ 17%] Building C object libpng/CMakeFiles/png_static.dir/pngmem.c.o [ 17%] Building C object libpng/CMakeFiles/png_static.dir/pngpread.c.o [ 18%] Building C object libpng/CMakeFiles/png_static.dir/pngread.c.o [ 18%] Building C object libpng/CMakeFiles/png_static.dir/pngrio.c.o [ 19%] Building C object libpng/CMakeFiles/png_static.dir/pngrtran.c.o [ 19%] Building C object libpng/CMakeFiles/png_static.dir/pngrutil.c.o [ 20%] Building C object libpng/CMakeFiles/png_static.dir/pngset.c.o [ 20%] Building C object libpng/CMakeFiles/png_static.dir/pngtrans.c.o [ 20%] Building C object libpng/CMakeFiles/png_static.dir/pngwio.c.o [ 21%] Building C object libpng/CMakeFiles/png_static.dir/pngwrite.c.o [ 21%] Building C object libpng/CMakeFiles/png_static.dir/pngwtran.c.o [ 23%] Building C object libpng/CMakeFiles/png_static.dir/pngwutil.c.o [ 23%] Linking C static library libpng16.a [ 24%] Built target png_static [ 24%] Building C object CMakeFiles/mgba.dir/src/util/formatting.c.o /home/mgba/src/src/util/formatting.c:13:17: error: implicit declaration of function 'uselocale' is invalid in C99 [-Werror,-Wimplicit-function-declaration] locale_t old = uselocale(locale); ^ /home/mgba/src/src/util/formatting.c:13:17: note: did you mean 'setlocale'? /emsdk_portable/emscripten/tag-1.39.4/system/include/libc/locale.h:53:7: note: 'setlocale' declared here char *setlocale (int, const char *); ^ /home/mgba/src/src/util/formatting.c:13:11: warning: incompatible integer to pointer conversion initializing 'locale_t' (aka 'struct locale_struct ') with an expression of type 'int' [-Wint-conversion] locale_t old = uselocale(locale); ^ ~~~~~~~~~~~~~~~~~ /home/mgba/src/src/util/formatting.c:49:15: error: implicit declaration of function 'newlocale' is invalid in C99 [-Werror,-Wimplicit-function-declaration] locale_t l = newlocale(LC_NUMERIC_MASK, "C", 0); ^ /home/mgba/src/src/util/formatting.c:49:15: note: did you mean 'setlocale'? /emsdk_portable/emscripten/tag-1.39.4/system/include/libc/locale.h:53:7: note: 'setlocale' declared here char setlocale (int, const char ); ^ /home/mgba/src/src/util/formatting.c:49:25: error: use of undeclared identifier 'LC_NUMERIC_MASK' locale_t l = newlocale(LC_NUMERIC_MASK, "C", 0); ^ /home/mgba/src/src/util/formatting.c:55:2: error: implicit declaration of function 'freelocale' is invalid in C99 [-Werror,-Wimplicit-function-declaration] freelocale(l); ^ /home/mgba/src/src/util/formatting.c:62:15: error: implicit declaration of function 'newlocale' is invalid in C99 [-Werror,-Wimplicit-function-declaration] locale_t l = newlocale(LC_NUMERIC_MASK, "C", 0); ^ /home/mgba/src/src/util/formatting.c:62:25: error: use of undeclared identifier 'LC_NUMERIC_MASK' locale_t l = newlocale(LC_NUMERIC_MASK, "C", 0); ^ /home/mgba/src/src/util/formatting.c:66:14: error: implicit declaration of function 'strtof_l' is invalid in C99 [-Werror,-Wimplicit-function-declaration] float res = strtof_l(str, end, l); ^ /home/mgba/src/src/util/formatting.c:66:14: note: did you mean 'strtof_u'? /home/mgba/src/src/util/formatting.c:60:7: note: 'strtof_u' declared here float strtof_u(const char restrict str, char restrict end) { ^ /home/mgba/src/src/util/formatting.c:68:2: error: implicit declaration of function 'freelocale' is invalid in C99 [-Werror,-Wimplicit-function-declaration] freelocale(l); ^ 1 warning and 8 errors generated. shared:ERROR: '/emsdk_portable/clang/tag-e1.39.4/build_tag-e1.39.4_64/bin/clang -target asmjs-unknown-emscripten -D__EMSCRIPTEN_major=1 -D__EMSCRIPTEN_minor__=39 -D__EMSCRIPTEN_tiny__=4 -D_LIBCPP_ABI_VERSION=2 -Werror=implicit-function-declaration -Xclang -nostdsysteminc -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/include/libcxx -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/lib/libcxxabi/include -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/include/compat -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/include -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/include/libc -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/lib/libc/musl/arch/emscripten -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/local/include -DBUILD_GL -DBUILD_GLES2 -DBUILD_GLES3 -DDISABLE_THREADING -DENABLE_SCRIPTING -DHAVE_CRC32 -DHAVE_FREELOCALE -DHAVE_FUTIMENS -DHAVE_LOCALE -DHAVE_LOCALTIME_R -DHAVE_NEWLOCALE -DHAVE_PTHREAD_CREATE -DHAVE_SETLOCALE -DHAVE_STRDUP -DHAVE_STRLCPY -DHAVE_STRNDUP -DHAVE_STRTOF_L -DHAVE_USELOCALE -DHAVE_VASPRINTF -DHAVE_XLOCALE -DMGBA_DLL -DM_CORE_GB -DM_CORE_GBA -DUSE_DISCORD_RPC -DUSE_LZMA -DUSE_MINIZIP -DUSE_PNG -DUSE_PTHREADS -DUSE_SQLITE3 -DUSE_ZLIB -D_7ZIP_PPMD_SUPPPORT -I/home/mgba/src/include -I/home/mgba/src/build-wasm/include -I/home/mgba/src/src -I/emsdk_portable/emscripten/tag-1.39.4/system/include -I/home/mgba/src/src/third-party/zlib -I/home/mgba/src/build-wasm/zlib -I/home/mgba/src/src/third-party/libpng -I/home/mgba/src/build-wasm/libpng -I/home/mgba/src/src/third-party/sqlite3 -I/home/mgba/src/src/third-party/zlib/contrib -I/home/mgba/src/src/third-party/lzma -I/home/mgba/src/src/third-party/discord-rpc/include -Wall -Wextra -Wno-missing-field-initializers -Werror=implicit-function-declaration -pthread -DNDEBUG -O2 -std=c99 -c -DEMSCRIPTEN -D__EMSCRIPTEN_PTHREADS__=1 -mllvm -disable-llvm-optzns /home/mgba/src/src/util/formatting.c -Xclang -disable-O0-optnone -Xclang -isystem/emsdk_portable/emscripten/tag-1.39.4/system/include/SDL -c -o CMakeFiles/mgba.dir/src/util/formatting.c.o -emit-llvm' failed (1) CMakeFiles/mgba.dir/build.make:2138: recipe for target 'CMakeFiles/mgba.dir/src/util/formatting.c.o' failed make[2]: *** [CMakeFiles/mgba.dir/src/util/formatting.c.o] Error 1 CMakeFiles/Makefile2:106: recipe for target 'CMakeFiles/mgba.dir/all' failed make[1]: *** [CMakeFiles/mgba.dir/all] Error 2 Makefile:138: recipe for target 'all' failed make: *** [all] Error 2`

Dimkar3000 avatar Sep 18 '21 12:09 Dimkar3000