SHELL=/bin/sh
EXE=
-FILL_WINDOW_SSE_o=
-FILL_WINDOW_SSE_lo=
-CRC_FOLDING_o=
-CRC_FOLDING_lo=
-DEFLATE_QUICK_o=
-DEFLATE_QUICK_lo=
+ARCHDIR=
+ARCH_STATIC_OBJS=
+ARCH_SHARED_OBJS=
prefix = /usr/local
exec_prefix = ${prefix}
man3dir = ${mandir}/man3
pkgconfigdir = ${libdir}/pkgconfig
-OBJZ = adler32.o ${CRC_FOLDING_o} ${DEFLATE_QUICK_o} crc32.o ${FILL_WINDOW_SSE_o} deflate.o infback.o inffast.o inflate.o inftrees.o trees.o zutil.o
+OBJZ = adler32.o crc32.o deflate.o infback.o inffast.o inflate.o inftrees.o trees.o zutil.o $(ARCH_STATIC_OBJS)
OBJG = compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o
OBJC = $(OBJZ) $(OBJG)
-PIC_OBJZ = adler32.lo ${CRC_FOLDING_lo} ${DEFLATE_QUICK_lo} crc32.lo ${FILL_WINDOW_SSE_lo} deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo
+PIC_OBJZ = adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo $(ARCH_SHARED_OBJS)
PIC_OBJG = compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo
PIC_OBJC = $(PIC_OBJZ) $(PIC_OBJG)
PIC_OBJS = $(PIC_OBJC) $(PIC_OBJA)
-all: static shared
+all: $(ARCHDIR) static shared
-static: example$(EXE) minigzip$(EXE)
+static: subdirs example$(EXE) minigzip$(EXE)
-shared: examplesh$(EXE) minigzipsh$(EXE)
+shared: subdirs examplesh$(EXE) minigzipsh$(EXE)
-all64: example64$(EXE) minigzip64$(EXE)
+all64: subdirs example64$(EXE) minigzip64$(EXE)
check: test
+.PHONY: subdirs $(ARCHDIR)
+
+subdirs: $(ARCHDIR)
+
+$(ARCHDIR):
+ $(MAKE) -C $@
+ -mv $@/*.o .
+ -mv $@/*.lo .
+
test: all teststatic testshared
teststatic: static
fi; \
rm -f $$TMP64
-fill_window_sse.lo: fill_window_sse.c
- -@mkdir objs 2>/dev/null || test -d objs
- $(CC) $(SFLAGS) -msse2 -DPIC -c -o objs/$*.o $<
- -@mv objs/$*.o $@
-
-fill_window_sse.o: fill_window_sse.c
- ${CC} ${CFLAGS} -msse2 -I. -c -o $@ fill_window_sse.c
-
-crc_folding.lo: crc_folding.c
- -@mkdir objs 2>/dev/null || test -d objs
- $(CC) $(SFLAGS) -mpclmul -msse4 -DPIC -c -o objs/$*.o $<
- -@mv objs/$*.o $@
-
-crc_folding.o: crc_folding.c
- ${CC} ${CFLAGS} -mpclmul -msse4 -I. -c -o $@ crc_folding.c
-
-deflate_quick.lo: deflate_quick.c
- -@mkdir objs 2>/dev/null || test -d objs
- $(CC) $(SFLAGS) -msse4 -DPIC -c -o objs/$*.o $<
- -@mv objs/$*.o $@
-
-deflate_quick.o: deflate_quick.c
- ${CC} ${CFLAGS} -msse4 -I. -c -o $@ $<
-
infcover.o: test/infcover.c zlib.h zconf.h
$(CC) $(CFLAGS) -I. -c -o $@ test/infcover.c
gzclose.o gzlib.o gzread.o gzwrite.o: zlib.h zconf.h gzguts.h
compress.o example.o minigzip.o uncompr.o: zlib.h zconf.h
crc32.o: zutil.h zlib.h zconf.h crc32.h
-deflate.o: deflate.h zutil.h zlib.h zconf.h ${DEFLATE_QUICK_o}
+deflate.o: deflate.h zutil.h zlib.h zconf.h
infback.o inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h
inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
inftrees.o: zutil.h zlib.h zconf.h inftrees.h
gzclose.lo gzlib.lo gzread.lo gzwrite.lo: zlib.h zconf.h gzguts.h
compress.lo example.lo minigzip.lo uncompr.lo: zlib.h zconf.h
crc32.lo: zutil.h zlib.h zconf.h crc32.h
-deflate.lo: deflate.h zutil.h zlib.h zconf.h ${DEFLATE_QUICK_lo}
+deflate.lo: deflate.h zutil.h zlib.h zconf.h
infback.lo inflate.lo: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h
inffast.lo: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
inftrees.lo: zutil.h zlib.h zconf.h inftrees.h
--- /dev/null
+# Makefile for zlib
+# Copyright (C) 1995-2013 Jean-loup Gailly, Mark Adler
+# For conditions of distribution and use, see copyright notice in zlib.h
+
+CC=
+CFLAGS=
+SFLAGS=
+
+all:
+
+
+mostlyclean: clean
+clean:
+ rm -f *.o *.lo *~ \
+ rm -rf objs
+ rm -f *.gcda *.gcno *.gcov
--- /dev/null
+fill_window_sse.c SSE2 optimized fill_window
+deflate_quick.c SSE4 optimized deflate strategy for use as level 1
+crc_folding.c SSE4 + PCLMULQDQ optimized CRC folding implementation
--- /dev/null
+# Makefile for zlib
+# Copyright (C) 1995-2013 Jean-loup Gailly, Mark Adler
+# For conditions of distribution and use, see copyright notice in zlib.h
+
+all: x86.o x86.lo
+
+x86.o:
+ gcc -O3 -I. -c -o $@x86.c
+
+x86.lo:
+ -@mkdir objs 2>/dev/null || test -d objs
+ gcc -O3 -I. -c -o $@ x86.c
+ -@mv objs/$*.o $@
+
+mostlyclean: clean
+clean:
+ rm -f *.o *.lo *~ \
+ rm -rf objs
+ rm -f *.gcda *.gcno *.gcov
--- /dev/null
+# Makefile for zlib
+# Copyright (C) 1995-2013 Jean-loup Gailly, Mark Adler
+# For conditions of distribution and use, see copyright notice in zlib.h
+
+CC=
+CFLAGS=
+SFLAGS=
+
+all: x86.o x86.lo fill_window_sse.o fill_window_sse.lo deflate_quick.o deflate_quick.lo crc_folding.o crc_folding.lo
+
+x86.o:
+ $(CC) $(CFLAGS) -I. -I../../ -c -o $@ x86.c
+
+x86.lo:
+ $(CC) $(CFLAGS) -fPIC -I. -I../../ -c -o $@ x86.c
+
+fill_window_sse.o:
+ $(CC) $(CFLAGS) -msse2 -I. -I../../ -c -o $@ fill_window_sse.c
+
+fill_window_sse.lo:
+ $(CC) $(SFLAGS) -msse2 -DPIC -I. -I../../ -c -o $@ fill_window_sse.c
+
+deflate_quick.o:
+ $(CC) $(CFLAGS) -msse4 -I. -I../../ -c -o $@ deflate_quick.c
+
+deflate_quick.lo:
+ $(CC) $(SFLAGS) -msse4 -DPIC -I. -I../../ -c -o $@ deflate_quick.c
+
+crc_folding.o:
+ $(CC) $(CFLAGS) -mpclmul -msse4 -I. -I../../ -c -o $@ crc_folding.c
+
+crc_folding.lo:
+ $(CC) $(SFLAGS) -mpclmul -msse4 -DPIC -I. -I../../ -c -o $@ crc_folding.c
+
+
+mostlyclean: clean
+clean:
+ rm -f *.o *.lo *~ \
+ rm -rf objs
+ rm -f *.gcda *.gcno *.gcov
HAVE_PCLMULQDQ_INTRIN=0
fi
-DEFLATE_QUICK_o=""
-DEFLATE_QUICK_lo=""
+ARCHDIR=""
+ARCH_STATIC_OBJS=""
+ARCH_SHARED_OBJS=""
# Set ARCH specific FLAGS
case "${ARCH}" in
i386 | i486 | i586 | i686 | x86_64)
+ ARCHDIR=arch/x86
+
case "${ARCH}" in
x86_64)
CFLAGS="${CFLAGS} -DX86_64"
CFLAGS="${CFLAGS} -DUNALIGNED_OK -DADLER32_UNROLL_LESS -DCRC32_UNROLL_LESS"
SFLAGS="${SFLAGS} -DUNALIGNED_OK -DADLER32_UNROLL_LESS -DCRC32_UNROLL_LESS"
+ # Enable arch-specific optimizations?
if test $without_optimizations -eq 0; then
- OBJC="${OBJC} x86.o"
- PIC_OBJC="${PIC_OBJC} x86.lo"
-
+ ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} x86.o"
+ ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} x86.lo"
if test ${HAVE_SSE2_INTRIN} -eq 1; then
CFLAGS="${CFLAGS} -UCHECK_SSE2 -DHAVE_SSE2"
SFLAGS="${SFLAGS} -UCHECK_SSE2 -DHAVE_SSE2"
- FILL_WINDOW_SSE_o="fill_window_sse.o"
- FILL_WINDOW_SSE_lo="fill_window_sse.lo"
- OBJS="${OBJS} ${FILL_WINDOW_SSE_o}"
- PIC_OBJS="${PIC_OBJS} ${FILL_WINDOW_SSE_lo}"
- else
- FILL_WINDOW_SSE_o=""
- FILL_WINDOW_SSE_lo=""
+ ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} fill_window_sse.o"
+ ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} fill_window_sse.lo"
fi
CFLAGS="${CFLAGS} -DUSE_SSE4_2_CRC_HASH"
if test ${HAVE_PCLMULQDQ_INTRIN} -eq 1; then
CFLAGS="${CFLAGS} -DHAVE_PCLMULQDQ"
SFLAGS="${SFLAGS} -DHAVE_PCLMULQDQ"
- CRC_FOLDING_o="crc_folding.o"
- CRC_FOLDING_lo="crc_folding.lo"
- OBJS="${OBJS} ${CRC_FOLDING_o}"
- PIC_OBJS="${PIC_OBJS} ${CRC_FOLDING_lo}"
- else
- CRC_FOLDING_o=""
- CRC_FOLDING_lo=""
+ ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} crc_folding.o"
+ ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} crc_folding.lo"
fi
fi
+
+ # Enable deflate_quick at level 1?
if test $without_new_strategies -eq 0; then
CFLAGS="${CFLAGS} -DUSE_QUICK -DUSE_MEDIUM"
SFLAGS="${SFLAGS} -DUSE_QUICK -DUSE_MEDIUM"
- DEFLATE_QUICK_o="deflate_quick.o"
- DEFLATE_QUICK_lo="deflate_quick.lo"
+ ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} deflate_quick.o"
+ ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} deflate_quick.lo"
fi
;;
esac
/^PIC_OBJC *=/s#=.*#= $PIC_OBJC#
/^all: */s#:.*#: $ALL#
/^test: */s#:.*#: $TEST#
-/^FILL_WINDOW_SSE_o *=/s#=.*#=$FILL_WINDOW_SSE_o#
-/^FILL_WINDOW_SSE_lo *=/s#=.*#=$FILL_WINDOW_SSE_lo#
-/^CRC_FOLDING_o *=/s#=.*#=$CRC_FOLDING_o#
-/^CRC_FOLDING_lo *=/s#=.*#=$CRC_FOLDING_lo#
-/^DEFLATE_QUICK_o *=/s#=.*#=$DEFLATE_QUICK_o#
-/^DEFLATE_QUICK_lo *=/s#=.*#=$DEFLATE_QUICK_lo#
+/^ARCHDIR *=/s#=.*#=$ARCHDIR#
+/^ARCH_STATIC_OBJS *=/s#=.*#=$ARCH_STATIC_OBJS#
+/^ARCH_SHARED_OBJS *=/s#=.*#=$ARCH_SHARED_OBJS#
" > Makefile
+sed < $ARCHDIR/Makefile.in "
+/^CC *=/s#=.*#=$CC#
+/^CFLAGS *=/s#=.*#=$CFLAGS#
+/^SFLAGS *=/s#=.*#=$SFLAGS#
+" > $ARCHDIR/Makefile
+
# create zlib.pc with the configure results
sed < zlib.pc.in "
/^CC *=/s#=.*#=$CC#
#include "deflate.h"
#ifdef HAVE_PCLMULQDQ
-#include "x86.h"
+#include "arch/x86/x86.h"
extern void ZLIB_INTERNAL crc_fold_init(deflate_state *z_const s);
extern void ZLIB_INTERNAL crc_fold_copy(deflate_state *z_const s,
unsigned char *dst, z_const unsigned char *src, long len);
#include "deflate.h"
#if defined(CHECK_SSE2) || defined(USE_SSE4_2_CRC_HASH) || defined(USE_QUICK)
-#include "x86.h"
+#include "arch/x86/x86.h"
#endif
const char deflate_copyright[] =