c5ebe1f30a
Enable SSE4/AVX detection for AMD platforms (Bulldozer has both). Portable long long int print formatting to silence gcc 4.6 warnings.
209 lines
7.3 KiB
Makefile
209 lines
7.3 KiB
Makefile
#
|
|
# This file is a part of Pcompress, a chunked parallel multi-
|
|
# algorithm lossless compression and decompression program.
|
|
#
|
|
# Copyright (C) 2012 Moinak Ghosh. All rights reserved.
|
|
# Use is subject to license terms.
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Lesser General Public
|
|
# License as published by the Free Software Foundation; either
|
|
# version 3 of the License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# Lesser General Public License for more details.
|
|
#
|
|
# moinakg@belenix.org, http://moinakg.wordpress.com/
|
|
#
|
|
# This program includes partly-modified public domain source
|
|
# code from the LZMA SDK: http://www.7-zip.org/sdk.html
|
|
#
|
|
|
|
PROG= pcompress
|
|
MAINSRCS = main.c utils/utils.c allocator.c zlib_compress.c bzip2_compress.c \
|
|
lzma_compress.c ppmd_compress.c adaptive_compress.c lzfx_compress.c \
|
|
lz4_compress.c none_compress.c utils/xxhash.c utils/heapq.c utils/cpuid.c \
|
|
crypto/aes/crypto_aes.c crypto/scrypt/crypto_scrypt-nosse.c \
|
|
crypto/scrypt/sha256.c crypto/scrypt/crypto_aesctr.c crypto/crypto_utils.c
|
|
MAINHDRS = allocator.h pcompress.h utils/utils.h utils/xxhash.h utils/heapq.h \
|
|
utils/cpuid.h crypto/crypto_utils.h crypto/scrypt/crypto_scrypt.h \
|
|
crypto/scrypt/sha256.h crypto/scrypt/crypto_aesctr.h crypto/aes/crypto_aes.h
|
|
MAINOBJS = $(MAINSRCS:.c=.o)
|
|
|
|
RABINSRCS = rabin/rabin_dedup.c
|
|
RABINHDRS = rabin/rabin_dedup.h utils/utils.h
|
|
RABINOBJS = $(RABINSRCS:.c=.o)
|
|
|
|
BSDIFFSRCS = bsdiff/bsdiff.c bsdiff/bspatch.c bsdiff/rle_encoder.c
|
|
BSDIFFHDRS = bsdiff/bscommon.h utils/utils.h allocator.h
|
|
BSDIFFOBJS = $(BSDIFFSRCS:.c=.o)
|
|
|
|
LZMASRCS = lzma/LzmaEnc.c lzma/LzFind.c lzma/LzmaDec.c lzma/Threads.c lzma/LzFindMt.c
|
|
LZMAHDRS = lzma/CpuArch.h lzma/LzFind.h lzma/LzmaEnc.h lzma/Types.h \
|
|
lzma/LzHash.h lzma/LzmaDec.h utils/utils.h lzma/LzFindMt.h lzma/Threads.h lzma/windows.h \
|
|
lzma/Common/MyWindows.h lzma/Common/MyGuidDef.h lzma/basetyps.h
|
|
LZMAOBJS = $(LZMASRCS:.c=.o)
|
|
|
|
LZFXSRCS = lzfx/lzfx.c
|
|
LZFXHDRS = lzfx/lzfx.h
|
|
LZFXOBJS = $(LZFXSRCS:.c=.o)
|
|
|
|
LZ4SRCS = lz4/lz4.c lz4/lz4hc.c
|
|
LZ4HDRS = lz4/lz4.h lz4/lz4hc.h
|
|
LZ4OBJS = $(LZ4SRCS:.c=.o)
|
|
|
|
PPMDSRCS = lzma/Ppmd8.c lzma/Ppmd8Enc.c lzma/Ppmd8Dec.c
|
|
PPMDHDRS = lzma/Ppmd.h lzma/Ppmd8.h
|
|
PPMDOBJS = $(PPMDSRCS:.c=.o)
|
|
|
|
CRCSRCS = lzma/crc64_fast.c lzma/crc64_table.c
|
|
CRCHDRS = lzma/crc64_table_le.h lzma/crc64_table_be.h lzma/crc_macros.h
|
|
CRCOBJS = $(CRCSRCS:.c=.o)
|
|
|
|
LZPSRCS = lzp/lzp.c
|
|
LZPHDRS = lzp/lzp.h
|
|
LZPOBJS = $(LZPSRCS:.c=.o)
|
|
|
|
SKEIN_BLOCK_C = crypto/skein/skein_block.c
|
|
SKEIN_BLOCK_ASM = crypto/skein/skein_block_x64.s
|
|
SKEIN_BLOCK_SRC = @SKEIN_BLOCK@
|
|
SKEIN_BLOCK_OBJ = crypto/skein/skein_block.o
|
|
SKEINSRCS = crypto/skein/SHA3api_ref.c crypto/skein/skein.c crypto/skein/skein_debug.c
|
|
SKEINHDRS = crypto/skein/brg_endian.h crypto/skein/SHA3api_ref.h \
|
|
crypto/skein/skein.h crypto/skein/skein_port.h crypto/skein/brg_types.h \
|
|
crypto/skein/skein_debug.h crypto/skein/skein_iv.h
|
|
SKEINOBJS = $(SKEINSRCS:.c=.o)
|
|
|
|
SHA256_SRCS = crypto/sha2/sha256.c
|
|
SHA256_HDRS = crypto/sha2/sha256.h
|
|
SHA256ASM_SRCS = crypto/sha2/intel/sha256_avx1.asm \
|
|
crypto/sha2/intel/sha256_sse4.asm
|
|
SHA256ASM_OBJS = $(SHA256ASM_SRCS:.asm=.o)
|
|
SHA256_OBJS = $(SHA256_SRCS:.c=.o)
|
|
|
|
YASM = @YASM@ -f x64 -f elf64 -X gnu -g dwarf2 -D LINUX
|
|
LIBBSCWRAP = libbsc_compress.c
|
|
LIBBSCWRAPOBJ = libbsc_compress.o
|
|
LIBBSCDIR = @LIBBSCDIR@
|
|
LIBBSCLFLAGS = -L$(LIBBSCDIR) -lbsc
|
|
LIBBSCLIB = @LIBBSCLIB@
|
|
LIBBSCGEN_OPT = -fopenmp
|
|
LIBBSCCPPFLAGS = -I$(LIBBSCDIR)/libbsc -DENABLE_PC_LIBBSC
|
|
|
|
BAKFILES = *~ lzma/*~ lzfx/*~ lz4/*~ rabin/*~ bsdiff/*~ lzp/*~ utils/*~ crypto/sha2/*~ \
|
|
crypto/sha2/intel/*~ crypto/aes/*~ crypto/scrypt/*~ crypto/*~
|
|
|
|
RM = rm -f
|
|
COMMON_CPPFLAGS = -I. -I./lzma -I./lzfx -I./lz4 -I./rabin -I./bsdiff -DNODEFAULT_PROPS \
|
|
-DFILE_OFFSET_BITS=64 -D_REENTRANT -D__USE_SSE_INTRIN__ -D_LZMA_PROB32 \
|
|
-I./lzp @LIBBSCCPPFLAGS@ -I./crypto/skein -I./utils -I@OPENSSL_INCDIR@ \
|
|
-I./crypto/sha2 -I./crypto/scrypt -I./crypto/aes -I./crypto @KEYLEN@ \
|
|
@LIBBZ2_INC@ @LIBZ_INC@
|
|
COMMON_VEC_FLAGS = -ftree-vectorize
|
|
COMMON_LOOP_OPTFLAGS = $(VEC_FLAGS) -floop-interchange -floop-block
|
|
LDLIBS = -ldl -L@LIBBZ2_DIR@ -lbz2 -L@LIBZ_DIR@ -lz -lm @LIBBSCLFLAGS@ \
|
|
-L@OPENSSL_LIBDIR@ -lcrypto -lrt
|
|
OBJS = $(MAINOBJS) $(LZMAOBJS) $(PPMDOBJS) $(LZFXOBJS) $(LZ4OBJS) $(CRCOBJS) \
|
|
$(RABINOBJS) $(BSDIFFOBJS) $(LZPOBJS) @LIBBSCWRAPOBJ@ $(SKEINOBJS) $(SKEIN_BLOCK_OBJ) \
|
|
@SHA256ASM_OBJS@ @SHA256_OBJS@
|
|
|
|
DEBUG_LINK = g++ -m64 -pthread -msse3 @LIBBSCGEN_OPT@
|
|
DEBUG_COMPILE = gcc -m64 -g -msse3 -c
|
|
DEBUG_COMPILE_cpp = g++ -m64 -g -msse3 -c
|
|
DEBUG_VEC_FLAGS =
|
|
DEBUG_LOOP_OPTFLAGS =
|
|
DEBUG_GEN_OPT = -O -fno-omit-frame-pointer @LIBBSCGEN_OPT@
|
|
DEBUG_RABIN_OPT = -O -fno-omit-frame-pointer
|
|
DEBUG_CPPFLAGS = $(COMMON_CPPFLAGS)
|
|
|
|
RELEASE_LINK = g++ -m64 -pthread -msse3 @LIBBSCGEN_OPT@
|
|
RELEASE_COMPILE = gcc -m64 -msse3 -c
|
|
RELEASE_COMPILE_cpp = g++ -m64 -msse3 -c
|
|
RELEASE_VEC_FLAGS = $(COMMON_VEC_FLAGS)
|
|
RELEASE_LOOP_OPTFLAGS = $(COMMON_LOOP_OPTFLAGS)
|
|
RELEASE_CPPFLAGS = $(COMMON_CPPFLAGS) -DNDEBUG
|
|
RELEASE_GEN_OPT = -O3 @LIBBSCGEN_OPT@
|
|
RELEASE_RABIN_OPT = -O2
|
|
|
|
NO_SLAB_CPPFLAGS = -DDEBUG_NO_SLAB
|
|
DEBUG_STATS_CPPFLAGS = -DDEBUG_STATS
|
|
|
|
LINK = @LINK@
|
|
COMPILE = @COMPILE@
|
|
COMPILE_cpp = @COMPILE_cpp@
|
|
VEC_FLAGS = @VEC_FLAGS@
|
|
LOOP_OPTFLAGS = @LOOP_OPTFLAGS@
|
|
CPPFLAGS = @CPPFLAGS@ @NO_SLAB_CPPFLAGS@ @DEBUG_STATS_CPPFLAGS@
|
|
GEN_OPT = @GEN_OPT@
|
|
RABIN_OPT = @RABIN_OPT@
|
|
PREFIX=@PREFIX@
|
|
|
|
all: $(PROG)
|
|
|
|
$(LZMAOBJS): $(LZMASRCS) $(LZMAHDRS)
|
|
$(COMPILE) $(GEN_OPT) $(CPPFLAGS) $(@:.o=.c) -o $@
|
|
|
|
$(CRCOBJS): $(CRCSRCS) $(CRCHDRS)
|
|
$(COMPILE) $(GEN_OPT) $(VEC_FLAGS) $(CPPFLAGS) $(@:.o=.c) -o $@
|
|
|
|
$(PPMDOBJS): $(PPMDSRCS) $(PPMDHDRS)
|
|
$(COMPILE) $(GEN_OPT) $(VEC_FLAGS) $(CPPFLAGS) $(@:.o=.c) -o $@
|
|
|
|
$(RABINOBJS): $(RABINSRCS) $(RABINHDRS)
|
|
$(COMPILE) $(RABIN_OPT) $(VEC_FLAGS) $(CPPFLAGS) $(@:.o=.c) -o $@
|
|
|
|
$(BSDIFFOBJS): $(BSDIFFSRCS) $(BSDIFFHDRS)
|
|
$(COMPILE) $(GEN_OPT) $(VEC_FLAGS) $(CPPFLAGS) $(@:.o=.c) -o $@
|
|
|
|
$(LZFXOBJS): $(LZFXSRCS) $(LZFXHDRS)
|
|
$(COMPILE) $(GEN_OPT) $(VEC_FLAGS) $(CPPFLAGS) $(@:.o=.c) -o $@
|
|
|
|
$(LZ4OBJS): $(LZ4SRCS) $(LZ4HDRS)
|
|
$(COMPILE) $(GEN_OPT) $(VEC_FLAGS) $(CPPFLAGS) $(@:.o=.c) -o $@
|
|
|
|
$(LZPOBJS): $(LZPSRCS) $(LZPHDRS)
|
|
$(COMPILE) $(GEN_OPT) $(VEC_FLAGS) $(CPPFLAGS) $(@:.o=.c) -o $@
|
|
|
|
$(SKEIN_BLOCK_OBJ): $(SKEIN_BLOCK_SRC)
|
|
$(COMPILE) $(GEN_OPT) $(VEC_FLAGS) $(CPPFLAGS) $(SKEIN_BLOCK_SRC) -o $@
|
|
|
|
$(SKEINOBJS): $(SKEINSRCS) $(SKEINHDRS)
|
|
$(COMPILE) $(GEN_OPT) $(VEC_FLAGS) $(CPPFLAGS) $(@:.o=.c) -o $@
|
|
|
|
$(SHA256_OBJS): $(SHA256_SRCS) $(SHA256_HDRS)
|
|
$(COMPILE) $(GEN_OPT) $(VEC_FLAGS) $(CPPFLAGS) $(@:.o=.c) -o $@
|
|
|
|
$(SHA256ASM_OBJS): $(SHA256ASM_SRCS)
|
|
$(YASM) -o $@ $(@:.o=.asm)
|
|
|
|
$(LIBBSCLIB):
|
|
(cd $(LIBBSCDIR); make)
|
|
|
|
$(LIBBSCWRAPOBJ): $(LIBBSCWRAP) $(LIBBSCLIB)
|
|
$(COMPILE) $(GEN_OPT) $(VEC_FLAGS) $(CPPFLAGS) $(@:.o=.c) -o $@
|
|
|
|
$(MAINOBJS): $(MAINSRCS) $(MAINHDRS)
|
|
$(COMPILE) $(GEN_OPT) $(LOOP_OPTFLAGS) $(CPPFLAGS) $(@:.o=.c) -o $@
|
|
|
|
$(PROG): $(OBJS)
|
|
$(LINK) -o $@ $(OBJS) $(LDLIBS)
|
|
|
|
clean:
|
|
$(RM) $(PROG) $(OBJS) $(BAKFILES)
|
|
|
|
distclean: clean
|
|
$(RM) Makefile
|
|
|
|
install: $(PROG)
|
|
@mkdir -p $(PREFIX)/bin
|
|
@chmod 0755 $(PREFIX)/bin
|
|
@cp $(PROG) $(PREFIX)/bin
|
|
@chmod 0555 $(PREFIX)/bin/$(PROG)
|
|
@mkdir -p $(PREFIX)/share/doc/$(PROG)
|
|
@chmod 0755 $(PREFIX)/share $(PREFIX)/share/doc $(PREFIX)/share/doc/$(PROG)
|
|
@cp README.md $(PREFIX)/share/doc/$(PROG)/README
|
|
@chmod 0444 $(PREFIX)/share/doc/$(PROG)/README
|
|
|
|
|