test_progs = [
	'core_auth',
	'core_getclient',
	'core_getstats',
	'core_getversion',
	'core_setmaster_vs_auth',
	'debugfs_test',
	'dmabuf',
	'drm_import_export',
	'drm_mm',
	'drm_read',
	'kms_3d',
	'kms_addfb_basic',
	'kms_atomic',
	'kms_atomic_interruptible',
	'kms_atomic_transition',
	'kms_available_modes_crc',
	'kms_big_fb',
	'kms_busy',
	'kms_ccs',
	'kms_color',
	'kms_concurrent',
	'kms_content_protection',
	'kms_crtc_background_color',
	'kms_cursor_crc',
	'kms_cursor_edge_walk',
	'kms_cursor_legacy',
	'kms_dp_dsc',
	'kms_draw_crc',
	'kms_fbcon_fbt',
	'kms_fence_pin_leak',
	'kms_flip',
	'kms_flip_event_leak',
	'kms_flip_tiling',
	'kms_force_connector_basic',
	'kms_frontbuffer_tracking',
	'kms_getfb',
	'kms_hdmi_inject',
	'kms_invalid_dotclock',
	'kms_lease',
	'kms_legacy_colorkey',
	'kms_mmap_write_crc',
	'kms_panel_fitting',
	'kms_pipe_b_c_ivb',
	'kms_pipe_crc_basic',
	'kms_plane',
	'kms_plane_alpha_blend',
	'kms_plane_cursor',
	'kms_plane_lowres',
	'kms_plane_multiple',
	'kms_plane_scaling',
	'kms_prime',
	'kms_prop_blob',
	'kms_properties',
	'kms_psr',
	'kms_psr2_su',
	'kms_pwrite_crc',
	'kms_rmfb',
	'kms_rotation_crc',
	'kms_selftest',
	'kms_sequence',
	'kms_setmode',
	'kms_sysfs_edid_timing',
	'kms_tv_load_detect',
	'kms_universal_plane',
	'kms_vblank',
	'kms_vrr',
	'meta_test',
	'panfrost_get_param',
	'panfrost_gem_new',
	'panfrost_prime',
	'panfrost_submit',
	'perf',
	'prime_busy',
	'prime_mmap',
	'prime_mmap_coherency',
	'prime_mmap_kms',
	'prime_self_import',
	'prime_udl',
	'prime_vgem',
	'syncobj_basic',
	'syncobj_wait',
	'template',
	'tools_test',
	'v3d_get_bo_offset',
	'v3d_get_param',
	'v3d_mmap',
	'vc4_create_bo',
	'vc4_dmabuf_poll',
	'vc4_label_bo',
	'vc4_lookup_fail',
	'vc4_purgeable_bo',
	'vc4_tiling',
	'vc4_wait_bo',
	'vc4_wait_seqno',
	'vgem_basic',
	'vgem_slow',
]

i915_progs = [
	'gen3_mixed_blits',
	'gen3_render_linear_blits',
	'gen3_render_mixed_blits',
	'gen3_render_tiledx_blits',
	'gen3_render_tiledy_blits',
	'gem_bad_reloc',
	'gem_basic',
	'gem_busy',
	'gem_caching',
	'gem_close',
	'gem_close_race',
	'gem_concurrent_blit',
	'gem_cpu_reloc',
	'gem_cs_prefetch',
	'gem_cs_tlb',
	'gem_ctx_bad_destroy',
	'gem_ctx_clone',
	'gem_ctx_create',
	'gem_ctx_engines',
	'gem_ctx_exec',
	'gem_ctx_isolation',
	'gem_ctx_param',
	'gem_ctx_shared',
	'gem_ctx_switch',
	'gem_ctx_thrash',
	'gem_double_irq_loop',
	'gem_evict_alignment',
	'gem_evict_everything',
	'gem_exec_alignment',
	'gem_exec_async',
	'gem_exec_await',
	'gem_exec_bad_domains',
	'gem_exec_basic',
	'gem_exec_big',
	'gem_exec_blt',
	'gem_exec_capture',
	'gem_exec_create',
	'gem_exec_faulting_reloc',
	'gem_exec_fence',
	'gem_exec_flush',
	'gem_exec_gttfill',
	'gem_exec_latency',
	'gem_exec_lut_handle',
	'gem_exec_nop',
	'gem_exec_parallel',
	'gem_exec_params',
	'gem_exec_parse',
	'gem_exec_reloc',
	'gem_exec_reuse',
	'gem_exec_schedule',
	'gem_exec_store',
	'gem_exec_suspend',
	'gem_exec_whisper',
	'gem_fd_exhaustion',
	'gem_fence_thrash',
	'gem_fence_upload',
	'gem_fenced_exec_thrash',
	'gem_flink_basic',
	'gem_flink_race',
	'gem_gpgpu_fill',
	'gem_gtt_cpu_tlb',
	'gem_gtt_hog',
	'gem_gtt_speed',
	'gem_largeobject',
	'gem_linear_blits',
	'gem_lut_handle',
	'gem_madvise',
	'gem_media_fill',
	'gem_media_vme',
	'gem_mmap',
	'gem_mmap_gtt',
	'gem_mmap_offset_exhaustion',
	'gem_mmap_wc',
	'gem_partial_pwrite_pread',
	'gem_persistent_relocs',
	'gem_pipe_control_store_loop',
	'gem_ppgtt',
	'gem_pread',
	'gem_pread_after_blit',
	'gem_pwrite',
	'gem_pwrite_pread',
	'gem_pwrite_snooped',
	'gem_read_read_speed',
	'gem_readwrite',
	'gem_reg_read',
	'gem_reloc_overflow',
	'gem_reloc_vs_gpu',
	'gem_render_copy',
	'gem_render_copy_redux',
	'gem_render_linear_blits',
	'gem_render_tiled_blits',
	'gem_request_retire',
	'gem_reset_stats',
	'gem_ring_sync_copy',
	'gem_ring_sync_loop',
	'gem_ringfill',
	'gem_set_tiling_vs_blt',
	'gem_set_tiling_vs_gtt',
	'gem_set_tiling_vs_pwrite',
	'gem_shrink',
	'gem_softpin',
	'gem_spin_batch',
	'gem_stolen',
	'gem_storedw_batches_loop',
	'gem_storedw_loop',
	'gem_streaming_writes',
	'gem_sync',
	'gem_threaded_access_tiled',
	'gem_tiled_blits',
	'gem_tiled_fence_blits',
	'gem_tiled_partial_pwrite_pread',
	'gem_tiled_pread_basic',
	'gem_tiled_pread_pwrite',
	'gem_tiled_swapping',
	'gem_tiled_wb',
	'gem_tiled_wc',
	'gem_tiling_max_stride',
	'gem_unfence_active_buffers',
	'gem_unref_active_buffers',
	'gem_userptr_blits',
	'gem_vm_create',
	'gem_wait',
	'gem_workarounds',
	'gem_write_read_ring_switch',
	'i915_fb_tiling',
	'i915_getparams_basic',
	'i915_hangman',
	'i915_module_load',
	'i915_pm_backlight',
	'i915_pm_lpsp',
	'i915_pm_rc6_residency',
	'i915_pm_rpm',
	'i915_pm_rps',
	'i915_pm_sseu',
	'i915_query',
	'i915_selftest',
	'i915_suspend',
]

test_deps = [ igt_deps ]

if libdrm_nouveau.found()
	test_progs += [
		'prime_nv_api',
		'prime_nv_pcopy',
		'prime_nv_test',
	]
	test_deps += libdrm_nouveau
endif

if chamelium.found()
	test_progs += [
		'kms_chamelium',
	]
	test_deps += chamelium
endif

test_executables = []
test_list = []

foreach prog : test_progs
	test_executables += executable(prog, prog + '.c',
		   dependencies : test_deps,
		   install_dir : libexecdir,
		   install_rpath : libexecdir_rpathdir,
		   install : true)
	test_list += prog
endforeach

foreach prog : i915_progs
	test_executables += executable(prog,
		   join_paths('i915', prog + '.c'),
		   dependencies : test_deps,
		   install_dir : libexecdir,
		   install_rpath : libexecdir_rpathdir,
		   install : true)
	test_list += prog
endforeach

test_executables += executable('gem_create',
	   join_paths('i915', 'gem_create.c'),
	   dependencies : test_deps + [ libatomic ],
	   install_dir : libexecdir,
	   install_rpath : libexecdir_rpathdir,
	   install : true)
test_list += 'gem_create'

test_executables += executable('gem_ctx_sseu',
	   join_paths('i915', 'gem_ctx_sseu.c'),
	   dependencies : test_deps + [ lib_igt_perf ],
	   install_dir : libexecdir,
	   install_rpath : libexecdir_rpathdir,
	   install : true)
test_list += 'gem_ctx_sseu'

test_executables += executable('gem_eio',
	   join_paths('i915', 'gem_eio.c'),
	   dependencies : test_deps + [ realtime ],
	   install_dir : libexecdir,
	   install_rpath : libexecdir_rpathdir,
	   install : true)
test_list += 'gem_eio'

test_executables += executable('gem_exec_balancer', 'i915/gem_exec_balancer.c',
	   dependencies : test_deps + [ lib_igt_perf ],
	   install_dir : libexecdir,
	   install_rpath : libexecdir_rpathdir,
	   install : true)
test_list += 'gem_exec_balancer'

test_executables += executable('gem_mocs_settings',
	   join_paths('i915', 'gem_mocs_settings.c'),
	   dependencies : test_deps + [ lib_igt_perf ],
	   install_dir : libexecdir,
	   install_rpath : libexecdir_rpathdir,
	   install : true)
test_list += 'gem_mocs_settings'

test_executables += executable('perf_pmu', 'perf_pmu.c',
	   dependencies : test_deps + [ lib_igt_perf ],
	   install_dir : libexecdir,
	   install_rpath : libexecdir_rpathdir,
	   install : true)
test_list += 'perf_pmu'

executable('testdisplay', ['testdisplay.c', 'testdisplay_hotplug.c'],
	   dependencies : test_deps,
	   install_dir : libexecdir,
	   install_rpath : libexecdir_rpathdir,
	   install : true)
test_list += 'testdisplay'

test_executables += executable('sw_sync', 'sw_sync.c',
	   dependencies : test_deps + [ libatomic ],
	   install_dir : libexecdir,
	   install_rpath : libexecdir_rpathdir,
	   install : true)
test_list += 'sw_sync'

subdir('amdgpu')

gen_testlist = find_program('generate_testlist.sh')
test_list_target = custom_target('testlist',
	      output : 'test-list.txt',
	      command : [ gen_testlist, '@OUTPUT@', test_list ],
	      install : true,
	      install_dir : libexecdir)

test_script = find_program('igt_command_line.sh')
foreach prog : test_list
	test('testcase check: ' + prog, test_script, args : prog)
endforeach

executable('gem_stress', 'i915/gem_stress.c',
	   install : true,
	   install_dir : libexecdir,
	   install_rpath : libexecdir_rpathdir,
	   dependencies : igt_deps)

# IMPORTANT: These tests here are all disabled because the result in sometime
# unrecoverable gpu hangs. Don't put real testcases here.
hang_progs = [
	'gem_bad_batch',
	'gem_hang',
	'gem_bad_blit',
	'gem_bad_address',
	'gem_non_secure_batch',
]
foreach prog : hang_progs
	executable(prog, join_paths('i915', prog + '.c'),
			dependencies : igt_deps,
			install : false)
endforeach

image_files = [
  '1080p-left.png',
  '1080p-right.png',
  'pass.png',
]
install_data(sources : image_files, install_dir : datadir)

subdir('intel-ci')