Files
ddidderr 91c80fc8e7 build(rust): add dict-builder cargo feature dimension
The dictionary-builder sources (lib/dictBuilder) are about to start moving
to Rust, beginning with divsufsort. The Rust crate previously only modeled
the compression/decompression module split plus the forced-HUF decoder
modes, so no build could express "this C configuration includes (or
excludes) dictBuilder" to Cargo. Without that, a Rust archive could carry
dictBuilder modules into a build whose C side disabled them, or worse,
omit a migrated implementation from a build whose C shims require it.

Add a `dict-builder` cargo feature and thread it through every build that
consumes the Rust static archive, mirroring exactly how each build system
already gates the dictBuilder C sources:

- rust/Cargo.toml: new `dict-builder` feature, included in the default
  set because the C library builds dictBuilder by default
  (ZSTD_LIB_DICTBUILDER ?= 1). The feature is empty until the first
  dictBuilder module lands.
- lib/Makefile: RUST_CARGO_FEATURES gains dict-builder when
  ZSTD_LIB_DICTBUILDER is enabled, following the existing
  ZSTD_LIB_COMPRESSION/ZSTD_LIB_DECOMPRESSION pattern. The archive
  directory naming grows a matching `b<0|1>` dimension
  (c1-d1-b1-default etc.) so differently configured archives never
  collide; the repeated config prefix is factored into
  RUST_MODULE_CONFIG.
- programs/Makefile: the full-featured archives now request
  compression,decompression,dict-builder (equal to the default set, so
  the target directory stays shared with tests). The partial-library
  variants gain the `b0` name dimension, and zstd-dictBuilder gets its
  own lib-c1-d0-b1 archive because it compiles the dictBuilder C sources
  without decompression; it previously shared the compression-only
  archive, which will lack the migrated dictBuilder symbols.
- tests/Makefile: no flag change needed since tests use the crate default
  feature set; a comment now records that dict-builder arrives that way.
- build/cmake/lib/CMakeLists.txt: ZSTD_BUILD_DICTBUILDER now adds the
  dict-builder feature and a `b<0|1>` component in the Rust build-config
  directory name, in lockstep with the DictBuilderSources gating.
- build/meson/lib/meson.build: meson compiles the dictBuilder sources
  unconditionally, so the feature list and config name gain dict-builder
  unconditionally (c1-d1-b1-<huf-mode>).

The `dict-builder` feature deliberately does not imply `compression`.
lib/Makefile forces ZSTD_LIB_DICTBUILDER=0 when compression is disabled,
but CMake does not couple the two options, so encoding the C-side
constraint in Cargo would make the Rust archive diverge from the C source
list in that (already unsupported) CMake configuration.

Test plan:
- cd rust && cargo build --release
- cargo build --release --no-default-features \
    --features compression,decompression
- cargo build --release --no-default-features \
    --features compression,dict-builder
- Full validation (fuzzer, smoke tests, dictionary byte-identity) runs
  with the follow-up commit that ports divsufsort onto this scaffolding.
2026-07-11 14:23:39 +02:00
..
2024-01-29 15:24:42 -08:00
2025-01-15 02:16:42 +08:00
2019-07-09 21:08:13 +08:00
2019-10-02 11:08:20 -04:00

Projects for various integrated development environments (IDE)

Included projects

The following projects are included with the zstd distribution:

  • cmake - CMake project contributed by Artyom Dymchenko
  • VS2005 - Visual Studio 2005 Project (this project has been moved to the contrib directory and will no longer be supported)
  • VS2008 - Visual Studio 2008 project
  • VS2010 - Visual Studio 2010 project (which also works well with Visual Studio 2012, 2013, 2015)
  • VS_scripts - command line scripts prepared for Visual Studio compilation without IDE

How to compile zstd with Visual Studio

  1. Install Visual Studio e.g. VS 2015 Community Edition (it's free).
  2. Download the latest version of zstd from https://github.com/facebook/zstd/releases
  3. Decompress ZIP archive.
  4. Go to decompressed directory then to projects then VS2010 and open zstd.sln
  5. Visual Studio will ask about converting VS2010 project to VS2015 and you should agree.
  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.