project('raycaster', 'cpp',
  version: '0.1.0',
  default_options: [
    'cpp_std=c++20',
    #'cpp_args=-DTRACY_ENABLE=1 -D_GLIBCXX_DEBUG=1 -D_GLIBCXX_DEBUG_PEDANTIC=1',
    'cpp_args=-DTRACY_ENABLE=1',
  ])

#exe_defaults = ['warning_level=2', 'werror=true']
exe_defaults = []
cc = meson.get_compiler('cpp')

tracy = dependency('tracy', static: true)
catch2 = dependency('catch2-with-main')
fmt = dependency('fmt', allow_fallback: true)
freetype2 = dependency('freetype2')
json = dependency('nlohmann_json')
opengl32 = cc.find_library('opengl32', required: true)
winmm = cc.find_library('winmm', required: true)
gdi32 = cc.find_library('gdi32', required: true)
ws2_32 = cc.find_library('ws2_32', required: true)
dbghelp = cc.find_library('dbghelp', required: true)

sfml_audio = dependency('sfml_audio')
sfml_graphics = dependency('sfml_graphics')
sfml_main = dependency('sfml_main')
sfml_network = dependency('sfml_network')
sfml_system = dependency('sfml_system')
sfml_window = dependency('sfml_window')

if get_option('tracy_enable') and get_option('buildtype') != 'debugoptimized'
  warning('Profiling builds should set --buildtype=debugoptimized')
endif

dependencies = [
  fmt, json, opengl32, freetype2,
  winmm, gdi32, sfml_audio, sfml_graphics,
  sfml_main, sfml_network, sfml_system,
  sfml_window, ws2_32, dbghelp, tracy
]

# use this for common options only for our executables
cpp_args=[ ]

executable('runtests', [
  'dbc.cpp',
  'matrix.cpp',
  'TracyClient.cpp',
  'tests/base.cpp',
  ], override_options: exe_defaults,
  dependencies: dependencies + [catch2])

executable('zedcaster', [
  'dbc.cpp',
  'matrix.cpp',
  'config.cpp',
  'texture.cpp',
  'raycaster.cpp',
  'TracyClient.cpp',
  'stats.cpp',
  'main.cpp'
  ],
  cpp_args: cpp_args,
  override_options: exe_defaults,
  dependencies: dependencies)

executable('amtcaster', [
  'dbc.cpp',
  'config.cpp',
  'amt/texture.cpp',
  'TracyClient.cpp',
  'amt/raycaster.cpp',
  'amt/main.cpp'
  ],
  cpp_args: ['-std=c++23'],
  override_options: exe_defaults,
  dependencies: dependencies)