From 9834a95f0e98efa02da019df902291a6cdd8ffbf Mon Sep 17 00:00:00 2001 From: MatthewBeshay <92357869+MatthewBeshay@users.noreply.github.com> Date: Wed, 8 Apr 2026 20:09:03 +1000 Subject: [PATCH] build: break platform_sdl2 up into per-subsystem libraries --- targets/app/meson.build | 1 + targets/minecraft/meson.build | 1 + targets/platform/fs/meson.build | 12 ++++++ targets/platform/input/meson.build | 13 +++++++ targets/platform/meson.build | 55 +++++++++------------------ targets/platform/profile/meson.build | 12 ++++++ targets/platform/renderer/meson.build | 13 +++++++ targets/platform/storage/meson.build | 12 ++++++ 8 files changed, 82 insertions(+), 37 deletions(-) create mode 100644 targets/platform/fs/meson.build create mode 100644 targets/platform/input/meson.build create mode 100644 targets/platform/profile/meson.build create mode 100644 targets/platform/renderer/meson.build create mode 100644 targets/platform/storage/meson.build diff --git a/targets/app/meson.build b/targets/app/meson.build index 7fd687740..6641edc3f 100644 --- a/targets/app/meson.build +++ b/targets/app/meson.build @@ -15,6 +15,7 @@ client_dependencies = [ input_dep, profile_dep, storage_dep, + fs_dep, assets_localisation_dep, platform_dep, minecraft_dep, diff --git a/targets/minecraft/meson.build b/targets/minecraft/meson.build index 76e7f3fc6..2de8cc71a 100644 --- a/targets/minecraft/meson.build +++ b/targets/minecraft/meson.build @@ -28,6 +28,7 @@ lib_minecraft = static_library('minecraft', input_dep, profile_dep, storage_dep, + fs_dep, glm_dep, nbt_dep, java_dep, diff --git a/targets/platform/fs/meson.build b/targets/platform/fs/meson.build new file mode 100644 index 000000000..bb91f51fb --- /dev/null +++ b/targets/platform/fs/meson.build @@ -0,0 +1,12 @@ +lib_platform_fs_std = static_library( + 'platform_fs_std', + files('std/StdFilesystem.cpp'), + include_directories: [platform_inc, include_directories('../..')], + dependencies: [_threads], + cpp_args: global_cpp_args + global_cpp_defs, +) + +fs_dep = declare_dependency( + link_with: lib_platform_fs_std, + include_directories: [platform_inc], +) diff --git a/targets/platform/input/meson.build b/targets/platform/input/meson.build new file mode 100644 index 000000000..3ae17a68e --- /dev/null +++ b/targets/platform/input/meson.build @@ -0,0 +1,13 @@ +lib_platform_input_sdl2 = static_library( + 'platform_input_sdl2', + files('sdl2/SDL2Input.cpp'), + include_directories: [platform_inc, include_directories('../..')], + dependencies: [_sdl2, _threads], + cpp_args: global_cpp_args + global_cpp_defs, +) + +input_dep = declare_dependency( + link_with: lib_platform_input_sdl2, + include_directories: [platform_inc], + dependencies: [_sdl2], +) diff --git a/targets/platform/meson.build b/targets/platform/meson.build index 7aed1816f..a52dc8255 100644 --- a/targets/platform/meson.build +++ b/targets/platform/meson.build @@ -1,6 +1,16 @@ platform_inc = include_directories('.') _threads = dependency('threads') +_sdl2 = dependency('sdl2') +if get_option('renderer') == 'gles' + _gl = dependency('glesv2', required: true) + _defs = ['-DGLES'] +else + _gl = dependency('gl', required: true) + _defs = [] +endif + +# Core: thread + shutdown plumbing, no backend. lib_platform_core = static_library('platform_core', files('C4JThread.cpp', 'ShutdownManager.cpp'), include_directories: [platform_inc, include_directories('..')], @@ -13,40 +23,11 @@ platform_dep = declare_dependency( include_directories: platform_inc, ) -# SDL2-based platform implementations (formerly 4J.* modules) -_sdl2 = dependency('sdl2') -_defs = [] - -if get_option('renderer') == 'gles' - _gl = dependency('glesv2', required: true) - _defs += ['-DGLES'] -else - _gl = dependency('gl', required: true) -endif - -sdl2_sources = files( - 'input/sdl2/SDL2Input.cpp', - 'profile/stub/StubProfile.cpp', - 'storage/stub/StubStorage.cpp', - 'renderer/gl/GLRenderer.cpp', - 'renderer/gl/render_stubs.cpp', - 'fs/std/StdFilesystem.cpp', -) - -lib_platform_sdl2 = static_library('platform_sdl2', - sdl2_sources, - include_directories: [platform_inc], - dependencies: [_sdl2, _gl, _threads, glm_dep, stb_dep, java_dep], - cpp_args: _defs + global_cpp_args + global_cpp_defs, -) - -# Combined dependency: interfaces + SDL2 implementations -# Replaces the old render_dep, input_dep, profile_dep, storage_dep -render_dep = declare_dependency( - link_with: lib_platform_sdl2, - include_directories: [platform_inc], - dependencies: [_sdl2, _gl, _threads, glm_dep], -) -input_dep = render_dep -profile_dep = render_dep -storage_dep = render_dep +# Per-subsystem backends. Each lives in its own subdir and produces its +# own library + dep so consumers can ask for the subsystem they need +# without dragging the others in. +subdir('input') +subdir('profile') +subdir('storage') +subdir('fs') +subdir('renderer') diff --git a/targets/platform/profile/meson.build b/targets/platform/profile/meson.build new file mode 100644 index 000000000..8990e76d4 --- /dev/null +++ b/targets/platform/profile/meson.build @@ -0,0 +1,12 @@ +lib_platform_profile_stub = static_library( + 'platform_profile_stub', + files('stub/StubProfile.cpp'), + include_directories: [platform_inc, include_directories('../..')], + dependencies: [_threads], + cpp_args: global_cpp_args + global_cpp_defs, +) + +profile_dep = declare_dependency( + link_with: lib_platform_profile_stub, + include_directories: [platform_inc], +) diff --git a/targets/platform/renderer/meson.build b/targets/platform/renderer/meson.build new file mode 100644 index 000000000..ee1bfa419 --- /dev/null +++ b/targets/platform/renderer/meson.build @@ -0,0 +1,13 @@ +lib_platform_renderer_gl = static_library( + 'platform_renderer_gl', + files('gl/GLRenderer.cpp', 'gl/render_stubs.cpp'), + include_directories: [platform_inc, include_directories('../..')], + dependencies: [_sdl2, _gl, _threads, glm_dep, stb_dep, java_dep], + cpp_args: _defs + global_cpp_args + global_cpp_defs, +) + +render_dep = declare_dependency( + link_with: lib_platform_renderer_gl, + include_directories: [platform_inc], + dependencies: [_sdl2, _gl, _threads, glm_dep], +) diff --git a/targets/platform/storage/meson.build b/targets/platform/storage/meson.build new file mode 100644 index 000000000..a4b5d57ec --- /dev/null +++ b/targets/platform/storage/meson.build @@ -0,0 +1,12 @@ +lib_platform_storage_stub = static_library( + 'platform_storage_stub', + files('stub/StubStorage.cpp'), + include_directories: [platform_inc, include_directories('../..')], + dependencies: [_threads], + cpp_args: global_cpp_args + global_cpp_defs, +) + +storage_dep = declare_dependency( + link_with: lib_platform_storage_stub, + include_directories: [platform_inc], +)