project(
  'graphics-test',
  'cpp',
  version: '0.1.0',
  default_options: ['cpp_std=c++26', 'warning_level=everything', 'buildtype=debugoptimized'],
)

cpp = meson.get_compiler('cpp')

common_cpp_args = [
  '-Wno-c++20-compat',
  '-Wno-c++20-extensions',
  '-Wno-c++98-compat',
  '-Wno-c++98-compat-pedantic',
  '-Wno-disabled-macro-expansion',
  '-Wno-missing-prototypes',
  '-Wno-padded',
  '-Wno-pre-c++20-compat-pedantic',
  '-Wno-switch-default',
  '-Wno-unsafe-buffer-usage',
  '-Wunused-function',
  '-fvisibility=hidden',
]

add_project_arguments(cpp.get_supported_arguments(common_cpp_args), language: 'cpp')

deps = [
  dependency('fmt', include_type: 'system'),
  dependency('glfw3', include_type: 'system'),
  dependency('glm', include_type: 'system'),
  dependency('vulkan', include_type: 'system'),
]

glslang_dep = cpp.find_library('glslang', required: false)

if not glslang_dep.found()
  glslang_dep = dependency('glslang', required: true, include_type: 'system')
endif

spirv_dep = cpp.find_library('SPIRV', required: false)

if not spirv_dep.found()
  spirv_dep = dependency('SPIRV', required: true, include_type: 'system')
endif

imgui_dep = dependency('imgui', required: false, include_type: 'system')

if not imgui_dep.found()
  imgui_dep = cpp.find_library('imgui', required: true)
endif

deps += [glslang_dep, spirv_dep, imgui_dep]

executable(
  'graphics-test',
  sources: files('src/main.cpp'),
  include_directories: include_directories('include', is_system: true),
  dependencies: deps,
)