mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-24 03:08:51 +03:00
Explode zstd 1.4.5 into separate upstream files
It's much nicer to import from upstream this way, and compiles faster too. Everything in lib/ is unmodified 1.4.5. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Rich Ercolani <rincebrain@gmail.com> Closes #12978
This commit is contained in:
committed by
Brian Behlendorf
parent
669683c4cb
commit
234e9605c1
+9
-27
@@ -10,9 +10,8 @@ library, besides upgrading to a newer ZSTD release.
|
||||
Tree structure:
|
||||
|
||||
* `zfs_zstd.c` is the actual `zzstd` kernel module.
|
||||
* `lib/` contains the unmodified, [_"amalgamated"_](https://github.com/facebook/zstd/blob/dev/contrib/single_file_libs/README.md)
|
||||
version of the `Zstandard` library, generated from our template file
|
||||
* `zstd-in.c` is our template file for generating the library
|
||||
* `lib/` contains the unmodified version of the `Zstandard` library
|
||||
* `zstd-in.c` is our template file for generating the single-file library
|
||||
* `include/`: This directory contains supplemental includes for platform
|
||||
compatibility, which are not expected to be used by ZFS elsewhere in the
|
||||
future. Thus we keep them private to ZSTD.
|
||||
@@ -22,36 +21,19 @@ Tree structure:
|
||||
To update ZSTD the following steps need to be taken:
|
||||
|
||||
1. Grab the latest release of [ZSTD](https://github.com/facebook/zstd/releases).
|
||||
2. Update `module/zstd/zstd-in.c` if required. (see
|
||||
`zstd/contrib/single_file_libs/zstd-in.c` in the zstd repository)
|
||||
3. Generate the "single-file-library" and put it to `module/zstd/lib/`.
|
||||
4. Copy the following files to `module/zstd/lib/`:
|
||||
- `zstd/lib/zstd.h`
|
||||
- `zstd/lib/common/zstd_errors.h`
|
||||
2. Copy the files output by the following script to `module/zstd/lib/`:
|
||||
`grep include [path to zstd]/contrib/single_file_libs/zstd-in.c | awk '{ print $2 }'`
|
||||
3. Remove debug.c, threading.c, and zstdmt_compress.c.
|
||||
4. Update Makefiles with resulting file lists.
|
||||
|
||||
This can be done using a few shell commands from inside the zfs repo:
|
||||
|
||||
~~~sh
|
||||
cd PATH/TO/ZFS
|
||||
|
||||
url="https://github.com/facebook/zstd"
|
||||
release="$(curl -s "${url}"/releases/latest | grep -oP '(?<=v)[\d\.]+')"
|
||||
zstd="/tmp/zstd-${release}/"
|
||||
|
||||
wget -O /tmp/zstd.tar.gz \
|
||||
"${url}/releases/download/v${release}/zstd-${release}.tar.gz"
|
||||
tar -C /tmp -xzf /tmp/zstd.tar.gz
|
||||
|
||||
cp ${zstd}/lib/zstd.h module/zstd/lib/
|
||||
cp ${zstd}/lib/zstd_errors.h module/zstd/lib/
|
||||
${zstd}/contrib/single_file_libs/combine.sh \
|
||||
-r ${zstd}/lib -o module/zstd/lib/zstd.c module/zstd/zstd-in.c
|
||||
~~~
|
||||
|
||||
Note: if the zstd library for zfs is updated to a newer version,
|
||||
the macro list in include/zstd_compat_wrapper.h usually needs to be updated.
|
||||
this can be done with some hand crafting of the output of the following
|
||||
script: nm zstd.o | awk '{print "#define "$3 " zfs_" $3}' > macrotable
|
||||
script (on the object file generated from the "single-file library" script in zstd's
|
||||
contrib/single_file_libs):
|
||||
`nm zstd.o | awk '{print "#define "$3 " zfs_" $3}' > macrotable`
|
||||
|
||||
|
||||
## Altering ZSTD and breaking changes
|
||||
|
||||
Reference in New Issue
Block a user