Emscripten Fast Tutorial :

Richard Juan
2 min readJul 20, 2018

--

Quickly being able to start codding!

Installation :

I did it on Windows10 but it should be fairly the same on Linux and OSX :)
it’s good to clear your path environment variable from any reference to python while working with emscripten. you should put an alias or a script to setup your environment according to the context.

#get emscripten 
git clone https://github.com/juj/emsdk.git
# install the tools
cd emsdk
emsdk install latest
# find the name of the sdk
emsdk list
# active it in the configuration
emsdk activate sdk-xxx
# get path etc in the curent prompt
emsdk_env.bat

copy’n’paste the following test code:

#include <stdio.h>
#include <SDL/SDL.h>
#ifdef __EMSCRIPTEN__
#include <emscripten.h>
#endif
extern "C" int main(int argc, char** argv) {
printf("hello, world!\n");
SDL_Init(SDL_INIT_VIDEO);
SDL_Surface *screen = SDL_SetVideoMode(256, 256, 32, SDL_SWSURFACE);
#ifdef TEST_SDL_LOCK_OPTS
EM_ASM("SDL.defaults.copyOnLock = false; SDL.defaults.discardOnLock = true; SDL.defaults.opaqueFrontBuffer = false;");
#endif
if (SDL_MUSTLOCK(screen)) SDL_LockSurface(screen);
for (int i = 0; i < 256; i++) {
for (int j = 0; j < 256; j++) {
#ifdef TEST_SDL_LOCK_OPTS
// Alpha behaves like in the browser, so write proper opaque pixels.
int alpha = 255;
#else
// To emulate native behavior with blitting to screen, alpha component is ignored. Test that it is so by outputting
// data (and testing that it does get discarded)
int alpha = (i+j) % 255;
#endif
*((Uint32*)screen->pixels + i * 256 + j) = SDL_MapRGBA(screen->format, i, j, 255-i, alpha);
}
}
if (SDL_MUSTLOCK(screen)) SDL_UnlockSurface(screen);
SDL_Flip(screen);
printf("you should see a smoothly-colored square - no sharp lines but the square borders!\n");
printf("and here is some text that should be HTML-friendly: amp: |&| double-quote: |\"| quote: |'| less-than, greater-than, html-like tags: |<cheez></cheez>|\nanother line.\n");
SDL_Quit(); return 0;
}

save it under hello_sdl.cpp and run:

emcc hello_sdl.cpp -o index.html
python -m SimpleHTTPServer

Go to http://127.0.0.1:8000/ and you should see a colored square with some printed messages :D

--

--