1*3117ece4Schristos# Single File Zstandard Libraries 2*3117ece4Schristos 3*3117ece4SchristosThe script `combine.sh` creates an _amalgamated_ source file that can be used with or without `zstd.h`. This isn't a _header-only_ file but it does offer a similar level of simplicity when integrating into a project. 4*3117ece4Schristos 5*3117ece4SchristosAll it now takes to support Zstd in your own projects is the addition of a single file, two if using the header, with no configuration or further build steps. 6*3117ece4Schristos 7*3117ece4SchristosDecompressor 8*3117ece4Schristos------------ 9*3117ece4Schristos 10*3117ece4SchristosThis is the most common use case. The decompression library is small, adding, for example, 26kB to an Emscripten compiled WebAssembly project. Native implementations add a little more, 40-70kB depending on the compiler and platform. 11*3117ece4Schristos 12*3117ece4SchristosCreate `zstddeclib.c` from the Zstd source using: 13*3117ece4Schristos``` 14*3117ece4Schristoscd zstd/build/single_file_libs 15*3117ece4Schristospython3 combine.py -r ../../lib -x legacy/zstd_legacy.h -o zstddeclib.c zstddeclib-in.c 16*3117ece4Schristos``` 17*3117ece4SchristosThen add the resulting file to your project (see the [example files](examples)). 18*3117ece4Schristos 19*3117ece4Schristos`create_single_file_decoder.sh` will run the above script, creating the file `zstddeclib.c` (`build_decoder_test.sh` will also create `zstddeclib.c`, then compile and test the result). 20*3117ece4Schristos 21*3117ece4SchristosFull Library 22*3117ece4Schristos------------ 23*3117ece4Schristos 24*3117ece4SchristosThe same tool can amalgamate the entire Zstd library for ease of adding both compression and decompression to a project. The [roundtrip example](examples/roundtrip.c) uses the original `zstd.h` with the remaining source files combined into `zstd.c` (currently just over 1.2MB) created from `zstd-in.c`. As with the standalone decoder the most useful compile flags have already been rolled-in and the resulting file can be added to a project as-is. 25*3117ece4Schristos 26*3117ece4SchristosCreate `zstd.c` from the Zstd source using: 27*3117ece4Schristos``` 28*3117ece4Schristoscd zstd/build/single_file_libs 29*3117ece4Schristospython3 combine.py -r ../../lib -x legacy/zstd_legacy.h -k zstd.h -o zstd.c zstd-in.c 30*3117ece4Schristos``` 31*3117ece4SchristosIt's possible to create a compressor-only library but since the decompressor is so small in comparison this doesn't bring much of a gain (but for the curious, simply remove the files in the _decompress_ section at the end of `zstd-in.c`). 32*3117ece4Schristos 33*3117ece4Schristos`create_single_file_library.sh` will run the script to create `zstd.c` (`build_library_test.sh` will also create `zstd.c`, then compile and test the result). 34