Compiling FB with Emscripten
Build FB and a program on Windows for Emscripten
Prerequisites
- git installed
- development environment for fbc, rtlib, & gfxlib2
- understand PATH environment variable
- comfortable using a command prompt
- build of latest fbc (that includes latest changes)
Install Emscripten (on Windows)
d:/emsdk.git is assumed for installation directory
d: cd \ git clone https://github.com/emscripten-core/emsdk.git emsdk.git cd emsdk.git emsdk install latest emsdk activate latest emsdk_env.bat
Build FBC libraries (on Windows)
d:/fb.git is assumed for latest fbc checked out from repository
d: cd \fb.git REM whatever you use to set-up your fbc build environment (sets PATH) call c:\batch\setpath.bat fbgit32 REM add-in the emscripten build environment (also sets PATH) call d:\emsdk.git\emsdk_env.bat REM build the rtlib and gfxlib for emscripten make rtlib gfxlib2 TARGET=asmjs-unknown-emscripten ENABLE_STANDALONE=1
Hook for 'emcc.bat' (on Windows)
Here's the issue: fbc expects the supporting tools to be executable and emscripten font-end on windows uses 'emcc.bat' (plus python in the background) and fbc can't directly call a .BAT file. Here's a cheap hack to make it work:
Compile the following source and copy 'emcc.exe' to 'd:/fb.git/bin/js-asmjs/emcc.exe'
Compile the following source and copy 'emcc.exe' to 'd:/fb.git/bin/js-asmjs/emcc.exe'
'' emcc.exe to call emcc.bat and pass all arguments '' '' tested, but not well tested... '' function EscapeArg( byref arg as const string ) as string dim ret as string = """" for i as integer = 1 to len(arg) select case mid( arg, i, 1 ) case """" ret &= """""" case else ret &= mid( arg, i, 1 ) end select next ret &= """" function = ret end function dim cmd as string = "emcc.bat" dim i as integer = 1 while( command(i) > "" ) cmd += " " & EscapeArg( command(i) ) i += 1 wend '' assumes 'emcc.bat' is on PATH var result = shell( cmd ) end result
fbc emcc.bas copy emcc.exe d:\fb.git\bin\js-asmjs\emcc.exe
Build an FBC program from fbc source
The first time this runs, emcc takes a long time because emscripten needs to build it's own runtime library and store the result. After the first time, compile times should be much quicker.
REM whatever you use to set-up your fbc build environment (sets PATH) call c:\batch\setpath.bat fbgit32 REM add-in the emscripten build environment (also sets PATH) call d:\emsdk.git\emsdk_env.bat REM build program.bas fbc -target js-asmjs program.bas
Run 'program.html'
In the directory where 'program.html', 'program.js' & 'program.wasm' was created
Start a server:
Or the program:
Start a server:
> python -m http.server
Then, browse to the directory:Or the program:
Back to FreeBASIC Developer Information
Back to Table of Contents