mirror of
https://github.com/joncampbell123/dosbox-x.git
synced 2025-10-14 02:17:36 +08:00
Initial emscripten SDL2 integration. It compiles. Hope it works
This commit is contained in:
20
build-emscripten-sdl2
Executable file
20
build-emscripten-sdl2
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# make sure you use ". ./emsdk_set_env.sh"
|
||||||
|
|
||||||
|
# I'm sick and tired of all the churn the three versions of autoconf
|
||||||
|
# are causing in this repo. Stop committing the configure scripts
|
||||||
|
# and just autoregen.
|
||||||
|
./autogen.sh || exit 1
|
||||||
|
|
||||||
|
echo Compiling DOSBox-X
|
||||||
|
chmod +x configure
|
||||||
|
|
||||||
|
# for sdl2-config and sdl-config
|
||||||
|
export PATH=/opt/emsdk/emscripten/incoming/system/bin:$PATH
|
||||||
|
|
||||||
|
# build command borrowed from Yksoft1 vanilla DOSBox-X port with modifications
|
||||||
|
CC="emcc" CXX="em++" LD="emcc" LD_CXX="em++" CFLAGS="-DEMTERPRETER_SYNC" CXXFLAGS="-DEMSCRIPTEN=1 -DEMTERPRETER_SYNC" ./configure --host=x86_64-linux --disable-dynamic-x86 --enable-sdl2 --with-sdl-prefix=/opt/emsdk/emscripten/incoming/system --disable-opengl --disable-mt32 --enable-emscripten
|
||||||
|
make -j3 || exit 1
|
||||||
|
#emcc -O1 -s USE_SDL=2 -s TOTAL_MEMORY=104857600 -s EMTERPRETIFY=1 -s EMTERPRETIFY_ASYNC=1 -s EMTERPRETIFY_WHITELIST=@d3.txt dosbox-x.bc --memory-init-file 0 -o th5e.html --preload-file d:/tmpp/th5x@/
|
||||||
|
|
76
configure.ac
76
configure.ac
@@ -156,6 +156,10 @@ dnl This is how the build script can specify a HX DOS extender target
|
|||||||
AH_TEMPLATE(C_HX_DOS,[Define to 1 to target HX DOS])
|
AH_TEMPLATE(C_HX_DOS,[Define to 1 to target HX DOS])
|
||||||
AC_ARG_ENABLE(hx-dos,AC_HELP_STRING([--enable-hx-dos],[Enable HX target]),enable_hx=yes)
|
AC_ARG_ENABLE(hx-dos,AC_HELP_STRING([--enable-hx-dos],[Enable HX target]),enable_hx=yes)
|
||||||
|
|
||||||
|
dnl Let me know if you're targeting Emscripten
|
||||||
|
AH_TEMPLATE(C_EMSCRIPTEN,[Define to 1 to target Emscripten])
|
||||||
|
AC_ARG_ENABLE(emscripten,AC_HELP_STRING([--enable-emscripten],[Enable Emscripten target]),enable_emscripten=$enableval,enable_emscripten=no)
|
||||||
|
|
||||||
dnl Optimize for speed by default
|
dnl Optimize for speed by default
|
||||||
AC_ARG_ENABLE(optimize,AC_HELP_STRING([--disable-optimize],[Don't enable compiler optimizations]))
|
AC_ARG_ENABLE(optimize,AC_HELP_STRING([--disable-optimize],[Don't enable compiler optimizations]))
|
||||||
|
|
||||||
@@ -168,6 +172,10 @@ if test x$enable_optimize != xno; then
|
|||||||
CXXFLAGS="$CXXFLAGS -O2"
|
CXXFLAGS="$CXXFLAGS -O2"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test x$enable_emscripten == xyes; then
|
||||||
|
AC_DEFINE(C_EMSCRIPTEN,1,[Targeting Emscripten])
|
||||||
|
fi
|
||||||
|
|
||||||
dnl Some stuff for the icon.
|
dnl Some stuff for the icon.
|
||||||
case "$host" in
|
case "$host" in
|
||||||
*-*-cygwin* | *-*-mingw32*)
|
*-*-cygwin* | *-*-mingw32*)
|
||||||
@@ -274,13 +282,17 @@ case "$host" in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
dnl Some default CPU flags
|
if test x$enable_emscripten == xyes; then
|
||||||
case "$host_cpu" in
|
CXXFLAGS="$CXXFLAGS"
|
||||||
x86_64 | amd64)
|
else
|
||||||
# SSE is part of the x86_64 ABI
|
dnl Some default CPU flags
|
||||||
CXXFLAGS="$CXXFLAGS -msse"
|
case "$host_cpu" in
|
||||||
;;
|
x86_64 | amd64)
|
||||||
esac
|
# SSE is part of the x86_64 ABI
|
||||||
|
CXXFLAGS="$CXXFLAGS -msse"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
dnl Some needed libaries for OS2
|
dnl Some needed libaries for OS2
|
||||||
dnl perharps join this with the other target depended checks. move them upwards
|
dnl perharps join this with the other target depended checks. move them upwards
|
||||||
@@ -331,6 +343,7 @@ esac
|
|||||||
AM_CONDITIONAL(HAVE_WINDRES, test "x$WINDRES" != "x:")
|
AM_CONDITIONAL(HAVE_WINDRES, test "x$WINDRES" != "x:")
|
||||||
AC_SUBST(WINDRES)
|
AC_SUBST(WINDRES)
|
||||||
|
|
||||||
|
if test x$enable_emscripten != xyes; then
|
||||||
dnl Some target detection and actions for them
|
dnl Some target detection and actions for them
|
||||||
case "$host" in
|
case "$host" in
|
||||||
*-*-cygwin* | *-*-mingw32*)
|
*-*-cygwin* | *-*-mingw32*)
|
||||||
@@ -370,6 +383,7 @@ case "$host" in
|
|||||||
AC_DEFINE(OS2, 1, [Compiling on OS/2 EMX])
|
AC_DEFINE(OS2, 1, [Compiling on OS/2 EMX])
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
AM_CONDITIONAL(MACOSX, test x"$macosx" == x"1")
|
AM_CONDITIONAL(MACOSX, test x"$macosx" == x"1")
|
||||||
|
|
||||||
@@ -475,9 +489,11 @@ dnl LIBRARY TEST: SDLnet 1.x
|
|||||||
AC_CHECK_HEADER(SDL_net.h,have_sdl_net_h=yes,)
|
AC_CHECK_HEADER(SDL_net.h,have_sdl_net_h=yes,)
|
||||||
AC_CHECK_LIB(SDL_net, SDLNet_Init, have_sdl_net_lib=yes, , )
|
AC_CHECK_LIB(SDL_net, SDLNet_Init, have_sdl_net_lib=yes, , )
|
||||||
|
|
||||||
dnl LIBRARY TEST: X11 Xlib support
|
if test x$enable_emscripten != xyes; then
|
||||||
AC_CHECK_LIB(X11, main, have_x11_lib=yes, have_x11_lib=no, )
|
dnl LIBRARY TEST: X11 Xlib support
|
||||||
AC_CHECK_HEADER(X11/XKBlib.h, have_x11_h=yes, have_x11_h=no, )
|
AC_CHECK_LIB(X11, main, have_x11_lib=yes, have_x11_lib=no, )
|
||||||
|
AC_CHECK_HEADER(X11/XKBlib.h, have_x11_h=yes, have_x11_h=no, )
|
||||||
|
fi
|
||||||
|
|
||||||
dnl LIBRARY TEST: Fluidsynth support
|
dnl LIBRARY TEST: Fluidsynth support
|
||||||
AC_CHECK_HEADER(fluidsynth.h,have_fluidsynth_h=yes,)
|
AC_CHECK_HEADER(fluidsynth.h,have_fluidsynth_h=yes,)
|
||||||
@@ -686,26 +702,30 @@ else
|
|||||||
AC_MSG_WARN([Can't find libpcap, NE2000 ethernet passthrough disabled])
|
AC_MSG_WARN([Can't find libpcap, NE2000 ethernet passthrough disabled])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl FEATURE: Whether to use X11 XKBlib
|
if test x$enable_emscripten != xyes; then
|
||||||
AH_TEMPLATE(C_X11_XKB,[define to 1 if you have XKBlib.h and X11 lib])
|
dnl FEATURE: Whether to use X11 XKBlib
|
||||||
AC_MSG_CHECKING(for XKBlib support)
|
AH_TEMPLATE(C_X11_XKB,[define to 1 if you have XKBlib.h and X11 lib])
|
||||||
if test x$have_x11_lib = xyes -a x$have_x11_h = xyes ; then
|
AC_MSG_CHECKING(for XKBlib support)
|
||||||
LIBS="$LIBS -lX11 -lxkbfile"
|
if test x$have_x11_lib = xyes -a x$have_x11_h = xyes ; then
|
||||||
AC_DEFINE(C_X11_XKB,1)
|
LIBS="$LIBS -lX11 -lxkbfile"
|
||||||
AC_MSG_RESULT(yes)
|
AC_DEFINE(C_X11_XKB,1)
|
||||||
else
|
AC_MSG_RESULT(yes)
|
||||||
AC_MSG_RESULT(no)
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl FEATURE: Whether to use X11 XRandR
|
if test x$enable_emscripten != xyes; then
|
||||||
AH_TEMPLATE(C_X11_XRANDR,[define to 1 if you have XRandr.h and X11 lib])
|
dnl FEATURE: Whether to use X11 XRandR
|
||||||
AC_MSG_CHECKING(for XRandR support)
|
AH_TEMPLATE(C_X11_XRANDR,[define to 1 if you have XRandr.h and X11 lib])
|
||||||
if test x$have_x11_lib = xyes -a x$have_x11_h = xyes ; then
|
AC_MSG_CHECKING(for XRandR support)
|
||||||
LIBS="$LIBS -lXrandr"
|
if test x$have_x11_lib = xyes -a x$have_x11_h = xyes ; then
|
||||||
AC_DEFINE(C_X11_XRANDR,1)
|
LIBS="$LIBS -lXrandr"
|
||||||
AC_MSG_RESULT(yes)
|
AC_DEFINE(C_X11_XRANDR,1)
|
||||||
else
|
AC_MSG_RESULT(yes)
|
||||||
AC_MSG_RESULT(no)
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl FEATURE: Whether to use Fluidsynth
|
dnl FEATURE: Whether to use Fluidsynth
|
||||||
|
@@ -1,6 +1,11 @@
|
|||||||
|
|
||||||
|
/* Emscripten does not have endian.h */
|
||||||
|
# if defined(EMSCRIPTEN)
|
||||||
|
|
||||||
|
# include <endian.h>
|
||||||
|
|
||||||
/* MinGW implements some MSVC idioms, so always test for MinGW first. */
|
/* MinGW implements some MSVC idioms, so always test for MinGW first. */
|
||||||
#if defined(__MINGW32__)
|
# elif defined(__MINGW32__)
|
||||||
|
|
||||||
# if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
# if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||||
|
|
||||||
|
@@ -31,6 +31,9 @@
|
|||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
# define BYTESEX_LITTLE
|
# define BYTESEX_LITTLE
|
||||||
# define _G_DIR_SEPARATOR '\\'
|
# define _G_DIR_SEPARATOR '\\'
|
||||||
|
#elif defined(EMSCRIPTEN)
|
||||||
|
# define BYTESEX_LITTLE
|
||||||
|
# define _G_DIR_SEPARATOR '/'
|
||||||
#else
|
#else
|
||||||
# include "byteorder.h"
|
# include "byteorder.h"
|
||||||
# define _G_DIR_SEPARATOR '/'
|
# define _G_DIR_SEPARATOR '/'
|
||||||
|
@@ -104,7 +104,7 @@ bool sse2_available = false;
|
|||||||
|
|
||||||
void CheckSSESupport()
|
void CheckSSESupport()
|
||||||
{
|
{
|
||||||
#if defined (__GNUC__) || (_MSC_VER)
|
#if (defined (__GNUC__) || (_MSC_VER)) && !defined(EMSCRIPTEN)
|
||||||
Bitu a, b, c, d;
|
Bitu a, b, c, d;
|
||||||
cpuid(1, a, b, c, d);
|
cpuid(1, a, b, c, d);
|
||||||
sse2_available = ((d >> 26) & 1)?true:false;
|
sse2_available = ((d >> 26) & 1)?true:false;
|
||||||
@@ -905,7 +905,7 @@ void DOSBOX_SetupConfigSections(void) {
|
|||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(__SSE__) && !defined(_M_AMD64)
|
#if defined(__SSE__) && !defined(_M_AMD64) && !defined(EMSCRIPTEN)
|
||||||
CheckSSESupport();
|
CheckSSESupport();
|
||||||
#endif
|
#endif
|
||||||
SDLNetInited = false;
|
SDLNetInited = false;
|
||||||
|
Reference in New Issue
Block a user