project( 'imgui', 'cpp', license: 'MIT', version: '1.92.5', meson_version: '>=0.56.0', ) if host_machine.system() == 'darwin' add_languages( 'objcpp', native: false, ) endif include_dirs = include_directories('.', 'backends') sources = files( 'imgui.cpp', 'imgui_demo.cpp', 'imgui_draw.cpp', 'imgui_tables.cpp', 'imgui_widgets.cpp', 'misc/cpp/imgui_stdlib.cpp', ) cpp = meson.get_compiler('cpp') dependencies = [] # renderer backends dependencies += cpp.find_library( 'd3dcompiler', required: host_machine.system() == 'windows', ) dx9_dep = cpp.find_library( 'd3d9', required: get_option('dx9'), ) if dx9_dep.found() sources += 'backends/imgui_impl_dx9.cpp' dependencies += dx9_dep endif dx10_dep = cpp.find_library( 'd3d10', required: get_option('dx10'), ) if dx10_dep.found() sources += 'backends/imgui_impl_dx10.cpp' dependencies += dx10_dep endif dx11_dep = cpp.find_library( 'd3d11', required: get_option('dx11'), ) if dx11_dep.found() sources += 'backends/imgui_impl_dx11.cpp' dependencies += dx11_dep endif dx12_dep = cpp.find_library( 'd3d12', required: get_option('dx12'), ) if dx12_dep.found() sources += 'backends/imgui_impl_dx12.cpp' dependencies += dx12_dep endif dxgi_dep = cpp.find_library( 'dxgi', required: get_option('dx12'), ) if dxgi_dep.found() dependencies += dxgi_dep endif metal_dep = dependency( 'appleframeworks', modules: ['Foundation', 'AppKit', 'GameController', 'Metal', 'QuartzCore'], required: get_option('metal'), ) if metal_dep.found() sources += 'backends/imgui_impl_metal.mm' dependencies += metal_dep endif libgl_dep = dependency( 'gl', required: get_option('opengl'), ) if libgl_dep.found() sources += 'backends/imgui_impl_opengl3.cpp' dependencies += libgl_dep dependencies += cpp.find_library( 'dl', required: false, ) endif sdl2_renderer_dep = dependency( 'sdl2', version: '>=2.0.17', required: get_option('sdl2_renderer'), ) if sdl2_renderer_dep.found() sources += 'backends/imgui_impl_sdlrenderer2.cpp' dependencies += sdl2_renderer_dep endif sdl3_renderer_dep = dependency( 'sdl3', version: '>=3.1.8', required: get_option('sdl3_renderer'), ) if sdl3_renderer_dep.found() sources += 'backends/imgui_impl_sdlrenderer3.cpp' dependencies += sdl3_renderer_dep endif sdl3_gpu_dep = dependency( 'sdl3', version: '>=3.1.8', required: get_option('sdl3_gpu'), ) if sdl3_gpu_dep.found() sources += 'backends/imgui_impl_sdlgpu3.cpp' dependencies += sdl3_gpu_dep endif vulkan_dep = dependency( 'vulkan', required: get_option('vulkan'), ) if vulkan_dep.found() sources += 'backends/imgui_impl_vulkan.cpp' dependencies += vulkan_dep endif if cpp.has_header( 'webgpu/webgpu.h', required: get_option('webgpu'), ) sources += 'backends/imgui_impl_wgpu.cpp' endif # platform backends glfw_dep = dependency( 'glfw3', version: '>=3.0', required: get_option('glfw'), ) if glfw_dep.found() sources += 'backends/imgui_impl_glfw.cpp' dependencies += glfw_dep endif sdl2_dep = dependency( 'sdl2', required: get_option('sdl2'), ) if sdl2_dep.found() sources += 'backends/imgui_impl_sdl2.cpp' dependencies += sdl2_dep endif sdl3_dep = dependency( 'sdl3', required: get_option('sdl3'), ) if sdl3_dep.found() sources += 'backends/imgui_impl_sdl3.cpp' dependencies += sdl3_dep endif osx_dep = dependency( 'appleframeworks', modules: ['Carbon', 'Cocoa', 'GameController'], required: get_option('osx'), ) if osx_dep.found() sources += 'backends/imgui_impl_osx.mm' endif win_dep = cpp.find_library( 'dwmapi', required: get_option('win'), ) if win_dep.found() sources += 'backends/imgui_impl_win32.cpp' dependencies += win_dep endif # frameworks allegro5_dep = dependency( 'allegro-5', required: get_option('allegro5'), ) allegro5_primitives_dep = dependency( 'allegro_primitives-5', required: get_option('allegro5'), ) if allegro5_dep.found() and allegro5_primitives_dep.found() sources += 'backends/imgui_impl_allegro5.cpp' dependencies += [allegro5_dep, allegro5_primitives_dep] endif api = '-DIMGUI_API=__attribute__((visibility("default")))' if host_machine.system() == 'windows' api = '-DIMGUI_API=@0@'.format( get_option('default_library') != 'static' ? '__declspec(dllexport)' : '', ) endif imgui = library( 'imgui', sources, cpp_args: api, gnu_symbol_visibility: 'hidden', dependencies: dependencies, include_directories: include_dirs, install: true, ) if host_machine.system() == 'windows' api = '-DIMGUI_API=@0@'.format( get_option('default_library') != 'static' ? '__declspec(dllimport)' : '', ) endif imgui_dep = declare_dependency( compile_args: api, include_directories: include_dirs, link_with: imgui, ) meson.override_dependency('imgui-docking', imgui_dep)