# VEX/Makefile is generated from this file at configure-time.

include $(top_srcdir)/Makefile.all.am

#----------------------------------------------------------------------------
# Headers, etc
#----------------------------------------------------------------------------

EXTRA_DIST = \
	HACKING.README \
	LICENSE.README \
	LICENSE.GPL \
	quote.txt \
	newline.txt \
	auxprogs/genoffsets.c

pkginclude_HEADERS = \
	pub/libvex.h \
	pub/libvex_basictypes.h \
	pub/libvex_emnote.h \
	pub/libvex_guest_offsets.h \
	pub/libvex_guest_x86.h \
	pub/libvex_guest_amd64.h \
	pub/libvex_guest_ppc32.h \
	pub/libvex_guest_ppc64.h \
	pub/libvex_guest_arm.h \
	pub/libvex_guest_arm64.h \
	pub/libvex_guest_s390x.h \
	pub/libvex_guest_mips32.h \
	pub/libvex_guest_mips64.h \
	pub/libvex_s390x_common.h \
	pub/libvex_ir.h \
	pub/libvex_trc_values.h

noinst_HEADERS = \
	priv/main_globals.h \
	priv/main_util.h \
	priv/ir_match.h \
	priv/ir_opt.h \
	priv/guest_generic_bb_to_IR.h \
	priv/guest_generic_x87.h \
	priv/guest_x86_defs.h \
	priv/guest_amd64_defs.h \
	priv/guest_ppc_defs.h \
	priv/guest_arm_defs.h \
	priv/guest_arm64_defs.h \
	priv/guest_s390_defs.h \
	priv/guest_mips_defs.h \
	priv/host_generic_regs.h \
	priv/host_generic_simd64.h \
	priv/host_generic_simd128.h \
	priv/host_generic_simd256.h \
	priv/host_generic_maddf.h \
	priv/host_x86_defs.h \
	priv/host_amd64_defs.h \
	priv/host_ppc_defs.h \
	priv/host_arm_defs.h \
	priv/host_arm64_defs.h \
	priv/host_s390_defs.h \
	priv/s390_disasm.h \
	priv/s390_defs.h \
	priv/host_mips_defs.h

BUILT_SOURCES = pub/libvex_guest_offsets.h
CLEANFILES    = pub/libvex_guest_offsets.h

# This is very uggerly.  Need to sed out both "xyzzyN" and
# "xyzzy$N" since gcc on different targets emits the constants
# differently -- with a leading $ on x86/amd64 but none on ppc32/64.
pub/libvex_guest_offsets.h: auxprogs/genoffsets.c \
			    pub/libvex_basictypes.h \
			    pub/libvex_guest_x86.h \
			    pub/libvex_guest_amd64.h \
			    pub/libvex_guest_ppc32.h \
			    pub/libvex_guest_ppc64.h \
			    pub/libvex_guest_arm.h \
			    pub/libvex_guest_arm64.h \
			    pub/libvex_guest_s390x.h \
			    pub/libvex_guest_mips32.h \
			    pub/libvex_guest_mips64.h
	rm -f auxprogs/genoffsets.s
	$(CC) $(CFLAGS) \
	      $(LIBVEX_CFLAGS) \
	      $(AM_CFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) \
				-O -S -o auxprogs/genoffsets.s \
					 auxprogs/genoffsets.c
	grep xyzzy auxprogs/genoffsets.s | grep "^#define" \
	   | sed "s/xyzzy\\$$//g" \
	   | sed "s/xyzzy#//g" \
	   | sed "s/xyzzy//g" \
	   > pub/libvex_guest_offsets.h
	rm -f auxprogs/genoffsets.s

#----------------------------------------------------------------------------
# libvex-<platform>.a
#----------------------------------------------------------------------------

pkglib_LIBRARIES  = libvex-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a
if VGCONF_HAVE_PLATFORM_SEC
pkglib_LIBRARIES += libvex-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a
endif

LIBVEX_SOURCES_COMMON = \
	priv/main_globals.c \
	priv/main_main.c \
	priv/main_util.c \
	priv/ir_defs.c \
	priv/ir_inject.c \
	priv/ir_match.c \
	priv/ir_opt.c \
	priv/guest_generic_bb_to_IR.c \
	priv/guest_generic_x87.c \
	priv/guest_x86_helpers.c \
	priv/guest_x86_toIR.c \
	priv/guest_amd64_helpers.c \
	priv/guest_amd64_toIR.c \
	priv/guest_ppc_helpers.c \
	priv/guest_ppc_toIR.c \
	priv/guest_arm_helpers.c \
	priv/guest_arm_toIR.c \
	priv/guest_arm64_helpers.c \
	priv/guest_arm64_toIR.c \
	priv/guest_s390_helpers.c \
	priv/guest_s390_toIR.c \
	priv/guest_mips_helpers.c \
	priv/guest_mips_toIR.c \
	priv/host_generic_regs.c \
	priv/host_generic_simd64.c \
	priv/host_generic_simd128.c \
	priv/host_generic_simd256.c \
	priv/host_generic_maddf.c \
	priv/host_generic_reg_alloc2.c \
	priv/host_x86_defs.c \
	priv/host_x86_isel.c \
	priv/host_amd64_defs.c \
	priv/host_amd64_isel.c \
	priv/host_ppc_defs.c \
	priv/host_ppc_isel.c \
	priv/host_arm_defs.c \
	priv/host_arm_isel.c \
	priv/host_arm64_defs.c \
	priv/host_arm64_isel.c \
	priv/host_s390_defs.c \
	priv/host_s390_isel.c \
	priv/s390_disasm.c \
	priv/host_mips_defs.c \
	priv/host_mips_isel.c

LIBVEX_CFLAGS = \
	-Wbad-function-cast \
	-Wcast-qual \
	-Wcast-align \
	-fstrict-aliasing

libvex_@VGCONF_ARCH_PRI@_@VGCONF_OS@_a_SOURCES  = $(LIBVEX_SOURCES_COMMON)
libvex_@VGCONF_ARCH_PRI@_@VGCONF_OS@_a_CPPFLAGS = \
        $(AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) -Ipriv
libvex_@VGCONF_ARCH_PRI@_@VGCONF_OS@_a_CFLAGS   = \
        $(AM_CFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) $(LIBVEX_CFLAGS)
if VGCONF_HAVE_PLATFORM_SEC
libvex_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_SOURCES  = $(LIBVEX_SOURCES_COMMON)
libvex_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_CPPFLAGS = \
        $(AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@) -Ipriv
libvex_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_CFLAGS   = \
        $(AM_CFLAGS_@VGCONF_PLATFORM_SEC_CAPS@) $(LIBVEX_CFLAGS)
endif

