# Copyright 2015-2016 Intel Corporation
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice (including the next
# paragraph) shall be included in all copies or substantial portions of the
# Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.

ISL_GEN_LIBS =                                           \
	isl/libisl-gen4.la                               \
	isl/libisl-gen5.la                               \
	isl/libisl-gen6.la                               \
	isl/libisl-gen7.la                               \
	isl/libisl-gen75.la                              \
	isl/libisl-gen8.la                               \
	isl/libisl-gen9.la                               \
	$(NULL)

noinst_LTLIBRARIES += $(ISL_GEN_LIBS) isl/libisl.la

isl_libisl_la_LIBADD = $(ISL_GEN_LIBS)
isl_libisl_la_SOURCES = $(ISL_FILES) $(ISL_GENERATED_FILES)

isl_libisl_gen4_la_SOURCES = $(ISL_GEN4_FILES)
isl_libisl_gen4_la_CFLAGS = $(AM_CFLAGS) -DGEN_VERSIONx10=40

isl_libisl_gen5_la_SOURCES = $(ISL_GEN5_FILES)
isl_libisl_gen5_la_CFLAGS = $(AM_CFLAGS) -DGEN_VERSIONx10=50

isl_libisl_gen6_la_SOURCES = $(ISL_GEN6_FILES)
isl_libisl_gen6_la_CFLAGS = $(AM_CFLAGS) -DGEN_VERSIONx10=60

isl_libisl_gen7_la_SOURCES = $(ISL_GEN7_FILES)
isl_libisl_gen7_la_CFLAGS = $(AM_CFLAGS) -DGEN_VERSIONx10=70

isl_libisl_gen75_la_SOURCES = $(ISL_GEN75_FILES)
isl_libisl_gen75_la_CFLAGS = $(AM_CFLAGS) -DGEN_VERSIONx10=75

isl_libisl_gen8_la_SOURCES = $(ISL_GEN8_FILES)
isl_libisl_gen8_la_CFLAGS = $(AM_CFLAGS) -DGEN_VERSIONx10=80

isl_libisl_gen9_la_SOURCES = $(ISL_GEN9_FILES)
isl_libisl_gen9_la_CFLAGS = $(AM_CFLAGS) -DGEN_VERSIONx10=90

BUILT_SOURCES += $(ISL_GENERATED_FILES)

isl/isl_format_layout.c: isl/gen_format_layout.py \
                         isl/isl_format_layout.csv
	$(MKDIR_GEN)
	$(PYTHON_GEN) $(srcdir)/isl/gen_format_layout.py \
	    --csv $(srcdir)/isl/isl_format_layout.csv --out $@

# ----------------------------------------------------------------------------
#  Tests
# ----------------------------------------------------------------------------

check_PROGRAMS += isl/tests/isl_surf_get_image_offset_test

TESTS += $(check_PROGRAMS)

isl_tests_isl_surf_get_image_offset_test_LDADD = \
	common/libintel_common.la \
	isl/libisl.la \
	$(top_builddir)/src/mesa/drivers/dri/i965/libi965_compiler.la \
	-lm

# ----------------------------------------------------------------------------

EXTRA_DIST += \
	isl/gen_format_layout.py \
	isl/isl_format_layout.csv \
	isl/README
