Support compiling demos in wasm build
This commit is contained in:
parent
d1c48e4c5f
commit
3eb4a40c39
11 changed files with 139 additions and 43 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -9,6 +9,7 @@
|
|||
!skeleton.html
|
||||
!**/meson.build
|
||||
!**/*.wrap
|
||||
!**/*.ini
|
||||
!meson_options.txt
|
||||
!compile_wasm.py
|
||||
!compile_android.py
|
||||
6
demos/external/sources/mmutils/thread_pool.d
vendored
6
demos/external/sources/mmutils/thread_pool.d
vendored
|
|
@ -17,10 +17,8 @@ version (Posix)version = MM_USE_POSIX_THREADS;
|
|||
version (WebAssembly)
|
||||
{
|
||||
version = MM_NO_LOGS;
|
||||
extern(C) struct FILE
|
||||
{
|
||||
|
||||
}
|
||||
version = MM_USE_POSIX_THREADS;
|
||||
struct FILE;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -8,22 +8,19 @@ demos_inc = include_directories('source/')
|
|||
external_inc = include_directories('external/sources/')
|
||||
|
||||
# Argumesnts
|
||||
not_wasm = host_machine.cpu_family() != 'wasm32'
|
||||
versions = ['BindSDL_Image','SDL_208', 'BindBC_Static', 'BindSDL_Static']
|
||||
|
||||
# Dependencies
|
||||
bindbc_loader_dep = dependency('bindbc-loader')
|
||||
bindbc_sdl_dep = dependency('bindbc-sdl')
|
||||
cimgui_dep = dependency('cimgui')
|
||||
sdl2_dep = dependency('SDL2')
|
||||
sdl2_image_dep = dependency('SDL2_image')
|
||||
sdl2_dep = dependency('SDL2', required: not_wasm) # On wasm delivered by Emscripten
|
||||
sdl2_image_dep = dependency('SDL2_image', required: not_wasm)
|
||||
|
||||
subdir('utils') # Utils library
|
||||
|
||||
executable('decs-demos', [demos_src, external_src],
|
||||
include_directories : [demos_inc, external_inc],
|
||||
d_module_versions : versions,
|
||||
link_with : [ecs_lib, ecs_utils_lib],
|
||||
dependencies : [
|
||||
deps = [
|
||||
bindbc_loader_dep,
|
||||
bindbc_sdl_dep,
|
||||
cimgui_dep,
|
||||
|
|
@ -31,5 +28,41 @@ executable('decs-demos', [demos_src, external_src],
|
|||
ecs_utils_dep,
|
||||
sdl2_dep,
|
||||
sdl2_image_dep,
|
||||
],
|
||||
)
|
||||
]
|
||||
|
||||
if not_wasm
|
||||
exe = executable('decs-demos', [demos_src, external_src],
|
||||
include_directories : [demos_inc, external_inc],
|
||||
d_module_versions : versions,
|
||||
link_with : [ecs_lib, ecs_utils_lib],
|
||||
dependencies : deps,
|
||||
)
|
||||
|
||||
test('basic-tests', exe)
|
||||
else
|
||||
decs_demos_lib = library('decs-demos', [demos_src, external_src],
|
||||
include_directories : [demos_inc, external_inc],
|
||||
d_module_versions : versions,
|
||||
dependencies : deps,
|
||||
)
|
||||
cimgui_lib = subproject('cimgui').get_variable('lib')
|
||||
sdl2_lib = subproject('bindbc-sdl').get_variable('lib')
|
||||
file_packager = find_program('file_packager')
|
||||
|
||||
# Pack assets
|
||||
assets_path = meson.source_root() / 'demos/assets@assets'
|
||||
packed_assets = custom_target('packed-assets-web',
|
||||
command: [file_packager, 'demos/assets.data', '--preload', assets_path, '--js-output=@OUTPUT@'],
|
||||
output: ['assets.js'],
|
||||
build_by_default: true,
|
||||
)
|
||||
|
||||
wasm_web = custom_target('decs-demos-wasm-web',
|
||||
command: [emcc, args_wasm, '--pre-js', packed_assets, '-o', '@OUTPUT@', '@INPUT@'],
|
||||
input: [sdl2_lib, ecs_lib, decs_demos_lib, ecs_utils_lib, cimgui_lib],
|
||||
output: ['game.html'],
|
||||
build_by_default: true,
|
||||
)
|
||||
summary('decs-demoswasm-index', wasm_web.full_path())
|
||||
endif
|
||||
|
||||
|
|
|
|||
10
meson.build
10
meson.build
|
|
@ -50,11 +50,17 @@ endif
|
|||
add_global_arguments(args, language : 'd')
|
||||
add_global_link_arguments(link_args, language : 'd')
|
||||
|
||||
if host_machine.cpu_family() == 'wasm32'
|
||||
add_global_arguments('--output-bc', language : 'd') # Adding it in cross files breaks linker detection
|
||||
emcc = find_program('emcc')
|
||||
args_wasm = ['-s', 'FORCE_FILESYSTEM=1','-s', 'USE_PTHREADS=1', '-s', 'USE_SDL=2', '-s', 'ALLOW_MEMORY_GROWTH=1', '-s', 'WASM_MEM_MAX=1024MB', '-s', 'MALLOC=dlmalloc', '-s', 'WASM=1']
|
||||
endif
|
||||
|
||||
|
||||
# Dependencies
|
||||
threads_dep = dependency('threads')
|
||||
|
||||
ecs_lib = library('decs',
|
||||
src,
|
||||
ecs_lib = library('decs', src,
|
||||
include_directories : [inc],
|
||||
)
|
||||
|
||||
|
|
|
|||
3
meson_crosscompile_base.ini
Normal file
3
meson_crosscompile_base.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
[constants]
|
||||
emscripten_path = '<change-path>/emsdk/upstream/emscripten'
|
||||
ldc_path = '<change-path>/ldc-1.25.0/bin'
|
||||
28
meson_crosscompile_wasm.ini
Normal file
28
meson_crosscompile_wasm.ini
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
; Ex. build:
|
||||
; meson setup b_wasm -DbetterC=true -DBuildDemos=true --cross-file=meson_crosscompile_base.ini --cross-file=meson_crosscompile_wasm.ini
|
||||
; ninja -C b_wasm
|
||||
; emrun --browser chromium-browser ./b_wasm/demos/game.h
|
||||
|
||||
[binaries]
|
||||
emcc = emscripten_path / 'emcc'
|
||||
file_packager = [ 'python3', emscripten_path / 'tools/file_packager.py']
|
||||
c = emscripten_path / 'emcc'
|
||||
cpp = emscripten_path / 'em++'
|
||||
ar = emscripten_path / 'emar'
|
||||
d = ldc_path / 'ldc2'
|
||||
; exe_wrapper = emscripten_path / 'emrun'
|
||||
|
||||
[properties]
|
||||
needs_exe_wrapper = true
|
||||
|
||||
[built-in options]
|
||||
d_args = ['-mtriple=wasm32-unknown-unknown-wasm', '--d-version=ECSEmscripten']
|
||||
c_args = ['-s', 'FORCE_FILESYSTEM=1','-s', 'USE_PTHREADS=1', '-s', 'USE_SDL=2', '-s', 'ALLOW_MEMORY_GROWTH=1', '-s', 'WASM_MEM_MAX=1024MB', '-s', 'MALLOC=dlmalloc', '-s', 'WASM=1']
|
||||
cpp_args = ['-s', 'FORCE_FILESYSTEM=1','-s', 'USE_PTHREADS=1', '-s', 'USE_SDL=2', '-s', 'ALLOW_MEMORY_GROWTH=1', '-s', 'WASM_MEM_MAX=1024MB', '-s', 'MALLOC=dlmalloc', '-s', 'WASM=1']
|
||||
default_library = 'static'
|
||||
|
||||
[host_machine]
|
||||
system = 'Emscripten'
|
||||
cpu_family = 'wasm32'
|
||||
cpu = 'wasm32'
|
||||
endian = 'little'
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
[wrap-git]
|
||||
url = https://github.com/BindBC/bindbc-loader.git
|
||||
revision = 9a51af991acce3c67e51695c07bf3fa6419ef938
|
||||
url = https://github.com/mmcomando/bindbc-loader.git
|
||||
push-url = https://github.com/BindBC/bindbc-loader.git
|
||||
revision = wasm
|
||||
patch_directory = bindbc-loader
|
||||
|
||||
[provide]
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
[wrap-git]
|
||||
url = https://github.com/BindBC/bindbc-sdl.git
|
||||
revision = 5c936064b7226630f5080f4b12b77ee39c8ac64b
|
||||
url = https://github.com/mmcomando/bindbc-sdl.git
|
||||
push-url = https://github.com/BindBC/bindbc-sdl.git
|
||||
revision = wasm
|
||||
patch_directory = bindbc-sdl
|
||||
|
||||
[provide]
|
||||
|
|
|
|||
|
|
@ -3,12 +3,17 @@ project('bindbc-loader', 'd', version : '0.3.2', default_options: ['default_libr
|
|||
# Files
|
||||
src = files(
|
||||
'source/bindbc/loader/package.d',
|
||||
'source/bindbc/loader/sharedlib.d',
|
||||
# 'source/bindbc/loader/sharedlib.d', # Not implemented for wasm
|
||||
'source/bindbc/loader/system.d',
|
||||
)
|
||||
|
||||
inc = include_directories('source')
|
||||
|
||||
if host_machine.cpu_family() != 'wasm32'
|
||||
src = files(
|
||||
'source/bindbc/loader/sharedlib.d',
|
||||
)
|
||||
endif
|
||||
# Dependencies
|
||||
lib = library('bindbc-loader', src,
|
||||
include_directories : [inc],
|
||||
|
|
|
|||
|
|
@ -1,24 +1,33 @@
|
|||
project('cimgui', 'cpp', version : '1.73.0', default_options: ['default_library=shared', 'warning_level=1'])
|
||||
project('cimgui', 'cpp', version : '1.73.0', default_options: ['default_library=static', 'warning_level=1'])
|
||||
|
||||
# Files
|
||||
src = [
|
||||
src = files(
|
||||
'cimgui.cpp',
|
||||
'imgui/imgui.cpp',
|
||||
'imgui/imgui_draw.cpp',
|
||||
'imgui/imgui_demo.cpp',
|
||||
'imgui/imgui_widgets.cpp',
|
||||
]
|
||||
)
|
||||
|
||||
inc = [ '.' ]
|
||||
inc +='imgui/examples/'
|
||||
pub_inc = [ 'imgui' ]
|
||||
|
||||
# Dependencies
|
||||
# bindbc_loader_dep = dependency('bindbc-loader')
|
||||
if host_machine.cpu_family() == 'wasm32'
|
||||
# For wasm we use C++ events/image handling implementation
|
||||
src += files(
|
||||
'imgui/examples/imgui_impl_opengl3.cpp',
|
||||
'imgui/examples/imgui_impl_sdl.cpp',
|
||||
)
|
||||
endif
|
||||
|
||||
lib = shared_library('cimgui', src,
|
||||
# dependencies : bindbc_loader_dep,
|
||||
|
||||
add_project_arguments('-DIMGUI_IMPL_API=extern "C" ', language : 'cpp')
|
||||
|
||||
# Dependencies
|
||||
lib = library('cimgui', src,
|
||||
include_directories : [inc, pub_inc],
|
||||
# pic : true,
|
||||
pic : true,
|
||||
)
|
||||
|
||||
cimgui_dep = declare_dependency(
|
||||
|
|
|
|||
|
|
@ -2,12 +2,23 @@ tests_src = files(
|
|||
'tests.d',
|
||||
)
|
||||
|
||||
exe = executable('decs-tests',
|
||||
tests_src,
|
||||
include_directories : [inc],
|
||||
d_args : args,
|
||||
link_args : link_args,
|
||||
dependencies : decs_dep,
|
||||
)
|
||||
|
||||
test('basic-tests', exe)
|
||||
if host_machine.cpu_family() != 'wasm32'
|
||||
exe = executable('decs-tests', tests_src,
|
||||
include_directories : [inc],
|
||||
dependencies : decs_dep,
|
||||
)
|
||||
|
||||
test('basic-tests', exe)
|
||||
else
|
||||
tests_lib = library('decs-tests', tests_src,
|
||||
include_directories : [inc],
|
||||
)
|
||||
wasm_web = custom_target('wasm-web',
|
||||
command: [emcc, args_wasm, '-o', '@OUTPUT@', '@INPUT@'],
|
||||
input: [ecs_lib, tests_lib],
|
||||
output: ['index.html'],
|
||||
build_by_default: true,
|
||||
)
|
||||
summary('wasm-index', wasm_web.full_path())
|
||||
endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue