# prefix
include $(PRO_DIR)/prefix.mak

# module name
NAMES 					= luajit

# module type
luajit_TYPE 			= LIB

# config
luajit_CONFIG 			= n

# core files
luajit_C_FILES 			+= \
						luajit/src/lib_aux \
						luajit/src/lib_base \
						luajit/src/lib_bit \
						luajit/src/lib_debug \
						luajit/src/lib_ffi \
						luajit/src/lib_init \
						luajit/src/lib_io \
						luajit/src/lib_jit \
						luajit/src/lib_math \
						luajit/src/lib_os \
						luajit/src/lib_package \
						luajit/src/lib_string \
						luajit/src/lib_table \
						luajit/src/lj_alloc \
						luajit/src/lj_api \
						luajit/src/lj_asm \
						luajit/src/lj_bc \
						luajit/src/lj_bcread \
						luajit/src/lj_bcwrite \
						luajit/src/lj_carith \
						luajit/src/lj_ccall \
						luajit/src/lj_ccallback \
						luajit/src/lj_cconv \
						luajit/src/lj_cdata \
						luajit/src/lj_char \
						luajit/src/lj_clib \
						luajit/src/lj_cparse \
						luajit/src/lj_crecord \
						luajit/src/lj_ctype \
						luajit/src/lj_debug \
						luajit/src/lj_dispatch \
						luajit/src/lj_err \
						luajit/src/lj_ffrecord \
						luajit/src/lj_func \
						luajit/src/lj_gc \
						luajit/src/lj_gdbjit \
						luajit/src/lj_ir \
						luajit/src/lj_lex \
						luajit/src/lj_lib \
						luajit/src/lj_load \
						luajit/src/lj_mcode \
						luajit/src/lj_meta \
						luajit/src/lj_obj \
						luajit/src/lj_opt_dce \
						luajit/src/lj_opt_fold \
						luajit/src/lj_opt_loop \
						luajit/src/lj_opt_mem \
						luajit/src/lj_opt_narrow \
						luajit/src/lj_opt_sink \
						luajit/src/lj_opt_split \
						luajit/src/lj_parse \
						luajit/src/lj_record \
						luajit/src/lj_snap \
						luajit/src/lj_state \
						luajit/src/lj_str \
						luajit/src/lj_strscan \
						luajit/src/lj_tab \
						luajit/src/lj_trace \
						luajit/src/lj_udata \
						luajit/src/lj_vmevent \
						luajit/src/lj_vmmath \
						luajit/src/lj_buf \
						luajit/src/lj_strfmt \
						luajit/src/lj_strfmt_num \
						luajit/src/lj_profile \
						luajit/src/lj_prng

# is windows?
iswin =
ifeq ($(PLAT),windows)
	iswin = yes
endif
ifeq ($(PLAT),msys)
	iswin = yes
endif
ifeq ($(PLAT),mingw)
	iswin = yes
endif
ifeq ($(PLAT),cygwin)
	iswin = yes
endif

# autogen plat and BUILD_ARCH
GENPLAT := $(PLAT)
GENARCH := $(BUILD_ARCH)

# asm files
ifdef iswin
ifeq ($(BUILD_ARCH),x86_64)
GENARCH := x64
endif
ifeq ($(BUILD_ARCH),i386)
GENARCH := x86
endif
GENPLAT := windows
luajit_OBJ_FILES 		+= \
						autogen/$(GENPLAT)/$(luajit_JIT)/$(GENARCH)/lj_vm
else
luajit_ASM_FILES 		+= \
						autogen/$(GENPLAT)/$(luajit_JIT)/$(GENARCH)/lj_vm
endif

# includes
luajit_INC_DIRS 		+= \
						autogen/$(GENPLAT)/$(luajit_JIT)/$(GENARCH)

# disable jit compiler
ifeq ($(luajit_JIT),nojit)
luajit_CXFLAGS 			+= -DLUAJIT_DISABLE_JIT
endif
luajit_CXFLAGS 			+= -Wno-error=unused-function

# using internal memory management under armv7, gc will cause a crash when free strings in lua_close()
ifeq ($(BUILD_ARCH),arm)
luajit_CXFLAGS 			+= -DLUAJIT_USE_SYSMALLOC
endif

# fix call math.sin/log crash for fedora/i386/lj_vm.S with `LDFLAGS = -specs=/usr/lib/rpm/redhat/redhat-hardened-ld` in xmake.spec/%set_build_flags
ifndef iswin
ifeq ($(BUILD_ARCH),i386)
luajit_ASFLAGS 			+= -fPIE
luajit_CXFLAGS 			+= -fPIE
endif
endif

# use given system library?
luajit_C_FILES 			:= $(if $(findstring luajit,$(base_LIBNAMES)),,$(luajit_C_FILES))
luajit_ASM_FILES 		:= $(if $(findstring luajit,$(base_LIBNAMES)),,$(luajit_ASM_FILES))
luajit_INC_FILES 		:= $(if $(findstring luajit,$(base_LIBNAMES)),,$(luajit_INC_FILES))
luajit_OBJ_FILES 		:= $(if $(findstring luajit,$(base_LIBNAMES)),,$(luajit_OBJ_FILES))


# suffix
include $(PRO_DIR)/suffix.mak

