diff --git a/.gitignore b/.gitignore index 6f792e615..796a696d3 100644 --- a/.gitignore +++ b/.gitignore @@ -34,4 +34,5 @@ _zstdbench/ googletest/ *.d -build/VS2010/zwrapbench/zwrapbench.vcxproj \ No newline at end of file +# Directories +bin/ diff --git a/build/.gitignore b/build/.gitignore index 51fed59bb..f03aac8b3 100644 --- a/build/.gitignore +++ b/build/.gitignore @@ -11,6 +11,7 @@ VS2005/ VS2008/ VS2010/bin/ +VS2010/zwrapbench/ VS2012/bin/ VS2013/bin/ VS2015/bin/ diff --git a/build/README.md b/build/README.md index 8dc67326b..c4abe9efd 100644 --- a/build/README.md +++ b/build/README.md @@ -21,3 +21,36 @@ The following projects are included with the zstd distribution: 6. Change `Debug` to `Release` and if you have 64-bit Windows change also `Win32` to `x64`. 7. Press F7 on keyboard or select `BUILD` from the menu bar and choose `Build Solution`. 8. If compilation will be fine a compiled executable will be in `projects\VS2010\bin\x64\Release\zstd.exe` + + +#### Projects available within zstd.sln + +The Visual Studio solution file `visual\VS2010\zstd.sln` contains many projects that will be compiled to the +`visual\VS2010\bin\$(Platform)_$(Configuration)` directory. For example `zstd` set to `x64` and +`Release` will be compiled to `visual\VS2010\bin\x64_Release\zstd.exe`. The solution file contains the +following projects: + +- `zstd` : Command Line Utility, supporting gzip-like arguments +- `datagen` : Synthetic and parametrable data generator, for tests +- `fullbench` : Precisely measure speed for each zstd inner functions +- `fuzzer` : Test tool, to check zstd integrity on target platform +- `libzstd` : A static ZSTD library compiled to `libzstd_static.lib` +- `libzstd-dll` : A dynamic ZSTD library (DLL) compiled to `libzstd.dll` with the import library `libzstd.lib` +- `fullbench-dll` : The fullbench program compiled with the import library; the executable requires ZSTD DLL + + +#### Using ZSTD DLL with Microsoft Visual C++ project + +The header file `lib\zstd.h` and the import library +`visual\VS2010\bin\$(Platform)_$(Configuration)\libzstd.lib` are required to compile +a project using Visual C++. + +1. The path to header files should be added to `Additional Include Directories` that can + be found in Project Properties of Visual Studio IDE in the `C/C++` Property Pages on the `General` page. +2. The import library has to be added to `Additional Dependencies` that can + be found in Project Properties in the `Linker` Property Pages on the `Input` page. + If one will provide only the name `libzstd.lib` without a full path to the library + then the directory has to be added to `Linker\General\Additional Library Directories`. + +The compiled executable will require ZSTD DLL which is available at +`visual\VS2010\bin\$(Platform)_$(Configuration)\libzstd.dll`. diff --git a/tests/Makefile b/tests/Makefile index e2e8e0881..7e5c66ad8 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -132,6 +132,7 @@ clean: @$(RM) -f core *.o tmp* result* *.gcda dictionary *.zst \ $(PRGDIR)/zstd$(EXT) $(PRGDIR)/zstd32$(EXT) \ fullbench$(EXT) fullbench32$(EXT) \ + fullbench-lib$(EXT) fullbench-dll$(EXT) \ fuzzer$(EXT) fuzzer32$(EXT) zbufftest$(EXT) zbufftest32$(EXT) \ zstreamtest$(EXT) zstreamtest32$(EXT) \ datagen$(EXT) paramgrill$(EXT) roundTripCrash$(EXT) diff --git a/tests/fullbench.c b/tests/fullbench.c index 46af8172a..233b4e931 100644 --- a/tests/fullbench.c +++ b/tests/fullbench.c @@ -17,11 +17,16 @@ #include /* clock_t, clock, CLOCKS_PER_SEC */ #include "mem.h" -#include "zstd_internal.h" /* ZSTD_blockHeaderSize, blockType_e, KB, MB */ -#define ZSTD_STATIC_LINKING_ONLY /* ZSTD_compressBegin, ZSTD_compressContinue, etc. */ +#ifndef ZSTD_DLL_IMPORT + #include "zstd_internal.h" /* ZSTD_blockHeaderSize, blockType_e, KB, MB */ + #define ZSTD_STATIC_LINKING_ONLY /* ZSTD_compressBegin, ZSTD_compressContinue, etc. */ +#else + #define KB *(1 <<10) + #define MB *(1 <<20) + #define GB *(1U<<30) + typedef enum { bt_raw, bt_rle, bt_compressed, bt_reserved } blockType_e; +#endif #include "zstd.h" /* ZSTD_VERSION_STRING */ -#define FSE_STATIC_LINKING_ONLY /* FSE_DTABLE_SIZE_U32 */ -#include "fse.h" #include "datagen.h" @@ -111,8 +116,8 @@ size_t local_ZSTD_decompress(void* dst, size_t dstSize, void* buff2, const void* return ZSTD_decompress(dst, dstSize, buff2, g_cSize); } -static ZSTD_DCtx* g_zdc = NULL; #ifndef ZSTD_DLL_IMPORT +static ZSTD_DCtx* g_zdc = NULL; extern size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* ctx, const void* src, size_t srcSize); size_t local_ZSTD_decodeLiteralsBlock(void* dst, size_t dstSize, void* buff2, const void* src, size_t srcSize) { @@ -165,6 +170,7 @@ static size_t local_ZSTD_decompressStream(void* dst, size_t dstCapacity, void* b return buffOut.pos; } +#ifndef ZSTD_DLL_IMPORT static ZSTD_CCtx* g_zcc = NULL; size_t local_ZSTD_compressContinue(void* dst, size_t dstCapacity, void* buff2, const void* src, size_t srcSize) { @@ -194,6 +200,7 @@ size_t local_ZSTD_decompressContinue(void* dst, size_t dstCapacity, void* buff2, return regeneratedSize; } +#endif /*_******************************************************* @@ -217,13 +224,13 @@ static size_t benchMem(const void* src, size_t srcSize, U32 benchNb) case 2: benchFunction = local_ZSTD_decompress; benchName = "ZSTD_decompress"; break; +#ifndef ZSTD_DLL_IMPORT case 11: benchFunction = local_ZSTD_compressContinue; benchName = "ZSTD_compressContinue"; break; case 12: benchFunction = local_ZSTD_decompressContinue; benchName = "ZSTD_decompressContinue"; break; -#ifndef ZSTD_DLL_IMPORT case 31: benchFunction = local_ZSTD_decodeLiteralsBlock; benchName = "ZSTD_decodeLiteralsBlock"; break; @@ -256,6 +263,7 @@ static size_t benchMem(const void* src, size_t srcSize, U32 benchNb) case 2: g_cSize = ZSTD_compress(buff2, dstBuffSize, src, srcSize, 1); break; +#ifndef ZSTD_DLL_IMPORT case 11 : if (g_zcc==NULL) g_zcc = ZSTD_createCCtx(); break; @@ -263,7 +271,6 @@ static size_t benchMem(const void* src, size_t srcSize, U32 benchNb) if (g_zdc==NULL) g_zdc = ZSTD_createDCtx(); g_cSize = ZSTD_compress(buff2, dstBuffSize, src, srcSize, 1); break; -#ifndef ZSTD_DLL_IMPORT case 31: /* ZSTD_decodeLiteralsBlock */ if (g_zdc==NULL) g_zdc = ZSTD_createDCtx(); { blockProperties_t bp;