368 lines
9.0 KiB
Makefile
368 lines
9.0 KiB
Makefile
# args
|
|
DIR_DIFF := 1
|
|
MT := 1
|
|
# 0: not need zlib; 1: compile zlib source code; 2: used -lz to link zlib lib;
|
|
ZLIB := 2
|
|
LZMA := 1
|
|
ARM64ASM := 0
|
|
# 0: not need zstd; 1: compile zstd source code; 2: used -lzstd to link zstd lib;
|
|
ZSTD := 1
|
|
MD5 := 1
|
|
STATIC_CPP := 0
|
|
# used clang?
|
|
CL := 0
|
|
# build with -m32?
|
|
M32 := 0
|
|
# build for out min size
|
|
MINS := 0
|
|
# support VCDIFF?
|
|
VCD := 1
|
|
# support bsdiff&bspatch?
|
|
BSD := 1
|
|
ifeq ($(OS),Windows_NT) # mingw?
|
|
CC := gcc
|
|
BZIP2 := 1
|
|
else
|
|
# 0: not need bzip2 (must BSD=0); 1: compile bzip2 source code; 2: used -lbz2 to link bzip2 lib;
|
|
BZIP2 := 2
|
|
endif
|
|
ifeq ($(BZIP2),0)
|
|
ifeq ($(BSD),0)
|
|
else
|
|
$(error error: support bsdiff need BZIP2! set BSD=0 continue)
|
|
endif
|
|
endif
|
|
|
|
HDIFF_OBJ :=
|
|
HPATCH_OBJ := \
|
|
libHDiffPatch/HPatch/patch.o \
|
|
file_for_patch.o
|
|
|
|
ifeq ($(DIR_DIFF),0)
|
|
else
|
|
HPATCH_OBJ += \
|
|
dirDiffPatch/dir_patch/dir_patch.o \
|
|
dirDiffPatch/dir_patch/res_handle_limit.o \
|
|
dirDiffPatch/dir_patch/ref_stream.o \
|
|
dirDiffPatch/dir_patch/new_stream.o \
|
|
dirDiffPatch/dir_patch/dir_patch_tools.o \
|
|
dirDiffPatch/dir_patch/new_dir_output.o \
|
|
libHDiffPatch/HDiff/private_diff/limit_mem_diff/adler_roll.o
|
|
endif
|
|
|
|
ifeq ($(BSD),0)
|
|
else
|
|
HPATCH_OBJ += bsdiff_wrapper/bspatch_wrapper.o
|
|
endif
|
|
|
|
MD5_PATH := ../libmd5
|
|
ifeq ($(DIR_DIFF),0)
|
|
else
|
|
ifeq ($(MD5),0)
|
|
else # https://sourceforge.net/projects/libmd5-rfc https://github.com/sisong/libmd5
|
|
HPATCH_OBJ += $(MD5_PATH)/md5.o
|
|
endif
|
|
endif
|
|
|
|
LZMA_PATH := ../lzma/C
|
|
ifeq ($(LZMA),0)
|
|
else # https://www.7-zip.org https://github.com/sisong/lzma
|
|
HPATCH_OBJ += $(LZMA_PATH)/LzmaDec.o \
|
|
$(LZMA_PATH)/Lzma2Dec.o \
|
|
$(LZMA_PATH)/CpuArch.o \
|
|
$(LZMA_PATH)/Alloc.o
|
|
ifeq ($(ARM64ASM),0)
|
|
else
|
|
HPATCH_OBJ += $(LZMA_PATH)/../Asm/arm64/LzmaDecOpt.o
|
|
endif
|
|
ifeq ($(MT),0)
|
|
else
|
|
HPATCH_OBJ+=$(LZMA_PATH)/MtDec.o \
|
|
$(LZMA_PATH)/Threads.o
|
|
endif
|
|
HDIFF_OBJ += $(LZMA_PATH)/LzFind.o \
|
|
$(LZMA_PATH)/LzFindOpt.o \
|
|
$(LZMA_PATH)/LzmaEnc.o \
|
|
$(LZMA_PATH)/Lzma2Enc.o
|
|
ifeq ($(MT),0)
|
|
else
|
|
HDIFF_OBJ+= $(LZMA_PATH)/LzFindMt.o \
|
|
$(LZMA_PATH)/MtCoder.o
|
|
endif
|
|
endif
|
|
ifeq ($(VCD),0)
|
|
else
|
|
HPATCH_OBJ += vcdiff_wrapper/vcpatch_wrapper.o
|
|
HDIFF_OBJ += vcdiff_wrapper/vcdiff_wrapper.o
|
|
ifeq ($(LZMA),0)
|
|
else
|
|
HPATCH_OBJ+=$(LZMA_PATH)/7zCrc.o \
|
|
$(LZMA_PATH)/7zCrcOpt.o \
|
|
$(LZMA_PATH)/Bra.o \
|
|
$(LZMA_PATH)/Bra86.o \
|
|
$(LZMA_PATH)/BraIA64.o \
|
|
$(LZMA_PATH)/Delta.o \
|
|
$(LZMA_PATH)/Sha256.o \
|
|
$(LZMA_PATH)/Sha256Opt.o \
|
|
$(LZMA_PATH)/Xz.o \
|
|
$(LZMA_PATH)/XzCrc64.o \
|
|
$(LZMA_PATH)/XzCrc64Opt.o \
|
|
$(LZMA_PATH)/XzDec.o
|
|
HDIFF_OBJ +=$(LZMA_PATH)/XzEnc.o
|
|
endif
|
|
endif
|
|
|
|
ZSTD_PATH := ../zstd/lib
|
|
ifeq ($(ZSTD),1) # https://github.com/sisong/zstd
|
|
HPATCH_OBJ += $(ZSTD_PATH)/common/debug.o \
|
|
$(ZSTD_PATH)/common/entropy_common.o \
|
|
$(ZSTD_PATH)/common/error_private.o \
|
|
$(ZSTD_PATH)/common/fse_decompress.o \
|
|
$(ZSTD_PATH)/common/xxhash.o \
|
|
$(ZSTD_PATH)/common/zstd_common.o \
|
|
$(ZSTD_PATH)/decompress/huf_decompress.o \
|
|
$(ZSTD_PATH)/decompress/zstd_ddict.o \
|
|
$(ZSTD_PATH)/decompress/zstd_decompress.o \
|
|
$(ZSTD_PATH)/decompress/zstd_decompress_block.o
|
|
HDIFF_OBJ += $(ZSTD_PATH)/compress/fse_compress.o \
|
|
$(ZSTD_PATH)/compress/hist.o \
|
|
$(ZSTD_PATH)/compress/huf_compress.o \
|
|
$(ZSTD_PATH)/compress/zstd_compress.o \
|
|
$(ZSTD_PATH)/compress/zstd_compress_literals.o \
|
|
$(ZSTD_PATH)/compress/zstd_compress_sequences.o \
|
|
$(ZSTD_PATH)/compress/zstd_compress_superblock.o \
|
|
$(ZSTD_PATH)/compress/zstd_double_fast.o \
|
|
$(ZSTD_PATH)/compress/zstd_fast.o \
|
|
$(ZSTD_PATH)/compress/zstd_lazy.o \
|
|
$(ZSTD_PATH)/compress/zstd_ldm.o \
|
|
$(ZSTD_PATH)/compress/zstd_opt.o
|
|
ifeq ($(MT),0)
|
|
else
|
|
HDIFF_OBJ+= $(ZSTD_PATH)/common/pool.o \
|
|
$(ZSTD_PATH)/common/threading.o \
|
|
$(ZSTD_PATH)/compress/zstdmt_compress.o
|
|
endif
|
|
endif
|
|
|
|
BZ2_PATH := ../bzip2
|
|
ifeq ($(BZIP2),1) # http://www.bzip.org https://github.com/sisong/bzip2
|
|
HPATCH_OBJ += $(BZ2_PATH)/blocksort.o \
|
|
$(BZ2_PATH)/bzlib.o \
|
|
$(BZ2_PATH)/compress.o \
|
|
$(BZ2_PATH)/crctable.o \
|
|
$(BZ2_PATH)/decompress.o \
|
|
$(BZ2_PATH)/huffman.o \
|
|
$(BZ2_PATH)/randtable.o
|
|
endif
|
|
|
|
ZLIB_PATH := ../zlib
|
|
ifeq ($(ZLIB),1) # http://zlib.net https://github.com/sisong/zlib
|
|
HPATCH_OBJ += $(ZLIB_PATH)/adler32.o \
|
|
$(ZLIB_PATH)/crc32.o \
|
|
$(ZLIB_PATH)/inffast.o \
|
|
$(ZLIB_PATH)/inflate.o \
|
|
$(ZLIB_PATH)/inftrees.o \
|
|
$(ZLIB_PATH)/trees.o \
|
|
$(ZLIB_PATH)/zutil.o
|
|
HDIFF_OBJ += $(ZLIB_PATH)/deflate.o
|
|
endif
|
|
|
|
HDIFF_OBJ += \
|
|
hdiffz_import_patch.o \
|
|
libHDiffPatch/HPatchLite/hpatch_lite.o \
|
|
libHDiffPatch/HDiff/diff.o \
|
|
libHDiffPatch/HDiff/match_block.o \
|
|
libHDiffPatch/HDiff/private_diff/bytes_rle.o \
|
|
libHDiffPatch/HDiff/private_diff/suffix_string.o \
|
|
libHDiffPatch/HDiff/private_diff/compress_detect.o \
|
|
libHDiffPatch/HDiff/private_diff/limit_mem_diff/digest_matcher.o \
|
|
libHDiffPatch/HDiff/private_diff/limit_mem_diff/stream_serialize.o \
|
|
libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort64.o \
|
|
libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.o \
|
|
$(HPATCH_OBJ)
|
|
ifeq ($(DIR_DIFF),0)
|
|
HDIFF_OBJ += libHDiffPatch/HDiff/private_diff/limit_mem_diff/adler_roll.o
|
|
endif
|
|
|
|
ifeq ($(DIR_DIFF),0)
|
|
else
|
|
HDIFF_OBJ += \
|
|
dirDiffPatch/dir_diff/dir_diff.o \
|
|
dirDiffPatch/dir_diff/dir_diff_tools.o \
|
|
dirDiffPatch/dir_diff/dir_manifest.o
|
|
endif
|
|
ifeq ($(BSD),0)
|
|
else
|
|
HDIFF_OBJ += bsdiff_wrapper/bsdiff_wrapper.o
|
|
endif
|
|
ifeq ($(MT),0)
|
|
else
|
|
HDIFF_OBJ += \
|
|
libParallel/parallel_import.o \
|
|
libParallel/parallel_channel.o \
|
|
compress_parallel.o
|
|
endif
|
|
|
|
|
|
DEF_FLAGS := \
|
|
-O3 -DNDEBUG -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 \
|
|
-D_IS_NEED_ALL_CompressPlugin=0 \
|
|
-D_IS_NEED_DEFAULT_CompressPlugin=0 \
|
|
-D_IS_NEED_ALL_ChecksumPlugin=0 \
|
|
-D_IS_NEED_DEFAULT_ChecksumPlugin=0
|
|
ifeq ($(M32),0)
|
|
else
|
|
DEF_FLAGS += -m32
|
|
endif
|
|
ifeq ($(MINS),0)
|
|
else
|
|
DEF_FLAGS += \
|
|
-s \
|
|
-Wno-error=format-security \
|
|
-fvisibility=hidden \
|
|
-ffunction-sections -fdata-sections \
|
|
-ffat-lto-objects -flto
|
|
CXXFLAGS += -fvisibility-inlines-hidden
|
|
endif
|
|
|
|
ifeq ($(BZIP2),0)
|
|
else
|
|
DEF_FLAGS += -D_CompressPlugin_bz2
|
|
ifeq ($(BZIP2),1)
|
|
DEF_FLAGS += -I$(BZ2_PATH)
|
|
endif
|
|
endif
|
|
ifeq ($(ZLIB),0)
|
|
else
|
|
DEF_FLAGS += -D_CompressPlugin_zlib
|
|
ifeq ($(ZLIB),1)
|
|
DEF_FLAGS += -I$(ZLIB_PATH)
|
|
endif
|
|
endif
|
|
ifeq ($(DIR_DIFF),0)
|
|
DEF_FLAGS += -D_IS_NEED_DIR_DIFF_PATCH=0
|
|
else
|
|
DEF_FLAGS += \
|
|
-D_IS_NEED_DIR_DIFF_PATCH=1 \
|
|
-D_ChecksumPlugin_fadler64
|
|
ifeq ($(ZLIB),0)
|
|
else
|
|
DEF_FLAGS += -D_ChecksumPlugin_crc32
|
|
endif
|
|
ifeq ($(MD5),0)
|
|
else
|
|
DEF_FLAGS += -D_ChecksumPlugin_md5 -I$(MD5_PATH)
|
|
endif
|
|
endif
|
|
ifeq ($(BSD),0)
|
|
DEF_FLAGS += -D_IS_NEED_BSDIFF=0
|
|
else
|
|
DEF_FLAGS += -D_IS_NEED_BSDIFF=1
|
|
endif
|
|
ifeq ($(VCD),0)
|
|
DEF_FLAGS += -D_IS_NEED_VCDIFF=0
|
|
else
|
|
DEF_FLAGS += -D_IS_NEED_VCDIFF=1
|
|
endif
|
|
ifeq ($(LZMA),0)
|
|
else
|
|
DEF_FLAGS += -D_CompressPlugin_lzma -D_CompressPlugin_lzma2 -I$(LZMA_PATH)
|
|
ifeq ($(VCD),0)
|
|
else
|
|
DEF_FLAGS += -D_CompressPlugin_7zXZ -DUSE_CRC_EMU
|
|
endif
|
|
ifeq ($(ARM64ASM),0)
|
|
else
|
|
DEF_FLAGS += -D_LZMA_DEC_OPT
|
|
endif
|
|
endif
|
|
ifeq ($(ZSTD),0)
|
|
else
|
|
DEF_FLAGS += -D_CompressPlugin_zstd
|
|
ifeq ($(ZSTD),1)
|
|
DEF_FLAGS += -DZSTD_HAVE_WEAK_SYMBOLS=0 -DZSTD_TRACE=0 -DZSTD_DISABLE_ASM=1 -DZSTDLIB_VISIBLE= -DZSTDLIB_HIDDEN= \
|
|
-I$(ZSTD_PATH) -I$(ZSTD_PATH)/common -I$(ZSTD_PATH)/compress -I$(ZSTD_PATH)/decompress
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(MT),0)
|
|
DEF_FLAGS += \
|
|
-D_7ZIP_ST \
|
|
-D_IS_USED_MULTITHREAD=0
|
|
else
|
|
DEF_FLAGS += \
|
|
-DZSTD_MULTITHREAD=1 \
|
|
-D_IS_USED_MULTITHREAD=1 \
|
|
-D_IS_USED_PTHREAD=1
|
|
endif
|
|
|
|
PATCH_LINK :=
|
|
ifeq ($(ZLIB),2)
|
|
PATCH_LINK += -lz # link zlib
|
|
endif
|
|
ifeq ($(BZIP2),2)
|
|
PATCH_LINK += -lbz2 # link bzip2
|
|
endif
|
|
ifeq ($(ZSTD),2)
|
|
PATCH_LINK += -lzstd # link zstd
|
|
endif
|
|
ifeq ($(MT),0)
|
|
else
|
|
PATCH_LINK += -lpthread # link pthread
|
|
endif
|
|
DIFF_LINK := $(PATCH_LINK)
|
|
ifeq ($(M32),0)
|
|
else
|
|
DIFF_LINK += -m32
|
|
endif
|
|
ifeq ($(MINS),0)
|
|
else
|
|
DIFF_LINK += -Wl,--gc-sections,--as-needed
|
|
endif
|
|
ifeq ($(CL),1)
|
|
CXX := clang++
|
|
CC := clang
|
|
endif
|
|
ifeq ($(STATIC_CPP),0)
|
|
DIFF_LINK += -lstdc++
|
|
else
|
|
DIFF_LINK += -static-libstdc++
|
|
endif
|
|
|
|
CFLAGS += $(DEF_FLAGS)
|
|
CXXFLAGS += $(DEF_FLAGS) -std=c++11
|
|
|
|
.PHONY: all install clean
|
|
|
|
all: libhdiffpatch.a hpatchz hdiffz mostlyclean
|
|
|
|
libhdiffpatch.a: $(HDIFF_OBJ)
|
|
$(AR) rcs $@ $^
|
|
|
|
hpatchz: $(HPATCH_OBJ)
|
|
$(CC) hpatchz.c $(HPATCH_OBJ) $(CFLAGS) $(PATCH_LINK) -o hpatchz
|
|
hdiffz: libhdiffpatch.a
|
|
$(CXX) hdiffz.cpp libhdiffpatch.a $(CXXFLAGS) $(DIFF_LINK) -o hdiffz
|
|
|
|
ifeq ($(OS),Windows_NT) # mingw?
|
|
RM := del /Q /F
|
|
DEL_HDIFF_OBJ := $(subst /,\,$(HDIFF_OBJ))
|
|
else
|
|
RM := rm -f
|
|
DEL_HDIFF_OBJ := $(HDIFF_OBJ)
|
|
endif
|
|
INSTALL_X := install -m 0755
|
|
INSTALL_BIN := $(DESTDIR)/usr/local/bin
|
|
|
|
mostlyclean: hpatchz hdiffz
|
|
$(RM) $(DEL_HDIFF_OBJ)
|
|
clean:
|
|
$(RM) libhdiffpatch.a hpatchz hdiffz $(DEL_HDIFF_OBJ)
|
|
|
|
install: all
|
|
$(INSTALL_X) hdiffz $(INSTALL_BIN)/hdiffz
|
|
$(INSTALL_X) hpatchz $(INSTALL_BIN)/hpatchz
|
|
|
|
uninstall:
|
|
$(RM) $(INSTALL_BIN)/hdiffz $(INSTALL_BIN)/hpatchz
|