# config.mk.tail

LIBR:=$(abspath $(dir $(lastword $(MAKEFILE_LIST))))

null:=
SPACE:=$(null) $(null)

ifeq ($(LIBR),)
ifeq ($(R2DIR),)
$(error ERROR: Cannot find R2DIR. Please define this variable)
else
LIBR=$(R2DIR)/libr
MSVC=$(R2DIR)/msvc
endif
endif

ZYDIS_ROOT:=$(LIBR)/../subprojects/zydis
WANT_ZYDIS?=1
USE_ZYDIS?=0
USE_SYS_ZYDIS?=0
ZYDIS_CFLAGS?=
ZYDIS_LDFLAGS?=

SHLR:=$(LIBR)/../shlr

include $(LIBR)/../global.mk
include $(LIBR)/../mk/${COMPILER}.mk

# USE_CSNEXT/USE_CS4 come from config-user.mk, included via global.mk
ifeq ($(USE_CSNEXT),1)
CS_ROOT:=$(LIBR)/../subprojects/capstone-next
else ifeq ($(USE_CS4),1)
CS_ROOT:=$(LIBR)/../subprojects/capstone-v4
else
CS_ROOT:=$(LIBR)/../subprojects/capstone-v5
endif

ifeq ($(WANT_CAPSTONE),1)
ifeq ($(USE_CAPSTONE),1)
CS_CFLAGS=${CAPSTONE_CFLAGS}
CS_LDFLAGS=${CAPSTONE_LDFLAGS}
else
CS_CFLAGS=-I$(CS_ROOT)/include
CS_LDFLAGS=$(CS_ROOT)/libcapstone.a
endif
else
CS_CFLAGS=
CS_LDFLAGS=
endif

ifeq ($(WANT_ZYDIS),1)
ifeq ($(USE_ZYDIS),1)
ZYDIS_CFLAGS+=$(CONFIG_ZYDIS_CFLAGS) -DUSE_SYS_ZYDIS=1
ZYDIS_LDFLAGS+=$(CONFIG_ZYDIS_LDFLAGS)
else
ZYDIS_CFLAGS+=-I$(ZYDIS_ROOT)/amalgamated-dist -DUSE_SYS_ZYDIS=0 -DZYDIS_STATIC_BUILD
ZYDIS_LDFLAGS+=$(ZYDIS_ROOT)/libzydis.a
endif
else
ZYDIS_CFLAGS=
ZYDIS_LDFLAGS=
endif

CFLAGS+=${CPPFLAGS}
CFLAGS+=-I../xps

ifeq (1,1)
LINK+=$(subst r_,-L$(LIBR)/,$(R2DEPS))
LINK+=$(subst r_,-lr_,$(R2DEPS))
LINK+=$(subst r_,-L$(LIBR)/,$(BINDEPS))
LINK+=$(subst r_,-lr_,$(BINDEPS))
CFLAGS+=${PIC_CFLAGS}
LINK+=${PIC_CFLAGS}
ifeq (,$(filter 1,$(WASM)))
ifeq (,$(filter wasi wasm emscripten,$(COMPILER)))
LINK+=$(LIBATOMIC)
endif
endif
else
ifneq ($(R2DEPS),)
LINK+=$(shell echo ${R2DEPS} | sed -e 's:r_\([^ ]\+\):$(LIBR)/\1/libr_\1.${EXT_AR}:g')
endif
endif

CFLAGS+=-Wall

# libgmp
ifeq (${HAVE_LIB_GMP},1)
CFLAGS+=-DHAVE_LIB_GMP=1
BN_LIBS=-lgmp
endif

# open-ssl
ifeq (${HAVE_LIB_SSL},1)
BN_LIBS=${SSL_LDFLAGS}
endif

#both of these need ssl includes
ifeq (${HAVE_LIB_SSL},1)
CFLAGS+=${SSL_CFLAGS}
endif

# XXX do it in configure stage
OSTYPE?=gnulinux

ifeq (${OSTYPE},auto)
 _UNAME=$(shell uname)
 ifeq ($(_UNAME),Darwin)
  OSTYPE=darwin
 else
  ifeq ($(_UNAME),SerenityOS)
   OSTYPE=bsd
  else
   ifeq ($(_UNAME),serenity)
    OSTYPE=bsd
   endif
  endif
 endif
endif

ifeq (${OSTYPE},openbsd)
OSTYPE=bsd
endif
ifeq (${OSTYPE},netbsd)
OSTYPE=bsd
endif
ifeq (${OSTYPE},freebsd)
OSTYPE=bsd
endif
ifeq (${OSTYPE},dragonfly)
OSTYPE=bsd
endif
ifeq (${OSTYPE},bitrig)
OSTYPE=bsd
endif

# Output
ifneq ($(OSTYPE),mingw32)
ifeq (,$(findstring emcc,$(CC)))
CFLAGS+=-g
endif
endif
ifeq (${OSTYPE},windows)
CFLAGS+=-DR2__WINDOWS__=1
EXT_AR=lib
EXT_SO=dll
EXT_EXE=.exe
TH_LIBS=
endif

ifeq (${OSTYPE},bsd)
CFLAGS+=-DR2__UNIX__=1
EXT_AR=a
EXT_SO=so
EXT_EXE=
TH_LIBS=-lpthread
endif
ifeq (${OSTYPE},qnx)
CFLAGS+=-DR2__UNIX__=1
EXT_AR=a
EXT_SO=so
EXT_EXE=
TH_LIBS=
endif
ifeq (${OSTYPE},gnulinux)
CFLAGS+=-DR2__UNIX__=1
EXT_AR=a
EXT_SO=so
EXT_EXE=
TH_LIBS=-lpthread
endif
ifeq (${OSTYPE},haiku)
CFLAGS+=-DR2__UNIX__=1
EXT_AR=a
EXT_SO=so
EXT_EXE=
TH_LIBS=
endif
ifeq (${OSTYPE},darwin)
CFLAGS+=-DR2__UNIX__=1
EXT_AR=a
EXT_SO=dylib
EXT_EXE=
ifeq ($(shell uname -p),arm)
# iOS
TH_LIBS=
else
# OSX
TH_LIBS=-lpthread
endif
endif
ifeq (${OSTYPE},android)
CFLAGS+=-DR2__UNIX__=1
EXT_AR=a
EXT_SO=so
EXT_EXE=
TH_LIBS=
endif
ifeq (${OSTYPE},solaris)
CFLAGS+=-DR2__UNIX__=1
EXT_AR=a
EXT_SO=so
EXT_EXE=
TH_LIBS=
endif
ifeq (${OSTYPE},serenityos)
CFLAGS+=-DR2__UNIX__=1
EXT_AR=a
EXT_SO=so
EXT_EXE=
TH_LIBS=
endif
ifeq (${OSTYPE},aix)
CFLAGS+=-DR2__UNIX__=1
EXT_AR=a
EXT_SO=so
EXT_EXE=
TH_LIBS=
endif

ifeq (${EXT_SO},)
main:
	@echo
	@echo "OSTYPE: ${OSTYPE}"
	@echo ERROR: Unknown platform
	@echo
	@exit 1
endif

LIB=lib${NAME}
LIBAR=${LIB}.${EXT_AR}
LIBSO=${LIB}.${EXT_SO}
ifeq (${OSTYPE},android)
libname=-shared -o $1.${EXT_SO}
else
ifeq (${OSTYPE},windows)
libname=-shared -o $1.${EXT_SO}
else
ifeq (${OSTYPE},darwin)
ifeq (${HAVE_LIBVERSION},1)
libname=-dynamiclib -o $1.${EXT_SO} ${LDFLAGS_SONAME}$1.${ABIVERSION}.${EXT_SO}
else
libname=-dynamiclib -o $1.${EXT_SO}
endif
else
ifeq (${HAVE_LIBVERSION},1)
libname=-shared -o $1.${EXT_SO} ${LDFLAGS_SONAME}$1.${EXT_SO}.${ABIVERSION}
else
libname=-shared -o $1.${EXT_SO}
endif
endif
endif
endif

ifeq ($(OSTYPE),darwin)
libname-version = $(subst ${EXT_SO},$(2).${EXT_SO},$(1))
else
libname-version = $(1).$(2)
endif

libpath-to-name = $(word 2,$(subst /, ,$(1)))
libpath-to-name-version = $(call libname-version,$(call libpath-to-name,$(1)),$(2))

# -- singleton
endif
