Browse Source

HTML5 support via emscripten( no audio/sfx now)

Pal Lockheart 8 years ago
parent
commit
a0681238ce
10 changed files with 132 additions and 3 deletions
  1. 3 1
      .gitignore
  2. 3 0
      audio.c
  3. 21 0
      common.h
  4. 29 0
      emscripten/Makefile
  5. 29 0
      emscripten/Makefile.wasm
  6. 39 0
      emscripten/em.c
  7. 1 1
      liboggvorbis/include/ogg/config_types.h
  8. 1 1
      overlay.c
  9. 3 0
      palcfg.h
  10. 3 0
      video.c

+ 3 - 1
.gitignore

@@ -29,6 +29,8 @@ BundleArtifacts/
 *.html
 *.mem
 *.js
+*.wasm
+*.wast
 
 # Visual Studio 2015 cache/options directory
 .vs/
@@ -234,8 +236,8 @@ android/so
 *.keystore
 resources
 
-emscripten
 sdlpal
+data
 
 xcshareddata
 xcuserdata

+ 3 - 0
audio.c

@@ -202,6 +202,9 @@ AUDIO_OpenDevice(
       //
       return -1;
    }
+#ifdef __EMSCRIPTEN__ // Now either music/sound enabled will makes whole app crash in emscripten. Disabled until a solution is found.
+   return -1;
+#endif
 
    gAudioDevice.fOpened = FALSE;
    gAudioDevice.fMusicEnabled = TRUE;

+ 21 - 0
common.h

@@ -250,6 +250,27 @@ extern "C"
 # define PAL_CREDIT           "(Unknown)"
 # define PAL_PORTYEAR         "2015"
 
+#elif defined (__EMSCRIPTEN__)
+
+#include <emscripten.h>
+#define SDL_Delay emscripten_sleep
+
+#define PAL_PREFIX            "data/"
+#define PAL_SAVE_PREFIX       "data/"
+#define PAL_HAS_TOUCH         0
+#define PAL_DEFAULT_WINDOW_WIDTH   320
+#define PAL_DEFAULT_WINDOW_HEIGHT  200
+
+# if SDL_VERSION_ATLEAST(2,0,0)
+#  define PAL_VIDEO_INIT_FLAGS  (SDL_WINDOW_SHOWN)
+# else
+#  define PAL_VIDEO_INIT_FLAGS  (SDL_HWSURFACE | SDL_FULLSCREEN)
+# endif
+
+# define PAL_PLATFORM         "Emscripten"
+# define PAL_CREDIT           "palxex"
+# define PAL_PORTYEAR         "2016"
+
 #else
 
 # ifndef PAL_HAS_JOYSTICKS

+ 29 - 0
emscripten/Makefile

@@ -0,0 +1,29 @@
+# Adapted from Makefile for Dingux by palxex
+
+TARGET = sdlpal.html
+
+HOST =
+
+
+CFILES = $(wildcard ../adplug/*.c) $(wildcard ../libmad/*.c) $(wildcard ../liboggvorbis/src/*.c) $(wildcard ../*.c) em.c
+CPPFILES = $(wildcard ../adplug/*.cpp) $(wildcard ../*.cpp) $(wildcard ./*.cpp)
+OBJFILES = $(CFILES:.c=.o) $(CPPFILES:.cpp=.o)
+
+CFLAGS = -I${EMSCRIPTEN_TOOLCHAIN}/include/SDL2 -g -Wall -O2 -fno-strict-aliasing -I../ -I../liboggvorbis/include -I../liboggvorbis/src -DPAL_HAS_PLATFORM_SPECIFIC_UTILS
+LDFLAGS = -L${EMSCRIPTEN_TOOLCHAIN}/lib -lSDL2 -lm -lstdc++ --preload-file data -s TOTAL_MEMORY=134217728 -s TOTAL_STACK=5242880 --emrun -s DEMANGLE_SUPPORT=1 -s EMTERPRETIFY=1 -s EMTERPRETIFY_ASYNC=1 -s 'EMTERPRETIFY_FILE="sdlpal.bc"'
+
+.c.o:
+	emcc -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
+.cpp.o:
+	em++ -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
+	
+$(TARGET):$(OBJFILES)
+	em++ $(CFLAGS) -o $(TARGET) $(OBJFILES) $(LDFLAGS)
+
+clean:
+	rm -f $(OBJFILES)
+	rm -f $(TARGET) *.bc *.mem *.js *.data *.wast *.wasm
+
+repackage:
+	rm -f $(TARGET) *.bc *.mem *.js *.data *.wast *.wasm
+	em++ $(CFLAGS) -o $(TARGET) $(OBJFILES) $(LDFLAGS)

+ 29 - 0
emscripten/Makefile.wasm

@@ -0,0 +1,29 @@
+# Adapted from Makefile for Dingux by palxex
+
+TARGET = sdlpal.html
+
+HOST =
+
+
+CFILES = $(wildcard ../adplug/*.c) $(wildcard ../libmad/*.c) $(wildcard ../liboggvorbis/src/*.c) $(wildcard ../*.c) em.c
+CPPFILES = $(wildcard ../adplug/*.cpp) $(wildcard ../*.cpp) $(wildcard ./*.cpp)
+OBJFILES = $(CFILES:.c=.o) $(CPPFILES:.cpp=.o)
+
+CFLAGS = -I${EMSCRIPTEN_TOOLCHAIN}/include/SDL2 -g -Wall -O2 -fno-strict-aliasing -I../ -I../liboggvorbis/include -I../liboggvorbis/src -DPAL_HAS_PLATFORM_SPECIFIC_UTILS
+LDFLAGS = -L${EMSCRIPTEN_TOOLCHAIN}/lib -lSDL2 -lm -lstdc++ --preload-file data -s TOTAL_MEMORY=134217728 -s TOTAL_STACK=5242880 --emrun -s DEMANGLE_SUPPORT=1 -s WASM=1 -s ASYNCIFY=1
+
+.c.o:
+	emcc -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
+.cpp.o:
+	em++ -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
+	
+$(TARGET):$(OBJFILES)
+	em++ $(CFLAGS) -o $(TARGET) $(OBJFILES) $(LDFLAGS)
+
+clean:
+	rm -f $(OBJFILES)
+	rm -f $(TARGET) *.bc *.mem *.js *.data *.wast *.wasm
+
+repackage:
+	rm -f $(TARGET) *.bc *.mem *.js *.data *.wast *.wasm
+	em++ $(CFLAGS) -o $(TARGET) $(OBJFILES) $(LDFLAGS)

+ 39 - 0
emscripten/em.c

@@ -0,0 +1,39 @@
+#include "palcommon.h"
+#include "global.h"
+#include "palcfg.h"
+
+BOOL
+UTIL_GetScreenSize(
+   DWORD *pdwScreenWidth,
+   DWORD *pdwScreenHeight
+)
+{
+   *pdwScreenWidth  = 640;
+   *pdwScreenHeight = 400;
+   return TRUE;
+}
+
+BOOL
+UTIL_IsAbsolutePath(
+	LPCSTR  lpszFileName
+)
+{
+	return FALSE;
+}
+
+INT
+UTIL_Platform_Init(
+   int argc,
+   char* argv[]
+)
+{
+   gConfig.fLaunchSetting = FALSE;
+   return 0;
+}
+
+VOID
+UTIL_Platform_Quit(
+   VOID
+)
+{
+}

+ 1 - 1
liboggvorbis/include/ogg/config_types.h

@@ -2,7 +2,7 @@
 #ifndef _CONFIG_TYPES_H
 #define _CONFIG_TYPES_H
 
-#if defined(__ANDROID__) || defined(__IOS__) || defined(__linux__)
+#if defined(__ANDROID__) || defined(__IOS__) || defined(__linux__) || defined(__EMSCRIPTEN__)
 
 /* Android or iOS compiler */
 #	include <stdint.h>

+ 1 - 1
overlay.c

@@ -5297,7 +5297,7 @@ int PAL_OverlayBMPLength()
 	return 1024138;	// Fixed size here
 }
 
-const void * PAL_LoadOverlayBMP(int *length)
+const void * PAL_LoadOverlayBMP()
 {
 	void *bmp = malloc(PAL_OverlayBMPLength());
 	uint8_t *ptr = (uint8_t *)bmp + sizeof(bmp_header);

+ 3 - 0
palcfg.h

@@ -28,6 +28,9 @@ extern "C"
 # endif
 
 #include "palcommon.h"
+#ifdef __EMSCRIPTEN__
+#include <ctype.h>
+#endif
 
 #define     PAL_MAX_SAMPLERATE           48000
 #define     PAL_MAX_VOLUME               100

+ 3 - 0
video.c

@@ -20,6 +20,9 @@
 //
 
 #include "main.h"
+#ifdef __EMSCRIPTEN__
+#include <sys/time.h>
+#endif
 
 // Screen buffer
 SDL_Surface              *gpScreen           = NULL;