# 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 \
	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_guest_tilegx.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/guest_tilegx_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/host_tilegx_defs.h \
	priv/s390_disasm.h \
	priv/s390_defs.h \
	priv/host_mips_defs.h \
	priv/tilegx_disasm.h

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

if COMPILER_IS_CLANG
CFLAGS_FOR_GENOFFSETS = $(CFLAGS) -no-integrated-as
else
CFLAGS_FOR_GENOFFSETS = $(CFLAGS)
endif

# 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.
# ICC also emits the constants differently with a leading # #define
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 \
			    pub/libvex_guest_tilegx.h
	rm -f auxprogs/genoffsets.s
	$(mkdir_p) auxprogs pub
	$(CC) $(CFLAGS_FOR_GENOFFSETS) \
	      $(LIBVEX_CFLAGS) \
	      $(AM_CFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) \
				-O -S -o auxprogs/genoffsets.s \
					 $(srcdir)/auxprogs/genoffsets.c
	grep xyzzy auxprogs/genoffsets.s | grep "^[# ]*#define" \
	   | sed "s/# #define/#define/g" \
	   | sed "s/xyzzy\\$$//g" \
	   | sed "s/xyzzy#//g" \
	   | sed "s/xyzzy//g" \
	   > pub/libvex_guest_offsets.h
	rm -f auxprogs/genoffsets.s

#----------------------------------------------------------------------------
# libvex-<platform>-<os>.a : containing all VEX objects, including
# a main_main.o compiled in single arch (guest==host).
# libvexmultiarch-<platform>-<os>.a, only containing multiarch_main_main.o,
# which is main_main.c compiled so that any guest/host combination
# can be done at runtime.
#----------------------------------------------------------------------------

pkglib_LIBRARIES  = libvex-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a \
	libvexmultiarch-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a
if VGCONF_HAVE_PLATFORM_SEC
pkglib_LIBRARIES += libvex-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a \
	libvexmultiarch-@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/guest_tilegx_helpers.c \
	priv/guest_tilegx_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 \
	priv/host_tilegx_defs.c \
	priv/host_tilegx_isel.c \
	priv/tilegx_disasm.c

LIBVEXMULTIARCH_SOURCES = priv/multiarch_main_main.c

LIBVEX_CFLAGS = \
	-Wbad-function-cast \
	-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

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

