cmake: Support building shared & static libs simultaneously

Add an additional BUILD_STATIC_LIBS option to control building static
libraries independently of shared. This makes it possible (if both
options are set to ON) to build both shared and static libraries
simulataneously.

A dependant option is used to preserve the current BUILD_SHARED_LIBS
behavior, i.e. -DBUILD_SHARED_LIBS=ON -- shared lib only,
-DBUILD_SHARED_LIBS=OFF -- static lib only.

The targets used to build shared and static library are split now,
and only relevant properties are passed to each of them. An alias is
used to link programs to the preferred library.
1 file changed
tree: efb41757ef0b9581e37ade7c678f82c2730b9abd
  1. .gitattributes
  2. .gitignore
  3. .travis.yml
  4. LICENSE
  5. Makefile
  6. NEWS
  7. README.md
  8. appveyor.yml
  9. contrib/
  10. doc/
  11. examples/
  12. lib/
  13. programs/
  14. tests/
  15. visual/
README.md

LZ4 - Extremely fast compression

LZ4 is lossless compression algorithm, providing compression speed at 400 MB/s per core, scalable with multi-cores CPU. It features an extremely fast decoder, with speed in multiple GB/s per core, typically reaching RAM speed limits on multi-core systems.

Speed can be tuned dynamically, selecting an “acceleration” factor which trades compression ratio for more speed up. On the other end, a high compression derivative, LZ4_HC, is also provided, trading CPU time for improved compression ratio. All versions feature the same decompression speed.

LZ4 library is provided as open-source software using BSD 2-Clause license.

BranchStatus
masterBuild Status Build status coverity
devBuild Status Build status

Branch Policy:

  • The “master” branch is considered stable, at all times.
  • The “dev” branch is the one where all contributions must be merged before being promoted to master.
    • If you plan to propose a patch, please commit into the “dev” branch, or its own feature branch. Direct commit to “master” are not permitted.

Benchmarks

The benchmark uses lzbench, from @inikep compiled with GCC v6.2.0 on Linux 64-bits. The reference system uses a Core i7-3930K CPU @ 4.5GHz. Benchmark evaluates the compression of reference Silesia Corpus in single-thread mode.

CompressorRatioCompressionDecompression
memcpy1.0007300 MB/s7300 MB/s
LZ4 fast 8 (v1.7.3)1.799911 MB/s3360 MB/s
LZ4 default (v1.7.3)2.101625 MB/s3220 MB/s
LZO 2.092.108620 MB/s845 MB/s
QuickLZ 1.5.02.238510 MB/s600 MB/s
Snappy 1.1.32.091450 MB/s1550 MB/s
LZF v3.62.073365 MB/s820 MB/s
Zstandard 1.1.1 -12.876330 MB/s930 MB/s
Zstandard 1.1.1 -33.164200 MB/s810 MB/s
zlib deflate 1.2.8 -12.730100 MB/s370 MB/s
LZ4 HC -9 (v1.7.3)2.72034 MB/s3240 MB/s
zlib deflate 1.2.8 -63.09933 MB/s390 MB/s

LZ4 is also compatible and well optimized for x32 mode, for which it provides +10% speed performance.

Documentation

The raw LZ4 block compression format is detailed within lz4_Block_format.

To compress an arbitrarily long file or data stream, multiple blocks are required. Organizing these blocks and providing a common header format to handle their content is the purpose of the Frame format, defined into lz4_Frame_format. Interoperable versions of LZ4 must respect this frame format.

Other source versions

Beyond the C reference source, many contributors have created versions of lz4 in multiple languages (Java, C#, Python, Perl, Ruby, etc.). A list of known source ports is maintained on the LZ4 Homepage.