+
+# Futatabi. (Not a subdir() because we don't want the output in nageru/nageru.)
+
+# Protobuf compilation.
+gen = generator(protoc, \
+ output : ['@BASENAME@.pb.cc', '@BASENAME@.pb.h'],
+ arguments : ['--proto_path=@CURRENT_SOURCE_DIR@/futatabi', '--cpp_out=@BUILD_DIR@', '-I@CURRENT_SOURCE_DIR@/shared', '@INPUT@'])
+proto_generated = gen.process('futatabi/state.proto', 'futatabi/frame.proto', 'futatabi/futatabi_midi_mapping.proto')
+
+# Preprocess Qt as needed.
+moc_files = qt5.preprocess(
+ moc_headers: ['futatabi/mainwindow.h', 'futatabi/jpeg_frame_view.h', 'futatabi/clip_list.h', 'futatabi/midi_mapping_dialog.h'],
+ ui_files: ['futatabi/mainwindow.ui', 'futatabi/midi_mapping.ui'],
+ qresources: ['futatabi/mainwindow.qrc'],
+ dependencies: qt5deps)
+
+# Flow objects.
+futatabi_srcs = ['futatabi/flow.cpp', 'futatabi/gpu_timers.cpp']
+
+# All the other files.
+futatabi_srcs += ['futatabi/main.cpp', 'futatabi/player.cpp', 'futatabi/video_stream.cpp', 'futatabi/chroma_subsampler.cpp']
+futatabi_srcs += ['futatabi/vaapi_jpeg_decoder.cpp', 'futatabi/db.cpp', 'futatabi/ycbcr_converter.cpp', 'futatabi/flags.cpp']
+futatabi_srcs += ['futatabi/mainwindow.cpp', 'futatabi/jpeg_frame_view.cpp', 'futatabi/clip_list.cpp', 'futatabi/frame_on_disk.cpp']
+futatabi_srcs += ['futatabi/export.cpp', 'futatabi/midi_mapper.cpp', 'futatabi/midi_mapping_dialog.cpp']
+futatabi_srcs += moc_files
+futatabi_srcs += proto_generated
+
+# Shaders needed at runtime.
+shaders = ['futatabi/chroma_subsample.vert', 'futatabi/densify.vert', 'futatabi/equations.vert', 'futatabi/hole_fill.vert', 'futatabi/motion_search.vert', 'futatabi/sor.vert', 'futatabi/splat.vert', 'futatabi/vs.vert']
+shaders += ['futatabi/add_base_flow.frag', 'futatabi/blend.frag', 'futatabi/chroma_subsample.frag', 'futatabi/densify.frag', 'futatabi/derivatives.frag', 'futatabi/diffusivity.frag',
+ 'futatabi/equations.frag', 'futatabi/gray.frag', 'futatabi/hole_blend.frag', 'futatabi/hole_fill.frag', 'futatabi/motion_search.frag', 'futatabi/prewarp.frag', 'futatabi/resize_flow.frag',
+ 'futatabi/sobel.frag', 'futatabi/sor.frag', 'futatabi/splat.frag']
+
+foreach shader : shaders
+ run_command('ln', '-s', join_paths(meson.current_source_dir(), shader), meson.current_build_dir())
+endforeach
+
+futatabi_shader_srcs = bin2h_gen.process(shaders)
+futatabi_srcs += futatabi_shader_srcs
+
+executable('futatabi', futatabi_srcs,
+ dependencies: [shareddep, qt5deps, libjpegdep, movitdep, libmicrohttpddep, protobufdep, sqlite3dep, vax11dep, vadrmdep, x11dep, libavformatdep, libavcodecdep, libavutildep, libswscaledep],
+ link_with: shared,
+ include_directories: [include_directories('futatabi')],
+ install: true)
+
+# Test binaries for the optical flow code.
+if sdl2dep.found() and sdl2_imagedep.found()
+ executable('flow', 'futatabi/flow_main.cpp', 'futatabi/flow.cpp', 'futatabi/gpu_timers.cpp', futatabi_shader_srcs, dependencies: [shareddep, epoxydep, sdl2dep, sdl2_imagedep])
+endif
+executable('eval', 'futatabi/eval.cpp', 'futatabi/util.cpp')
+executable('vis', 'futatabi/vis.cpp', 'futatabi/util.cpp')