####################################################################
###                       CoreArray Codes                        ###
###                                                              ###

# additional preprocessor options
PKG_CPPFLAGS = -DUSING_R -D_FILE_OFFSET_BITS=64 -I../inst/include -ICoreArray

# to set flags for the linker
PKG_LIBS = ./liblzma.a -lpthread

SOURCES = \
	R_CoreArray.cpp \
	gdsfmt.cpp \
	digest.cpp \
	CoreArray/CoreArray.cpp \
	CoreArray/dAllocator.cpp \
	CoreArray/dAny.cpp \
	CoreArray/dBase.cpp \
	CoreArray/dBitGDS.cpp \
	CoreArray/dEndian.cpp \
	CoreArray/dFile.cpp \
	CoreArray/dParallel.cpp \
	CoreArray/dParallel_Ext.c \
	CoreArray/dPlatform.cpp \
	CoreArray/dRealGDS.cpp \
	CoreArray/dSerial.cpp \
	CoreArray/dStrGDS.cpp \
	CoreArray/dStream.cpp \
	CoreArray/dStruct.cpp \
	CoreArray/dSparse.cpp \
	CoreArray/dVLIntGDS.cpp \
	ZLIB/adler32.c \
	ZLIB/compress.c \
	ZLIB/crc32.c \
	ZLIB/deflate.c \
	ZLIB/infback.c \
	ZLIB/inffast.c \
	ZLIB/inflate.c \
	ZLIB/inftrees.c \
	ZLIB/trees.c \
	ZLIB/uncompr.c \
	ZLIB/zutil.c \
	LZ4/lz4.c \
	LZ4/lz4hc.c \
	LZ4/lz4frame.c \
	LZ4/xxhash.c

OBJECTS = \
	R_CoreArray.o \
	gdsfmt.o \
	digest.o \
	CoreArray/CoreArray.o \
	CoreArray/dAllocator.o \
	CoreArray/dAny.o \
	CoreArray/dBase.o \
	CoreArray/dBitGDS.o \
	CoreArray/dEndian.o \
	CoreArray/dFile.o \
	CoreArray/dParallel.o \
	CoreArray/dParallel_Ext.o \
	CoreArray/dPlatform.o \
	CoreArray/dRealGDS.o \
	CoreArray/dSerial.o \
	CoreArray/dStrGDS.o \
	CoreArray/dStream.o \
	CoreArray/dStruct.o \
	CoreArray/dSparse.o \
	CoreArray/dVLIntGDS.o \
	ZLIB/adler32.o \
	ZLIB/compress.o \
	ZLIB/crc32.o \
	ZLIB/deflate.o \
	ZLIB/infback.o \
	ZLIB/inffast.o \
	ZLIB/inflate.o \
	ZLIB/inftrees.o \
	ZLIB/trees.o \
	ZLIB/uncompr.o \
	ZLIB/zutil.o \
	LZ4/lz4.o \
	LZ4/lz4hc.o \
	LZ4/lz4frame.o \
	LZ4/xxhash.o


all: $(SHLIB)

$(SHLIB): liblzma.a


ZLIB/adler32.o:
	$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -g0 ZLIB/adler32.c -o $@

ZLIB/compress.o:
	$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -g0 ZLIB/compress.c -o $@

ZLIB/crc32.o:
	$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -g0 ZLIB/crc32.c -o $@

ZLIB/deflate.o:
	$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -g0 ZLIB/deflate.c -o $@

ZLIB/infback.o:
	$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -g0 ZLIB/infback.c -o $@

ZLIB/inffast.o:
	$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -g0 ZLIB/inffast.c -o $@

ZLIB/inflate.o:
	$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -g0 ZLIB/inflate.c -o $@

ZLIB/inftrees.o:
	$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -g0 ZLIB/inftrees.c -o $@

ZLIB/trees.o:
	$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -g0 ZLIB/trees.c -o $@

ZLIB/uncompr.o:
	$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -g0 ZLIB/uncompr.c -o $@

ZLIB/zutil.o:
	$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -g0 ZLIB/zutil.c -o $@


liblzma.a:
	cd XZ && tar -xzf xz-5.2.9.tar.gz
	cd XZ/xz-5.2.9 && \
		./configure CC="${CC}" CPP="${CPP}" CXX="${CXX}" CXXCPP="${CXXCPP}" --build="${R_ARCH#*/}" \
		--with-pic --enable-silent-rules --quiet --disable-xz --disable-shared > /dev/null
	cd XZ/xz-5.2.9/src/liblzma && make
	cp XZ/xz-5.2.9/src/liblzma/.libs/liblzma.a  .
	rm -rf XZ/xz-5.2.9/dos
	rm -rf XZ/xz-5.2.9/po


clean:
	rm -f $(OBJECTS)
	rm -f ../.gitignore
	rm -f liblzma.a
	rm -rf ../.github
	rm -rf XZ/xz-5.2.9
