Merge remote-tracking branch 'origin/dev' into splittable
This commit is contained in:
@@ -109,10 +109,15 @@ clean:
|
|||||||
# make install is validated only for Linux, OSX, Hurd and some BSD targets
|
# make install is validated only for Linux, OSX, Hurd and some BSD targets
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU FreeBSD DragonFly NetBSD))
|
ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU FreeBSD DragonFly NetBSD))
|
||||||
HOST_OS = POSIX
|
|
||||||
CMAKE_PARAMS = -DZSTD_BUILD_CONTRIB:BOOL=ON -DZSTD_BUILD_STATIC:BOOL=ON -DZSTD_BUILD_TESTS:BOOL=ON
|
|
||||||
.PHONY: install uninstall travis-install clangtest gpptest armtest usan asan uasan
|
|
||||||
|
|
||||||
|
HOST_OS = POSIX
|
||||||
|
CMAKE_PARAMS = -DZSTD_BUILD_CONTRIB:BOOL=ON -DZSTD_BUILD_STATIC:BOOL=ON -DZSTD_BUILD_TESTS:BOOL=ON -DZSTD_ZLIB_SUPPORT:BOOL=ON -DZSTD_LZMA_SUPPORT:BOOL=ON
|
||||||
|
|
||||||
|
.PHONY: list
|
||||||
|
list:
|
||||||
|
@$(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$' | xargs
|
||||||
|
|
||||||
|
.PHONY: install uninstall travis-install clangtest gpptest armtest usan asan uasan
|
||||||
install:
|
install:
|
||||||
@$(MAKE) -C $(ZSTDDIR) $@
|
@$(MAKE) -C $(ZSTDDIR) $@
|
||||||
@$(MAKE) -C $(PRGDIR) $@
|
@$(MAKE) -C $(PRGDIR) $@
|
||||||
|
|||||||
+8
-7
@@ -15,7 +15,7 @@
|
|||||||
- COMPILER: "gcc"
|
- COMPILER: "gcc"
|
||||||
HOST: "mingw"
|
HOST: "mingw"
|
||||||
PLATFORM: "x86"
|
PLATFORM: "x86"
|
||||||
SCRIPT: "make lib && make zstd && make -C tests allnothread"
|
SCRIPT: "make allarch"
|
||||||
ARTIFACT: "true"
|
ARTIFACT: "true"
|
||||||
BUILD: "true"
|
BUILD: "true"
|
||||||
- COMPILER: "clang"
|
- COMPILER: "clang"
|
||||||
@@ -191,7 +191,7 @@
|
|||||||
- COMPILER: "gcc"
|
- COMPILER: "gcc"
|
||||||
HOST: "mingw"
|
HOST: "mingw"
|
||||||
PLATFORM: "x86"
|
PLATFORM: "x86"
|
||||||
SCRIPT: "make lib && make zstd && make -C tests allnothread"
|
SCRIPT: "make allarch"
|
||||||
- COMPILER: "clang"
|
- COMPILER: "clang"
|
||||||
HOST: "mingw"
|
HOST: "mingw"
|
||||||
PLATFORM: "x64"
|
PLATFORM: "x64"
|
||||||
@@ -218,10 +218,10 @@
|
|||||||
- ECHO Installing %COMPILER% %PLATFORM% %CONFIGURATION%
|
- ECHO Installing %COMPILER% %PLATFORM% %CONFIGURATION%
|
||||||
- SET PATH_ORIGINAL=%PATH%
|
- SET PATH_ORIGINAL=%PATH%
|
||||||
- if [%HOST%]==[mingw] (
|
- if [%HOST%]==[mingw] (
|
||||||
SET "PATH_MINGW32=C:\MinGW\bin;C:\MinGW\usr\bin" &&
|
SET "PATH_MINGW32=C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32\bin" &&
|
||||||
SET "PATH_MINGW64=C:\msys64\mingw64\bin;C:\msys64\usr\bin" &&
|
SET "PATH_MINGW64=C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin" &&
|
||||||
COPY C:\msys64\usr\bin\make.exe C:\MinGW\bin\make.exe &&
|
COPY C:\msys64\usr\bin\make.exe C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32\bin\make.exe &&
|
||||||
COPY C:\MinGW\bin\gcc.exe C:\MinGW\bin\cc.exe
|
COPY C:\msys64\usr\bin\make.exe C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin\make.exe
|
||||||
)
|
)
|
||||||
- IF [%HOST%]==[visual] IF [%PLATFORM%]==[x64] (
|
- IF [%HOST%]==[visual] IF [%PLATFORM%]==[x64] (
|
||||||
SET ADDITIONALPARAM=/p:LibraryPath="C:\Program Files\Microsoft SDKs\Windows\v7.1\lib\x64;c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64;C:\Program Files (x86)\Microsoft Visual Studio 10.0\;C:\Program Files (x86)\Microsoft Visual Studio 10.0\lib\amd64;"
|
SET ADDITIONALPARAM=/p:LibraryPath="C:\Program Files\Microsoft SDKs\Windows\v7.1\lib\x64;c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64;C:\Program Files (x86)\Microsoft Visual Studio 10.0\;C:\Program Files (x86)\Microsoft Visual Studio 10.0\lib\amd64;"
|
||||||
@@ -237,7 +237,8 @@
|
|||||||
) ) &&
|
) ) &&
|
||||||
make -v &&
|
make -v &&
|
||||||
sh -c "%COMPILER% -v" &&
|
sh -c "%COMPILER% -v" &&
|
||||||
sh -c "CC=%COMPILER% %SCRIPT%"
|
set "CC=%COMPILER%" &&
|
||||||
|
sh -c "%SCRIPT%"
|
||||||
)
|
)
|
||||||
- if [%HOST%]==[visual] (
|
- if [%HOST%]==[visual] (
|
||||||
ECHO *** &&
|
ECHO *** &&
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\lib\dictBuilder;$(SolutionDir)..\..\lib\compress"
|
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\lib\dictBuilder;$(SolutionDir)..\..\lib\compress"
|
||||||
PreprocessorDefinitions="ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE"
|
PreprocessorDefinitions="ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
RuntimeLibrary="3"
|
RuntimeLibrary="3"
|
||||||
@@ -121,7 +121,7 @@
|
|||||||
EnableIntrinsicFunctions="true"
|
EnableIntrinsicFunctions="true"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\lib\dictBuilder;$(SolutionDir)..\..\lib\compress"
|
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\lib\dictBuilder;$(SolutionDir)..\..\lib\compress"
|
||||||
PreprocessorDefinitions="ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE"
|
PreprocessorDefinitions="ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
EnableFunctionLevelLinking="true"
|
EnableFunctionLevelLinking="true"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
@@ -196,7 +196,7 @@
|
|||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\lib\dictBuilder;$(SolutionDir)..\..\lib\compress"
|
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\lib\dictBuilder;$(SolutionDir)..\..\lib\compress"
|
||||||
PreprocessorDefinitions="ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE"
|
PreprocessorDefinitions="ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
RuntimeLibrary="3"
|
RuntimeLibrary="3"
|
||||||
@@ -274,7 +274,7 @@
|
|||||||
EnableIntrinsicFunctions="true"
|
EnableIntrinsicFunctions="true"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\lib\dictBuilder;$(SolutionDir)..\..\lib\compress"
|
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\lib\dictBuilder;$(SolutionDir)..\..\lib\compress"
|
||||||
PreprocessorDefinitions="ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE"
|
PreprocessorDefinitions="ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
EnableFunctionLevelLinking="true"
|
EnableFunctionLevelLinking="true"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\programs\legacy;$(SolutionDir)..\..\lib\dictBuilder"
|
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\programs\legacy;$(SolutionDir)..\..\lib\dictBuilder"
|
||||||
PreprocessorDefinitions="ZSTD_DLL_EXPORT=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE"
|
PreprocessorDefinitions="ZSTD_DLL_EXPORT=1;ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
RuntimeLibrary="3"
|
RuntimeLibrary="3"
|
||||||
@@ -120,7 +120,7 @@
|
|||||||
EnableIntrinsicFunctions="true"
|
EnableIntrinsicFunctions="true"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\programs\legacy;$(SolutionDir)..\..\lib\dictBuilder"
|
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\programs\legacy;$(SolutionDir)..\..\lib\dictBuilder"
|
||||||
PreprocessorDefinitions="ZSTD_DLL_EXPORT=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE"
|
PreprocessorDefinitions="ZSTD_DLL_EXPORT=1;ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
EnableFunctionLevelLinking="true"
|
EnableFunctionLevelLinking="true"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
@@ -194,7 +194,7 @@
|
|||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\programs\legacy;$(SolutionDir)..\..\lib\dictBuilder"
|
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\programs\legacy;$(SolutionDir)..\..\lib\dictBuilder"
|
||||||
PreprocessorDefinitions="ZSTD_DLL_EXPORT=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE"
|
PreprocessorDefinitions="ZSTD_DLL_EXPORT=1;ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
RuntimeLibrary="3"
|
RuntimeLibrary="3"
|
||||||
@@ -271,7 +271,7 @@
|
|||||||
EnableIntrinsicFunctions="true"
|
EnableIntrinsicFunctions="true"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\programs\legacy;$(SolutionDir)..\..\lib\dictBuilder"
|
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\programs\legacy;$(SolutionDir)..\..\lib\dictBuilder"
|
||||||
PreprocessorDefinitions="ZSTD_DLL_EXPORT=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE"
|
PreprocessorDefinitions="ZSTD_DLL_EXPORT=1;ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
EnableFunctionLevelLinking="true"
|
EnableFunctionLevelLinking="true"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\lib\dictBuilder;$(SolutionDir)..\..\lib\compress"
|
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\lib\dictBuilder;$(SolutionDir)..\..\lib\compress"
|
||||||
PreprocessorDefinitions="ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE"
|
PreprocessorDefinitions="ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
RuntimeLibrary="3"
|
RuntimeLibrary="3"
|
||||||
@@ -122,7 +122,7 @@
|
|||||||
EnableIntrinsicFunctions="true"
|
EnableIntrinsicFunctions="true"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\lib\dictBuilder;$(SolutionDir)..\..\lib\compress"
|
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\lib\dictBuilder;$(SolutionDir)..\..\lib\compress"
|
||||||
PreprocessorDefinitions="ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE"
|
PreprocessorDefinitions="ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
EnableFunctionLevelLinking="true"
|
EnableFunctionLevelLinking="true"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
@@ -197,7 +197,7 @@
|
|||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\lib\dictBuilder;$(SolutionDir)..\..\lib\compress"
|
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\lib\dictBuilder;$(SolutionDir)..\..\lib\compress"
|
||||||
PreprocessorDefinitions="ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE"
|
PreprocessorDefinitions="ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
RuntimeLibrary="3"
|
RuntimeLibrary="3"
|
||||||
@@ -275,7 +275,7 @@
|
|||||||
EnableIntrinsicFunctions="true"
|
EnableIntrinsicFunctions="true"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\lib\dictBuilder;$(SolutionDir)..\..\lib\compress"
|
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\lib\dictBuilder;$(SolutionDir)..\..\lib\compress"
|
||||||
PreprocessorDefinitions="ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE"
|
PreprocessorDefinitions="ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
EnableFunctionLevelLinking="true"
|
EnableFunctionLevelLinking="true"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\programs\legacy;$(SolutionDir)..\..\lib\dictBuilder"
|
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\programs\legacy;$(SolutionDir)..\..\lib\dictBuilder"
|
||||||
PreprocessorDefinitions="ZSTD_DLL_EXPORT=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE"
|
PreprocessorDefinitions="ZSTD_DLL_EXPORT=1;ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
RuntimeLibrary="3"
|
RuntimeLibrary="3"
|
||||||
@@ -121,7 +121,7 @@
|
|||||||
EnableIntrinsicFunctions="true"
|
EnableIntrinsicFunctions="true"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\programs\legacy;$(SolutionDir)..\..\lib\dictBuilder"
|
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\programs\legacy;$(SolutionDir)..\..\lib\dictBuilder"
|
||||||
PreprocessorDefinitions="ZSTD_DLL_EXPORT=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE"
|
PreprocessorDefinitions="ZSTD_DLL_EXPORT=1;ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
EnableFunctionLevelLinking="true"
|
EnableFunctionLevelLinking="true"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
@@ -195,7 +195,7 @@
|
|||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\programs\legacy;$(SolutionDir)..\..\lib\dictBuilder"
|
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\programs\legacy;$(SolutionDir)..\..\lib\dictBuilder"
|
||||||
PreprocessorDefinitions="ZSTD_DLL_EXPORT=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE"
|
PreprocessorDefinitions="ZSTD_DLL_EXPORT=1;ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
RuntimeLibrary="3"
|
RuntimeLibrary="3"
|
||||||
@@ -272,7 +272,7 @@
|
|||||||
EnableIntrinsicFunctions="true"
|
EnableIntrinsicFunctions="true"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\programs\legacy;$(SolutionDir)..\..\lib\dictBuilder"
|
AdditionalIncludeDirectories="$(SolutionDir)..\..\lib;$(SolutionDir)..\..\lib\common;$(SolutionDir)..\..\lib\legacy;$(SolutionDir)..\..\programs\legacy;$(SolutionDir)..\..\lib\dictBuilder"
|
||||||
PreprocessorDefinitions="ZSTD_DLL_EXPORT=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE"
|
PreprocessorDefinitions="ZSTD_DLL_EXPORT=1;ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
EnableFunctionLevelLinking="true"
|
EnableFunctionLevelLinking="true"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
|
|||||||
@@ -149,7 +149,7 @@
|
|||||||
</PrecompiledHeader>
|
</PrecompiledHeader>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>ZSTD_DLL_EXPORT=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>ZSTD_DLL_EXPORT=1;ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<MinimalRebuild>true</MinimalRebuild>
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
@@ -169,7 +169,7 @@
|
|||||||
</PrecompiledHeader>
|
</PrecompiledHeader>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>ZSTD_DLL_EXPORT=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>ZSTD_DLL_EXPORT=1;ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>true</TreatWarningAsError>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
@@ -189,7 +189,7 @@
|
|||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>ZSTD_DLL_EXPORT=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>ZSTD_DLL_EXPORT=1;ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<EnablePREfast>false</EnablePREfast>
|
<EnablePREfast>false</EnablePREfast>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
@@ -211,7 +211,7 @@
|
|||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>ZSTD_DLL_EXPORT=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>ZSTD_DLL_EXPORT=1;ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<TreatWarningAsError>false</TreatWarningAsError>
|
<TreatWarningAsError>false</TreatWarningAsError>
|
||||||
<EnablePREfast>false</EnablePREfast>
|
<EnablePREfast>false</EnablePREfast>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
|||||||
@@ -146,7 +146,7 @@
|
|||||||
</PrecompiledHeader>
|
</PrecompiledHeader>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>ZSTD_DLL_EXPORT=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>ZSTD_DLL_EXPORT=1;ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<MinimalRebuild>true</MinimalRebuild>
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
@@ -166,7 +166,7 @@
|
|||||||
</PrecompiledHeader>
|
</PrecompiledHeader>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>ZSTD_DLL_EXPORT=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>ZSTD_DLL_EXPORT=1;ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>true</TreatWarningAsError>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
@@ -186,7 +186,7 @@
|
|||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>ZSTD_DLL_EXPORT=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>ZSTD_DLL_EXPORT=1;ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<EnablePREfast>false</EnablePREfast>
|
<EnablePREfast>false</EnablePREfast>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
@@ -208,7 +208,7 @@
|
|||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>ZSTD_DLL_EXPORT=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>ZSTD_DLL_EXPORT=1;ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<TreatWarningAsError>false</TreatWarningAsError>
|
<TreatWarningAsError>false</TreatWarningAsError>
|
||||||
<EnablePREfast>false</EnablePREfast>
|
<EnablePREfast>false</EnablePREfast>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
|||||||
@@ -155,7 +155,7 @@
|
|||||||
</PrecompiledHeader>
|
</PrecompiledHeader>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>true</TreatWarningAsError>
|
||||||
<EnablePREfast>false</EnablePREfast>
|
<EnablePREfast>false</EnablePREfast>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@@ -171,7 +171,7 @@
|
|||||||
</PrecompiledHeader>
|
</PrecompiledHeader>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>true</TreatWarningAsError>
|
||||||
<EnablePREfast>false</EnablePREfast>
|
<EnablePREfast>false</EnablePREfast>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@@ -189,7 +189,7 @@
|
|||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<EnablePREfast>false</EnablePREfast>
|
<EnablePREfast>false</EnablePREfast>
|
||||||
<TreatWarningAsError>false</TreatWarningAsError>
|
<TreatWarningAsError>false</TreatWarningAsError>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
@@ -210,7 +210,7 @@
|
|||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=4;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<TreatWarningAsError>false</TreatWarningAsError>
|
<TreatWarningAsError>false</TreatWarningAsError>
|
||||||
<EnablePREfast>false</EnablePREfast>
|
<EnablePREfast>false</EnablePREfast>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
|||||||
@@ -8,14 +8,15 @@
|
|||||||
# ################################################################
|
# ################################################################
|
||||||
|
|
||||||
PROJECT(zstd)
|
PROJECT(zstd)
|
||||||
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.7)
|
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.9)
|
||||||
SET(ZSTD_SOURCE_DIR "${CMAKE_SOURCE_DIR}/../..")
|
SET(ZSTD_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../..")
|
||||||
|
LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
# Add extra compilation flags
|
# Add extra compilation flags
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
INCLUDE(CMakeModules/AddExtraCompilationFlags.cmake)
|
INCLUDE(AddZstdCompilationFlags)
|
||||||
ADD_EXTRA_COMPILATION_FLAGS()
|
ADD_ZSTD_COMPILATION_FLAGS()
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
# Options
|
# Options
|
||||||
|
|||||||
+14
-26
@@ -2,24 +2,25 @@ include(CheckCXXCompilerFlag)
|
|||||||
include(CheckCCompilerFlag)
|
include(CheckCCompilerFlag)
|
||||||
|
|
||||||
function(EnableCompilerFlag _flag _C _CXX)
|
function(EnableCompilerFlag _flag _C _CXX)
|
||||||
message("Checking flag ${_flag}")
|
string(REGEX REPLACE "\\+" "PLUS" varname "${_flag}")
|
||||||
|
string(REGEX REPLACE "[^A-Za-z0-9]+" "_" varname "${varname}")
|
||||||
|
string(REGEX REPLACE "^_+" "" varname "${varname}")
|
||||||
|
string(TOUPPER "${varname}" varname)
|
||||||
if (_C)
|
if (_C)
|
||||||
CHECK_C_COMPILER_FLAG(${_flag} C_FLAG)
|
CHECK_C_COMPILER_FLAG(${_flag} C_FLAG_${varname})
|
||||||
if (C_FLAG)
|
if (C_FLAG_${varname})
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_flag}" CACHE INTERNAL "C Flags")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_flag}" PARENT_SCOPE)
|
||||||
endif ()
|
endif ()
|
||||||
unset(C_FLAG CACHE)
|
|
||||||
endif ()
|
endif ()
|
||||||
if (_CXX)
|
if (_CXX)
|
||||||
CHECK_CXX_COMPILER_FLAG(${_flag} CXX_FLAG)
|
CHECK_CXX_COMPILER_FLAG(${_flag} CXX_FLAG_${varname})
|
||||||
if (CXX_FLAG)
|
if (CXX_FLAG_${varname})
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_flag}" CACHE INTERNAL "CXX Flags")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_flag}" PARENT_SCOPE)
|
||||||
endif ()
|
endif ()
|
||||||
unset(CXX_FLAG CACHE)
|
|
||||||
endif ()
|
endif ()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
MACRO(ADD_EXTRA_COMPILATION_FLAGS)
|
MACRO(ADD_ZSTD_COMPILATION_FLAGS)
|
||||||
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang" OR MINGW) #Not only UNIX but also WIN32 for MinGW
|
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang" OR MINGW) #Not only UNIX but also WIN32 for MinGW
|
||||||
#Set c++11 by default
|
#Set c++11 by default
|
||||||
EnableCompilerFlag("-std=c++11" false true)
|
EnableCompilerFlag("-std=c++11" false true)
|
||||||
@@ -68,8 +69,7 @@ MACRO(ADD_EXTRA_COMPILATION_FLAGS)
|
|||||||
separate_arguments(${flag_var})
|
separate_arguments(${flag_var})
|
||||||
list(REMOVE_DUPLICATES ${flag_var})
|
list(REMOVE_DUPLICATES ${flag_var})
|
||||||
string(REPLACE ";" " " ${flag_var} "${${flag_var}}")
|
string(REPLACE ";" " " ${flag_var} "${${flag_var}}")
|
||||||
set(${flag_var} "${${flag_var}}" CACHE STRING "common build flags" FORCE)
|
ENDFOREACH (flag_var)
|
||||||
ENDFOREACH (flag_var)
|
|
||||||
|
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
# Replace /MT to /MD flag
|
# Replace /MT to /MD flag
|
||||||
@@ -80,19 +80,7 @@ MACRO(ADD_EXTRA_COMPILATION_FLAGS)
|
|||||||
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
|
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
|
||||||
STRING(REGEX REPLACE "/MT" "/MD" ${flag_var} "${${flag_var}}")
|
STRING(REGEX REPLACE "/MT" "/MD" ${flag_var} "${${flag_var}}")
|
||||||
STRING(REGEX REPLACE "/O2" "/Ox" ${flag_var} "${${flag_var}}")
|
STRING(REGEX REPLACE "/O2" "/Ox" ${flag_var} "${${flag_var}}")
|
||||||
ENDFOREACH (flag_var)
|
ENDFOREACH (flag_var)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "Updated flags" FORCE)
|
ENDMACRO(ADD_ZSTD_COMPILATION_FLAGS)
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}" CACHE STRING "Updated flags" FORCE)
|
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}" CACHE STRING "Updated flags" FORCE)
|
|
||||||
set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL}" CACHE STRING "Updated flags" FORCE)
|
|
||||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}" CACHE STRING "Updated flags" FORCE)
|
|
||||||
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "Updated flags" FORCE)
|
|
||||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}" CACHE STRING "Updated flags" FORCE)
|
|
||||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}" CACHE STRING "Updated flags" FORCE)
|
|
||||||
set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL}" CACHE STRING "Updated flags" FORCE)
|
|
||||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}" CACHE STRING "Updated flags" FORCE)
|
|
||||||
|
|
||||||
ENDMACRO(ADD_EXTRA_COMPILATION_FLAGS)
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
function(GetLibraryVersion _header _major _minor _release)
|
function(GetZstdLibraryVersion _header _major _minor _release)
|
||||||
# Read file content
|
# Read file content
|
||||||
FILE(READ ${_header} CONTENT)
|
FILE(READ ${_header} CONTENT)
|
||||||
|
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
# ################################################################
|
# ################################################################
|
||||||
|
|
||||||
PROJECT(gen_html)
|
PROJECT(gen_html)
|
||||||
INCLUDE(${CMAKE_SOURCE_DIR}/CMakeModules/GetLibraryVersion.cmake)
|
INCLUDE(GetZstdLibraryVersion)
|
||||||
|
|
||||||
SET(CMAKE_INCLUDE_CURRENT_DIR TRUE)
|
SET(CMAKE_INCLUDE_CURRENT_DIR TRUE)
|
||||||
|
|
||||||
@@ -24,7 +24,7 @@ INCLUDE_DIRECTORIES(${PROGRAMS_DIR} ${LIBRARY_DIR} ${LIBRARY_DIR}/common ${GENHT
|
|||||||
|
|
||||||
ADD_EXECUTABLE(gen_html ${GENHTML_DIR}/gen_html.cpp)
|
ADD_EXECUTABLE(gen_html ${GENHTML_DIR}/gen_html.cpp)
|
||||||
|
|
||||||
GetLibraryVersion(${LIBRARY_DIR}/zstd.h VMAJOR VMINOR VRELEASE)
|
GetZstdLibraryVersion(${LIBRARY_DIR}/zstd.h VMAJOR VMINOR VRELEASE)
|
||||||
SET(LIBVERSION "${VMAJOR}.${VMINOR}.${VRELEASE}")
|
SET(LIBVERSION "${VMAJOR}.${VMINOR}.${VRELEASE}")
|
||||||
ADD_CUSTOM_TARGET(zstd_manual.html ALL
|
ADD_CUSTOM_TARGET(zstd_manual.html ALL
|
||||||
${GENHTML_BINARY} "${LIBVERSION}" "${LIBRARY_DIR}/zstd.h" "${PROJECT_BINARY_DIR}/zstd_manual.html"
|
${GENHTML_BINARY} "${LIBVERSION}" "${LIBRARY_DIR}/zstd.h" "${PROJECT_BINARY_DIR}/zstd_manual.html"
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ SET(PZSTD_DIR ${ZSTD_SOURCE_DIR}/contrib/pzstd)
|
|||||||
INCLUDE_DIRECTORIES(${PROGRAMS_DIR} ${LIBRARY_DIR} ${LIBRARY_DIR}/common ${PZSTD_DIR})
|
INCLUDE_DIRECTORIES(${PROGRAMS_DIR} ${LIBRARY_DIR} ${LIBRARY_DIR}/common ${PZSTD_DIR})
|
||||||
|
|
||||||
ADD_EXECUTABLE(pzstd ${PZSTD_DIR}/main.cpp ${PZSTD_DIR}/Options.cpp ${PZSTD_DIR}/Pzstd.cpp ${PZSTD_DIR}/SkippableFrame.cpp)
|
ADD_EXECUTABLE(pzstd ${PZSTD_DIR}/main.cpp ${PZSTD_DIR}/Options.cpp ${PZSTD_DIR}/Pzstd.cpp ${PZSTD_DIR}/SkippableFrame.cpp)
|
||||||
SET_TARGET_PROPERTIES(pzstd PROPERTIES COMPILE_DEFINITIONS "NDEBUG")
|
SET_PROPERTY(TARGET pzstd APPEND PROPERTY COMPILE_DEFINITIONS "NDEBUG")
|
||||||
SET_TARGET_PROPERTIES(pzstd PROPERTIES COMPILE_OPTIONS "-Wno-shadow")
|
SET_PROPERTY(TARGET pzstd APPEND PROPERTY COMPILE_OPTIONS "-Wno-shadow")
|
||||||
|
|
||||||
SET(THREADS_PREFER_PTHREAD_FLAG ON)
|
SET(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
FIND_PACKAGE(Threads REQUIRED)
|
FIND_PACKAGE(Threads REQUIRED)
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# cmake build artefact
|
||||||
|
libzstd.pc
|
||||||
@@ -11,7 +11,6 @@
|
|||||||
# ################################################################
|
# ################################################################
|
||||||
|
|
||||||
PROJECT(libzstd)
|
PROJECT(libzstd)
|
||||||
INCLUDE(${CMAKE_SOURCE_DIR}/CMakeModules/GetLibraryVersion.cmake)
|
|
||||||
|
|
||||||
SET(CMAKE_INCLUDE_CURRENT_DIR TRUE)
|
SET(CMAKE_INCLUDE_CURRENT_DIR TRUE)
|
||||||
OPTION(ZSTD_BUILD_STATIC "BUILD STATIC LIBRARIES" OFF)
|
OPTION(ZSTD_BUILD_STATIC "BUILD STATIC LIBRARIES" OFF)
|
||||||
@@ -21,7 +20,8 @@ SET(LIBRARY_DIR ${ZSTD_SOURCE_DIR}/lib)
|
|||||||
INCLUDE_DIRECTORIES(${LIBRARY_DIR} ${LIBRARY_DIR}/common)
|
INCLUDE_DIRECTORIES(${LIBRARY_DIR} ${LIBRARY_DIR}/common)
|
||||||
|
|
||||||
# Parse version
|
# Parse version
|
||||||
GetLibraryVersion(${LIBRARY_DIR}/zstd.h LIBVER_MAJOR LIBVER_MINOR LIBVER_RELEASE)
|
INCLUDE(GetZstdLibraryVersion)
|
||||||
|
GetZstdLibraryVersion(${LIBRARY_DIR}/zstd.h LIBVER_MAJOR LIBVER_MINOR LIBVER_RELEASE)
|
||||||
MESSAGE("ZSTD VERSION ${LIBVER_MAJOR}.${LIBVER_MINOR}.${LIBVER_RELEASE}")
|
MESSAGE("ZSTD VERSION ${LIBVER_MAJOR}.${LIBVER_MINOR}.${LIBVER_RELEASE}")
|
||||||
|
|
||||||
SET(Sources
|
SET(Sources
|
||||||
@@ -97,9 +97,9 @@ ENDIF (ZSTD_BUILD_STATIC)
|
|||||||
|
|
||||||
# Add specific compile definitions for MSVC project
|
# Add specific compile definitions for MSVC project
|
||||||
IF (MSVC)
|
IF (MSVC)
|
||||||
SET_TARGET_PROPERTIES(libzstd_shared PROPERTIES COMPILE_DEFINITIONS "ZSTD_DLL_EXPORT=1;ZSTD_HEAPMODE=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS")
|
SET_PROPERTY(TARGET libzstd_shared APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_DLL_EXPORT=1;ZSTD_HEAPMODE=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS")
|
||||||
IF (ZSTD_BUILD_STATIC)
|
IF (ZSTD_BUILD_STATIC)
|
||||||
SET_TARGET_PROPERTIES(libzstd_static PROPERTIES COMPILE_DEFINITIONS "ZSTD_HEAPMODE=0;_CRT_SECURE_NO_WARNINGS")
|
SET_PROPERTY(TARGET libzstd_static APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_HEAPMODE=0;_CRT_SECURE_NO_WARNINGS")
|
||||||
ENDIF (ZSTD_BUILD_STATIC)
|
ENDIF (ZSTD_BUILD_STATIC)
|
||||||
ENDIF (MSVC)
|
ENDIF (MSVC)
|
||||||
|
|
||||||
@@ -130,8 +130,20 @@ IF (ZSTD_BUILD_STATIC)
|
|||||||
ENDIF (ZSTD_BUILD_STATIC)
|
ENDIF (ZSTD_BUILD_STATIC)
|
||||||
|
|
||||||
IF (UNIX)
|
IF (UNIX)
|
||||||
|
# pkg-config
|
||||||
|
SET(PREFIX "${CMAKE_INSTALL_PREFIX}")
|
||||||
|
SET(LIBDIR "${CMAKE_INSTALL_PREFIX}/lib")
|
||||||
|
SET(INCLUDEDIR "${CMAKE_INSTALL_PREFIX}/include")
|
||||||
|
SET(VERSION "${LIBVER_MAJOR}.${LIBVER_MINOR}.${LIBVER_RELEASE}")
|
||||||
|
ADD_CUSTOM_TARGET(libzstd.pc ALL
|
||||||
|
${CMAKE_COMMAND} -DIN="${LIBRARY_DIR}/libzstd.pc.in" -DOUT="libzstd.pc"
|
||||||
|
-DPREFIX="${PREFIX}" -DLIBDIR="${LIBDIR}" -DINCLUDEDIR="${INCLUDEDIR}" -DVERSION="${VERSION}"
|
||||||
|
-P "${CMAKE_CURRENT_SOURCE_DIR}/pkgconfig.cmake"
|
||||||
|
COMMENT "Creating pkg-config file")
|
||||||
|
|
||||||
# install target
|
# install target
|
||||||
INSTALL(FILES ${LIBRARY_DIR}/zstd.h ${LIBRARY_DIR}/deprecated/zbuff.h ${LIBRARY_DIR}/dictBuilder/zdict.h DESTINATION "include")
|
INSTALL(FILES ${LIBRARY_DIR}/zstd.h ${LIBRARY_DIR}/deprecated/zbuff.h ${LIBRARY_DIR}/dictBuilder/zdict.h DESTINATION "include")
|
||||||
|
INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/libzstd.pc" DESTINATION "share/pkgconfig")
|
||||||
INSTALL(TARGETS libzstd_shared LIBRARY DESTINATION "lib")
|
INSTALL(TARGETS libzstd_shared LIBRARY DESTINATION "lib")
|
||||||
IF (ZSTD_BUILD_STATIC)
|
IF (ZSTD_BUILD_STATIC)
|
||||||
INSTALL(TARGETS libzstd_static ARCHIVE DESTINATION "lib")
|
INSTALL(TARGETS libzstd_static ARCHIVE DESTINATION "lib")
|
||||||
@@ -139,10 +151,10 @@ IF (UNIX)
|
|||||||
|
|
||||||
# uninstall target
|
# uninstall target
|
||||||
CONFIGURE_FILE(
|
CONFIGURE_FILE(
|
||||||
"${CMAKE_SOURCE_DIR}/cmake_uninstall.cmake.in"
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
|
||||||
"${CMAKE_BINARY_DIR}/cmake_uninstall.cmake"
|
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
||||||
IMMEDIATE @ONLY)
|
IMMEDIATE @ONLY)
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(uninstall
|
ADD_CUSTOM_TARGET(uninstall
|
||||||
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/cmake_uninstall.cmake)
|
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
|
||||||
ENDIF (UNIX)
|
ENDIF (UNIX)
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
CONFIGURE_FILE("${IN}" "${OUT}" @ONLY)
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
# produced by make
|
# produced by make
|
||||||
zstd
|
zstd
|
||||||
zstd-frugal
|
zstd-frugal
|
||||||
|
unzstd
|
||||||
|
zstdcat
|
||||||
|
|||||||
@@ -31,37 +31,65 @@ ENDIF (MSVC)
|
|||||||
|
|
||||||
ADD_EXECUTABLE(zstd ${PROGRAMS_DIR}/zstdcli.c ${PROGRAMS_DIR}/fileio.c ${PROGRAMS_DIR}/bench.c ${PROGRAMS_DIR}/datagen.c ${PROGRAMS_DIR}/dibio.c ${PlatformDependResources})
|
ADD_EXECUTABLE(zstd ${PROGRAMS_DIR}/zstdcli.c ${PROGRAMS_DIR}/fileio.c ${PROGRAMS_DIR}/bench.c ${PROGRAMS_DIR}/datagen.c ${PROGRAMS_DIR}/dibio.c ${PlatformDependResources})
|
||||||
TARGET_LINK_LIBRARIES(zstd libzstd_shared)
|
TARGET_LINK_LIBRARIES(zstd libzstd_shared)
|
||||||
ADD_CUSTOM_COMMAND(TARGET zstd POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink zstd zstdcat COMMENT "Creating zstdcat symlink")
|
ADD_CUSTOM_TARGET(zstdcat ALL ${CMAKE_COMMAND} -E create_symlink zstd zstdcat DEPENDS zstd COMMENT "Creating zstdcat symlink")
|
||||||
ADD_CUSTOM_COMMAND(TARGET zstd POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink zstd unzstd COMMENT "Creating unzstd symlink")
|
ADD_CUSTOM_TARGET(unzstd ALL ${CMAKE_COMMAND} -E create_symlink zstd unzstd DEPENDS zstd COMMENT "Creating unzstd symlink")
|
||||||
INSTALL(TARGETS zstd RUNTIME DESTINATION "bin")
|
INSTALL(TARGETS zstd RUNTIME DESTINATION "bin")
|
||||||
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/zstdcat DESTINATION "bin")
|
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/zstdcat DESTINATION "bin")
|
||||||
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/unzstd DESTINATION "bin")
|
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/unzstd DESTINATION "bin")
|
||||||
|
|
||||||
IF (UNIX)
|
IF (UNIX)
|
||||||
FILE(COPY ${PROGRAMS_DIR}/zstd.1 DESTINATION .)
|
ADD_CUSTOM_TARGET(zstd.1 ALL
|
||||||
ADD_CUSTOM_COMMAND(TARGET zstd POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink zstd.1 zstdcat.1 COMMENT "Creating zstdcat.1 symlink")
|
${CMAKE_COMMAND} -E copy ${PROGRAMS_DIR}/zstd.1 .
|
||||||
ADD_CUSTOM_COMMAND(TARGET zstd POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink zstd.1 unzstd.1 COMMENT "Creating unzstd.1 symlink")
|
COMMENT "Copying manpage zstd.1")
|
||||||
|
ADD_CUSTOM_TARGET(zstdcat.1 ALL ${CMAKE_COMMAND} -E create_symlink zstd.1 zstdcat.1 DEPENDS zstd.1 COMMENT "Creating zstdcat.1 symlink")
|
||||||
|
ADD_CUSTOM_TARGET(unzstd.1 ALL ${CMAKE_COMMAND} -E create_symlink zstd.1 unzstd.1 DEPENDS zstd.1 COMMENT "Creating unzstd.1 symlink")
|
||||||
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/zstd.1 DESTINATION "share/man/man1")
|
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/zstd.1 DESTINATION "share/man/man1")
|
||||||
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/zstdcat.1 DESTINATION "share/man/man1")
|
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/zstdcat.1 DESTINATION "share/man/man1")
|
||||||
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/unzstd.1 DESTINATION "share/man/man1")
|
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/unzstd.1 DESTINATION "share/man/man1")
|
||||||
|
|
||||||
ADD_EXECUTABLE(zstd-frugal ${PROGRAMS_DIR}/zstdcli.c ${PROGRAMS_DIR}/fileio.c)
|
ADD_EXECUTABLE(zstd-frugal ${PROGRAMS_DIR}/zstdcli.c ${PROGRAMS_DIR}/fileio.c)
|
||||||
TARGET_LINK_LIBRARIES(zstd-frugal libzstd_shared)
|
TARGET_LINK_LIBRARIES(zstd-frugal libzstd_shared)
|
||||||
SET_TARGET_PROPERTIES(zstd-frugal PROPERTIES COMPILE_DEFINITIONS "ZSTD_NOBENCH;ZSTD_NODICT")
|
SET_PROPERTY(TARGET zstd-frugal APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_NOBENCH;ZSTD_NODICT")
|
||||||
ENDIF (UNIX)
|
ENDIF (UNIX)
|
||||||
|
|
||||||
IF (ZSTD_MULTITHREAD_SUPPORT)
|
IF (ZSTD_MULTITHREAD_SUPPORT)
|
||||||
ADD_EXECUTABLE(zstdmt ${PROGRAMS_DIR}/zstdcli.c ${PROGRAMS_DIR}/fileio.c ${PROGRAMS_DIR}/bench.c ${PROGRAMS_DIR}/datagen.c ${PROGRAMS_DIR}/dibio.c ${PlatformDependResources})
|
SET_PROPERTY(TARGET zstd APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_MULTITHREAD")
|
||||||
SET_TARGET_PROPERTIES(zstdmt PROPERTIES COMPILE_DEFINITIONS "ZSTD_MULTITHREAD")
|
|
||||||
TARGET_LINK_LIBRARIES(zstdmt libzstd_shared)
|
|
||||||
|
|
||||||
SET(THREADS_PREFER_PTHREAD_FLAG ON)
|
SET(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
FIND_PACKAGE(Threads REQUIRED)
|
FIND_PACKAGE(Threads REQUIRED)
|
||||||
IF (CMAKE_USE_PTHREADS_INIT)
|
IF (CMAKE_USE_PTHREADS_INIT)
|
||||||
TARGET_LINK_LIBRARIES(zstdmt ${CMAKE_THREAD_LIBS_INIT})
|
TARGET_LINK_LIBRARIES(zstd ${CMAKE_THREAD_LIBS_INIT})
|
||||||
ELSE()
|
ELSE()
|
||||||
MESSAGE(SEND_ERROR "ZSTD currently does not support thread libraries other than pthreads")
|
MESSAGE(SEND_ERROR "ZSTD currently does not support thread libraries other than pthreads")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
INSTALL(TARGETS zstdmt RUNTIME DESTINATION "bin")
|
ADD_CUSTOM_TARGET(zstdmt ALL ${CMAKE_COMMAND} -E create_symlink zstd zstdmt DEPENDS zstd COMMENT "Creating zstdmt symlink")
|
||||||
|
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/zstdmt DESTINATION "bin")
|
||||||
ENDIF (ZSTD_MULTITHREAD_SUPPORT)
|
ENDIF (ZSTD_MULTITHREAD_SUPPORT)
|
||||||
|
|
||||||
|
OPTION(ZSTD_ZLIB_SUPPORT "ZLIB SUPPORT" OFF)
|
||||||
|
OPTION(ZSTD_LZMA_SUPPORT "LZMA SUPPORT" OFF)
|
||||||
|
|
||||||
|
IF (ZSTD_ZLIB_SUPPORT)
|
||||||
|
FIND_PACKAGE(ZLIB REQUIRED)
|
||||||
|
|
||||||
|
IF (ZLIB_FOUND)
|
||||||
|
INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIRS})
|
||||||
|
TARGET_LINK_LIBRARIES(zstd ${ZLIB_LIBRARIES})
|
||||||
|
SET_PROPERTY(TARGET zstd APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_GZCOMPRESS;ZSTD_GZDECOMPRESS")
|
||||||
|
ELSE ()
|
||||||
|
MESSAGE(SEND_ERROR "zlib library is missing")
|
||||||
|
ENDIF ()
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
IF (ZSTD_LZMA_SUPPORT)
|
||||||
|
FIND_PACKAGE(LibLZMA REQUIRED)
|
||||||
|
|
||||||
|
IF (LIBLZMA_FOUND)
|
||||||
|
INCLUDE_DIRECTORIES(${LIBLZMA_INCLUDE_DIRS})
|
||||||
|
TARGET_LINK_LIBRARIES(zstd ${LIBLZMA_LIBRARIES})
|
||||||
|
SET_PROPERTY(TARGET zstd APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_LZMACOMPRESS;ZSTD_LZMADECOMPRESS")
|
||||||
|
ELSE ()
|
||||||
|
MESSAGE(SEND_ERROR "lzma library is missing")
|
||||||
|
ENDIF ()
|
||||||
|
ENDIF ()
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@ dependencies:
|
|||||||
- sudo dpkg --add-architecture i386
|
- sudo dpkg --add-architecture i386
|
||||||
- sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; sudo apt-get -y -qq update
|
- sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; sudo apt-get -y -qq update
|
||||||
- sudo apt-get -y install gcc-powerpc-linux-gnu gcc-arm-linux-gnueabi libc6-dev-armel-cross gcc-aarch64-linux-gnu libc6-dev-arm64-cross
|
- sudo apt-get -y install gcc-powerpc-linux-gnu gcc-arm-linux-gnueabi libc6-dev-armel-cross gcc-aarch64-linux-gnu libc6-dev-arm64-cross
|
||||||
- sudo apt-get -y install libstdc++-6-dev clang gcc g++ gcc-5 gcc-6
|
- sudo apt-get -y install libstdc++-6-dev clang gcc g++ gcc-5 gcc-6 zlib1g-dev liblzma-dev
|
||||||
- sudo apt-get -y install linux-libc-dev:i386 libc6-dev-i386
|
- sudo apt-get -y install linux-libc-dev:i386 libc6-dev-i386
|
||||||
|
|
||||||
test:
|
test:
|
||||||
|
|||||||
+16
-15
@@ -169,9 +169,10 @@ size_t ZSTD_freeDCtx(ZSTD_DCtx* dctx);
|
|||||||
void* dst, size_t dstCapacity,
|
void* dst, size_t dstCapacity,
|
||||||
const void* src, size_t srcSize,
|
const void* src, size_t srcSize,
|
||||||
const ZSTD_CDict* cdict);
|
const ZSTD_CDict* cdict);
|
||||||
</b><p> Compression using a digested Dictionary.
|
</b><p> Compression using a digested Dictionary.
|
||||||
Faster startup than ZSTD_compress_usingDict(), recommended when same dictionary is used multiple times.
|
Faster startup than ZSTD_compress_usingDict(), recommended when same dictionary is used multiple times.
|
||||||
Note that compression level is decided during dictionary creation.
|
Note that compression level is decided during dictionary creation.
|
||||||
|
Frame parameters are hardcoded (dictID=yes, contentSize=yes, checksum=no)
|
||||||
</p></pre><BR>
|
</p></pre><BR>
|
||||||
|
|
||||||
<pre><b>ZSTD_DDict* ZSTD_createDDict(const void* dictBuffer, size_t dictSize);
|
<pre><b>ZSTD_DDict* ZSTD_createDDict(const void* dictBuffer, size_t dictSize);
|
||||||
@@ -560,10 +561,9 @@ size_t ZSTD_sizeof_DStream(const ZSTD_DStream* zds);
|
|||||||
<h3>Buffer-less streaming compression functions</h3><pre></pre><b><pre>size_t ZSTD_compressBegin(ZSTD_CCtx* cctx, int compressionLevel);
|
<h3>Buffer-less streaming compression functions</h3><pre></pre><b><pre>size_t ZSTD_compressBegin(ZSTD_CCtx* cctx, int compressionLevel);
|
||||||
size_t ZSTD_compressBegin_usingDict(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, int compressionLevel);
|
size_t ZSTD_compressBegin_usingDict(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, int compressionLevel);
|
||||||
size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_parameters params, unsigned long long pledgedSrcSize); </b>/**< pledgedSrcSize is optional and can be 0 (meaning unknown). note: if the contentSizeFlag is set, pledgedSrcSize == 0 means the source size is actually 0 */<b>
|
size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_parameters params, unsigned long long pledgedSrcSize); </b>/**< pledgedSrcSize is optional and can be 0 (meaning unknown). note: if the contentSizeFlag is set, pledgedSrcSize == 0 means the source size is actually 0 */<b>
|
||||||
size_t ZSTD_copyCCtx(ZSTD_CCtx* cctx, const ZSTD_CCtx* preparedCCtx, unsigned long long pledgedSrcSize); </b>/**< note: if pledgedSrcSize can be 0, indicating unknown size. if it is non-zero, it must be accurate. for 0 size frames, use compressBegin_advanced */<b>
|
|
||||||
size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict, unsigned long long pledgedSrcSize); </b>/**< note: fail if cdict==NULL. pledgedSrcSize can be 0, indicating unknown size. For 0 size frames, use compressBegin_advanced */<b>
|
size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict, unsigned long long pledgedSrcSize); </b>/**< note: fail if cdict==NULL. pledgedSrcSize can be 0, indicating unknown size. For 0 size frames, use compressBegin_advanced */<b>
|
||||||
size_t ZSTD_compressContinue(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
|
size_t ZSTD_compressBegin_usingCDict_advanced(ZSTD_CCtx* const cctx, const ZSTD_CDict* const cdict, ZSTD_frameParameters const fParams, unsigned long long const pledgedSrcSize); </b>/* compression parameters are already set within cdict. pledgedSrcSize=0 means null-size */<b>
|
||||||
size_t ZSTD_compressEnd(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
|
size_t ZSTD_copyCCtx(ZSTD_CCtx* cctx, const ZSTD_CCtx* preparedCCtx, unsigned long long pledgedSrcSize); </b>/**< note: if pledgedSrcSize can be 0, indicating unknown size. if it is non-zero, it must be accurate. for 0 size frames, use compressBegin_advanced */<b>
|
||||||
</pre></b><BR>
|
</pre></b><BR>
|
||||||
<a name="Chapter19"></a><h2>Buffer-less streaming decompression (synchronous mode)</h2><pre>
|
<a name="Chapter19"></a><h2>Buffer-less streaming decompression (synchronous mode)</h2><pre>
|
||||||
A ZSTD_DCtx object is required to track streaming operations.
|
A ZSTD_DCtx object is required to track streaming operations.
|
||||||
@@ -648,19 +648,20 @@ ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx* dctx);
|
|||||||
- Compressing and decompressing require a context structure
|
- Compressing and decompressing require a context structure
|
||||||
+ Use ZSTD_createCCtx() and ZSTD_createDCtx()
|
+ Use ZSTD_createCCtx() and ZSTD_createDCtx()
|
||||||
- It is necessary to init context before starting
|
- It is necessary to init context before starting
|
||||||
+ compression : ZSTD_compressBegin()
|
+ compression : any ZSTD_compressBegin*() variant, including with dictionary
|
||||||
+ decompression : ZSTD_decompressBegin()
|
+ decompression : any ZSTD_decompressBegin*() variant, including with dictionary
|
||||||
+ variants _usingDict() are also allowed
|
+ copyCCtx() and copyDCtx() can be used too
|
||||||
+ copyCCtx() and copyDCtx() work too
|
- Block size is limited, it must be <= ZSTD_getBlockSizeMax() <= ZSTD_BLOCKSIZE_ABSOLUTEMAX
|
||||||
- Block size is limited, it must be <= ZSTD_getBlockSizeMax()
|
+ If input is larger than a block size, it's necessary to split input data into multiple blocks
|
||||||
+ If you need to compress more, cut data into multiple blocks
|
+ For inputs larger than a single block size, consider using the regular ZSTD_compress() instead.
|
||||||
+ Consider using the regular ZSTD_compress() instead, as frame metadata costs become negligible when source size is large.
|
Frame metadata is not that costly, and quickly becomes negligible as source size grows larger.
|
||||||
- When a block is considered not compressible enough, ZSTD_compressBlock() result will be zero.
|
- When a block is considered not compressible enough, ZSTD_compressBlock() result will be zero.
|
||||||
In which case, nothing is produced into `dst`.
|
In which case, nothing is produced into `dst`.
|
||||||
+ User must test for such outcome and deal directly with uncompressed data
|
+ User must test for such outcome and deal directly with uncompressed data
|
||||||
+ ZSTD_decompressBlock() doesn't accept uncompressed data as input !!!
|
+ ZSTD_decompressBlock() doesn't accept uncompressed data as input !!!
|
||||||
+ In case of multiple successive blocks, decoder must be informed of uncompressed block existence to follow proper history.
|
+ In case of multiple successive blocks, should some of them be uncompressed,
|
||||||
Use ZSTD_insertBlock() in such a case.
|
decoder must be informed of their existence in order to follow proper history.
|
||||||
|
Use ZSTD_insertBlock() for such a case.
|
||||||
<BR></pre>
|
<BR></pre>
|
||||||
|
|
||||||
<h3>Raw zstd block functions</h3><pre></pre><b><pre>size_t ZSTD_getBlockSizeMax(ZSTD_CCtx* cctx);
|
<h3>Raw zstd block functions</h3><pre></pre><b><pre>size_t ZSTD_getBlockSizeMax(ZSTD_CCtx* cctx);
|
||||||
|
|||||||
+11
-1
@@ -71,6 +71,9 @@ libzstd.a: $(ZSTD_OBJ)
|
|||||||
@echo compiling static library
|
@echo compiling static library
|
||||||
@$(AR) $(ARFLAGS) $@ $^
|
@$(AR) $(ARFLAGS) $@ $^
|
||||||
|
|
||||||
|
libzstd.a-mt: CPPFLAGS += -DZSTD_MULTHREAD
|
||||||
|
libzstd.a-mt: libzstd.a
|
||||||
|
|
||||||
$(LIBZSTD): LDFLAGS += -shared -fPIC -fvisibility=hidden
|
$(LIBZSTD): LDFLAGS += -shared -fPIC -fvisibility=hidden
|
||||||
$(LIBZSTD): $(ZSTD_FILES)
|
$(LIBZSTD): $(ZSTD_FILES)
|
||||||
@echo compiling dynamic library $(LIBVER)
|
@echo compiling dynamic library $(LIBVER)
|
||||||
@@ -86,10 +89,17 @@ endif
|
|||||||
|
|
||||||
libzstd : $(LIBZSTD)
|
libzstd : $(LIBZSTD)
|
||||||
|
|
||||||
|
libzstd-mt : CPPFLAGS += -DZSTD_MULTITHREAD
|
||||||
|
libzstd-mt : libzstd
|
||||||
|
|
||||||
lib: libzstd.a libzstd
|
lib: libzstd.a libzstd
|
||||||
|
|
||||||
lib-release: DEBUGFLAGS :=
|
lib-mt: CPPFLAGS += -DZSTD_MULTITHREAD
|
||||||
|
lib-mt: lib
|
||||||
|
|
||||||
|
lib-release lib-release-mt: DEBUGFLAGS :=
|
||||||
lib-release: lib
|
lib-release: lib
|
||||||
|
lib-release-mt: lib-mt
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@$(RM) -r *.dSYM # Mac OS-X specific
|
@$(RM) -r *.dSYM # Mac OS-X specific
|
||||||
|
|||||||
@@ -22,6 +22,14 @@ Some additional API may be useful if you're looking into advanced features :
|
|||||||
They are not "stable", their definition may change in the future.
|
They are not "stable", their definition may change in the future.
|
||||||
Only static linking is allowed.
|
Only static linking is allowed.
|
||||||
|
|
||||||
|
#### ZSTDMT API
|
||||||
|
|
||||||
|
To enable multithreaded compression within the library, invoke `make lib-mt` target.
|
||||||
|
Prototypes are defined in header file `compress/zstdmt_compress.h`.
|
||||||
|
When linking a program that uses ZSTDMT API against libzstd.a on a POSIX system,
|
||||||
|
`-pthread` flag must be provided to the compiler and linker.
|
||||||
|
Note : ZSTDMT prototypes can still be used with a library built without multithread support,
|
||||||
|
but in this case, they will be single threaded only.
|
||||||
|
|
||||||
#### Modular build
|
#### Modular build
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ const char* ERR_getErrorString(ERR_enum code)
|
|||||||
case PREFIX(memory_allocation): return "Allocation error : not enough memory";
|
case PREFIX(memory_allocation): return "Allocation error : not enough memory";
|
||||||
case PREFIX(stage_wrong): return "Operation not authorized at current processing stage";
|
case PREFIX(stage_wrong): return "Operation not authorized at current processing stage";
|
||||||
case PREFIX(dstSize_tooSmall): return "Destination buffer is too small";
|
case PREFIX(dstSize_tooSmall): return "Destination buffer is too small";
|
||||||
case PREFIX(srcSize_wrong): return "Src size incorrect";
|
case PREFIX(srcSize_wrong): return "Src size is incorrect";
|
||||||
case PREFIX(corruption_detected): return "Corrupted block detected";
|
case PREFIX(corruption_detected): return "Corrupted block detected";
|
||||||
case PREFIX(checksum_wrong): return "Restored data doesn't match checksum";
|
case PREFIX(checksum_wrong): return "Restored data doesn't match checksum";
|
||||||
case PREFIX(tableLog_tooLarge): return "tableLog requires too much memory : unsupported";
|
case PREFIX(tableLog_tooLarge): return "tableLog requires too much memory : unsupported";
|
||||||
|
|||||||
+3
-1
@@ -121,8 +121,10 @@ size_t HUF_compress4X_wksp (void* dst, size_t dstSize, const void* src, size_t s
|
|||||||
#define HUF_COMPRESSBOUND(size) (HUF_CTABLEBOUND + HUF_BLOCKBOUND(size)) /* Macro version, useful for static allocation */
|
#define HUF_COMPRESSBOUND(size) (HUF_CTABLEBOUND + HUF_BLOCKBOUND(size)) /* Macro version, useful for static allocation */
|
||||||
|
|
||||||
/* static allocation of HUF's Compression Table */
|
/* static allocation of HUF's Compression Table */
|
||||||
|
#define HUF_CTABLE_SIZE_U32(maxSymbolValue) ((maxSymbolValue)+1) /* Use tables of U32, for proper alignment */
|
||||||
|
#define HUF_CTABLE_SIZE(maxSymbolValue) (HUF_CTABLE_SIZE_U32(maxSymbolValue) * sizeof(U32))
|
||||||
#define HUF_CREATE_STATIC_CTABLE(name, maxSymbolValue) \
|
#define HUF_CREATE_STATIC_CTABLE(name, maxSymbolValue) \
|
||||||
U32 name##hb[maxSymbolValue+1]; \
|
U32 name##hb[HUF_CTABLE_SIZE_U32(maxSymbolValue)]; \
|
||||||
void* name##hv = &(name##hb); \
|
void* name##hv = &(name##hb); \
|
||||||
HUF_CElt* name = (HUF_CElt*)(name##hv) /* no final ; */
|
HUF_CElt* name = (HUF_CElt*)(name##hv) /* no final ; */
|
||||||
|
|
||||||
|
|||||||
@@ -58,6 +58,8 @@
|
|||||||
/*-*************************************
|
/*-*************************************
|
||||||
* shared macros
|
* shared macros
|
||||||
***************************************/
|
***************************************/
|
||||||
|
#undef MIN
|
||||||
|
#undef MAX
|
||||||
#define MIN(a,b) ((a)<(b) ? (a) : (b))
|
#define MIN(a,b) ((a)<(b) ? (a) : (b))
|
||||||
#define MAX(a,b) ((a)>(b) ? (a) : (b))
|
#define MAX(a,b) ((a)>(b) ? (a) : (b))
|
||||||
#define CHECK_F(f) { size_t const errcod = f; if (ERR_isError(errcod)) return errcod; } /* check and Forward error code */
|
#define CHECK_F(f) { size_t const errcod = f; if (ERR_isError(errcod)) return errcod; } /* check and Forward error code */
|
||||||
|
|||||||
+177
-85
@@ -31,7 +31,14 @@ typedef enum { ZSTDcs_created=0, ZSTDcs_init, ZSTDcs_ongoing, ZSTDcs_ending } ZS
|
|||||||
/*-*************************************
|
/*-*************************************
|
||||||
* Helper functions
|
* Helper functions
|
||||||
***************************************/
|
***************************************/
|
||||||
|
#if defined(ZSTD_DEBUG) && (ZSTD_DEBUG==1)
|
||||||
|
# include <assert.h>
|
||||||
|
#else
|
||||||
|
# define assert(condition) ((void)0)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define ZSTD_STATIC_ASSERT(c) { enum { ZSTD_static_assert = 1/(int)(!!(c)) }; }
|
#define ZSTD_STATIC_ASSERT(c) { enum { ZSTD_static_assert = 1/(int)(!!(c)) }; }
|
||||||
|
|
||||||
size_t ZSTD_compressBound(size_t srcSize) {
|
size_t ZSTD_compressBound(size_t srcSize) {
|
||||||
size_t const lowLimit = 256 KB;
|
size_t const lowLimit = 256 KB;
|
||||||
size_t const margin = (srcSize < lowLimit) ? (lowLimit-srcSize) >> 12 : 0; /* from 64 to 0 */
|
size_t const margin = (srcSize < lowLimit) ? (lowLimit-srcSize) >> 12 : 0; /* from 64 to 0 */
|
||||||
@@ -74,6 +81,7 @@ struct ZSTD_CCtx_s {
|
|||||||
size_t workSpaceSize;
|
size_t workSpaceSize;
|
||||||
size_t blockSize;
|
size_t blockSize;
|
||||||
U64 frameContentSize;
|
U64 frameContentSize;
|
||||||
|
U64 consumedSrcSize;
|
||||||
XXH64_state_t xxhState;
|
XXH64_state_t xxhState;
|
||||||
ZSTD_customMem customMem;
|
ZSTD_customMem customMem;
|
||||||
|
|
||||||
@@ -234,6 +242,7 @@ static size_t ZSTD_continueCCtx(ZSTD_CCtx* cctx, ZSTD_parameters params, U64 fra
|
|||||||
U32 const end = (U32)(cctx->nextSrc - cctx->base);
|
U32 const end = (U32)(cctx->nextSrc - cctx->base);
|
||||||
cctx->params = params;
|
cctx->params = params;
|
||||||
cctx->frameContentSize = frameContentSize;
|
cctx->frameContentSize = frameContentSize;
|
||||||
|
cctx->consumedSrcSize = 0;
|
||||||
cctx->lowLimit = end;
|
cctx->lowLimit = end;
|
||||||
cctx->dictLimit = end;
|
cctx->dictLimit = end;
|
||||||
cctx->nextToUpdate = end+1;
|
cctx->nextToUpdate = end+1;
|
||||||
@@ -248,9 +257,9 @@ static size_t ZSTD_continueCCtx(ZSTD_CCtx* cctx, ZSTD_parameters params, U64 fra
|
|||||||
|
|
||||||
typedef enum { ZSTDcrp_continue, ZSTDcrp_noMemset, ZSTDcrp_fullReset } ZSTD_compResetPolicy_e;
|
typedef enum { ZSTDcrp_continue, ZSTDcrp_noMemset, ZSTDcrp_fullReset } ZSTD_compResetPolicy_e;
|
||||||
|
|
||||||
/*! ZSTD_resetCCtx_advanced() :
|
/*! ZSTD_resetCCtx_internal() :
|
||||||
note : `params` must be validated */
|
note : `params` must be validated */
|
||||||
static size_t ZSTD_resetCCtx_advanced (ZSTD_CCtx* zc,
|
static size_t ZSTD_resetCCtx_internal (ZSTD_CCtx* zc,
|
||||||
ZSTD_parameters params, U64 frameContentSize,
|
ZSTD_parameters params, U64 frameContentSize,
|
||||||
ZSTD_compResetPolicy_e const crp)
|
ZSTD_compResetPolicy_e const crp)
|
||||||
{
|
{
|
||||||
@@ -295,7 +304,7 @@ static size_t ZSTD_resetCCtx_advanced (ZSTD_CCtx* zc,
|
|||||||
zc->hufTable = (HUF_CElt*)ptr;
|
zc->hufTable = (HUF_CElt*)ptr;
|
||||||
zc->flagStaticTables = 0;
|
zc->flagStaticTables = 0;
|
||||||
zc->flagStaticHufTable = HUF_repeat_none;
|
zc->flagStaticHufTable = HUF_repeat_none;
|
||||||
ptr = ((U32*)ptr) + 256; /* note : HUF_CElt* is incomplete type, size is simulated using U32 */
|
ptr = ((U32*)ptr) + HUF_CTABLE_SIZE_U32(255); /* note : HUF_CElt* is incomplete type, size is simulated using U32 */
|
||||||
|
|
||||||
zc->nextToUpdate = 1;
|
zc->nextToUpdate = 1;
|
||||||
zc->nextSrc = NULL;
|
zc->nextSrc = NULL;
|
||||||
@@ -306,6 +315,7 @@ static size_t ZSTD_resetCCtx_advanced (ZSTD_CCtx* zc,
|
|||||||
zc->params = params;
|
zc->params = params;
|
||||||
zc->blockSize = blockSize;
|
zc->blockSize = blockSize;
|
||||||
zc->frameContentSize = frameContentSize;
|
zc->frameContentSize = frameContentSize;
|
||||||
|
zc->consumedSrcSize = 0;
|
||||||
{ int i; for (i=0; i<ZSTD_REP_NUM; i++) zc->rep[i] = repStartValue[i]; }
|
{ int i; for (i=0; i<ZSTD_REP_NUM; i++) zc->rep[i] = repStartValue[i]; }
|
||||||
|
|
||||||
if ((params.cParams.strategy == ZSTD_btopt) || (params.cParams.strategy == ZSTD_btopt2)) {
|
if ((params.cParams.strategy == ZSTD_btopt) || (params.cParams.strategy == ZSTD_btopt2)) {
|
||||||
@@ -344,19 +354,21 @@ void ZSTD_invalidateRepCodes(ZSTD_CCtx* cctx) {
|
|||||||
for (i=0; i<ZSTD_REP_NUM; i++) cctx->rep[i] = 0;
|
for (i=0; i<ZSTD_REP_NUM; i++) cctx->rep[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! ZSTD_copyCCtx() :
|
|
||||||
* Duplicate an existing context `srcCCtx` into another one `dstCCtx`.
|
/*! ZSTD_copyCCtx_internal() :
|
||||||
* Only works during stage ZSTDcs_init (i.e. after creation, but before first call to ZSTD_compressContinue()).
|
* Duplicate an existing context `srcCCtx` into another one `dstCCtx`.
|
||||||
* @return : 0, or an error code */
|
* Only works during stage ZSTDcs_init (i.e. after creation, but before first call to ZSTD_compressContinue()).
|
||||||
size_t ZSTD_copyCCtx(ZSTD_CCtx* dstCCtx, const ZSTD_CCtx* srcCCtx, unsigned long long pledgedSrcSize)
|
* pledgedSrcSize=0 means "empty" if fParams.contentSizeFlag=1
|
||||||
|
* @return : 0, or an error code */
|
||||||
|
size_t ZSTD_copyCCtx_internal(ZSTD_CCtx* dstCCtx, const ZSTD_CCtx* srcCCtx,
|
||||||
|
ZSTD_frameParameters fParams, unsigned long long pledgedSrcSize)
|
||||||
{
|
{
|
||||||
if (srcCCtx->stage!=ZSTDcs_init) return ERROR(stage_wrong);
|
if (srcCCtx->stage!=ZSTDcs_init) return ERROR(stage_wrong);
|
||||||
|
|
||||||
|
|
||||||
memcpy(&dstCCtx->customMem, &srcCCtx->customMem, sizeof(ZSTD_customMem));
|
memcpy(&dstCCtx->customMem, &srcCCtx->customMem, sizeof(ZSTD_customMem));
|
||||||
{ ZSTD_parameters params = srcCCtx->params;
|
{ ZSTD_parameters params = srcCCtx->params;
|
||||||
params.fParams.contentSizeFlag = (pledgedSrcSize > 0);
|
params.fParams = fParams;
|
||||||
ZSTD_resetCCtx_advanced(dstCCtx, params, pledgedSrcSize, ZSTDcrp_noMemset);
|
ZSTD_resetCCtx_internal(dstCCtx, params, pledgedSrcSize, ZSTDcrp_noMemset);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* copy tables */
|
/* copy tables */
|
||||||
@@ -380,22 +392,35 @@ size_t ZSTD_copyCCtx(ZSTD_CCtx* dstCCtx, const ZSTD_CCtx* srcCCtx, unsigned long
|
|||||||
|
|
||||||
/* copy entropy tables */
|
/* copy entropy tables */
|
||||||
dstCCtx->flagStaticTables = srcCCtx->flagStaticTables;
|
dstCCtx->flagStaticTables = srcCCtx->flagStaticTables;
|
||||||
dstCCtx->flagStaticHufTable = srcCCtx->flagStaticHufTable;
|
|
||||||
if (srcCCtx->flagStaticTables) {
|
if (srcCCtx->flagStaticTables) {
|
||||||
memcpy(dstCCtx->litlengthCTable, srcCCtx->litlengthCTable, sizeof(dstCCtx->litlengthCTable));
|
memcpy(dstCCtx->litlengthCTable, srcCCtx->litlengthCTable, sizeof(dstCCtx->litlengthCTable));
|
||||||
memcpy(dstCCtx->matchlengthCTable, srcCCtx->matchlengthCTable, sizeof(dstCCtx->matchlengthCTable));
|
memcpy(dstCCtx->matchlengthCTable, srcCCtx->matchlengthCTable, sizeof(dstCCtx->matchlengthCTable));
|
||||||
memcpy(dstCCtx->offcodeCTable, srcCCtx->offcodeCTable, sizeof(dstCCtx->offcodeCTable));
|
memcpy(dstCCtx->offcodeCTable, srcCCtx->offcodeCTable, sizeof(dstCCtx->offcodeCTable));
|
||||||
}
|
}
|
||||||
|
dstCCtx->flagStaticHufTable = srcCCtx->flagStaticHufTable;
|
||||||
if (srcCCtx->flagStaticHufTable) {
|
if (srcCCtx->flagStaticHufTable) {
|
||||||
memcpy(dstCCtx->hufTable, srcCCtx->hufTable, 256*4);
|
memcpy(dstCCtx->hufTable, srcCCtx->hufTable, HUF_CTABLE_SIZE(255));
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*! ZSTD_copyCCtx() :
|
||||||
|
* Duplicate an existing context `srcCCtx` into another one `dstCCtx`.
|
||||||
|
* Only works during stage ZSTDcs_init (i.e. after creation, but before first call to ZSTD_compressContinue()).
|
||||||
|
* pledgedSrcSize==0 means "unknown".
|
||||||
|
* @return : 0, or an error code */
|
||||||
|
size_t ZSTD_copyCCtx(ZSTD_CCtx* dstCCtx, const ZSTD_CCtx* srcCCtx, unsigned long long pledgedSrcSize)
|
||||||
|
{
|
||||||
|
ZSTD_frameParameters fParams = { 1 /*content*/, 0 /*checksum*/, 0 /*noDictID*/ };
|
||||||
|
fParams.contentSizeFlag = pledgedSrcSize>0;
|
||||||
|
|
||||||
|
return ZSTD_copyCCtx_internal(dstCCtx, srcCCtx, fParams, pledgedSrcSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*! ZSTD_reduceTable() :
|
/*! ZSTD_reduceTable() :
|
||||||
* reduce table indexes by `reducerValue` */
|
* reduce table indexes by `reducerValue` */
|
||||||
static void ZSTD_reduceTable (U32* const table, U32 const size, U32 const reducerValue)
|
static void ZSTD_reduceTable (U32* const table, U32 const size, U32 const reducerValue)
|
||||||
{
|
{
|
||||||
U32 u;
|
U32 u;
|
||||||
@@ -510,8 +535,10 @@ static size_t ZSTD_compressLiterals (ZSTD_CCtx* zc,
|
|||||||
{ HUF_repeat repeat = zc->flagStaticHufTable;
|
{ HUF_repeat repeat = zc->flagStaticHufTable;
|
||||||
int const preferRepeat = zc->params.cParams.strategy < ZSTD_lazy ? srcSize <= 1024 : 0;
|
int const preferRepeat = zc->params.cParams.strategy < ZSTD_lazy ? srcSize <= 1024 : 0;
|
||||||
if (repeat == HUF_repeat_valid && lhSize == 3) singleStream = 1;
|
if (repeat == HUF_repeat_valid && lhSize == 3) singleStream = 1;
|
||||||
cLitSize = singleStream ? HUF_compress1X_repeat(ostart+lhSize, dstCapacity-lhSize, src, srcSize, 255, 11, zc->tmpCounters, sizeof(zc->tmpCounters), zc->hufTable, &repeat, preferRepeat)
|
cLitSize = singleStream ? HUF_compress1X_repeat(ostart+lhSize, dstCapacity-lhSize, src, srcSize, 255, 11,
|
||||||
: HUF_compress4X_repeat(ostart+lhSize, dstCapacity-lhSize, src, srcSize, 255, 11, zc->tmpCounters, sizeof(zc->tmpCounters), zc->hufTable, &repeat, preferRepeat);
|
zc->tmpCounters, sizeof(zc->tmpCounters), zc->hufTable, &repeat, preferRepeat)
|
||||||
|
: HUF_compress4X_repeat(ostart+lhSize, dstCapacity-lhSize, src, srcSize, 255, 11,
|
||||||
|
zc->tmpCounters, sizeof(zc->tmpCounters), zc->hufTable, &repeat, preferRepeat);
|
||||||
if (repeat != HUF_repeat_none) { hType = set_repeat; } /* reused the existing table */
|
if (repeat != HUF_repeat_none) { hType = set_repeat; } /* reused the existing table */
|
||||||
else { zc->flagStaticHufTable = HUF_repeat_check; } /* now have a table to reuse */
|
else { zc->flagStaticHufTable = HUF_repeat_check; } /* now have a table to reuse */
|
||||||
}
|
}
|
||||||
@@ -856,7 +883,14 @@ static unsigned ZSTD_NbCommonBytes (register size_t val)
|
|||||||
# elif defined(__GNUC__) && (__GNUC__ >= 3)
|
# elif defined(__GNUC__) && (__GNUC__ >= 3)
|
||||||
return (__builtin_ctzll((U64)val) >> 3);
|
return (__builtin_ctzll((U64)val) >> 3);
|
||||||
# else
|
# else
|
||||||
static const int DeBruijnBytePos[64] = { 0, 0, 0, 0, 0, 1, 1, 2, 0, 3, 1, 3, 1, 4, 2, 7, 0, 2, 3, 6, 1, 5, 3, 5, 1, 3, 4, 4, 2, 5, 6, 7, 7, 0, 1, 2, 3, 3, 4, 6, 2, 6, 5, 5, 3, 4, 5, 6, 7, 1, 2, 4, 6, 4, 4, 5, 7, 2, 6, 5, 7, 6, 7, 7 };
|
static const int DeBruijnBytePos[64] = { 0, 0, 0, 0, 0, 1, 1, 2,
|
||||||
|
0, 3, 1, 3, 1, 4, 2, 7,
|
||||||
|
0, 2, 3, 6, 1, 5, 3, 5,
|
||||||
|
1, 3, 4, 4, 2, 5, 6, 7,
|
||||||
|
7, 0, 1, 2, 3, 3, 4, 6,
|
||||||
|
2, 6, 5, 5, 3, 4, 5, 6,
|
||||||
|
7, 1, 2, 4, 6, 4, 4, 5,
|
||||||
|
7, 2, 6, 5, 7, 6, 7, 7 };
|
||||||
return DeBruijnBytePos[((U64)((val & -(long long)val) * 0x0218A392CDABBD3FULL)) >> 58];
|
return DeBruijnBytePos[((U64)((val & -(long long)val) * 0x0218A392CDABBD3FULL)) >> 58];
|
||||||
# endif
|
# endif
|
||||||
} else { /* 32 bits */
|
} else { /* 32 bits */
|
||||||
@@ -867,7 +901,10 @@ static unsigned ZSTD_NbCommonBytes (register size_t val)
|
|||||||
# elif defined(__GNUC__) && (__GNUC__ >= 3)
|
# elif defined(__GNUC__) && (__GNUC__ >= 3)
|
||||||
return (__builtin_ctz((U32)val) >> 3);
|
return (__builtin_ctz((U32)val) >> 3);
|
||||||
# else
|
# else
|
||||||
static const int DeBruijnBytePos[32] = { 0, 0, 3, 0, 3, 1, 3, 0, 3, 2, 2, 1, 3, 2, 0, 1, 3, 3, 1, 2, 2, 2, 2, 0, 3, 1, 2, 0, 1, 0, 1, 1 };
|
static const int DeBruijnBytePos[32] = { 0, 0, 3, 0, 3, 1, 3, 0,
|
||||||
|
3, 2, 2, 1, 3, 2, 0, 1,
|
||||||
|
3, 3, 1, 2, 2, 2, 2, 0,
|
||||||
|
3, 1, 2, 0, 1, 0, 1, 1 };
|
||||||
return DeBruijnBytePos[((U32)((val & -(S32)val) * 0x077CB531U)) >> 27];
|
return DeBruijnBytePos[((U32)((val & -(S32)val) * 0x077CB531U)) >> 27];
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
@@ -1278,7 +1315,8 @@ void ZSTD_compressBlock_doubleFast_generic(ZSTD_CCtx* cctx,
|
|||||||
const BYTE* match = base + matchIndexS;
|
const BYTE* match = base + matchIndexS;
|
||||||
hashLong[h2] = hashSmall[h] = current; /* update hash tables */
|
hashLong[h2] = hashSmall[h] = current; /* update hash tables */
|
||||||
|
|
||||||
if ((offset_1 > 0) & (MEM_read32(ip+1-offset_1) == MEM_read32(ip+1))) { /* note : by construction, offset_1 <= current */
|
assert(offset_1 <= current); /* supposed guaranteed by construction */
|
||||||
|
if ((offset_1 > 0) & (MEM_read32(ip+1-offset_1) == MEM_read32(ip+1))) {
|
||||||
mLength = ZSTD_count(ip+1+4, ip+1+4-offset_1, iend) + 4;
|
mLength = ZSTD_count(ip+1+4, ip+1+4-offset_1, iend) + 4;
|
||||||
ip++;
|
ip++;
|
||||||
ZSTD_storeSeq(seqStorePtr, ip-anchor, anchor, 0, mLength-MINMATCH);
|
ZSTD_storeSeq(seqStorePtr, ip-anchor, anchor, 0, mLength-MINMATCH);
|
||||||
@@ -1856,7 +1894,11 @@ size_t ZSTD_HcFindBestMatch_generic (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* save best solution */
|
/* save best solution */
|
||||||
if (currentMl > ml) { ml = currentMl; *offsetPtr = current - matchIndex + ZSTD_REP_MOVE; if (ip+currentMl == iLimit) break; /* best possible, and avoid read overflow*/ }
|
if (currentMl > ml) {
|
||||||
|
ml = currentMl;
|
||||||
|
*offsetPtr = current - matchIndex + ZSTD_REP_MOVE;
|
||||||
|
if (ip+currentMl == iLimit) break; /* best possible, avoids read overflow on next attempt */
|
||||||
|
}
|
||||||
|
|
||||||
if (matchIndex <= minChain) break;
|
if (matchIndex <= minChain) break;
|
||||||
matchIndex = NEXT_IN_CHAIN(matchIndex, chainMask);
|
matchIndex = NEXT_IN_CHAIN(matchIndex, chainMask);
|
||||||
@@ -2001,7 +2043,9 @@ void ZSTD_compressBlock_lazy_generic(ZSTD_CCtx* ctx,
|
|||||||
|
|
||||||
/* catch up */
|
/* catch up */
|
||||||
if (offset) {
|
if (offset) {
|
||||||
while ((start>anchor) && (start>base+offset-ZSTD_REP_MOVE) && (start[-1] == start[-1-offset+ZSTD_REP_MOVE])) /* only search for offset within prefix */
|
while ( (start > anchor)
|
||||||
|
&& (start > base+offset-ZSTD_REP_MOVE)
|
||||||
|
&& (start[-1] == start[-1-offset+ZSTD_REP_MOVE]) ) /* only search for offset within prefix */
|
||||||
{ start--; matchLength++; }
|
{ start--; matchLength++; }
|
||||||
offset_2 = offset_1; offset_1 = (U32)(offset - ZSTD_REP_MOVE);
|
offset_2 = offset_1; offset_1 = (U32)(offset - ZSTD_REP_MOVE);
|
||||||
}
|
}
|
||||||
@@ -2167,9 +2211,9 @@ void ZSTD_compressBlock_lazy_extDict_generic(ZSTD_CCtx* ctx,
|
|||||||
if (MEM_read32(ip) == MEM_read32(repMatch)) {
|
if (MEM_read32(ip) == MEM_read32(repMatch)) {
|
||||||
/* repcode detected */
|
/* repcode detected */
|
||||||
const BYTE* const repEnd = repIndex < dictLimit ? dictEnd : iend;
|
const BYTE* const repEnd = repIndex < dictLimit ? dictEnd : iend;
|
||||||
size_t repLength = ZSTD_count_2segments(ip+EQUAL_READ32, repMatch+EQUAL_READ32, iend, repEnd, prefixStart) + EQUAL_READ32;
|
size_t const repLength = ZSTD_count_2segments(ip+EQUAL_READ32, repMatch+EQUAL_READ32, iend, repEnd, prefixStart) + EQUAL_READ32;
|
||||||
int gain2 = (int)(repLength * 4);
|
int const gain2 = (int)(repLength * 4);
|
||||||
int gain1 = (int)(matchLength*4 - ZSTD_highbit32((U32)offset+1) + 1);
|
int const gain1 = (int)(matchLength*4 - ZSTD_highbit32((U32)offset+1) + 1);
|
||||||
if ((repLength >= EQUAL_READ32) && (gain2 > gain1))
|
if ((repLength >= EQUAL_READ32) && (gain2 > gain1))
|
||||||
matchLength = repLength, offset = 0, start = ip;
|
matchLength = repLength, offset = 0, start = ip;
|
||||||
} }
|
} }
|
||||||
@@ -2302,8 +2346,12 @@ typedef void (*ZSTD_blockCompressor) (ZSTD_CCtx* ctx, const void* src, size_t sr
|
|||||||
static ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, int extDict)
|
static ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, int extDict)
|
||||||
{
|
{
|
||||||
static const ZSTD_blockCompressor blockCompressor[2][8] = {
|
static const ZSTD_blockCompressor blockCompressor[2][8] = {
|
||||||
{ ZSTD_compressBlock_fast, ZSTD_compressBlock_doubleFast, ZSTD_compressBlock_greedy, ZSTD_compressBlock_lazy, ZSTD_compressBlock_lazy2, ZSTD_compressBlock_btlazy2, ZSTD_compressBlock_btopt, ZSTD_compressBlock_btopt2 },
|
{ ZSTD_compressBlock_fast, ZSTD_compressBlock_doubleFast, ZSTD_compressBlock_greedy,
|
||||||
{ ZSTD_compressBlock_fast_extDict, ZSTD_compressBlock_doubleFast_extDict, ZSTD_compressBlock_greedy_extDict, ZSTD_compressBlock_lazy_extDict,ZSTD_compressBlock_lazy2_extDict, ZSTD_compressBlock_btlazy2_extDict, ZSTD_compressBlock_btopt_extDict, ZSTD_compressBlock_btopt2_extDict }
|
ZSTD_compressBlock_lazy, ZSTD_compressBlock_lazy2, ZSTD_compressBlock_btlazy2,
|
||||||
|
ZSTD_compressBlock_btopt, ZSTD_compressBlock_btopt2 },
|
||||||
|
{ ZSTD_compressBlock_fast_extDict, ZSTD_compressBlock_doubleFast_extDict, ZSTD_compressBlock_greedy_extDict,
|
||||||
|
ZSTD_compressBlock_lazy_extDict,ZSTD_compressBlock_lazy2_extDict, ZSTD_compressBlock_btlazy2_extDict,
|
||||||
|
ZSTD_compressBlock_btopt_extDict, ZSTD_compressBlock_btopt2_extDict }
|
||||||
};
|
};
|
||||||
|
|
||||||
return blockCompressor[extDict][(U32)strat];
|
return blockCompressor[extDict][(U32)strat];
|
||||||
@@ -2319,7 +2367,7 @@ static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc, void* dst, size_t dstCa
|
|||||||
if (srcSize < MIN_CBLOCK_SIZE+ZSTD_blockHeaderSize+1) return 0; /* don't even attempt compression below a certain srcSize */
|
if (srcSize < MIN_CBLOCK_SIZE+ZSTD_blockHeaderSize+1) return 0; /* don't even attempt compression below a certain srcSize */
|
||||||
ZSTD_resetSeqStore(&(zc->seqStore));
|
ZSTD_resetSeqStore(&(zc->seqStore));
|
||||||
if (current > zc->nextToUpdate + 384)
|
if (current > zc->nextToUpdate + 384)
|
||||||
zc->nextToUpdate = current - MIN(192, (U32)(current - zc->nextToUpdate - 384)); /* update tree not updated after finding very long rep matches */
|
zc->nextToUpdate = current - MIN(192, (U32)(current - zc->nextToUpdate - 384)); /* limited update after finding a very long match */
|
||||||
blockCompressor(zc, src, srcSize);
|
blockCompressor(zc, src, srcSize);
|
||||||
return ZSTD_compressSequences(zc, dst, dstCapacity, srcSize);
|
return ZSTD_compressSequences(zc, dst, dstCapacity, srcSize);
|
||||||
}
|
}
|
||||||
@@ -2351,7 +2399,8 @@ static size_t ZSTD_compress_generic (ZSTD_CCtx* cctx,
|
|||||||
U32 const lastBlock = lastFrameChunk & (blockSize >= remaining);
|
U32 const lastBlock = lastFrameChunk & (blockSize >= remaining);
|
||||||
size_t cSize;
|
size_t cSize;
|
||||||
|
|
||||||
if (dstCapacity < ZSTD_blockHeaderSize + MIN_CBLOCK_SIZE) return ERROR(dstSize_tooSmall); /* not enough space to store compressed block */
|
if (dstCapacity < ZSTD_blockHeaderSize + MIN_CBLOCK_SIZE)
|
||||||
|
return ERROR(dstSize_tooSmall); /* not enough space to store compressed block */
|
||||||
if (remaining < blockSize) blockSize = remaining;
|
if (remaining < blockSize) blockSize = remaining;
|
||||||
|
|
||||||
/* preemptive overflow correction */
|
/* preemptive overflow correction */
|
||||||
@@ -2486,6 +2535,7 @@ static size_t ZSTD_compressContinue_internal (ZSTD_CCtx* cctx,
|
|||||||
ZSTD_compress_generic (cctx, dst, dstCapacity, src, srcSize, lastFrameChunk) :
|
ZSTD_compress_generic (cctx, dst, dstCapacity, src, srcSize, lastFrameChunk) :
|
||||||
ZSTD_compressBlock_internal (cctx, dst, dstCapacity, src, srcSize);
|
ZSTD_compressBlock_internal (cctx, dst, dstCapacity, src, srcSize);
|
||||||
if (ZSTD_isError(cSize)) return cSize;
|
if (ZSTD_isError(cSize)) return cSize;
|
||||||
|
cctx->consumedSrcSize += srcSize;
|
||||||
return cSize + fhSize;
|
return cSize + fhSize;
|
||||||
} else
|
} else
|
||||||
return fhSize;
|
return fhSize;
|
||||||
@@ -2496,7 +2546,7 @@ size_t ZSTD_compressContinue (ZSTD_CCtx* cctx,
|
|||||||
void* dst, size_t dstCapacity,
|
void* dst, size_t dstCapacity,
|
||||||
const void* src, size_t srcSize)
|
const void* src, size_t srcSize)
|
||||||
{
|
{
|
||||||
return ZSTD_compressContinue_internal(cctx, dst, dstCapacity, src, srcSize, 1, 0);
|
return ZSTD_compressContinue_internal(cctx, dst, dstCapacity, src, srcSize, 1 /* frame mode */, 0 /* last chunk */);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2509,7 +2559,7 @@ size_t ZSTD_compressBlock(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const
|
|||||||
{
|
{
|
||||||
size_t const blockSizeMax = ZSTD_getBlockSizeMax(cctx);
|
size_t const blockSizeMax = ZSTD_getBlockSizeMax(cctx);
|
||||||
if (srcSize > blockSizeMax) return ERROR(srcSize_wrong);
|
if (srcSize > blockSizeMax) return ERROR(srcSize_wrong);
|
||||||
return ZSTD_compressContinue_internal(cctx, dst, dstCapacity, src, srcSize, 0, 0);
|
return ZSTD_compressContinue_internal(cctx, dst, dstCapacity, src, srcSize, 0 /* frame mode */, 0 /* last chunk */);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! ZSTD_loadDictionaryContent() :
|
/*! ZSTD_loadDictionaryContent() :
|
||||||
@@ -2609,7 +2659,8 @@ static size_t ZSTD_loadZstdDictionary(ZSTD_CCtx* cctx, const void* dict, size_t
|
|||||||
if (FSE_isError(offcodeHeaderSize)) return ERROR(dictionary_corrupted);
|
if (FSE_isError(offcodeHeaderSize)) return ERROR(dictionary_corrupted);
|
||||||
if (offcodeLog > OffFSELog) return ERROR(dictionary_corrupted);
|
if (offcodeLog > OffFSELog) return ERROR(dictionary_corrupted);
|
||||||
/* Defer checking offcodeMaxValue because we need to know the size of the dictionary content */
|
/* Defer checking offcodeMaxValue because we need to know the size of the dictionary content */
|
||||||
CHECK_E (FSE_buildCTable_wksp(cctx->offcodeCTable, offcodeNCount, offcodeMaxValue, offcodeLog, scratchBuffer, sizeof(scratchBuffer)), dictionary_corrupted);
|
CHECK_E( FSE_buildCTable_wksp(cctx->offcodeCTable, offcodeNCount, offcodeMaxValue, offcodeLog, scratchBuffer, sizeof(scratchBuffer)),
|
||||||
|
dictionary_corrupted);
|
||||||
dictPtr += offcodeHeaderSize;
|
dictPtr += offcodeHeaderSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2619,8 +2670,9 @@ static size_t ZSTD_loadZstdDictionary(ZSTD_CCtx* cctx, const void* dict, size_t
|
|||||||
if (FSE_isError(matchlengthHeaderSize)) return ERROR(dictionary_corrupted);
|
if (FSE_isError(matchlengthHeaderSize)) return ERROR(dictionary_corrupted);
|
||||||
if (matchlengthLog > MLFSELog) return ERROR(dictionary_corrupted);
|
if (matchlengthLog > MLFSELog) return ERROR(dictionary_corrupted);
|
||||||
/* Every match length code must have non-zero probability */
|
/* Every match length code must have non-zero probability */
|
||||||
CHECK_F (ZSTD_checkDictNCount(matchlengthNCount, matchlengthMaxValue, MaxML));
|
CHECK_F( ZSTD_checkDictNCount(matchlengthNCount, matchlengthMaxValue, MaxML));
|
||||||
CHECK_E (FSE_buildCTable_wksp(cctx->matchlengthCTable, matchlengthNCount, matchlengthMaxValue, matchlengthLog, scratchBuffer, sizeof(scratchBuffer)), dictionary_corrupted);
|
CHECK_E( FSE_buildCTable_wksp(cctx->matchlengthCTable, matchlengthNCount, matchlengthMaxValue, matchlengthLog, scratchBuffer, sizeof(scratchBuffer)),
|
||||||
|
dictionary_corrupted);
|
||||||
dictPtr += matchlengthHeaderSize;
|
dictPtr += matchlengthHeaderSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2630,8 +2682,9 @@ static size_t ZSTD_loadZstdDictionary(ZSTD_CCtx* cctx, const void* dict, size_t
|
|||||||
if (FSE_isError(litlengthHeaderSize)) return ERROR(dictionary_corrupted);
|
if (FSE_isError(litlengthHeaderSize)) return ERROR(dictionary_corrupted);
|
||||||
if (litlengthLog > LLFSELog) return ERROR(dictionary_corrupted);
|
if (litlengthLog > LLFSELog) return ERROR(dictionary_corrupted);
|
||||||
/* Every literal length code must have non-zero probability */
|
/* Every literal length code must have non-zero probability */
|
||||||
CHECK_F (ZSTD_checkDictNCount(litlengthNCount, litlengthMaxValue, MaxLL));
|
CHECK_F( ZSTD_checkDictNCount(litlengthNCount, litlengthMaxValue, MaxLL));
|
||||||
CHECK_E(FSE_buildCTable_wksp(cctx->litlengthCTable, litlengthNCount, litlengthMaxValue, litlengthLog, scratchBuffer, sizeof(scratchBuffer)), dictionary_corrupted);
|
CHECK_E( FSE_buildCTable_wksp(cctx->litlengthCTable, litlengthNCount, litlengthMaxValue, litlengthLog, scratchBuffer, sizeof(scratchBuffer)),
|
||||||
|
dictionary_corrupted);
|
||||||
dictPtr += litlengthHeaderSize;
|
dictPtr += litlengthHeaderSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2683,7 +2736,8 @@ static size_t ZSTD_compressBegin_internal(ZSTD_CCtx* cctx,
|
|||||||
ZSTD_parameters params, U64 pledgedSrcSize)
|
ZSTD_parameters params, U64 pledgedSrcSize)
|
||||||
{
|
{
|
||||||
ZSTD_compResetPolicy_e const crp = dictSize ? ZSTDcrp_fullReset : ZSTDcrp_continue;
|
ZSTD_compResetPolicy_e const crp = dictSize ? ZSTDcrp_fullReset : ZSTDcrp_continue;
|
||||||
CHECK_F(ZSTD_resetCCtx_advanced(cctx, params, pledgedSrcSize, crp));
|
assert(!ZSTD_isError(ZSTD_checkCParams(params.cParams)));
|
||||||
|
CHECK_F(ZSTD_resetCCtx_internal(cctx, params, pledgedSrcSize, crp));
|
||||||
return ZSTD_compress_insertDictionary(cctx, dict, dictSize);
|
return ZSTD_compress_insertDictionary(cctx, dict, dictSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2759,10 +2813,13 @@ size_t ZSTD_compressEnd (ZSTD_CCtx* cctx,
|
|||||||
const void* src, size_t srcSize)
|
const void* src, size_t srcSize)
|
||||||
{
|
{
|
||||||
size_t endResult;
|
size_t endResult;
|
||||||
size_t const cSize = ZSTD_compressContinue_internal(cctx, dst, dstCapacity, src, srcSize, 1, 1);
|
size_t const cSize = ZSTD_compressContinue_internal(cctx, dst, dstCapacity, src, srcSize, 1 /* frame mode */, 1 /* last chunk */);
|
||||||
if (ZSTD_isError(cSize)) return cSize;
|
if (ZSTD_isError(cSize)) return cSize;
|
||||||
endResult = ZSTD_writeEpilogue(cctx, (char*)dst + cSize, dstCapacity-cSize);
|
endResult = ZSTD_writeEpilogue(cctx, (char*)dst + cSize, dstCapacity-cSize);
|
||||||
if (ZSTD_isError(endResult)) return endResult;
|
if (ZSTD_isError(endResult)) return endResult;
|
||||||
|
if (cctx->params.fParams.contentSizeFlag) { /* control src size */
|
||||||
|
if (cctx->frameContentSize != cctx->consumedSrcSize) return ERROR(srcSize_wrong);
|
||||||
|
}
|
||||||
return cSize + endResult;
|
return cSize + endResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2787,7 +2844,8 @@ size_t ZSTD_compress_advanced (ZSTD_CCtx* ctx,
|
|||||||
return ZSTD_compress_internal(ctx, dst, dstCapacity, src, srcSize, dict, dictSize, params);
|
return ZSTD_compress_internal(ctx, dst, dstCapacity, src, srcSize, dict, dictSize, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t ZSTD_compress_usingDict(ZSTD_CCtx* ctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize, const void* dict, size_t dictSize, int compressionLevel)
|
size_t ZSTD_compress_usingDict(ZSTD_CCtx* ctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize,
|
||||||
|
const void* dict, size_t dictSize, int compressionLevel)
|
||||||
{
|
{
|
||||||
ZSTD_parameters params = ZSTD_getParams(compressionLevel, srcSize, dict ? dictSize : 0);
|
ZSTD_parameters params = ZSTD_getParams(compressionLevel, srcSize, dict ? dictSize : 0);
|
||||||
params.fParams.contentSizeFlag = 1;
|
params.fParams.contentSizeFlag = 1;
|
||||||
@@ -2897,36 +2955,45 @@ static ZSTD_parameters ZSTD_getParamsFromCDict(const ZSTD_CDict* cdict) {
|
|||||||
return ZSTD_getParamsFromCCtx(cdict->refContext);
|
return ZSTD_getParamsFromCCtx(cdict->refContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict, unsigned long long pledgedSrcSize)
|
/* ZSTD_compressBegin_usingCDict_advanced() :
|
||||||
|
* cdict must be != NULL */
|
||||||
|
size_t ZSTD_compressBegin_usingCDict_advanced(
|
||||||
|
ZSTD_CCtx* const cctx, const ZSTD_CDict* const cdict,
|
||||||
|
ZSTD_frameParameters const fParams, unsigned long long const pledgedSrcSize)
|
||||||
{
|
{
|
||||||
if (cdict==NULL) return ERROR(GENERIC); /* does not support NULL cdict */
|
if (cdict==NULL) return ERROR(GENERIC); /* does not support NULL cdict */
|
||||||
if (cdict->dictContentSize) CHECK_F(ZSTD_copyCCtx(cctx, cdict->refContext, pledgedSrcSize))
|
if (cdict->dictContentSize)
|
||||||
|
CHECK_F( ZSTD_copyCCtx_internal(cctx, cdict->refContext, fParams, pledgedSrcSize) )
|
||||||
else {
|
else {
|
||||||
ZSTD_parameters params = cdict->refContext->params;
|
ZSTD_parameters params = cdict->refContext->params;
|
||||||
params.fParams.contentSizeFlag = (pledgedSrcSize > 0);
|
params.fParams = fParams;
|
||||||
CHECK_F(ZSTD_compressBegin_advanced(cctx, NULL, 0, params, pledgedSrcSize));
|
CHECK_F(ZSTD_compressBegin_internal(cctx, NULL, 0, params, pledgedSrcSize));
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ZSTD_compressBegin_usingCDict() :
|
||||||
|
* pledgedSrcSize=0 means "unknown"
|
||||||
|
* if pledgedSrcSize>0, it will enable contentSizeFlag */
|
||||||
|
size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict, unsigned long long pledgedSrcSize)
|
||||||
|
{
|
||||||
|
ZSTD_frameParameters fParams = { 1 /*content*/, 0 /*checksum*/, 0 /*noDictID*/ };
|
||||||
|
fParams.contentSizeFlag = (pledgedSrcSize > 0);
|
||||||
|
return ZSTD_compressBegin_usingCDict_advanced(cctx, cdict, fParams, pledgedSrcSize);
|
||||||
|
}
|
||||||
|
|
||||||
/*! ZSTD_compress_usingCDict() :
|
/*! ZSTD_compress_usingCDict() :
|
||||||
* Compression using a digested Dictionary.
|
* Compression using a digested Dictionary.
|
||||||
* Faster startup than ZSTD_compress_usingDict(), recommended when same dictionary is used multiple times.
|
* Faster startup than ZSTD_compress_usingDict(), recommended when same dictionary is used multiple times.
|
||||||
* Note that compression level is decided during dictionary creation */
|
* Note that compression parameters are decided at CDict creation time
|
||||||
|
* while frame parameters are hardcoded */
|
||||||
size_t ZSTD_compress_usingCDict(ZSTD_CCtx* cctx,
|
size_t ZSTD_compress_usingCDict(ZSTD_CCtx* cctx,
|
||||||
void* dst, size_t dstCapacity,
|
void* dst, size_t dstCapacity,
|
||||||
const void* src, size_t srcSize,
|
const void* src, size_t srcSize,
|
||||||
const ZSTD_CDict* cdict)
|
const ZSTD_CDict* cdict)
|
||||||
{
|
{
|
||||||
CHECK_F(ZSTD_compressBegin_usingCDict(cctx, cdict, srcSize)); /* will check if cdict != NULL */
|
ZSTD_frameParameters const fParams = { 1 /*content*/, 0 /*checksum*/, 0 /*noDictID*/ };
|
||||||
|
CHECK_F (ZSTD_compressBegin_usingCDict_advanced(cctx, cdict, fParams, srcSize)); /* will check if cdict != NULL */
|
||||||
if (cdict->refContext->params.fParams.contentSizeFlag == 1) {
|
|
||||||
cctx->params.fParams.contentSizeFlag = 1;
|
|
||||||
cctx->frameContentSize = srcSize;
|
|
||||||
} else {
|
|
||||||
cctx->params.fParams.contentSizeFlag = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ZSTD_compressEnd(cctx, dst, dstCapacity, src, srcSize);
|
return ZSTD_compressEnd(cctx, dst, dstCapacity, src, srcSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2956,7 +3023,6 @@ struct ZSTD_CStream_s {
|
|||||||
U32 checksum;
|
U32 checksum;
|
||||||
U32 frameEnded;
|
U32 frameEnded;
|
||||||
U64 pledgedSrcSize;
|
U64 pledgedSrcSize;
|
||||||
U64 inputProcessed;
|
|
||||||
ZSTD_parameters params;
|
ZSTD_parameters params;
|
||||||
ZSTD_customMem customMem;
|
ZSTD_customMem customMem;
|
||||||
}; /* typedef'd to ZSTD_CStream within "zstd.h" */
|
}; /* typedef'd to ZSTD_CStream within "zstd.h" */
|
||||||
@@ -3003,14 +3069,18 @@ size_t ZSTD_freeCStream(ZSTD_CStream* zcs)
|
|||||||
/*====== Initialization ======*/
|
/*====== Initialization ======*/
|
||||||
|
|
||||||
size_t ZSTD_CStreamInSize(void) { return ZSTD_BLOCKSIZE_ABSOLUTEMAX; }
|
size_t ZSTD_CStreamInSize(void) { return ZSTD_BLOCKSIZE_ABSOLUTEMAX; }
|
||||||
size_t ZSTD_CStreamOutSize(void) { return ZSTD_compressBound(ZSTD_BLOCKSIZE_ABSOLUTEMAX) + ZSTD_blockHeaderSize + 4 /* 32-bits hash */ ; }
|
|
||||||
|
size_t ZSTD_CStreamOutSize(void)
|
||||||
|
{
|
||||||
|
return ZSTD_compressBound(ZSTD_BLOCKSIZE_ABSOLUTEMAX) + ZSTD_blockHeaderSize + 4 /* 32-bits hash */ ;
|
||||||
|
}
|
||||||
|
|
||||||
static size_t ZSTD_resetCStream_internal(ZSTD_CStream* zcs, unsigned long long pledgedSrcSize)
|
static size_t ZSTD_resetCStream_internal(ZSTD_CStream* zcs, unsigned long long pledgedSrcSize)
|
||||||
{
|
{
|
||||||
if (zcs->inBuffSize==0) return ERROR(stage_wrong); /* zcs has not been init at least once => can't reset */
|
if (zcs->inBuffSize==0) return ERROR(stage_wrong); /* zcs has not been init at least once => can't reset */
|
||||||
|
|
||||||
if (zcs->cdict) CHECK_F(ZSTD_compressBegin_usingCDict(zcs->cctx, zcs->cdict, pledgedSrcSize))
|
if (zcs->cdict) CHECK_F(ZSTD_compressBegin_usingCDict_advanced(zcs->cctx, zcs->cdict, zcs->params.fParams, pledgedSrcSize))
|
||||||
else CHECK_F(ZSTD_compressBegin_advanced(zcs->cctx, NULL, 0, zcs->params, pledgedSrcSize));
|
else CHECK_F(ZSTD_compressBegin_internal(zcs->cctx, NULL, 0, zcs->params, pledgedSrcSize));
|
||||||
|
|
||||||
zcs->inToCompress = 0;
|
zcs->inToCompress = 0;
|
||||||
zcs->inBuffPos = 0;
|
zcs->inBuffPos = 0;
|
||||||
@@ -3019,7 +3089,6 @@ static size_t ZSTD_resetCStream_internal(ZSTD_CStream* zcs, unsigned long long p
|
|||||||
zcs->stage = zcss_load;
|
zcs->stage = zcss_load;
|
||||||
zcs->frameEnded = 0;
|
zcs->frameEnded = 0;
|
||||||
zcs->pledgedSrcSize = pledgedSrcSize;
|
zcs->pledgedSrcSize = pledgedSrcSize;
|
||||||
zcs->inputProcessed = 0;
|
|
||||||
return 0; /* ready to go */
|
return 0; /* ready to go */
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3027,14 +3096,18 @@ size_t ZSTD_resetCStream(ZSTD_CStream* zcs, unsigned long long pledgedSrcSize)
|
|||||||
{
|
{
|
||||||
|
|
||||||
zcs->params.fParams.contentSizeFlag = (pledgedSrcSize > 0);
|
zcs->params.fParams.contentSizeFlag = (pledgedSrcSize > 0);
|
||||||
|
|
||||||
return ZSTD_resetCStream_internal(zcs, pledgedSrcSize);
|
return ZSTD_resetCStream_internal(zcs, pledgedSrcSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs,
|
/* ZSTD_initCStream_internal() :
|
||||||
const void* dict, size_t dictSize,
|
* params are supposed validated at this stage
|
||||||
ZSTD_parameters params, unsigned long long pledgedSrcSize)
|
* and zcs->cdict is supposed to be correct */
|
||||||
|
static size_t ZSTD_initCStream_stage2(ZSTD_CStream* zcs,
|
||||||
|
const ZSTD_parameters params,
|
||||||
|
unsigned long long pledgedSrcSize)
|
||||||
{
|
{
|
||||||
|
assert(!ZSTD_isError(ZSTD_checkCParams(params.cParams)));
|
||||||
|
|
||||||
/* allocate buffers */
|
/* allocate buffers */
|
||||||
{ size_t const neededInBuffSize = (size_t)1 << params.cParams.windowLog;
|
{ size_t const neededInBuffSize = (size_t)1 << params.cParams.windowLog;
|
||||||
if (zcs->inBuffSize < neededInBuffSize) {
|
if (zcs->inBuffSize < neededInBuffSize) {
|
||||||
@@ -3055,13 +3128,6 @@ size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs,
|
|||||||
zcs->outBuffSize = outBuffSize;
|
zcs->outBuffSize = outBuffSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dict && dictSize >= 8) {
|
|
||||||
ZSTD_freeCDict(zcs->cdictLocal);
|
|
||||||
zcs->cdictLocal = ZSTD_createCDict_advanced(dict, dictSize, 0, params, zcs->customMem);
|
|
||||||
if (zcs->cdictLocal == NULL) return ERROR(memory_allocation);
|
|
||||||
zcs->cdict = zcs->cdictLocal;
|
|
||||||
} else zcs->cdict = NULL;
|
|
||||||
|
|
||||||
zcs->checksum = params.fParams.checksumFlag > 0;
|
zcs->checksum = params.fParams.checksumFlag > 0;
|
||||||
zcs->params = params;
|
zcs->params = params;
|
||||||
|
|
||||||
@@ -3071,29 +3137,56 @@ size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs,
|
|||||||
/* note : cdict must outlive compression session */
|
/* note : cdict must outlive compression session */
|
||||||
size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDict* cdict)
|
size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDict* cdict)
|
||||||
{
|
{
|
||||||
ZSTD_parameters const params = ZSTD_getParamsFromCDict(cdict);
|
if (!cdict) return ERROR(GENERIC); /* cannot handle NULL cdict (does not know what to do) */
|
||||||
size_t const initError = ZSTD_initCStream_advanced(zcs, NULL, 0, params, 0);
|
{ ZSTD_parameters params = ZSTD_getParamsFromCDict(cdict);
|
||||||
zcs->cdict = cdict;
|
params.fParams.contentSizeFlag = 0;
|
||||||
if (ZSTD_isError(initError)) return initError;
|
zcs->cdict = cdict;
|
||||||
return ZSTD_resetCStream_internal(zcs, 0);
|
return ZSTD_initCStream_stage2(zcs, params, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static size_t ZSTD_initCStream_internal(ZSTD_CStream* zcs,
|
||||||
|
const void* dict, size_t dictSize,
|
||||||
|
ZSTD_parameters params, unsigned long long pledgedSrcSize)
|
||||||
|
{
|
||||||
|
assert(!ZSTD_isError(ZSTD_checkCParams(params.cParams)));
|
||||||
|
zcs->cdict = NULL;
|
||||||
|
|
||||||
|
if (dict && dictSize >= 8) {
|
||||||
|
ZSTD_freeCDict(zcs->cdictLocal);
|
||||||
|
zcs->cdictLocal = ZSTD_createCDict_advanced(dict, dictSize, 0 /* copy */, params, zcs->customMem);
|
||||||
|
if (zcs->cdictLocal == NULL) return ERROR(memory_allocation);
|
||||||
|
zcs->cdict = zcs->cdictLocal;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ZSTD_initCStream_stage2(zcs, params, pledgedSrcSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs,
|
||||||
|
const void* dict, size_t dictSize,
|
||||||
|
ZSTD_parameters params, unsigned long long pledgedSrcSize)
|
||||||
|
{
|
||||||
|
CHECK_F( ZSTD_checkCParams(params.cParams) );
|
||||||
|
return ZSTD_initCStream_internal(zcs, dict, dictSize, params, pledgedSrcSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t ZSTD_initCStream_usingDict(ZSTD_CStream* zcs, const void* dict, size_t dictSize, int compressionLevel)
|
size_t ZSTD_initCStream_usingDict(ZSTD_CStream* zcs, const void* dict, size_t dictSize, int compressionLevel)
|
||||||
{
|
{
|
||||||
ZSTD_parameters const params = ZSTD_getParams(compressionLevel, 0, dictSize);
|
ZSTD_parameters const params = ZSTD_getParams(compressionLevel, 0, dictSize);
|
||||||
return ZSTD_initCStream_advanced(zcs, dict, dictSize, params, 0);
|
return ZSTD_initCStream_internal(zcs, dict, dictSize, params, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t ZSTD_initCStream_srcSize(ZSTD_CStream* zcs, int compressionLevel, unsigned long long pledgedSrcSize)
|
size_t ZSTD_initCStream_srcSize(ZSTD_CStream* zcs, int compressionLevel, unsigned long long pledgedSrcSize)
|
||||||
{
|
{
|
||||||
ZSTD_parameters params = ZSTD_getParams(compressionLevel, pledgedSrcSize, 0);
|
ZSTD_parameters params = ZSTD_getParams(compressionLevel, pledgedSrcSize, 0);
|
||||||
if (pledgedSrcSize) params.fParams.contentSizeFlag = 1;
|
params.fParams.contentSizeFlag = (pledgedSrcSize>0);
|
||||||
return ZSTD_initCStream_advanced(zcs, NULL, 0, params, pledgedSrcSize);
|
return ZSTD_initCStream_internal(zcs, NULL, 0, params, pledgedSrcSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t ZSTD_initCStream(ZSTD_CStream* zcs, int compressionLevel)
|
size_t ZSTD_initCStream(ZSTD_CStream* zcs, int compressionLevel)
|
||||||
{
|
{
|
||||||
return ZSTD_initCStream_usingDict(zcs, NULL, 0, compressionLevel);
|
ZSTD_parameters const params = ZSTD_getParams(compressionLevel, 0, 0);
|
||||||
|
return ZSTD_initCStream_internal(zcs, NULL, 0, params, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t ZSTD_sizeof_CStream(const ZSTD_CStream* zcs)
|
size_t ZSTD_sizeof_CStream(const ZSTD_CStream* zcs)
|
||||||
@@ -3187,7 +3280,6 @@ static size_t ZSTD_compressStream_generic(ZSTD_CStream* zcs,
|
|||||||
|
|
||||||
*srcSizePtr = ip - istart;
|
*srcSizePtr = ip - istart;
|
||||||
*dstCapacityPtr = op - ostart;
|
*dstCapacityPtr = op - ostart;
|
||||||
zcs->inputProcessed += *srcSizePtr;
|
|
||||||
if (zcs->frameEnded) return 0;
|
if (zcs->frameEnded) return 0;
|
||||||
{ size_t hintInSize = zcs->inBuffTarget - zcs->inBuffPos;
|
{ size_t hintInSize = zcs->inBuffTarget - zcs->inBuffPos;
|
||||||
if (hintInSize==0) hintInSize = zcs->blockSize;
|
if (hintInSize==0) hintInSize = zcs->blockSize;
|
||||||
@@ -3232,14 +3324,12 @@ size_t ZSTD_endStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output)
|
|||||||
BYTE* const oend = (BYTE*)(output->dst) + output->size;
|
BYTE* const oend = (BYTE*)(output->dst) + output->size;
|
||||||
BYTE* op = ostart;
|
BYTE* op = ostart;
|
||||||
|
|
||||||
if ((zcs->pledgedSrcSize) && (zcs->inputProcessed != zcs->pledgedSrcSize))
|
|
||||||
return ERROR(srcSize_wrong); /* pledgedSrcSize not respected */
|
|
||||||
|
|
||||||
if (zcs->stage != zcss_final) {
|
if (zcs->stage != zcss_final) {
|
||||||
/* flush whatever remains */
|
/* flush whatever remains */
|
||||||
size_t srcSize = 0;
|
size_t srcSize = 0;
|
||||||
size_t sizeWritten = output->size - output->pos;
|
size_t sizeWritten = output->size - output->pos;
|
||||||
size_t const notEnded = ZSTD_compressStream_generic(zcs, ostart, &sizeWritten, &srcSize, &srcSize, zsf_end); /* use a valid src address instead of NULL */
|
size_t const notEnded = ZSTD_compressStream_generic(zcs, ostart, &sizeWritten,
|
||||||
|
&srcSize /* use a valid src address instead of NULL */, &srcSize, zsf_end);
|
||||||
size_t const remainingToFlush = zcs->outBuffContentSize - zcs->outBuffFlushedSize;
|
size_t const remainingToFlush = zcs->outBuffContentSize - zcs->outBuffFlushedSize;
|
||||||
op += sizeWritten;
|
op += sizeWritten;
|
||||||
if (remainingToFlush) {
|
if (remainingToFlush) {
|
||||||
@@ -3249,7 +3339,9 @@ size_t ZSTD_endStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output)
|
|||||||
/* create epilogue */
|
/* create epilogue */
|
||||||
zcs->stage = zcss_final;
|
zcs->stage = zcss_final;
|
||||||
zcs->outBuffContentSize = !notEnded ? 0 :
|
zcs->outBuffContentSize = !notEnded ? 0 :
|
||||||
ZSTD_compressEnd(zcs->cctx, zcs->outBuff, zcs->outBuffSize, NULL, 0); /* write epilogue, including final empty block, into outBuff */
|
/* write epilogue, including final empty block, into outBuff */
|
||||||
|
ZSTD_compressEnd(zcs->cctx, zcs->outBuff, zcs->outBuffSize, NULL, 0);
|
||||||
|
if (ZSTD_isError(zcs->outBuffContentSize)) return zcs->outBuffContentSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* flush epilogue */
|
/* flush epilogue */
|
||||||
|
|||||||
@@ -231,15 +231,16 @@ void ZSTDMT_compressChunk(void* jobDescription)
|
|||||||
DEBUGLOG(3, "job (first:%u) (last:%u) : dictSize %u, srcSize %u",
|
DEBUGLOG(3, "job (first:%u) (last:%u) : dictSize %u, srcSize %u",
|
||||||
job->firstChunk, job->lastChunk, (U32)job->dictSize, (U32)job->srcSize);
|
job->firstChunk, job->lastChunk, (U32)job->dictSize, (U32)job->srcSize);
|
||||||
if (job->cdict) { /* should only happen for first segment */
|
if (job->cdict) { /* should only happen for first segment */
|
||||||
size_t const initError = ZSTD_compressBegin_usingCDict(job->cctx, job->cdict, job->fullFrameSize);
|
size_t const initError = ZSTD_compressBegin_usingCDict_advanced(job->cctx, job->cdict, job->params.fParams, job->fullFrameSize);
|
||||||
if (job->cdict) DEBUGLOG(3, "using CDict ");
|
if (job->cdict) DEBUGLOG(3, "using CDict ");
|
||||||
if (ZSTD_isError(initError)) { job->cSize = initError; goto _endJob; }
|
if (ZSTD_isError(initError)) { job->cSize = initError; goto _endJob; }
|
||||||
} else { /* srcStart points at reloaded section */
|
} else { /* srcStart points at reloaded section */
|
||||||
size_t const dictModeError = ZSTD_setCCtxParameter(job->cctx, ZSTD_p_forceRawDict, 1); /* Force loading dictionary in "content-only" mode (no header analysis) */
|
if (!job->firstChunk) job->params.fParams.contentSizeFlag = 0; /* ensure no srcSize control */
|
||||||
size_t const initError = ZSTD_compressBegin_advanced(job->cctx, job->srcStart, job->dictSize, job->params, job->fullFrameSize);
|
{ size_t const dictModeError = ZSTD_setCCtxParameter(job->cctx, ZSTD_p_forceRawDict, 1); /* Force loading dictionary in "content-only" mode (no header analysis) */
|
||||||
if (ZSTD_isError(initError) || ZSTD_isError(dictModeError)) { job->cSize = initError; goto _endJob; }
|
size_t const initError = ZSTD_compressBegin_advanced(job->cctx, job->srcStart, job->dictSize, job->params, job->fullFrameSize);
|
||||||
ZSTD_setCCtxParameter(job->cctx, ZSTD_p_forceWindow, 1);
|
if (ZSTD_isError(initError) || ZSTD_isError(dictModeError)) { job->cSize = initError; goto _endJob; }
|
||||||
}
|
ZSTD_setCCtxParameter(job->cctx, ZSTD_p_forceWindow, 1);
|
||||||
|
} }
|
||||||
if (!job->firstChunk) { /* flush and overwrite frame header when it's not first segment */
|
if (!job->firstChunk) { /* flush and overwrite frame header when it's not first segment */
|
||||||
size_t const hSize = ZSTD_compressContinue(job->cctx, dstBuff.start, dstBuff.size, src, 0);
|
size_t const hSize = ZSTD_compressContinue(job->cctx, dstBuff.start, dstBuff.size, src, 0);
|
||||||
if (ZSTD_isError(hSize)) { job->cSize = hSize; goto _endJob; }
|
if (ZSTD_isError(hSize)) { job->cSize = hSize; goto _endJob; }
|
||||||
|
|||||||
+17
-13
@@ -194,9 +194,10 @@ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict(const void* dictBuffer, size_t dictSize
|
|||||||
ZSTDLIB_API size_t ZSTD_freeCDict(ZSTD_CDict* CDict);
|
ZSTDLIB_API size_t ZSTD_freeCDict(ZSTD_CDict* CDict);
|
||||||
|
|
||||||
/*! ZSTD_compress_usingCDict() :
|
/*! ZSTD_compress_usingCDict() :
|
||||||
* Compression using a digested Dictionary.
|
* Compression using a digested Dictionary.
|
||||||
* Faster startup than ZSTD_compress_usingDict(), recommended when same dictionary is used multiple times.
|
* Faster startup than ZSTD_compress_usingDict(), recommended when same dictionary is used multiple times.
|
||||||
* Note that compression level is decided during dictionary creation. */
|
* Note that compression level is decided during dictionary creation.
|
||||||
|
* Frame parameters are hardcoded (dictID=yes, contentSize=yes, checksum=no) */
|
||||||
ZSTDLIB_API size_t ZSTD_compress_usingCDict(ZSTD_CCtx* cctx,
|
ZSTDLIB_API size_t ZSTD_compress_usingCDict(ZSTD_CCtx* cctx,
|
||||||
void* dst, size_t dstCapacity,
|
void* dst, size_t dstCapacity,
|
||||||
const void* src, size_t srcSize,
|
const void* src, size_t srcSize,
|
||||||
@@ -658,8 +659,10 @@ ZSTDLIB_API size_t ZSTD_sizeof_DStream(const ZSTD_DStream* zds);
|
|||||||
ZSTDLIB_API size_t ZSTD_compressBegin(ZSTD_CCtx* cctx, int compressionLevel);
|
ZSTDLIB_API size_t ZSTD_compressBegin(ZSTD_CCtx* cctx, int compressionLevel);
|
||||||
ZSTDLIB_API size_t ZSTD_compressBegin_usingDict(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, int compressionLevel);
|
ZSTDLIB_API size_t ZSTD_compressBegin_usingDict(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, int compressionLevel);
|
||||||
ZSTDLIB_API size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_parameters params, unsigned long long pledgedSrcSize); /**< pledgedSrcSize is optional and can be 0 (meaning unknown). note: if the contentSizeFlag is set, pledgedSrcSize == 0 means the source size is actually 0 */
|
ZSTDLIB_API size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_parameters params, unsigned long long pledgedSrcSize); /**< pledgedSrcSize is optional and can be 0 (meaning unknown). note: if the contentSizeFlag is set, pledgedSrcSize == 0 means the source size is actually 0 */
|
||||||
ZSTDLIB_API size_t ZSTD_copyCCtx(ZSTD_CCtx* cctx, const ZSTD_CCtx* preparedCCtx, unsigned long long pledgedSrcSize); /**< note: if pledgedSrcSize can be 0, indicating unknown size. if it is non-zero, it must be accurate. for 0 size frames, use compressBegin_advanced */
|
|
||||||
ZSTDLIB_API size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict, unsigned long long pledgedSrcSize); /**< note: fail if cdict==NULL. pledgedSrcSize can be 0, indicating unknown size. For 0 size frames, use compressBegin_advanced */
|
ZSTDLIB_API size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict, unsigned long long pledgedSrcSize); /**< note: fail if cdict==NULL. pledgedSrcSize can be 0, indicating unknown size. For 0 size frames, use compressBegin_advanced */
|
||||||
|
ZSTDLIB_API size_t ZSTD_compressBegin_usingCDict_advanced(ZSTD_CCtx* const cctx, const ZSTD_CDict* const cdict, ZSTD_frameParameters const fParams, unsigned long long const pledgedSrcSize); /* compression parameters are already set within cdict. pledgedSrcSize=0 means null-size */
|
||||||
|
ZSTDLIB_API size_t ZSTD_copyCCtx(ZSTD_CCtx* cctx, const ZSTD_CCtx* preparedCCtx, unsigned long long pledgedSrcSize); /**< note: if pledgedSrcSize can be 0, indicating unknown size. if it is non-zero, it must be accurate. for 0 size frames, use compressBegin_advanced */
|
||||||
|
|
||||||
ZSTDLIB_API size_t ZSTD_compressContinue(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
|
ZSTDLIB_API size_t ZSTD_compressContinue(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
|
||||||
ZSTDLIB_API size_t ZSTD_compressEnd(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
|
ZSTDLIB_API size_t ZSTD_compressEnd(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
|
||||||
|
|
||||||
@@ -753,19 +756,20 @@ ZSTDLIB_API ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx* dctx);
|
|||||||
- Compressing and decompressing require a context structure
|
- Compressing and decompressing require a context structure
|
||||||
+ Use ZSTD_createCCtx() and ZSTD_createDCtx()
|
+ Use ZSTD_createCCtx() and ZSTD_createDCtx()
|
||||||
- It is necessary to init context before starting
|
- It is necessary to init context before starting
|
||||||
+ compression : ZSTD_compressBegin()
|
+ compression : any ZSTD_compressBegin*() variant, including with dictionary
|
||||||
+ decompression : ZSTD_decompressBegin()
|
+ decompression : any ZSTD_decompressBegin*() variant, including with dictionary
|
||||||
+ variants _usingDict() are also allowed
|
+ copyCCtx() and copyDCtx() can be used too
|
||||||
+ copyCCtx() and copyDCtx() work too
|
- Block size is limited, it must be <= ZSTD_getBlockSizeMax() <= ZSTD_BLOCKSIZE_ABSOLUTEMAX
|
||||||
- Block size is limited, it must be <= ZSTD_getBlockSizeMax()
|
+ If input is larger than a block size, it's necessary to split input data into multiple blocks
|
||||||
+ If you need to compress more, cut data into multiple blocks
|
+ For inputs larger than a single block size, consider using the regular ZSTD_compress() instead.
|
||||||
+ Consider using the regular ZSTD_compress() instead, as frame metadata costs become negligible when source size is large.
|
Frame metadata is not that costly, and quickly becomes negligible as source size grows larger.
|
||||||
- When a block is considered not compressible enough, ZSTD_compressBlock() result will be zero.
|
- When a block is considered not compressible enough, ZSTD_compressBlock() result will be zero.
|
||||||
In which case, nothing is produced into `dst`.
|
In which case, nothing is produced into `dst`.
|
||||||
+ User must test for such outcome and deal directly with uncompressed data
|
+ User must test for such outcome and deal directly with uncompressed data
|
||||||
+ ZSTD_decompressBlock() doesn't accept uncompressed data as input !!!
|
+ ZSTD_decompressBlock() doesn't accept uncompressed data as input !!!
|
||||||
+ In case of multiple successive blocks, decoder must be informed of uncompressed block existence to follow proper history.
|
+ In case of multiple successive blocks, should some of them be uncompressed,
|
||||||
Use ZSTD_insertBlock() in such a case.
|
decoder must be informed of their existence in order to follow proper history.
|
||||||
|
Use ZSTD_insertBlock() for such a case.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define ZSTD_BLOCKSIZE_ABSOLUTEMAX (128 * 1024) /* define, for static allocation */
|
#define ZSTD_BLOCKSIZE_ABSOLUTEMAX (128 * 1024) /* define, for static allocation */
|
||||||
|
|||||||
+24
-8
@@ -82,9 +82,22 @@ else
|
|||||||
EXT =
|
EXT =
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
VOID = /dev/null
|
||||||
|
|
||||||
|
# thread detection
|
||||||
|
NO_THREAD_MSG := ==> no threads, building without multithreading support
|
||||||
|
HAVE_PTHREAD := $(shell printf '\#include <pthread.h>\nint main(void) { return 0; }' | $(CC) $(FLAGS) -o have_pthread$(EXT) -x c - -pthread 2> $(VOID) && rm have_pthread$(EXT) && echo 1 || echo 0)
|
||||||
|
HAVE_THREAD := $(shell [ "$(HAVE_PTHREAD)" -eq "1" -o -n "$(filter Windows%,$(OS))" ] && echo 1 || echo 0)
|
||||||
|
ifeq ($(HAVE_THREAD), 1)
|
||||||
|
THREAD_MSG := ==> building with threading support
|
||||||
|
THREAD_CPP := -DZSTD_MULTITHREAD
|
||||||
|
THREAD_LD := -pthread
|
||||||
|
else
|
||||||
|
THREAD_MSG := $(NO_THREAD_MSG)
|
||||||
|
endif
|
||||||
|
|
||||||
# zlib detection
|
# zlib detection
|
||||||
NO_ZLIB_MSG := ==> no zlib, building zstd without .gz support
|
NO_ZLIB_MSG := ==> no zlib, building zstd without .gz support
|
||||||
VOID = /dev/null
|
|
||||||
HAVE_ZLIB := $(shell printf '\#include <zlib.h>\nint main(void) { return 0; }' | $(CC) $(FLAGS) -o have_zlib$(EXT) -x c - -lz 2> $(VOID) && rm have_zlib$(EXT) && echo 1 || echo 0)
|
HAVE_ZLIB := $(shell printf '\#include <zlib.h>\nint main(void) { return 0; }' | $(CC) $(FLAGS) -o have_zlib$(EXT) -x c - -lz 2> $(VOID) && rm have_zlib$(EXT) && echo 1 || echo 0)
|
||||||
ifeq ($(HAVE_ZLIB), 1)
|
ifeq ($(HAVE_ZLIB), 1)
|
||||||
ZLIB_MSG := ==> building zstd with .gz compression support
|
ZLIB_MSG := ==> building zstd with .gz compression support
|
||||||
@@ -115,15 +128,16 @@ all: zstd
|
|||||||
|
|
||||||
$(ZSTDDECOMP_O): CFLAGS += $(ALIGN_LOOP)
|
$(ZSTDDECOMP_O): CFLAGS += $(ALIGN_LOOP)
|
||||||
|
|
||||||
zstd : CPPFLAGS += $(ZLIBCPP)
|
zstd : CPPFLAGS += $(ZLIBCPP) $(THREAD_CPP)
|
||||||
zstd : LDFLAGS += $(ZLIBLD)
|
zstd : LDFLAGS += $(ZLIBLD) $(THREAD_LD)
|
||||||
zstd : LZMA_MSG := $(NO_LZMA_MSG)
|
zstd : LZMA_MSG := $(NO_LZMA_MSG)
|
||||||
zstd-nogz : ZLIB_MSG := $(NO_ZLIB_MSG)
|
zstd-nogz : ZLIB_MSG := $(NO_ZLIB_MSG)
|
||||||
zstd-nogz : LZMA_MSG := $(NO_LZMA_MSG)
|
zstd-nogz : LZMA_MSG := $(NO_LZMA_MSG)
|
||||||
xzstd : CPPFLAGS += $(ZLIBCPP) $(LZMACPP)
|
xzstd : CPPFLAGS += $(ZLIBCPP) $(LZMACPP)
|
||||||
xzstd : LDFLAGS += $(ZLIBLD) $(LZMALD)
|
xzstd : LDFLAGS += $(ZLIBLD) $(LZMALD)
|
||||||
zstd zstd-nogz xzstd : CPPFLAGS += -DZSTD_LEGACY_SUPPORT=$(ZSTD_LEGACY_SUPPORT)
|
zstd zstd-nogz xzstd : CPPFLAGS += -DZSTD_LEGACY_SUPPORT=$(ZSTD_LEGACY_SUPPORT)
|
||||||
zstd zstd-nogz xzstd : $(ZSTDLIB_OBJ) zstdcli.o fileio.o bench.o datagen.o dibio.o
|
zstd zstd-nogz xzstd : $(ZSTDLIB_FILES) zstdcli.o fileio.o bench.o datagen.o dibio.o
|
||||||
|
@echo "$(THREAD_MSG)"
|
||||||
@echo "$(ZLIB_MSG)"
|
@echo "$(ZLIB_MSG)"
|
||||||
@echo "$(LZMA_MSG)"
|
@echo "$(LZMA_MSG)"
|
||||||
ifneq (,$(filter Windows%,$(OS)))
|
ifneq (,$(filter Windows%,$(OS)))
|
||||||
@@ -145,6 +159,11 @@ endif
|
|||||||
zstd-nolegacy : clean_decomp_o
|
zstd-nolegacy : clean_decomp_o
|
||||||
$(MAKE) zstd ZSTD_LEGACY_SUPPORT=0
|
$(MAKE) zstd ZSTD_LEGACY_SUPPORT=0
|
||||||
|
|
||||||
|
zstd-nomt : THREAD_CPP :=
|
||||||
|
zstd-nomt : THREAD_LD :=
|
||||||
|
zstd-nomt : THREAD_MSG := $(NO_THREAD_MSG)
|
||||||
|
zstd-nomt : zstd
|
||||||
|
|
||||||
zstd-pgo : MOREFLAGS = -fprofile-generate
|
zstd-pgo : MOREFLAGS = -fprofile-generate
|
||||||
zstd-pgo : clean zstd
|
zstd-pgo : clean zstd
|
||||||
./zstd -b19i1 $(PROFILE_WITH)
|
./zstd -b19i1 $(PROFILE_WITH)
|
||||||
@@ -169,10 +188,6 @@ zstd-decompress: $(ZSTDCOMMON_FILES) $(ZSTDDECOMP_FILES) zstdcli.c fileio.c
|
|||||||
zstd-compress: $(ZSTDCOMMON_FILES) $(ZSTDCOMP_FILES) zstdcli.c fileio.c
|
zstd-compress: $(ZSTDCOMMON_FILES) $(ZSTDCOMP_FILES) zstdcli.c fileio.c
|
||||||
$(CC) $(FLAGS) -DZSTD_NOBENCH -DZSTD_NODICT -DZSTD_NODECOMPRESS $^ -o $@$(EXT)
|
$(CC) $(FLAGS) -DZSTD_NOBENCH -DZSTD_NODICT -DZSTD_NODECOMPRESS $^ -o $@$(EXT)
|
||||||
|
|
||||||
zstdmt: CPPFLAGS += -DZSTD_MULTITHREAD
|
|
||||||
ifeq (,$(filter Windows%,$(OS)))
|
|
||||||
zstdmt: LDFLAGS += -lpthread
|
|
||||||
endif
|
|
||||||
zstdmt: zstd
|
zstdmt: zstd
|
||||||
|
|
||||||
generate_res:
|
generate_res:
|
||||||
@@ -231,6 +246,7 @@ install: zstd
|
|||||||
@$(INSTALL_PROGRAM) zstd $(DESTDIR)$(BINDIR)/zstd
|
@$(INSTALL_PROGRAM) zstd $(DESTDIR)$(BINDIR)/zstd
|
||||||
@ln -sf zstd $(DESTDIR)$(BINDIR)/zstdcat
|
@ln -sf zstd $(DESTDIR)$(BINDIR)/zstdcat
|
||||||
@ln -sf zstd $(DESTDIR)$(BINDIR)/unzstd
|
@ln -sf zstd $(DESTDIR)$(BINDIR)/unzstd
|
||||||
|
@ln -sf zstd $(DESTDIR)$(BINDIR)/zstdmt
|
||||||
@$(INSTALL_SCRIPT) zstdless $(DESTDIR)$(BINDIR)/zstdless
|
@$(INSTALL_SCRIPT) zstdless $(DESTDIR)$(BINDIR)/zstdless
|
||||||
@$(INSTALL_SCRIPT) zstdgrep $(DESTDIR)$(BINDIR)/zstdgrep
|
@$(INSTALL_SCRIPT) zstdgrep $(DESTDIR)$(BINDIR)/zstdgrep
|
||||||
@echo Installing man pages
|
@echo Installing man pages
|
||||||
|
|||||||
+5
-2
@@ -146,8 +146,11 @@ typedef struct {
|
|||||||
} blockParam_t;
|
} blockParam_t;
|
||||||
|
|
||||||
|
|
||||||
#define MIN(a,b) ((a)<(b) ? (a) : (b))
|
|
||||||
#define MAX(a,b) ((a)>(b) ? (a) : (b))
|
#undef MIN
|
||||||
|
#undef MAX
|
||||||
|
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
||||||
|
#define MAX(a,b) ((a) > (b) ? (a) : (b))
|
||||||
|
|
||||||
static int BMK_benchMem(const void* srcBuffer, size_t srcSize,
|
static int BMK_benchMem(const void* srcBuffer, size_t srcSize,
|
||||||
const char* displayName, int cLevel,
|
const char* displayName, int cLevel,
|
||||||
|
|||||||
+2
-1
@@ -89,7 +89,8 @@ unsigned DiB_isError(size_t errorCode) { return ERR_isError(errorCode); }
|
|||||||
|
|
||||||
const char* DiB_getErrorName(size_t errorCode) { return ERR_getErrorName(errorCode); }
|
const char* DiB_getErrorName(size_t errorCode) { return ERR_getErrorName(errorCode); }
|
||||||
|
|
||||||
#define MIN(a,b) ( (a) < (b) ? (a) : (b) )
|
#undef MIN
|
||||||
|
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
||||||
|
|
||||||
|
|
||||||
/* ********************************************************
|
/* ********************************************************
|
||||||
|
|||||||
+22
-28
@@ -76,7 +76,7 @@
|
|||||||
|
|
||||||
#define CACHELINE 64
|
#define CACHELINE 64
|
||||||
|
|
||||||
#define MAX_DICT_SIZE (8 MB) /* protection against large input (attack scenario) */
|
#define DICTSIZE_MAX (32 MB) /* protection against large input (attack scenario) */
|
||||||
|
|
||||||
#define FNSPACE 30
|
#define FNSPACE 30
|
||||||
|
|
||||||
@@ -96,6 +96,7 @@ void FIO_setNotificationLevel(unsigned level) { g_displayLevel=level; }
|
|||||||
static const clock_t refreshRate = CLOCKS_PER_SEC * 15 / 100;
|
static const clock_t refreshRate = CLOCKS_PER_SEC * 15 / 100;
|
||||||
static clock_t g_time = 0;
|
static clock_t g_time = 0;
|
||||||
|
|
||||||
|
#undef MIN
|
||||||
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
||||||
|
|
||||||
/* ************************************************************
|
/* ************************************************************
|
||||||
@@ -278,13 +279,13 @@ static FILE* FIO_openDstFile(const char* dstFileName)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*! FIO_loadFile() :
|
/*! FIO_createDictBuffer() :
|
||||||
* creates a buffer, pointed by `*bufferPtr`,
|
* creates a buffer, pointed by `*bufferPtr`,
|
||||||
* loads `filename` content into it,
|
* loads `filename` content into it, up to DICTSIZE_MAX bytes.
|
||||||
* up to MAX_DICT_SIZE bytes.
|
* @return : loaded size
|
||||||
* @return : loaded size
|
* if fileName==NULL, returns 0 and a NULL pointer
|
||||||
*/
|
*/
|
||||||
static size_t FIO_loadFile(void** bufferPtr, const char* fileName)
|
static size_t FIO_createDictBuffer(void** bufferPtr, const char* fileName)
|
||||||
{
|
{
|
||||||
FILE* fileHandle;
|
FILE* fileHandle;
|
||||||
U64 fileSize;
|
U64 fileSize;
|
||||||
@@ -296,14 +297,7 @@ static size_t FIO_loadFile(void** bufferPtr, const char* fileName)
|
|||||||
fileHandle = fopen(fileName, "rb");
|
fileHandle = fopen(fileName, "rb");
|
||||||
if (fileHandle==0) EXM_THROW(31, "zstd: %s: %s", fileName, strerror(errno));
|
if (fileHandle==0) EXM_THROW(31, "zstd: %s: %s", fileName, strerror(errno));
|
||||||
fileSize = UTIL_getFileSize(fileName);
|
fileSize = UTIL_getFileSize(fileName);
|
||||||
if (fileSize > MAX_DICT_SIZE) {
|
if (fileSize > DICTSIZE_MAX) EXM_THROW(32, "Dictionary file %s is too large (> %u MB)", fileName, DICTSIZE_MAX >> 20); /* avoid extreme cases */
|
||||||
int seekResult;
|
|
||||||
if (fileSize > 1 GB) EXM_THROW(32, "Dictionary file %s is too large", fileName); /* avoid extreme cases */
|
|
||||||
DISPLAYLEVEL(2,"Dictionary %s is too large : using last %u bytes only \n", fileName, (U32)MAX_DICT_SIZE);
|
|
||||||
seekResult = fseek(fileHandle, (long int)(fileSize-MAX_DICT_SIZE), SEEK_SET); /* use end of file */
|
|
||||||
if (seekResult != 0) EXM_THROW(33, "zstd: %s: %s", fileName, strerror(errno));
|
|
||||||
fileSize = MAX_DICT_SIZE;
|
|
||||||
}
|
|
||||||
*bufferPtr = malloc((size_t)fileSize);
|
*bufferPtr = malloc((size_t)fileSize);
|
||||||
if (*bufferPtr==NULL) EXM_THROW(34, "zstd: %s", strerror(errno));
|
if (*bufferPtr==NULL) EXM_THROW(34, "zstd: %s", strerror(errno));
|
||||||
{ size_t const readSize = fread(*bufferPtr, 1, (size_t)fileSize, fileHandle);
|
{ size_t const readSize = fread(*bufferPtr, 1, (size_t)fileSize, fileHandle);
|
||||||
@@ -356,7 +350,7 @@ static cRess_t FIO_createCResources(const char* dictFileName, int cLevel,
|
|||||||
|
|
||||||
/* dictionary */
|
/* dictionary */
|
||||||
{ void* dictBuffer;
|
{ void* dictBuffer;
|
||||||
size_t const dictBuffSize = FIO_loadFile(&dictBuffer, dictFileName);
|
size_t const dictBuffSize = FIO_createDictBuffer(&dictBuffer, dictFileName); /* works with dictFileName==NULL */
|
||||||
if (dictFileName && (dictBuffer==NULL)) EXM_THROW(32, "zstd: allocation error : can't create dictBuffer");
|
if (dictFileName && (dictBuffer==NULL)) EXM_THROW(32, "zstd: allocation error : can't create dictBuffer");
|
||||||
{ ZSTD_parameters params = ZSTD_getParams(cLevel, srcSize, dictBuffSize);
|
{ ZSTD_parameters params = ZSTD_getParams(cLevel, srcSize, dictBuffSize);
|
||||||
params.fParams.contentSizeFlag = srcRegFile;
|
params.fParams.contentSizeFlag = srcRegFile;
|
||||||
@@ -368,7 +362,7 @@ static cRess_t FIO_createCResources(const char* dictFileName, int cLevel,
|
|||||||
if (comprParams->searchLog) params.cParams.searchLog = comprParams->searchLog;
|
if (comprParams->searchLog) params.cParams.searchLog = comprParams->searchLog;
|
||||||
if (comprParams->searchLength) params.cParams.searchLength = comprParams->searchLength;
|
if (comprParams->searchLength) params.cParams.searchLength = comprParams->searchLength;
|
||||||
if (comprParams->targetLength) params.cParams.targetLength = comprParams->targetLength;
|
if (comprParams->targetLength) params.cParams.targetLength = comprParams->targetLength;
|
||||||
if (comprParams->strategy) params.cParams.strategy = (ZSTD_strategy)(comprParams->strategy - 1);
|
if (comprParams->strategy) params.cParams.strategy = (ZSTD_strategy)(comprParams->strategy - 1); /* 0 means : do not change */
|
||||||
#ifdef ZSTD_MULTITHREAD
|
#ifdef ZSTD_MULTITHREAD
|
||||||
{ size_t const errorCode = ZSTDMT_initCStream_advanced(ress.cctx, dictBuffer, dictBuffSize, params, srcSize);
|
{ size_t const errorCode = ZSTDMT_initCStream_advanced(ress.cctx, dictBuffer, dictBuffSize, params, srcSize);
|
||||||
if (ZSTD_isError(errorCode)) EXM_THROW(33, "Error initializing CStream : %s", ZSTD_getErrorName(errorCode));
|
if (ZSTD_isError(errorCode)) EXM_THROW(33, "Error initializing CStream : %s", ZSTD_getErrorName(errorCode));
|
||||||
@@ -574,8 +568,8 @@ static int FIO_compressFilename_internal(cRess_t ress,
|
|||||||
readsize += inSize;
|
readsize += inSize;
|
||||||
|
|
||||||
{ ZSTD_inBuffer inBuff = { ress.srcBuffer, inSize, 0 };
|
{ ZSTD_inBuffer inBuff = { ress.srcBuffer, inSize, 0 };
|
||||||
while (inBuff.pos != inBuff.size) { /* note : is there any possibility of endless loop ? for example, if outBuff is not large enough ? */
|
while (inBuff.pos != inBuff.size) {
|
||||||
ZSTD_outBuffer outBuff= { ress.dstBuffer, ress.dstBufferSize, 0 };
|
ZSTD_outBuffer outBuff = { ress.dstBuffer, ress.dstBufferSize, 0 };
|
||||||
#ifdef ZSTD_MULTITHREAD
|
#ifdef ZSTD_MULTITHREAD
|
||||||
size_t const result = ZSTDMT_compressStream(ress.cctx, &outBuff, &inBuff);
|
size_t const result = ZSTDMT_compressStream(ress.cctx, &outBuff, &inBuff);
|
||||||
#else
|
#else
|
||||||
@@ -589,13 +583,13 @@ static int FIO_compressFilename_internal(cRess_t ress,
|
|||||||
if (sizeCheck!=outBuff.pos) EXM_THROW(25, "Write error : cannot write compressed block into %s", dstFileName);
|
if (sizeCheck!=outBuff.pos) EXM_THROW(25, "Write error : cannot write compressed block into %s", dstFileName);
|
||||||
compressedfilesize += outBuff.pos;
|
compressedfilesize += outBuff.pos;
|
||||||
} } }
|
} } }
|
||||||
#ifdef ZSTD_MULTITHREAD
|
if (g_nbThreads > 1) {
|
||||||
if (!fileSize) DISPLAYUPDATE(2, "\rRead : %u MB", (U32)(readsize>>20))
|
if (!fileSize) DISPLAYUPDATE(2, "\rRead : %u MB", (U32)(readsize>>20))
|
||||||
else DISPLAYUPDATE(2, "\rRead : %u / %u MB", (U32)(readsize>>20), (U32)(fileSize>>20));
|
else DISPLAYUPDATE(2, "\rRead : %u / %u MB", (U32)(readsize>>20), (U32)(fileSize>>20));
|
||||||
#else
|
} else {
|
||||||
if (!fileSize) DISPLAYUPDATE(2, "\rRead : %u MB ==> %.2f%%", (U32)(readsize>>20), (double)compressedfilesize/readsize*100)
|
if (!fileSize) DISPLAYUPDATE(2, "\rRead : %u MB ==> %.2f%%", (U32)(readsize>>20), (double)compressedfilesize/readsize*100)
|
||||||
else DISPLAYUPDATE(2, "\rRead : %u / %u MB ==> %.2f%%", (U32)(readsize>>20), (U32)(fileSize>>20), (double)compressedfilesize/readsize*100);
|
else DISPLAYUPDATE(2, "\rRead : %u / %u MB ==> %.2f%%", (U32)(readsize>>20), (U32)(fileSize>>20), (double)compressedfilesize/readsize*100);
|
||||||
#endif
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* End of Frame */
|
/* End of Frame */
|
||||||
@@ -776,7 +770,7 @@ static dRess_t FIO_createDResources(const char* dictFileName)
|
|||||||
|
|
||||||
/* dictionary */
|
/* dictionary */
|
||||||
{ void* dictBuffer;
|
{ void* dictBuffer;
|
||||||
size_t const dictBufferSize = FIO_loadFile(&dictBuffer, dictFileName);
|
size_t const dictBufferSize = FIO_createDictBuffer(&dictBuffer, dictFileName);
|
||||||
size_t const initError = ZSTD_initDStream_usingDict(ress.dctx, dictBuffer, dictBufferSize);
|
size_t const initError = ZSTD_initDStream_usingDict(ress.dctx, dictBuffer, dictBufferSize);
|
||||||
if (ZSTD_isError(initError)) EXM_THROW(61, "ZSTD_initDStream_usingDict error : %s", ZSTD_getErrorName(initError));
|
if (ZSTD_isError(initError)) EXM_THROW(61, "ZSTD_initDStream_usingDict error : %s", ZSTD_getErrorName(initError));
|
||||||
free(dictBuffer);
|
free(dictBuffer);
|
||||||
|
|||||||
+196
@@ -25,6 +25,7 @@ extern "C" {
|
|||||||
#include <stdlib.h> /* malloc */
|
#include <stdlib.h> /* malloc */
|
||||||
#include <stddef.h> /* size_t, ptrdiff_t */
|
#include <stddef.h> /* size_t, ptrdiff_t */
|
||||||
#include <stdio.h> /* fprintf */
|
#include <stdio.h> /* fprintf */
|
||||||
|
#include <string.h> /* strncmp */
|
||||||
#include <sys/types.h> /* stat, utime */
|
#include <sys/types.h> /* stat, utime */
|
||||||
#include <sys/stat.h> /* stat */
|
#include <sys/stat.h> /* stat */
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
@@ -488,6 +489,201 @@ UTIL_STATIC void UTIL_freeFileList(const char** filenameTable, char* allocatedBu
|
|||||||
if (filenameTable) free((void*)filenameTable);
|
if (filenameTable) free((void*)filenameTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* count the number of physical cores */
|
||||||
|
#if defined(_WIN32) || defined(WIN32)
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
typedef BOOL(WINAPI* LPFN_GLPI)(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION, PDWORD);
|
||||||
|
|
||||||
|
UTIL_STATIC int UTIL_countPhysicalCores(void)
|
||||||
|
{
|
||||||
|
static int numPhysicalCores = 0;
|
||||||
|
if (numPhysicalCores != 0) return numPhysicalCores;
|
||||||
|
|
||||||
|
{ LPFN_GLPI glpi;
|
||||||
|
BOOL done = FALSE;
|
||||||
|
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION buffer = NULL;
|
||||||
|
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION ptr = NULL;
|
||||||
|
DWORD returnLength = 0;
|
||||||
|
size_t byteOffset = 0;
|
||||||
|
|
||||||
|
glpi = (LPFN_GLPI)GetProcAddress(GetModuleHandle(TEXT("kernel32")),
|
||||||
|
"GetLogicalProcessorInformation");
|
||||||
|
|
||||||
|
if (glpi == NULL) {
|
||||||
|
goto failed;
|
||||||
|
}
|
||||||
|
|
||||||
|
while(!done) {
|
||||||
|
DWORD rc = glpi(buffer, &returnLength);
|
||||||
|
if (FALSE == rc) {
|
||||||
|
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
|
||||||
|
if (buffer)
|
||||||
|
free(buffer);
|
||||||
|
buffer = (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION)malloc(returnLength);
|
||||||
|
|
||||||
|
if (buffer == NULL) {
|
||||||
|
perror("zstd");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* some other error */
|
||||||
|
goto failed;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
done = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ptr = buffer;
|
||||||
|
|
||||||
|
while (byteOffset + sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION) <= returnLength) {
|
||||||
|
|
||||||
|
if (ptr->Relationship == RelationProcessorCore) {
|
||||||
|
numPhysicalCores++;
|
||||||
|
}
|
||||||
|
|
||||||
|
ptr++;
|
||||||
|
byteOffset += sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(buffer);
|
||||||
|
|
||||||
|
return numPhysicalCores;
|
||||||
|
}
|
||||||
|
|
||||||
|
failed:
|
||||||
|
/* try to fall back on GetSystemInfo */
|
||||||
|
{ SYSTEM_INFO sysinfo;
|
||||||
|
GetSystemInfo(&sysinfo);
|
||||||
|
numPhysicalCores = sysinfo.dwNumberOfProcessors;
|
||||||
|
if (numPhysicalCores == 0) numPhysicalCores = 1; /* just in case */
|
||||||
|
}
|
||||||
|
return numPhysicalCores;
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(__APPLE__)
|
||||||
|
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
|
||||||
|
/* Use apple-provided syscall
|
||||||
|
* see: man 3 sysctl */
|
||||||
|
UTIL_STATIC int UTIL_countPhysicalCores(void)
|
||||||
|
{
|
||||||
|
static S32 numPhysicalCores = 0; /* apple specifies int32_t */
|
||||||
|
if (numPhysicalCores != 0) return numPhysicalCores;
|
||||||
|
|
||||||
|
{ size_t size = sizeof(S32);
|
||||||
|
int const ret = sysctlbyname("hw.physicalcpu", &numPhysicalCores, &size, NULL, 0);
|
||||||
|
if (ret != 0) {
|
||||||
|
if (errno == ENOENT) {
|
||||||
|
/* entry not present, fall back on 1 */
|
||||||
|
numPhysicalCores = 1;
|
||||||
|
} else {
|
||||||
|
perror("zstd: can't get number of physical cpus");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return numPhysicalCores;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(__linux__)
|
||||||
|
|
||||||
|
/* parse /proc/cpuinfo
|
||||||
|
* siblings / cpu cores should give hyperthreading ratio
|
||||||
|
* otherwise fall back on sysconf */
|
||||||
|
UTIL_STATIC int UTIL_countPhysicalCores(void)
|
||||||
|
{
|
||||||
|
static int numPhysicalCores = 0;
|
||||||
|
|
||||||
|
if (numPhysicalCores != 0) return numPhysicalCores;
|
||||||
|
|
||||||
|
numPhysicalCores = (int)sysconf(_SC_NPROCESSORS_ONLN);
|
||||||
|
if (numPhysicalCores == -1) {
|
||||||
|
/* value not queryable, fall back on 1 */
|
||||||
|
return numPhysicalCores = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* try to determine if there's hyperthreading */
|
||||||
|
{ FILE* const cpuinfo = fopen("/proc/cpuinfo", "r");
|
||||||
|
size_t const BUF_SIZE = 80;
|
||||||
|
char buff[BUF_SIZE];
|
||||||
|
|
||||||
|
int siblings = 0;
|
||||||
|
int cpu_cores = 0;
|
||||||
|
int ratio = 1;
|
||||||
|
|
||||||
|
if (cpuinfo == NULL) {
|
||||||
|
/* fall back on the sysconf value */
|
||||||
|
return numPhysicalCores;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* assume the cpu cores/siblings values will be constant across all
|
||||||
|
* present processors */
|
||||||
|
while (!feof(cpuinfo)) {
|
||||||
|
if (fgets(buff, BUF_SIZE, cpuinfo) != NULL) {
|
||||||
|
if (strncmp(buff, "siblings", 8) == 0) {
|
||||||
|
const char* const sep = strchr(buff, ':');
|
||||||
|
if (*sep == '\0') {
|
||||||
|
/* formatting was broken? */
|
||||||
|
goto failed;
|
||||||
|
}
|
||||||
|
|
||||||
|
siblings = atoi(sep + 1);
|
||||||
|
}
|
||||||
|
if (strncmp(buff, "cpu cores", 9) == 0) {
|
||||||
|
const char* const sep = strchr(buff, ':');
|
||||||
|
if (*sep == '\0') {
|
||||||
|
/* formatting was broken? */
|
||||||
|
goto failed;
|
||||||
|
}
|
||||||
|
|
||||||
|
cpu_cores = atoi(sep + 1);
|
||||||
|
}
|
||||||
|
} else if (ferror(cpuinfo)) {
|
||||||
|
/* fall back on the sysconf value */
|
||||||
|
goto failed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (siblings && cpu_cores) {
|
||||||
|
ratio = siblings / cpu_cores;
|
||||||
|
}
|
||||||
|
failed:
|
||||||
|
fclose(cpuinfo);
|
||||||
|
return numPhysicalCores = numPhysicalCores / ratio;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
|
||||||
|
|
||||||
|
/* Use apple-provided syscall
|
||||||
|
* see: man 3 sysctl */
|
||||||
|
UTIL_STATIC int UTIL_countPhysicalCores(void)
|
||||||
|
{
|
||||||
|
static int numPhysicalCores = 0;
|
||||||
|
|
||||||
|
if (numPhysicalCores != 0) return numPhysicalCores;
|
||||||
|
|
||||||
|
numPhysicalCores = (int)sysconf(_SC_NPROCESSORS_ONLN);
|
||||||
|
if (numPhysicalCores == -1) {
|
||||||
|
/* value not queryable, fall back on 1 */
|
||||||
|
return numPhysicalCores = 1;
|
||||||
|
}
|
||||||
|
return numPhysicalCores;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
UTIL_STATIC int UTIL_countPhysicalCores(void)
|
||||||
|
{
|
||||||
|
/* assume 1 */
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
#if defined (__cplusplus)
|
||||||
}
|
}
|
||||||
|
|||||||
+17
-11
@@ -2,10 +2,13 @@
|
|||||||
.TH "ZSTD" "1" "April 2017" "zstd 1.1.5" "User Commands"
|
.TH "ZSTD" "1" "April 2017" "zstd 1.1.5" "User Commands"
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBzstd\fR \- zstd, unzstd, zstdcat \- Compress or decompress \.zst files
|
\fBzstd\fR \- zstd, zstdmt, unzstd, zstdcat \- Compress or decompress \.zst files
|
||||||
.
|
.
|
||||||
.SH "SYNOPSIS"
|
.SH "SYNOPSIS"
|
||||||
\fBzstd\fR [\fIOPTIONS\fR] [\-|<INPUT\-FILE>] [\-o <OUTPUT\-FILE>]
|
\fBzstd\fR [\fIOPTIONS\fR] [\-|\fIINPUT\-FILE\fR] [\-o \fIOUTPUT\-FILE\fR]
|
||||||
|
.
|
||||||
|
.P
|
||||||
|
\fBzstdmt\fR is equivalent to \fBzstd \-T0\fR
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
\fBunzstd\fR is equivalent to \fBzstd \-d\fR
|
\fBunzstd\fR is equivalent to \fBzstd \-d\fR
|
||||||
@@ -97,8 +100,8 @@ Use FILEs as a training set to create a dictionary\. The training set should con
|
|||||||
unlocks high compression levels 20+ (maximum 22), using a lot more memory\. Note that decompression will also require more memory when using these levels\.
|
unlocks high compression levels 20+ (maximum 22), using a lot more memory\. Note that decompression will also require more memory when using these levels\.
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
\fB\-T#\fR
|
\fB\-T#\fR, \fB\-\-threads=#\fR
|
||||||
Compress using # threads (default: 1)\. This modifier is only available if \fBzstd\fR was compiled with multithreading support\.
|
Compress using \fB#\fR threads (default: 1)\. If \fB#\fR is 0, attempt to detect and use the number of physical CPU cores\. This modifier does nothing if \fBzstd\fR is compiled without multithread support\.
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
\fB\-D file\fR
|
\fB\-D file\fR
|
||||||
@@ -110,7 +113,7 @@ do not store dictionary ID within frame header (dictionary compression)\. The de
|
|||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
\fB\-o file\fR
|
\fB\-o file\fR
|
||||||
save result into \fBfile\fR (only possible with a single INPUT\-FILE)
|
save result into \fBfile\fR (only possible with a single \fIINPUT\-FILE\fR)
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
\fB\-f\fR, \fB\-\-force\fR
|
\fB\-f\fR, \fB\-\-force\fR
|
||||||
@@ -169,7 +172,7 @@ use FILEs as training set to create a dictionary\. The training set should conta
|
|||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
\fB\-o file\fR
|
\fB\-o file\fR
|
||||||
dictionary saved into \fBfile\fR (default: dictionary)
|
dictionary saved into \fBfile\fR (default name: dictionary)
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
\fB\-\-maxdict=#\fR
|
\fB\-\-maxdict=#\fR
|
||||||
@@ -195,15 +198,18 @@ Example: \fB\-\-train \-\-cover=k=64,d=8 FILEs\fR\.
|
|||||||
If \fIsteps\fR is not specified, the default value of 32 is used\. If \fIk\fR is not specified, the \fIk\fR values in [16, 2048] are checked for each value of \fId\fR\. If \fId\fR is not specified, the values checked are [6, 8, \.\.\., 16]\.
|
If \fIsteps\fR is not specified, the default value of 32 is used\. If \fIk\fR is not specified, the \fIk\fR values in [16, 2048] are checked for each value of \fId\fR\. If \fId\fR is not specified, the values checked are [6, 8, \.\.\., 16]\.
|
||||||
.
|
.
|
||||||
.IP
|
.IP
|
||||||
Runs the cover dictionary builder for each parameter set and saves the optimal parameters and dictionary\. Prints the optimal parameters and writes the optimal dictionary to the output file\. Supports multithreading if \fBzstd\fR is compiled with threading support\.
|
Runs the cover dictionary builder for each parameter set and saves the optimal parameters and dictionary\. Prints optimal parameters and writes optimal dictionary into output file\. Supports multithreading if \fBzstd\fR is compiled with threading support\.
|
||||||
.
|
.
|
||||||
.IP
|
.IP
|
||||||
The parameter \fIk\fR is more sensitive than \fId\fR, and is faster to optimize over\. Suggested use is to run with a \fIsteps\fR <= 32 with neither \fIk\fR nor \fId\fR set\. Once it completes, use the value of \fId\fR it selects with a higher \fIsteps\fR (in the range [256, 1024])\.
|
The parameter \fIk\fR is more sensitive than \fId\fR, and is faster to optimize over\. Suggested use is to run with a \fIsteps\fR <= 32 with neither \fIk\fR nor \fId\fR set\. Once it completes, use the value of \fId\fR it selects with a higher \fIsteps\fR (in the range [256, 1024])\.
|
||||||
.
|
.
|
||||||
.IP
|
.IP
|
||||||
|
Examples :
|
||||||
|
.
|
||||||
|
.IP
|
||||||
\fBzstd \-\-train \-\-optimize\-cover FILEs\fR
|
\fBzstd \-\-train \-\-optimize\-cover FILEs\fR
|
||||||
.
|
.
|
||||||
.br
|
.IP
|
||||||
\fBzstd \-\-train \-\-optimize\-cover=d=d,steps=512 FILEs\fR
|
\fBzstd \-\-train \-\-optimize\-cover=d=d,steps=512 FILEs\fR
|
||||||
.
|
.
|
||||||
.SH "BENCHMARK"
|
.SH "BENCHMARK"
|
||||||
@@ -230,9 +236,6 @@ set process priority to real\-time
|
|||||||
.
|
.
|
||||||
.SH "ADVANCED COMPRESSION OPTIONS"
|
.SH "ADVANCED COMPRESSION OPTIONS"
|
||||||
.
|
.
|
||||||
.SS "\-B#:"
|
|
||||||
Select the size of each compression job\. This parameter is available only when multi\-threading is enabled\. Default value is \fB4 * windowSize\fR, which means it varies depending on compression level\. \fB\-B#\fR makes it possible to select a custom value\. Note that job size must respect a minimum value which is enforced transparently\. This minimum is either 1 MB, or \fBoverlapSize\fR, whichever is largest\.
|
|
||||||
.
|
|
||||||
.SS "\-\-zstd[=options]:"
|
.SS "\-\-zstd[=options]:"
|
||||||
\fBzstd\fR provides 22 predefined compression levels\. The selected or default predefined compression level can be changed with advanced compression options\. The \fIoptions\fR are provided as a comma\-separated list\. You may specify only the options you want to change and the rest will be taken from the selected or default compression level\. The list of available \fIoptions\fR:
|
\fBzstd\fR provides 22 predefined compression levels\. The selected or default predefined compression level can be changed with advanced compression options\. The \fIoptions\fR are provided as a comma\-separated list\. You may specify only the options you want to change and the rest will be taken from the selected or default compression level\. The list of available \fIoptions\fR:
|
||||||
.
|
.
|
||||||
@@ -307,6 +310,9 @@ Determine \fBoverlapSize\fR, amount of data reloaded from previous job\. This pa
|
|||||||
.IP
|
.IP
|
||||||
The minimum \fIovlog\fR is 0, and the maximum is 9\. 0 means "no overlap", hence completely independent jobs\. 9 means "full overlap", meaning up to \fBwindowSize\fR is reloaded from previous job\. Reducing \fIovlog\fR by 1 reduces the amount of reload by a factor 2\. Default \fIovlog\fR is 6, which means "reload \fBwindowSize / 8\fR"\. Exception : the maximum compression level (22) has a default \fIovlog\fR of 9\.
|
The minimum \fIovlog\fR is 0, and the maximum is 9\. 0 means "no overlap", hence completely independent jobs\. 9 means "full overlap", meaning up to \fBwindowSize\fR is reloaded from previous job\. Reducing \fIovlog\fR by 1 reduces the amount of reload by a factor 2\. Default \fIovlog\fR is 6, which means "reload \fBwindowSize / 8\fR"\. Exception : the maximum compression level (22) has a default \fIovlog\fR of 9\.
|
||||||
.
|
.
|
||||||
|
.SS "\-B#:"
|
||||||
|
Select the size of each compression job\. This parameter is available only when multi\-threading is enabled\. Default value is \fB4 * windowSize\fR, which means it varies depending on compression level\. \fB\-B#\fR makes it possible to select a custom value\. Note that job size must respect a minimum value which is enforced transparently\. This minimum is either 1 MB, or \fBoverlapSize\fR, whichever is largest\.
|
||||||
|
.
|
||||||
.SS "Example"
|
.SS "Example"
|
||||||
The following parameters sets advanced compression options to those of predefined level 19 for files bigger than 256 KB:
|
The following parameters sets advanced compression options to those of predefined level 19 for files bigger than 256 KB:
|
||||||
.
|
.
|
||||||
|
|||||||
+25
-20
@@ -1,10 +1,12 @@
|
|||||||
zstd(1) -- zstd, unzstd, zstdcat - Compress or decompress .zst files
|
zstd(1) -- zstd, zstdmt, unzstd, zstdcat - Compress or decompress .zst files
|
||||||
====================================================================
|
============================================================================
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
|
|
||||||
`zstd` [*OPTIONS*] [-|<INPUT-FILE>] [-o <OUTPUT-FILE>]
|
`zstd` [*OPTIONS*] [-|_INPUT-FILE_] [-o _OUTPUT-FILE_]
|
||||||
|
|
||||||
|
`zstdmt` is equivalent to `zstd -T0`
|
||||||
|
|
||||||
`unzstd` is equivalent to `zstd -d`
|
`unzstd` is equivalent to `zstd -d`
|
||||||
|
|
||||||
@@ -99,9 +101,10 @@ the last one takes effect.
|
|||||||
* `--ultra`:
|
* `--ultra`:
|
||||||
unlocks high compression levels 20+ (maximum 22), using a lot more memory.
|
unlocks high compression levels 20+ (maximum 22), using a lot more memory.
|
||||||
Note that decompression will also require more memory when using these levels.
|
Note that decompression will also require more memory when using these levels.
|
||||||
* `-T#`:
|
* `-T#`, `--threads=#`:
|
||||||
Compress using # threads (default: 1).
|
Compress using `#` threads (default: 1).
|
||||||
This modifier is only available if `zstd` was compiled with multithreading support.
|
If `#` is 0, attempt to detect and use the number of physical CPU cores.
|
||||||
|
This modifier does nothing if `zstd` is compiled without multithread support.
|
||||||
* `-D file`:
|
* `-D file`:
|
||||||
use `file` as Dictionary to compress or decompress FILE(s)
|
use `file` as Dictionary to compress or decompress FILE(s)
|
||||||
* `--nodictID`:
|
* `--nodictID`:
|
||||||
@@ -109,7 +112,7 @@ the last one takes effect.
|
|||||||
The decoder will have to rely on implicit knowledge about which dictionary to use,
|
The decoder will have to rely on implicit knowledge about which dictionary to use,
|
||||||
it won't be able to check if it's correct.
|
it won't be able to check if it's correct.
|
||||||
* `-o file`:
|
* `-o file`:
|
||||||
save result into `file` (only possible with a single INPUT-FILE)
|
save result into `file` (only possible with a single _INPUT-FILE_)
|
||||||
* `-f`, `--force`:
|
* `-f`, `--force`:
|
||||||
overwrite output without prompting, and (de)compress symbolic links
|
overwrite output without prompting, and (de)compress symbolic links
|
||||||
* `-c`, `--stdout`:
|
* `-c`, `--stdout`:
|
||||||
@@ -160,7 +163,7 @@ Typical gains range from 10% (at 64KB) to x5 better (at <1KB).
|
|||||||
and weight typically 100x the target dictionary size
|
and weight typically 100x the target dictionary size
|
||||||
(for example, 10 MB for a 100 KB dictionary).
|
(for example, 10 MB for a 100 KB dictionary).
|
||||||
* `-o file`:
|
* `-o file`:
|
||||||
dictionary saved into `file` (default: dictionary)
|
dictionary saved into `file` (default name: dictionary)
|
||||||
* `--maxdict=#`:
|
* `--maxdict=#`:
|
||||||
limit dictionary to specified size (default : (112640)
|
limit dictionary to specified size (default : (112640)
|
||||||
* `--dictID=#`:
|
* `--dictID=#`:
|
||||||
@@ -194,9 +197,9 @@ Typical gains range from 10% (at 64KB) to x5 better (at <1KB).
|
|||||||
value of _d_.
|
value of _d_.
|
||||||
If _d_ is not specified, the values checked are [6, 8, ..., 16].
|
If _d_ is not specified, the values checked are [6, 8, ..., 16].
|
||||||
|
|
||||||
Runs the cover dictionary builder for each parameter set and saves the
|
Runs the cover dictionary builder for each parameter set
|
||||||
optimal parameters and dictionary.
|
and saves the optimal parameters and dictionary.
|
||||||
Prints the optimal parameters and writes the optimal dictionary to the output file.
|
Prints optimal parameters and writes optimal dictionary into output file.
|
||||||
Supports multithreading if `zstd` is compiled with threading support.
|
Supports multithreading if `zstd` is compiled with threading support.
|
||||||
|
|
||||||
The parameter _k_ is more sensitive than _d_, and is faster to optimize over.
|
The parameter _k_ is more sensitive than _d_, and is faster to optimize over.
|
||||||
@@ -204,7 +207,10 @@ Typical gains range from 10% (at 64KB) to x5 better (at <1KB).
|
|||||||
Once it completes, use the value of _d_ it selects with a higher _steps_
|
Once it completes, use the value of _d_ it selects with a higher _steps_
|
||||||
(in the range [256, 1024]).
|
(in the range [256, 1024]).
|
||||||
|
|
||||||
`zstd --train --optimize-cover FILEs` <br />
|
Examples :
|
||||||
|
|
||||||
|
`zstd --train --optimize-cover FILEs`
|
||||||
|
|
||||||
`zstd --train --optimize-cover=d=d,steps=512 FILEs`
|
`zstd --train --optimize-cover=d=d,steps=512 FILEs`
|
||||||
|
|
||||||
|
|
||||||
@@ -225,14 +231,6 @@ BENCHMARK
|
|||||||
|
|
||||||
ADVANCED COMPRESSION OPTIONS
|
ADVANCED COMPRESSION OPTIONS
|
||||||
----------------------------
|
----------------------------
|
||||||
### -B#:
|
|
||||||
Select the size of each compression job.
|
|
||||||
This parameter is available only when multi-threading is enabled.
|
|
||||||
Default value is `4 * windowSize`, which means it varies depending on compression level.
|
|
||||||
`-B#` makes it possible to select a custom value.
|
|
||||||
Note that job size must respect a minimum value which is enforced transparently.
|
|
||||||
This minimum is either 1 MB, or `overlapSize`, whichever is largest.
|
|
||||||
|
|
||||||
### --zstd[=options]:
|
### --zstd[=options]:
|
||||||
`zstd` provides 22 predefined compression levels.
|
`zstd` provides 22 predefined compression levels.
|
||||||
The selected or default predefined compression level can be changed with
|
The selected or default predefined compression level can be changed with
|
||||||
@@ -315,6 +313,13 @@ The list of available _options_:
|
|||||||
Default _ovlog_ is 6, which means "reload `windowSize / 8`".
|
Default _ovlog_ is 6, which means "reload `windowSize / 8`".
|
||||||
Exception : the maximum compression level (22) has a default _ovlog_ of 9.
|
Exception : the maximum compression level (22) has a default _ovlog_ of 9.
|
||||||
|
|
||||||
|
### -B#:
|
||||||
|
Select the size of each compression job.
|
||||||
|
This parameter is available only when multi-threading is enabled.
|
||||||
|
Default value is `4 * windowSize`, which means it varies depending on compression level.
|
||||||
|
`-B#` makes it possible to select a custom value.
|
||||||
|
Note that job size must respect a minimum value which is enforced transparently.
|
||||||
|
This minimum is either 1 MB, or `overlapSize`, whichever is largest.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
The following parameters sets advanced compression options to those of
|
The following parameters sets advanced compression options to those of
|
||||||
|
|||||||
@@ -49,6 +49,7 @@
|
|||||||
#define AUTHOR "Yann Collet"
|
#define AUTHOR "Yann Collet"
|
||||||
#define WELCOME_MESSAGE "*** %s %i-bits %s, by %s ***\n", COMPRESSOR_NAME, (int)(sizeof(size_t)*8), ZSTD_VERSION, AUTHOR
|
#define WELCOME_MESSAGE "*** %s %i-bits %s, by %s ***\n", COMPRESSOR_NAME, (int)(sizeof(size_t)*8), ZSTD_VERSION, AUTHOR
|
||||||
|
|
||||||
|
#define ZSTD_ZSTDMT "zstdmt"
|
||||||
#define ZSTD_UNZSTD "unzstd"
|
#define ZSTD_UNZSTD "unzstd"
|
||||||
#define ZSTD_CAT "zstdcat"
|
#define ZSTD_CAT "zstdcat"
|
||||||
#define ZSTD_GZ "gzip"
|
#define ZSTD_GZ "gzip"
|
||||||
@@ -343,6 +344,7 @@ int main(int argCount, const char* argv[])
|
|||||||
programName = lastNameFromPath(programName);
|
programName = lastNameFromPath(programName);
|
||||||
|
|
||||||
/* preset behaviors */
|
/* preset behaviors */
|
||||||
|
if (exeNameMatch(programName, ZSTD_ZSTDMT)) nbThreads=0;
|
||||||
if (exeNameMatch(programName, ZSTD_UNZSTD)) operation=zom_decompress;
|
if (exeNameMatch(programName, ZSTD_UNZSTD)) operation=zom_decompress;
|
||||||
if (exeNameMatch(programName, ZSTD_CAT)) { operation=zom_decompress; forceStdout=1; FIO_overwriteMode(); outFileName=stdoutmark; g_displayLevel=1; }
|
if (exeNameMatch(programName, ZSTD_CAT)) { operation=zom_decompress; forceStdout=1; FIO_overwriteMode(); outFileName=stdoutmark; g_displayLevel=1; }
|
||||||
if (exeNameMatch(programName, ZSTD_GZ)) { suffix = GZ_EXTENSION; FIO_setCompressionType(FIO_gzipCompression); FIO_setRemoveSrcFile(1); } /* behave like gzip */
|
if (exeNameMatch(programName, ZSTD_GZ)) { suffix = GZ_EXTENSION; FIO_setCompressionType(FIO_gzipCompression); FIO_setRemoveSrcFile(1); } /* behave like gzip */
|
||||||
@@ -418,6 +420,7 @@ int main(int argCount, const char* argv[])
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (longCommandWArg(&argument, "--threads=")) { nbThreads = readU32FromChar(&argument); continue; }
|
||||||
if (longCommandWArg(&argument, "--memlimit=")) { memLimit = readU32FromChar(&argument); continue; }
|
if (longCommandWArg(&argument, "--memlimit=")) { memLimit = readU32FromChar(&argument); continue; }
|
||||||
if (longCommandWArg(&argument, "--memory=")) { memLimit = readU32FromChar(&argument); continue; }
|
if (longCommandWArg(&argument, "--memory=")) { memLimit = readU32FromChar(&argument); continue; }
|
||||||
if (longCommandWArg(&argument, "--memlimit-decompress=")) { memLimit = readU32FromChar(&argument); continue; }
|
if (longCommandWArg(&argument, "--memlimit-decompress=")) { memLimit = readU32FromChar(&argument); continue; }
|
||||||
@@ -602,6 +605,11 @@ int main(int argCount, const char* argv[])
|
|||||||
DISPLAYLEVEL(4, "PLATFORM_POSIX_VERSION defined: %ldL\n", (long) PLATFORM_POSIX_VERSION);
|
DISPLAYLEVEL(4, "PLATFORM_POSIX_VERSION defined: %ldL\n", (long) PLATFORM_POSIX_VERSION);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (nbThreads == 0) {
|
||||||
|
/* try to guess */
|
||||||
|
nbThreads = UTIL_countPhysicalCores();
|
||||||
|
DISPLAYLEVEL(3, "Note: %d physical core(s) detected\n", nbThreads);
|
||||||
|
}
|
||||||
|
|
||||||
g_utilDisplayLevel = g_displayLevel;
|
g_utilDisplayLevel = g_displayLevel;
|
||||||
if (!followLinks) {
|
if (!followLinks) {
|
||||||
|
|||||||
+5
-1
@@ -26,7 +26,10 @@ PYTHON ?= python3
|
|||||||
TESTARTEFACT := versionsTest namespaceTest
|
TESTARTEFACT := versionsTest namespaceTest
|
||||||
|
|
||||||
|
|
||||||
CPPFLAGS+= -I$(ZSTDDIR) -I$(ZSTDDIR)/common -I$(ZSTDDIR)/compress -I$(ZSTDDIR)/dictBuilder -I$(ZSTDDIR)/deprecated -I$(PRGDIR)
|
DEBUGFLAG= -DZSTD_DEBUG=1
|
||||||
|
CPPFLAGS+= -I$(ZSTDDIR) -I$(ZSTDDIR)/common -I$(ZSTDDIR)/compress \
|
||||||
|
-I$(ZSTDDIR)/dictBuilder -I$(ZSTDDIR)/deprecated -I$(PRGDIR) \
|
||||||
|
$(DEBUGFLAG)
|
||||||
CFLAGS ?= -O3
|
CFLAGS ?= -O3
|
||||||
CFLAGS += -g -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow \
|
CFLAGS += -g -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow \
|
||||||
-Wstrict-aliasing=1 -Wswitch-enum -Wdeclaration-after-statement \
|
-Wstrict-aliasing=1 -Wswitch-enum -Wdeclaration-after-statement \
|
||||||
@@ -154,6 +157,7 @@ zstreamtest-dll : $(ZSTDDIR)/common/xxhash.c $(PRGDIR)/datagen.c zstreamtest.c
|
|||||||
$(MAKE) -C $(ZSTDDIR) libzstd
|
$(MAKE) -C $(ZSTDDIR) libzstd
|
||||||
$(CC) $(CPPFLAGS) $(CFLAGS) $^ $(LDFLAGS) -o $@$(EXT)
|
$(CC) $(CPPFLAGS) $(CFLAGS) $^ $(LDFLAGS) -o $@$(EXT)
|
||||||
|
|
||||||
|
paramgrill : DEBUGFLAG =
|
||||||
paramgrill : $(ZSTD_FILES) $(PRGDIR)/datagen.c paramgrill.c
|
paramgrill : $(ZSTD_FILES) $(PRGDIR)/datagen.c paramgrill.c
|
||||||
$(CC) $(FLAGS) $^ -lm -o $@$(EXT)
|
$(CC) $(FLAGS) $^ -lm -o $@$(EXT)
|
||||||
|
|
||||||
|
|||||||
+24
-15
@@ -406,7 +406,6 @@ static int basicUnitTests(U32 seed, double compressibility)
|
|||||||
|
|
||||||
DISPLAYLEVEL(4, "test%3i : compress with preprocessed dictionary : ", testNb++);
|
DISPLAYLEVEL(4, "test%3i : compress with preprocessed dictionary : ", testNb++);
|
||||||
{ ZSTD_parameters params = ZSTD_getParams(1, CNBuffSize, dictSize);
|
{ ZSTD_parameters params = ZSTD_getParams(1, CNBuffSize, dictSize);
|
||||||
params.fParams.contentSizeFlag = 0;
|
|
||||||
{ ZSTD_customMem customMem = { NULL, NULL, NULL };
|
{ ZSTD_customMem customMem = { NULL, NULL, NULL };
|
||||||
ZSTD_CDict* cdict = ZSTD_createCDict_advanced(dictBuffer, dictSize, 1, params, customMem);
|
ZSTD_CDict* cdict = ZSTD_createCDict_advanced(dictBuffer, dictSize, 1, params, customMem);
|
||||||
cSize = ZSTD_compress_usingCDict(cctx, compressedBuffer, ZSTD_compressBound(CNBuffSize),
|
cSize = ZSTD_compress_usingCDict(cctx, compressedBuffer, ZSTD_compressBound(CNBuffSize),
|
||||||
@@ -423,12 +422,6 @@ static int basicUnitTests(U32 seed, double compressibility)
|
|||||||
}
|
}
|
||||||
DISPLAYLEVEL(4, "OK \n");
|
DISPLAYLEVEL(4, "OK \n");
|
||||||
|
|
||||||
DISPLAYLEVEL(4, "test%3i : frame should not have content size : ", testNb++);
|
|
||||||
{ unsigned long long const contentSize = ZSTD_findDecompressedSize(compressedBuffer, cSize);
|
|
||||||
if (contentSize != ZSTD_CONTENTSIZE_UNKNOWN) goto _output_error; /* cdict contentSizeFlag not used */
|
|
||||||
}
|
|
||||||
DISPLAYLEVEL(4, "OK \n");
|
|
||||||
|
|
||||||
DISPLAYLEVEL(4, "test%3i : frame built with dictionary should be decompressible : ", testNb++);
|
DISPLAYLEVEL(4, "test%3i : frame built with dictionary should be decompressible : ", testNb++);
|
||||||
CHECKPLUS(r, ZSTD_decompress_usingDict(dctx,
|
CHECKPLUS(r, ZSTD_decompress_usingDict(dctx,
|
||||||
decodedBuffer, CNBuffSize,
|
decodedBuffer, CNBuffSize,
|
||||||
@@ -524,9 +517,9 @@ static int basicUnitTests(U32 seed, double compressibility)
|
|||||||
|
|
||||||
/* Decompression defense tests */
|
/* Decompression defense tests */
|
||||||
DISPLAYLEVEL(4, "test%3i : Check input length for magic number : ", testNb++);
|
DISPLAYLEVEL(4, "test%3i : Check input length for magic number : ", testNb++);
|
||||||
{ size_t const r = ZSTD_decompress(decodedBuffer, CNBuffSize, CNBuffer, 3);
|
{ size_t const r = ZSTD_decompress(decodedBuffer, CNBuffSize, CNBuffer, 3); /* too small input */
|
||||||
if (!ZSTD_isError(r)) goto _output_error;
|
if (!ZSTD_isError(r)) goto _output_error;
|
||||||
if (r != (size_t)-ZSTD_error_srcSize_wrong) goto _output_error; }
|
if (ZSTD_getErrorCode(r) != ZSTD_error_srcSize_wrong) goto _output_error; }
|
||||||
DISPLAYLEVEL(4, "OK \n");
|
DISPLAYLEVEL(4, "OK \n");
|
||||||
|
|
||||||
DISPLAYLEVEL(4, "test%3i : Check magic Number : ", testNb++);
|
DISPLAYLEVEL(4, "test%3i : Check magic Number : ", testNb++);
|
||||||
@@ -535,6 +528,24 @@ static int basicUnitTests(U32 seed, double compressibility)
|
|||||||
if (!ZSTD_isError(r)) goto _output_error; }
|
if (!ZSTD_isError(r)) goto _output_error; }
|
||||||
DISPLAYLEVEL(4, "OK \n");
|
DISPLAYLEVEL(4, "OK \n");
|
||||||
|
|
||||||
|
/* content size verification test */
|
||||||
|
DISPLAYLEVEL(4, "test%3i : Content size verification : ", testNb++);
|
||||||
|
{ ZSTD_CCtx* const cctx = ZSTD_createCCtx();
|
||||||
|
size_t const srcSize = 5000;
|
||||||
|
size_t const wrongSrcSize = (srcSize + 1000);
|
||||||
|
ZSTD_parameters params = ZSTD_getParams(1, wrongSrcSize, 0);
|
||||||
|
params.fParams.contentSizeFlag = 1;
|
||||||
|
{ size_t const result = ZSTD_compressBegin_advanced(cctx, NULL, 0, params, wrongSrcSize);
|
||||||
|
if (ZSTD_isError(result)) goto _output_error;
|
||||||
|
}
|
||||||
|
{ size_t const result = ZSTD_compressEnd(cctx, decodedBuffer, CNBuffSize, CNBuffer, srcSize);
|
||||||
|
if (!ZSTD_isError(result)) goto _output_error;
|
||||||
|
if (ZSTD_getErrorCode(result) != ZSTD_error_srcSize_wrong) goto _output_error;
|
||||||
|
DISPLAYLEVEL(4, "OK : %s \n", ZSTD_getErrorName(result));
|
||||||
|
}
|
||||||
|
ZSTD_freeCCtx(cctx);
|
||||||
|
}
|
||||||
|
|
||||||
/* block API tests */
|
/* block API tests */
|
||||||
{ ZSTD_CCtx* const cctx = ZSTD_createCCtx();
|
{ ZSTD_CCtx* const cctx = ZSTD_createCCtx();
|
||||||
static const size_t dictSize = 65 KB;
|
static const size_t dictSize = 65 KB;
|
||||||
@@ -788,12 +799,10 @@ static int fuzzerTests(U32 seed, U32 nbTests, unsigned startTest, U32 const maxD
|
|||||||
crcOrig = XXH64(sampleBuffer, sampleSize, 0);
|
crcOrig = XXH64(sampleBuffer, sampleSize, 0);
|
||||||
|
|
||||||
/* compression tests */
|
/* compression tests */
|
||||||
{
|
{ unsigned const cLevel =
|
||||||
unsigned const cLevel =
|
( FUZ_rand(&lseed) %
|
||||||
(FUZ_rand(&lseed) %
|
(ZSTD_maxCLevel() - (FUZ_highbit32((U32)sampleSize) / cLevelLimiter)) )
|
||||||
(ZSTD_maxCLevel() -
|
+ 1;
|
||||||
(FUZ_highbit32((U32)sampleSize) / cLevelLimiter))) +
|
|
||||||
1;
|
|
||||||
cSize = ZSTD_compressCCtx(ctx, cBuffer, cBufferSize, sampleBuffer, sampleSize, cLevel);
|
cSize = ZSTD_compressCCtx(ctx, cBuffer, cBufferSize, sampleBuffer, sampleSize, cLevel);
|
||||||
CHECK(ZSTD_isError(cSize), "ZSTD_compressCCtx failed : %s", ZSTD_getErrorName(cSize));
|
CHECK(ZSTD_isError(cSize), "ZSTD_compressCCtx failed : %s", ZSTD_getErrorName(cSize));
|
||||||
|
|
||||||
|
|||||||
+5
-4
@@ -58,6 +58,11 @@ static const int g_maxNbVariations = 64;
|
|||||||
**************************************/
|
**************************************/
|
||||||
#define DISPLAY(...) fprintf(stderr, __VA_ARGS__)
|
#define DISPLAY(...) fprintf(stderr, __VA_ARGS__)
|
||||||
|
|
||||||
|
#undef MIN
|
||||||
|
#undef MAX
|
||||||
|
#define MIN(a,b) ( (a) < (b) ? (a) : (b) )
|
||||||
|
#define MAX(a,b) ( (a) > (b) ? (a) : (b) )
|
||||||
|
|
||||||
|
|
||||||
/*-************************************
|
/*-************************************
|
||||||
* Benchmark Parameters
|
* Benchmark Parameters
|
||||||
@@ -145,8 +150,6 @@ typedef struct
|
|||||||
} blockParam_t;
|
} blockParam_t;
|
||||||
|
|
||||||
|
|
||||||
#define MIN(a,b) ( (a) < (b) ? (a) : (b) )
|
|
||||||
|
|
||||||
static size_t BMK_benchParam(BMK_result_t* resultPtr,
|
static size_t BMK_benchParam(BMK_result_t* resultPtr,
|
||||||
const void* srcBuffer, size_t srcSize,
|
const void* srcBuffer, size_t srcSize,
|
||||||
ZSTD_CCtx* ctx,
|
ZSTD_CCtx* ctx,
|
||||||
@@ -513,8 +516,6 @@ static BYTE g_alreadyTested[PARAMTABLESIZE] = {0}; /* init to zero */
|
|||||||
g_alreadyTested[(XXH64(sanitizeParams(p), sizeof(p), 0) >> 3) & PARAMTABLEMASK]
|
g_alreadyTested[(XXH64(sanitizeParams(p), sizeof(p), 0) >> 3) & PARAMTABLEMASK]
|
||||||
|
|
||||||
|
|
||||||
#define MAX(a,b) ( (a) > (b) ? (a) : (b) )
|
|
||||||
|
|
||||||
static void playAround(FILE* f, winnerInfo_t* winners,
|
static void playAround(FILE* f, winnerInfo_t* winners,
|
||||||
ZSTD_compressionParameters params,
|
ZSTD_compressionParameters params,
|
||||||
const void* srcBuffer, size_t srcSize,
|
const void* srcBuffer, size_t srcSize,
|
||||||
|
|||||||
+51
-3
@@ -11,6 +11,7 @@ roundTripTest() {
|
|||||||
local_p="$2"
|
local_p="$2"
|
||||||
else
|
else
|
||||||
local_c="$2"
|
local_c="$2"
|
||||||
|
local_p=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rm -f tmp1 tmp2
|
rm -f tmp1 tmp2
|
||||||
@@ -20,6 +21,23 @@ roundTripTest() {
|
|||||||
$DIFF -q tmp1 tmp2
|
$DIFF -q tmp1 tmp2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fileRoundTripTest() {
|
||||||
|
if [ -n "$3" ]; then
|
||||||
|
local_c="$3"
|
||||||
|
local_p="$2"
|
||||||
|
else
|
||||||
|
local_c="$2"
|
||||||
|
local_p=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f tmp.zstd tmp.md5.1 tmp.md5.2
|
||||||
|
$ECHO "fileRoundTripTest: ./datagen $1 $local_p > tmp && $ZSTD -v$local_c -c tmp | $ZSTD -d"
|
||||||
|
./datagen $1 $local_p > tmp
|
||||||
|
cat tmp | $MD5SUM > tmp.md5.1
|
||||||
|
$ZSTD --ultra -v$local_c -c tmp | $ZSTD -d | $MD5SUM > tmp.md5.2
|
||||||
|
$DIFF -q tmp.md5.1 tmp.md5.2
|
||||||
|
}
|
||||||
|
|
||||||
isTerminal=false
|
isTerminal=false
|
||||||
if [ -t 0 ] && [ -t 1 ]
|
if [ -t 0 ] && [ -t 1 ]
|
||||||
then
|
then
|
||||||
@@ -27,12 +45,11 @@ then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
isWindows=false
|
isWindows=false
|
||||||
ECHO="echo"
|
ECHO="echo -e"
|
||||||
INTOVOID="/dev/null"
|
INTOVOID="/dev/null"
|
||||||
case "$OS" in
|
case "$OS" in
|
||||||
Windows*)
|
Windows*)
|
||||||
isWindows=true
|
isWindows=true
|
||||||
ECHO="echo -e"
|
|
||||||
INTOVOID="NUL"
|
INTOVOID="NUL"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -49,11 +66,17 @@ case "$UNAME" in
|
|||||||
SunOS) DIFF="gdiff" ;;
|
SunOS) DIFF="gdiff" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
|
||||||
$ECHO "\nStarting playTests.sh isWindows=$isWindows ZSTD='$ZSTD'"
|
$ECHO "\nStarting playTests.sh isWindows=$isWindows ZSTD='$ZSTD'"
|
||||||
|
|
||||||
[ -n "$ZSTD" ] || die "ZSTD variable must be defined!"
|
[ -n "$ZSTD" ] || die "ZSTD variable must be defined!"
|
||||||
|
|
||||||
|
if [ -n "$(echo hello | $ZSTD -v -T2 2>&1 > $INTOVOID | grep 'multi-threading is disabled')" ]
|
||||||
|
then
|
||||||
|
hasMT=""
|
||||||
|
else
|
||||||
|
hasMT="true"
|
||||||
|
fi
|
||||||
|
|
||||||
$ECHO "\n**** simple tests **** "
|
$ECHO "\n**** simple tests **** "
|
||||||
|
|
||||||
./datagen > tmp
|
./datagen > tmp
|
||||||
@@ -441,6 +464,19 @@ roundTripTest -g519K 6 # greedy, hash chain
|
|||||||
roundTripTest -g517K 16 # btlazy2
|
roundTripTest -g517K 16 # btlazy2
|
||||||
roundTripTest -g516K 19 # btopt
|
roundTripTest -g516K 19 # btopt
|
||||||
|
|
||||||
|
fileRoundTripTest -g500K
|
||||||
|
|
||||||
|
if [ -n "$hasMT" ]
|
||||||
|
then
|
||||||
|
$ECHO "\n**** zstdmt round-trip tests **** "
|
||||||
|
roundTripTest -g4M "1 -T0"
|
||||||
|
roundTripTest -g8M "3 -T2"
|
||||||
|
roundTripTest -g8000K "2 --threads=2"
|
||||||
|
fileRoundTripTest -g4M "19 -T2 -B1M"
|
||||||
|
else
|
||||||
|
$ECHO "\n**** no multithreading, skipping zstdmt tests **** "
|
||||||
|
fi
|
||||||
|
|
||||||
rm tmp*
|
rm tmp*
|
||||||
|
|
||||||
if [ "$1" != "--test-large-data" ]; then
|
if [ "$1" != "--test-large-data" ]; then
|
||||||
@@ -476,4 +512,16 @@ roundTripTest -g50000000 -P94 19
|
|||||||
roundTripTest -g99000000 -P99 20
|
roundTripTest -g99000000 -P99 20
|
||||||
roundTripTest -g6000000000 -P99 1
|
roundTripTest -g6000000000 -P99 1
|
||||||
|
|
||||||
|
fileRoundTripTest -g4193M -P99 1
|
||||||
|
|
||||||
|
if [ -n "$hasMT" ]
|
||||||
|
then
|
||||||
|
$ECHO "\n**** zstdmt long round-trip tests **** "
|
||||||
|
roundTripTest -g99000000 -P99 "20 -T2"
|
||||||
|
roundTripTest -g6000000000 -P99 "1 -T2"
|
||||||
|
fileRoundTripTest -g4193M -P98 " -T0"
|
||||||
|
else
|
||||||
|
$ECHO "\n**** no multithreading, skipping zstdmt tests **** "
|
||||||
|
fi
|
||||||
|
|
||||||
rm tmp*
|
rm tmp*
|
||||||
|
|||||||
+42
-9
@@ -131,7 +131,7 @@ static buffer_t FUZ_createDictionary(const void* src, size_t srcSize, size_t blo
|
|||||||
}
|
}
|
||||||
{ size_t const dictSize = ZDICT_trainFromBuffer(dict.start, requestedDictSize, src, blockSizes, (unsigned)nbBlocks);
|
{ size_t const dictSize = ZDICT_trainFromBuffer(dict.start, requestedDictSize, src, blockSizes, (unsigned)nbBlocks);
|
||||||
free(blockSizes);
|
free(blockSizes);
|
||||||
if (ZDICT_isError(dictSize)) { free(dict.start); return (buffer_t){ NULL, 0, 0 }; }
|
if (ZDICT_isError(dictSize)) { free(dict.start); return g_nullBuffer; }
|
||||||
dict.size = requestedDictSize;
|
dict.size = requestedDictSize;
|
||||||
dict.filled = dictSize;
|
dict.filled = dictSize;
|
||||||
return dict; /* how to return dictSize ? */
|
return dict; /* how to return dictSize ? */
|
||||||
@@ -207,6 +207,16 @@ static int basicUnitTests(U32 seed, double compressibility, ZSTD_customMem custo
|
|||||||
DISPLAYLEVEL(3, "OK (%u bytes) \n", (U32)s);
|
DISPLAYLEVEL(3, "OK (%u bytes) \n", (U32)s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Attempt bad compression parameters */
|
||||||
|
DISPLAYLEVEL(3, "test%3i : use bad compression parameters : ", testNb++);
|
||||||
|
{ size_t r;
|
||||||
|
ZSTD_parameters params = ZSTD_getParams(1, 0, 0);
|
||||||
|
params.cParams.searchLength = 2;
|
||||||
|
r = ZSTD_initCStream_advanced(zc, NULL, 0, params, 0);
|
||||||
|
if (!ZSTD_isError(r)) goto _output_error;
|
||||||
|
DISPLAYLEVEL(3, "init error : %s \n", ZSTD_getErrorName(r));
|
||||||
|
}
|
||||||
|
|
||||||
/* skippable frame test */
|
/* skippable frame test */
|
||||||
DISPLAYLEVEL(3, "test%3i : decompress skippable frame : ", testNb++);
|
DISPLAYLEVEL(3, "test%3i : decompress skippable frame : ", testNb++);
|
||||||
ZSTD_initDStream_usingDict(zd, CNBuffer, 128 KB);
|
ZSTD_initDStream_usingDict(zd, CNBuffer, 128 KB);
|
||||||
@@ -438,10 +448,11 @@ static int basicUnitTests(U32 seed, double compressibility, ZSTD_customMem custo
|
|||||||
if (!ZSTD_isError(r)) goto _output_error; /* must fail : frame requires > 100 bytes */
|
if (!ZSTD_isError(r)) goto _output_error; /* must fail : frame requires > 100 bytes */
|
||||||
DISPLAYLEVEL(3, "OK (%s)\n", ZSTD_getErrorName(r)); }
|
DISPLAYLEVEL(3, "OK (%s)\n", ZSTD_getErrorName(r)); }
|
||||||
|
|
||||||
DISPLAYLEVEL(3, "test%3i : check dictionary used : ", testNb++);
|
DISPLAYLEVEL(3, "test%3i : dictionary compression with masked dictID : ", testNb++);
|
||||||
{ ZSTD_parameters params = ZSTD_getParams(1, CNBufferSize, dictionary.filled);
|
{ ZSTD_parameters params = ZSTD_getParams(1, CNBufferSize, dictionary.filled);
|
||||||
ZSTD_CDict* cdict;
|
ZSTD_CDict* cdict;
|
||||||
params.fParams.noDictIDFlag = 1;
|
params.fParams.noDictIDFlag = 1;
|
||||||
|
params.fParams.contentSizeFlag = 1; /* test contentSize, should be disabled with initCStream_usingCDict */
|
||||||
cdict = ZSTD_createCDict_advanced(dictionary.start, dictionary.filled, 1, params, customMem);
|
cdict = ZSTD_createCDict_advanced(dictionary.start, dictionary.filled, 1, params, customMem);
|
||||||
{ size_t const initError = ZSTD_initCStream_usingCDict(zc, cdict);
|
{ size_t const initError = ZSTD_initCStream_usingCDict(zc, cdict);
|
||||||
if (ZSTD_isError(initError)) goto _output_error; }
|
if (ZSTD_isError(initError)) goto _output_error; }
|
||||||
@@ -460,17 +471,37 @@ static int basicUnitTests(U32 seed, double compressibility, ZSTD_customMem custo
|
|||||||
cSize = outBuff.pos;
|
cSize = outBuff.pos;
|
||||||
ZSTD_freeCDict(cdict);
|
ZSTD_freeCDict(cdict);
|
||||||
DISPLAYLEVEL(3, "OK (%u bytes : %.2f%%)\n", (U32)cSize, (double)cSize/CNBufferSize*100);
|
DISPLAYLEVEL(3, "OK (%u bytes : %.2f%%)\n", (U32)cSize, (double)cSize/CNBufferSize*100);
|
||||||
|
|
||||||
{ size_t const r = ZSTD_decompress(decodedBuffer, CNBufferSize, compressedBuffer, cSize);
|
|
||||||
if (!ZSTD_isError(r)) goto _output_error; /* must fail : dictionary not used */
|
|
||||||
DISPLAYLEVEL(3, "OK (%s)\n", ZSTD_getErrorName(r)); }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unknown srcSize */
|
DISPLAYLEVEL(3, "test%3i : decompress without dictionary : ", testNb++);
|
||||||
|
{ size_t const r = ZSTD_decompress(decodedBuffer, CNBufferSize, compressedBuffer, cSize);
|
||||||
|
if (!ZSTD_isError(r)) goto _output_error; /* must fail : dictionary not used */
|
||||||
|
DISPLAYLEVEL(3, "OK (%s)\n", ZSTD_getErrorName(r));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Empty srcSize */
|
||||||
|
DISPLAYLEVEL(3, "test%3i : ZSTD_initCStream_advanced with pledgedSrcSize=0 and dict : ", testNb++);
|
||||||
|
{ ZSTD_parameters params = ZSTD_getParams(5, 0, 0);
|
||||||
|
params.fParams.contentSizeFlag = 1;
|
||||||
|
ZSTD_initCStream_advanced(zc, dictionary.start, dictionary.filled, params, 0);
|
||||||
|
} /* cstream advanced shall write content size = 0 */
|
||||||
|
inBuff.src = CNBuffer;
|
||||||
|
inBuff.size = 0;
|
||||||
|
inBuff.pos = 0;
|
||||||
|
outBuff.dst = compressedBuffer;
|
||||||
|
outBuff.size = compressedBufferSize;
|
||||||
|
outBuff.pos = 0;
|
||||||
|
if (ZSTD_isError(ZSTD_compressStream(zc, &outBuff, &inBuff))) goto _output_error;
|
||||||
|
if (ZSTD_endStream(zc, &outBuff) != 0) goto _output_error;
|
||||||
|
cSize = outBuff.pos;
|
||||||
|
if (ZSTD_findDecompressedSize(compressedBuffer, cSize) != 0) goto _output_error;
|
||||||
|
DISPLAYLEVEL(3, "OK \n");
|
||||||
|
|
||||||
DISPLAYLEVEL(3, "test%3i : pledgedSrcSize == 0 behaves properly : ", testNb++);
|
DISPLAYLEVEL(3, "test%3i : pledgedSrcSize == 0 behaves properly : ", testNb++);
|
||||||
{ ZSTD_parameters params = ZSTD_getParams(5, 0, 0);
|
{ ZSTD_parameters params = ZSTD_getParams(5, 0, 0);
|
||||||
params.fParams.contentSizeFlag = 1;
|
params.fParams.contentSizeFlag = 1;
|
||||||
ZSTD_initCStream_advanced(zc, NULL, 0, params, 0); } /* cstream advanced should write the 0 size field */
|
ZSTD_initCStream_advanced(zc, NULL, 0, params, 0);
|
||||||
|
} /* cstream advanced shall write content size = 0 */
|
||||||
inBuff.src = CNBuffer;
|
inBuff.src = CNBuffer;
|
||||||
inBuff.size = 0;
|
inBuff.size = 0;
|
||||||
inBuff.pos = 0;
|
inBuff.pos = 0;
|
||||||
@@ -941,6 +972,7 @@ static int fuzzerTests_MT(U32 seed, U32 nbTests, unsigned startTest, double comp
|
|||||||
params.fParams.checksumFlag = FUZ_rand(&lseed) & 1;
|
params.fParams.checksumFlag = FUZ_rand(&lseed) & 1;
|
||||||
params.fParams.noDictIDFlag = FUZ_rand(&lseed) & 1;
|
params.fParams.noDictIDFlag = FUZ_rand(&lseed) & 1;
|
||||||
params.fParams.contentSizeFlag = pledgedSrcSize>0;
|
params.fParams.contentSizeFlag = pledgedSrcSize>0;
|
||||||
|
DISPLAYLEVEL(5, "checksumFlag : %u \n", params.fParams.checksumFlag);
|
||||||
{ size_t const initError = ZSTDMT_initCStream_advanced(zc, dict, dictSize, params, pledgedSrcSize);
|
{ size_t const initError = ZSTDMT_initCStream_advanced(zc, dict, dictSize, params, pledgedSrcSize);
|
||||||
CHECK (ZSTD_isError(initError),"ZSTDMT_initCStream_advanced error : %s", ZSTD_getErrorName(initError)); }
|
CHECK (ZSTD_isError(initError),"ZSTDMT_initCStream_advanced error : %s", ZSTD_getErrorName(initError)); }
|
||||||
ZSTDMT_setMTCtxParameter(zc, ZSTDMT_p_overlapSectionLog, FUZ_rand(&lseed) % 12);
|
ZSTDMT_setMTCtxParameter(zc, ZSTDMT_p_overlapSectionLog, FUZ_rand(&lseed) % 12);
|
||||||
@@ -992,9 +1024,9 @@ static int fuzzerTests_MT(U32 seed, U32 nbTests, unsigned startTest, double comp
|
|||||||
CHECK (ZSTD_isError(remainingToFlush), "ZSTDMT_endStream error : %s", ZSTD_getErrorName(remainingToFlush));
|
CHECK (ZSTD_isError(remainingToFlush), "ZSTDMT_endStream error : %s", ZSTD_getErrorName(remainingToFlush));
|
||||||
DISPLAYLEVEL(5, "endStream : remainingToFlush : %u \n", (U32)remainingToFlush);
|
DISPLAYLEVEL(5, "endStream : remainingToFlush : %u \n", (U32)remainingToFlush);
|
||||||
} }
|
} }
|
||||||
DISPLAYLEVEL(5, "Frame completed \n");
|
|
||||||
crcOrig = XXH64_digest(&xxhState);
|
crcOrig = XXH64_digest(&xxhState);
|
||||||
cSize = outBuff.pos;
|
cSize = outBuff.pos;
|
||||||
|
DISPLAYLEVEL(5, "Frame completed : %u bytes \n", (U32)cSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* multi - fragments decompression test */
|
/* multi - fragments decompression test */
|
||||||
@@ -1015,6 +1047,7 @@ static int fuzzerTests_MT(U32 seed, U32 nbTests, unsigned startTest, double comp
|
|||||||
DISPLAYLEVEL(5, "ZSTD_decompressStream input %u bytes \n", (U32)readCSrcSize);
|
DISPLAYLEVEL(5, "ZSTD_decompressStream input %u bytes \n", (U32)readCSrcSize);
|
||||||
decompressionResult = ZSTD_decompressStream(zd, &outBuff, &inBuff);
|
decompressionResult = ZSTD_decompressStream(zd, &outBuff, &inBuff);
|
||||||
CHECK (ZSTD_isError(decompressionResult), "decompression error : %s", ZSTD_getErrorName(decompressionResult));
|
CHECK (ZSTD_isError(decompressionResult), "decompression error : %s", ZSTD_getErrorName(decompressionResult));
|
||||||
|
DISPLAYLEVEL(5, "inBuff.pos = %u \n", (U32)readCSrcSize);
|
||||||
}
|
}
|
||||||
CHECK (outBuff.pos != totalTestSize, "decompressed data : wrong size (%u != %u)", (U32)outBuff.pos, (U32)totalTestSize);
|
CHECK (outBuff.pos != totalTestSize, "decompressed data : wrong size (%u != %u)", (U32)outBuff.pos, (U32)totalTestSize);
|
||||||
CHECK (inBuff.pos != cSize, "compressed data should be fully read (%u != %u)", (U32)inBuff.pos, (U32)cSize);
|
CHECK (inBuff.pos != cSize, "compressed data should be fully read (%u != %u)", (U32)inBuff.pos, (U32)cSize);
|
||||||
|
|||||||
@@ -128,6 +128,11 @@ void BMK_SetBlockSize(size_t blockSize)
|
|||||||
/* ********************************************************
|
/* ********************************************************
|
||||||
* Bench functions
|
* Bench functions
|
||||||
**********************************************************/
|
**********************************************************/
|
||||||
|
#undef MIN
|
||||||
|
#undef MAX
|
||||||
|
#define MIN(a,b) ((a)<(b) ? (a) : (b))
|
||||||
|
#define MAX(a,b) ((a)>(b) ? (a) : (b))
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
z_const char* srcPtr;
|
z_const char* srcPtr;
|
||||||
@@ -142,9 +147,6 @@ typedef struct
|
|||||||
typedef enum { BMK_ZSTD, BMK_ZSTD_STREAM, BMK_ZLIB, BMK_ZWRAP_ZLIB, BMK_ZWRAP_ZSTD, BMK_ZLIB_REUSE, BMK_ZWRAP_ZLIB_REUSE, BMK_ZWRAP_ZSTD_REUSE } BMK_compressor;
|
typedef enum { BMK_ZSTD, BMK_ZSTD_STREAM, BMK_ZLIB, BMK_ZWRAP_ZLIB, BMK_ZWRAP_ZSTD, BMK_ZLIB_REUSE, BMK_ZWRAP_ZLIB_REUSE, BMK_ZWRAP_ZSTD_REUSE } BMK_compressor;
|
||||||
|
|
||||||
|
|
||||||
#define MIN(a,b) ((a)<(b) ? (a) : (b))
|
|
||||||
#define MAX(a,b) ((a)>(b) ? (a) : (b))
|
|
||||||
|
|
||||||
static int BMK_benchMem(z_const void* srcBuffer, size_t srcSize,
|
static int BMK_benchMem(z_const void* srcBuffer, size_t srcSize,
|
||||||
const char* displayName, int cLevel,
|
const char* displayName, int cLevel,
|
||||||
const size_t* fileSizes, U32 nbFiles,
|
const size_t* fileSizes, U32 nbFiles,
|
||||||
|
|||||||
Reference in New Issue
Block a user