lib_headers = [
	'debug.h',
	'drmtest.h',
	'i830_reg.h',
	'i915_3d.h',
	'i915_reg.h',
	'i915_pciids.h',
	'igt.h',
	'igt_debugfs.h',
	'igt_aux.h',
	'igt_edid_template.h',
	'igt_gt.h',
	'igt_gvt.h',
	'igt_primes.h',
	'igt_rand.h',
	'igt_rc.h',
	'igt_stats.h',
	'igt_syncobj.h',
	'igt_sysfs.h',
	'igt_x86.h',
	'igt_vgem.h',
	'instdone.h',
	'intel_batchbuffer.h',
	'intel_chipset.h',
	'intel_io.h',
	'intel_reg.h',
	'ioctl_wrappers.h',
	'media_fill.h',
	'media_spin.h',
	'gpgpu_fill.h',
	'gen7_media.h',
	'gen8_media.h',
	'gen6_render.h',
	'gen7_render.h',
	'gen8_render.h',
	'gen9_render.h',
	'rendercopy.h',
	'sw_sync.h',
	'igt_kms.h',
	'igt_fb.h',
	'igt_core.h',
	'igt_draw.h',
	'igt_pm.h',
	'igt_dummyload.h',
	'uwildmat/uwildmat.h',
	'igt_kmod.h',
]

lib_sources = [
	'drmtest.c',
	'igt_debugfs.c',
	'igt_aux.c',
	'igt_gt.c',
	'igt_gvt.c',
	'igt_primes.c',
	'igt_rand.c',
	'igt_stats.c',
	'igt_syncobj.c',
	'igt_sysfs.c',
	'igt_vgem.c',
	'instdone.c',
	'intel_batchbuffer.c',
	'intel_chipset.c',
	'intel_device_info.c',
	'intel_os.c',
	'intel_mmio.c',
	'ioctl_wrappers.c',
	'media_fill_gen7.c',
	'media_fill_gen8.c',
	'media_fill_gen8lp.c',
	'media_fill_gen9.c',
	'media_spin.c',
	'gpgpu_fill.c',
	'rendercopy_i915.c',
	'rendercopy_i830.c',
	'rendercopy_gen6.c',
	'rendercopy_gen7.c',
	'rendercopy_gen8.c',
	'rendercopy_gen9.c',
	'sw_sync.c',
	'intel_reg_map.c',
	'intel_iosf.c',
	'igt_kms.c',
	'igt_fb.c',
	'igt_core.c',
	'igt_draw.c',
	'igt_pm.c',
	'igt_dummyload.c',
	'uwildmat/uwildmat.c',
	'igt_kmod.c',
]

if ['x86', 'x86_64'].contains(host_machine.cpu_family())
    lib_sources += 'igt_x86.c'
endif

lib_deps = [
	cairo,
	glib,
	libdrm,
	libkmod,
	libprocps,
	libudev,
	libunwind,
	pciaccess,
	pthreads,
	math,
	realtime,
]

if libdrm_intel.found()
	lib_deps += libdrm_intel
else
	lib_headers += 'stubs/drm/intel_bufmgr.h'
	lib_sources += 'stubs/drm/intel_bufmgr.c'
endif

if libdrm_vc4.found()
	lib_headers += 'igt_vc4.h'
	lib_sources += 'igt_vc4.c'
endif
if valgrind.found()
	lib_deps += valgrind
endif

if gsl.found() and pixman.found()
	lib_deps += [ gsl, pixman ]
	lib_headers += [ 'igt_frame.h', 'igt_audio.h' ]
	lib_sources += [ 'igt_frame.c', 'igt_audio.c' ]
endif

if alsa.found()
	lib_deps += alsa
	lib_headers += 'igt_alsa.h'
	lib_sources += 'igt_alsa.c'
endif

if chamelium.found()
	lib_deps += chamelium
	lib_headers += 'igt_chamelium.h'
	lib_sources += 'igt_chamelium.c'
endif

install_headers(lib_headers)

pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), 'intel-gpu-tools')
srcdir = join_paths(meson.source_root(), 'tests')

lib_version = vcs_tag(input : 'version.h.in', output : 'version.h',
		      fallback : 'NO-GIT',
		      command : [ 'git', 'log', '-n1', '--pretty=format:g%h' ] )

lib_intermediates = []
foreach f: lib_sources
    # No / in the target name
    if f.contains('uwildmat')
        name = 'uwildmat'
    else
        name = f
    endif

    lib = static_library('igt-' + name,
	[ f, lib_version ],
	include_directories: inc,
	dependencies : lib_deps,
	c_args : [
	    '-DIGT_DATADIR="@0@"'.format(pkgdatadir),
	    '-DIGT_SRCDIR="@0@"'.format(srcdir),
	    '-DIGT_LOG_DOMAIN="@0@"'.format(f.split('.')[0]),
	])

    lib_intermediates += lib
endforeach

lib_igt_build = shared_library('igt',
    ['dummy.c'],
    link_whole: lib_intermediates,
    dependencies: lib_deps,
    install : true
)

lib_igt = declare_dependency(link_with : lib_igt_build,
			    include_directories : inc)

igt_deps = [ lib_igt ] + lib_deps

subdir('tests')
