Skip to content

Commit 9fb617c

Browse files
committed
feat: Major v1.24.0 update integrating 5 community PRs and reorganizing codebase
Integrated community contributions: - PR valyala#49: CGO wrapper improvements for 5-7% performance gain on large buffers - Use void* instead of uintptr_t to avoid memory allocations - Direct Go slice usage via reflect.SliceHeader - PR valyala#25: Advanced Compression API with checksum support - Added CCtx type for advanced compression contexts - Added SetParameter/GetParameter methods - Added Reset and Compress2 methods - Full support for all ZSTD compression parameters - PR valyala#63: Exposed CompressDictLevel as public API - Allows fine-grained control over dictionary compression levels - PR valyala#66: RISC-V 64-bit architecture support - Updated Zig builder to 0.13.0 - Added linux_riscv64 target - PR valyala#60: Memory-optimized dictionary functions - Added NewCDictByRef/NewDDictByRef to avoid data copying - Reduces memory usage for large dictionaries Infrastructure improvements: - Created modern Dockerfile with Alpine Linux and latest Zig - Fixed build process issues with clean target - Updated minimum Go version to 1.24 Code organization: - Moved Docker configs to build/docker/ - Moved scripts to scripts/ - Moved upstream zstd to contrib/ - Moved test data to test/ - Created comprehensive examples in examples/ - Kept all Go source files in root for package compatibility Testing enhancements: - Added Silesia Corpus compression tests with speed measurements - Created 33 aggressive fuzz tests targeting known vulnerabilities - Added comprehensive tests for Advanced API - Added benchmarks comparing raw zstd vs wrapper performance The wrapper now shows 6-10% performance improvements for compression while maintaining identical compression ratios.
1 parent fdedec8 commit 9fb617c

File tree

709 files changed

+4514
-102
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

709 files changed

+4514
-102
lines changed

.gitignore

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,37 @@
1+
# Go test binary
2+
gozstd.test
3+
4+
# Temporary files
5+
*.tmp
6+
*.bak
7+
*.swp
8+
.DS_Store
19
tags
10+
11+
# Test artifacts
12+
test/testdata/fuzz/*/
13+
fuzz_results_*
14+
/testdata/
15+
16+
# Build artifacts (but NOT the distributed libraries in cgo/lib/)
17+
# Only ignore .a files in the root directory (temporary build outputs)
18+
/*.a
19+
*.o
20+
*.so
21+
*.dll
22+
23+
# IDE files
24+
.idea/
25+
.vscode/
26+
*.iml
27+
28+
# Go workspace
29+
go.work
30+
go.work.sum
31+
32+
# Benchmark results
33+
*.bench
34+
*.prof
35+
36+
# Container build artifacts
37+
.container-*

CHANGELOG_v1.24.0.md

Lines changed: 105 additions & 0 deletions

Makefile

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,23 +33,25 @@ ifeq ($(CONTAINER_RUNTIME),none)
3333
$(error No container runtime found. Please install docker, nerdctl, or podman)
3434
endif
3535
@echo "Building custom Zig builder image with latest Alpine and Zig..."
36-
$(CONTAINER_RUNTIME) build -f Dockerfile.zig-builder -t $(ZIG_BUILDER_IMAGE) .
36+
$(CONTAINER_RUNTIME) build -f build/docker/Dockerfile.zig -t $(ZIG_BUILDER_IMAGE) .
3737
@echo "Zig builder image built successfully: $(ZIG_BUILDER_IMAGE)"
3838

3939
libzstd.a: $(LIBZSTD_NAME)
4040
$(LIBZSTD_NAME):
4141
ifeq ($(GOOS_GOARCH),$(GOOS_GOARCH_NATIVE))
4242
rm -f $(LIBZSTD_NAME)
43-
cd zstd/lib && ZSTD_LEGACY_SUPPORT=0 AR="gcc-ar" ARFLAGS="rcs" MOREFLAGS="-DZSTD_MULTITHREAD=1 -O3 -flto $(MOREFLAGS)" LDFLAGS="-flto -fuse-linker-plugin -Wno-lto-type-mismatch" $(MAKE) clean libzstd.a
44-
mv zstd/lib/libzstd.a $(LIBZSTD_NAME)
43+
cd contrib/zstd/lib && ZSTD_LEGACY_SUPPORT=0 AR="gcc-ar" ARFLAGS="rcs" MOREFLAGS="-DZSTD_MULTITHREAD=1 -O3 -flto $(MOREFLAGS)" LDFLAGS="-flto -fuse-linker-plugin -Wno-lto-type-mismatch" $(MAKE) clean libzstd.a
44+
mv contrib/zstd/lib/libzstd.a $(LIBZSTD_NAME)
4545
else ifeq ($(GOOS_GOARCH),linux_amd64)
4646
TARGET=x86_64-linux GOARCH=amd64 GOOS=linux ARCH_FLAGS="-mcpu=x86_64+sse4_2+avx2+bmi2" $(MAKE) package-arch
4747
else ifeq ($(GOOS_GOARCH),linux_arm)
4848
TARGET=arm-linux-gnueabi GOARCH=arm GOOS=linux ARCH_FLAGS="-mcpu=generic" $(MAKE) package-arch
4949
else ifeq ($(GOOS_GOARCH),linux_arm64)
5050
TARGET=aarch64-linux GOARCH=arm64 GOOS=linux ARCH_FLAGS="-mcpu=generic" $(MAKE) package-arch
5151
else ifeq ($(GOOS_GOARCH),linux_ppc64le)
52-
TARGET=x86_64-linux GOARCH=ppc64le GOOS=linux ARCH_FLAGS="" $(MAKE) package-arch
52+
TARGET=powerpc64le-linux GOARCH=ppc64le GOOS=linux ARCH_FLAGS="" $(MAKE) package-arch
53+
else ifeq ($(GOOS_GOARCH),linux_riscv64)
54+
TARGET=riscv64-linux GOARCH=riscv64 GOOS=linux ARCH_FLAGS="-mcpu=generic" $(MAKE) package-arch
5355
else ifeq ($(GOOS_GOARCH),linux_musl_amd64)
5456
TARGET=x86_64-linux-musl GOARCH=amd64 GOOS=linux_musl ARCH_FLAGS="-mcpu=x86_64+sse4_2+avx2+bmi2" $(MAKE) package-arch
5557
else ifeq ($(GOOS_GOARCH),linux_musl_arm64)
@@ -70,7 +72,7 @@ endif
7072
$(CONTAINER_RUNTIME) run --rm \
7173
--entrypoint /bin/bash \
7274
--mount type=bind,src="$(shell pwd)",dst=/zstd \
73-
-w /zstd/zstd/lib \
75+
-w /zstd/contrib/zstd/lib \
7476
$(DOCKER_OPTS) \
7577
$(ZIG_BUILDER_IMAGE) \
7678
-c 'if echo "$(TARGET)" | grep -q "macos\|darwin"; then \
@@ -85,14 +87,15 @@ endif
8587
CXX="zig cc -target $(TARGET) -O3 $$LTO_FLAG $(ARCH_FLAGS)" \
8688
MOREFLAGS="-DZSTD_MULTITHREAD=1 -O3 $$LTO_FLAG $(ARCH_FLAGS) $(MOREFLAGS)" \
8789
make -j$(JOBS) libzstd.a'
88-
mv -f zstd/lib/libzstd.a $(LIBZSTD_NAME)
90+
mv -f contrib/zstd/lib/libzstd.a $(LIBZSTD_NAME)
8991

9092
# freebsd and illumos aren't supported by zig compiler atm.
9193
release:
9294
GOOS=linux GOARCH=amd64 $(MAKE) libzstd.a
9395
GOOS=linux GOARCH=arm64 $(MAKE) libzstd.a
9496
GOOS=linux GOARCH=arm $(MAKE) libzstd.a
9597
GOOS=linux GOARCH=ppc64le $(MAKE) libzstd.a
98+
GOOS=linux GOARCH=riscv64 $(MAKE) libzstd.a
9699
GOOS=linux_musl GOARCH=amd64 $(MAKE) libzstd.a
97100
GOOS=linux_musl GOARCH=arm64 $(MAKE) libzstd.a
98101
GOOS=darwin GOARCH=arm64 $(MAKE) libzstd.a
@@ -101,17 +104,17 @@ release:
101104

102105
clean:
103106
rm -f $(LIBZSTD_NAME)
104-
cd zstd && $(MAKE) clean
107+
cd contrib/zstd && $(MAKE) clean
105108

106109
update-zstd:
107110
rm -rf zstd-tmp
108111
git clone --branch $(ZSTD_VERSION) --depth 1 https://github.com/Facebook/zstd zstd-tmp
109112
rm -rf zstd-tmp/.git
110-
rm -rf zstd
111-
mv zstd-tmp zstd
112-
cp zstd/lib/zstd.h .
113-
cp zstd/lib/zdict.h .
114-
cp zstd/lib/zstd_errors.h .
113+
rm -rf contrib/zstd
114+
mv zstd-tmp contrib/zstd
115+
cp contrib/zstd/lib/zstd.h cgo/headers/
116+
cp contrib/zstd/lib/zdict.h cgo/headers/
117+
cp contrib/zstd/lib/zstd_errors.h cgo/headers/
115118
$(MAKE) release
116119

117120
test:

README.md

Lines changed: 1 addition & 1 deletion
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)