Skip to content

Commit 850ff15

Browse files
authored
Add Zstandard build recipe (#64)
1 parent cf20511 commit 850ff15

File tree

2 files changed

+78
-7
lines changed

2 files changed

+78
-7
lines changed

.github/workflows/ci.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ jobs:
4747
run: |
4848
make mpdecimal-${{ matrix.target }}
4949
50+
- name: Build zstd for ${{ matrix.target }}
51+
run: |
52+
make zstd-${{ matrix.target }}
53+
5054
- name: Build OpenSSL for ${{ matrix.target }}
5155
run: |
5256
make OpenSSL-${{ matrix.target }}

Makefile

Lines changed: 74 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@
2929
# - mpdecimal-tvOS - build mpdecimal for tvOS
3030
# - mpdecimal-watchOS - build mpdecimal for watchOS
3131
# - mpdecimal-visionOS - build mpdecimal for visionOS
32+
# - zstd-iOS - build zstd for iOS
33+
# - zstd-MacCatalyst - build zstd for MacCatalyst
34+
# - zstd-tvOS - build zstd for tvOS
35+
# - zstd-watchOS - build zstd for watchOS
36+
# - zstd-visionOS - build zstd for visionOS
3237
# - libFFI-iOS - build libFFI for iOS
3338
# - libFFI-MacCatalyst - build libFFI for MacCatalyst
3439
# - libFFI-tvOS - build libFFI for tvOS
@@ -63,6 +68,8 @@ OPENSSL_SERIES=$(shell echo $(OPENSSL_VERSION) | grep -Eo "\d+\.\d+")
6368

6469
MPDECIMAL_VERSION=4.0.0
6570

71+
ZSTD_VERSION=1.5.7
72+
6673
LIBFFI_VERSION=3.4.7
6774

6875
CURL_FLAGS=--disable --fail --location --create-dirs --progress-bar
@@ -181,6 +188,15 @@ downloads/mpdecimal-$(MPDECIMAL_VERSION).tar.gz:
181188
curl $(CURL_FLAGS) -o $@ \
182189
https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-$(MPDECIMAL_VERSION).tar.gz
183190

191+
###########################################################################
192+
# Setup: zstd
193+
###########################################################################
194+
195+
# Download original zstd source code archive.
196+
downloads/zstd-$(ZSTD_VERSION).tar.gz:
197+
@echo ">>> Download zstd sources"
198+
curl $(CURL_FLAGS) -o $@ \
199+
https://github.com/facebook/zstd/releases/download/v$(ZSTD_VERSION)/zstd-$(ZSTD_VERSION).tar.gz
184200

185201
###########################################################################
186202
# Setup: libFFI
@@ -214,7 +230,8 @@ TARGET_TRIPLE-$(target)=$$(ARCH-$(target))-apple-$$(TRIPLE_OS-$(os))$$(VERSION_M
214230

215231
SDK_ROOT-$(target)=$$(shell xcrun --sdk $$(SDK-$(target)) --show-sdk-path)
216232
CC-$(target)=xcrun --sdk $$(SDK-$(target)) clang -target $$(TARGET_TRIPLE-$(target))
217-
CXX-$(target)=xcrun --sdk $$(SDK-$(target)) clang -target $$(TARGET_TRIPLE-$(target))
233+
AS-$(target)=xcrun --sdk $$(SDK-$(target)) as -target $$(TARGET_TRIPLE-$(target))
234+
CXX-$(target)=xcrun --sdk $$(SDK-$(target)) clang++ -target $$(TARGET_TRIPLE-$(target))
218235
CFLAGS-$(target)=\
219236
--sysroot=$$(SDK_ROOT-$(target)) \
220237
$$(CFLAGS-$(os))
@@ -418,14 +435,14 @@ $$(MPDECIMAL_SRCDIR-$(target))/Makefile: $$(MPDECIMAL_SRCDIR-$(target))/configur
418435
--host=$$(TARGET_TRIPLE-$(target)) \
419436
--build=$(HOST_ARCH)-apple-darwin \
420437
--prefix="$$(MPDECIMAL_INSTALL-$(target))" \
421-
2>&1 | tee -a ../xz-$(MPDECIMAL_VERSION).config.log
438+
2>&1 | tee -a ../mpdecimal-$(MPDECIMAL_VERSION).config.log
422439

423440
$$(MPDECIMAL_LIB-$(target)): $$(MPDECIMAL_SRCDIR-$(target))/Makefile
424-
@echo ">>> Build and install MPDECIMAL for $(target)"
441+
@echo ">>> Build and install mpdecimal for $(target)"
425442
cd $$(MPDECIMAL_SRCDIR-$(target)) && \
426443
PATH="$(PROJECT_DIR)/install/$(os)/bin:$(PATH)" \
427444
make install \
428-
2>&1 | tee -a ../xz-$(MPDECIMAL_VERSION).build.log
445+
2>&1 | tee -a ../mpdecimal-$(MPDECIMAL_VERSION).build.log
429446

430447
$$(MPDECIMAL_DIST-$(target)): $$(MPDECIMAL_LIB-$(target))
431448
@echo ">>> Build MPDECIMAL distribution for $(target)"
@@ -436,6 +453,42 @@ $$(MPDECIMAL_DIST-$(target)): $$(MPDECIMAL_LIB-$(target))
436453
.PHONY: mpdecimal-$(target)
437454
mpdecimal-$(target): $$(MPDECIMAL_DIST-$(target))
438455

456+
###########################################################################
457+
# Target: zstd
458+
###########################################################################
459+
460+
ZSTD_SRCDIR-$(target)=build/$(os)/$(target)/zstd-$(ZSTD_VERSION)
461+
ZSTD_INSTALL-$(target)=$(PROJECT_DIR)/install/$(os)/$(target)/zstd-$(ZSTD_VERSION)
462+
ZSTD_LIB-$(target)=$$(ZSTD_INSTALL-$(target))/lib/libzstd.a
463+
ZSTD_DIST-$(target)=dist/zstd-$(ZSTD_VERSION)-$(BUILD_NUMBER)-$(target).tar.gz
464+
465+
$$(ZSTD_SRCDIR-$(target))/Makefile: downloads/zstd-$(ZSTD_VERSION).tar.gz
466+
@echo ">>> Unpack zstd sources for $(target)"
467+
mkdir -p $$(ZSTD_SRCDIR-$(target))
468+
tar zxf $$< --strip-components 1 -C $$(ZSTD_SRCDIR-$(target))
469+
# Touch the Makefile script to ensure that Make identifies it as up to date.
470+
touch $$(ZSTD_SRCDIR-$(target))/Makefile
471+
472+
$$(ZSTD_LIB-$(target)): $$(ZSTD_SRCDIR-$(target))/Makefile
473+
@echo ">>> Build and install zstd for $(target)"
474+
cd $$(ZSTD_SRCDIR-$(target)) && \
475+
PATH="$(PROJECT_DIR)/install/$(os)/bin:$(PATH)" \
476+
CC="$$(CC-$(target))" \
477+
AS="$$(AS-$(target))" \
478+
CFLAGS="$$(CFLAGS-$(target))" \
479+
LDFLAGS="$$(LDFLAGS-$(target))" \
480+
make -C lib install-static install-includes PREFIX=$$(ZSTD_INSTALL-$(target)) \
481+
2>&1 | tee -a ../zstd-$(ZSTD_VERSION).build.log
482+
483+
$$(ZSTD_DIST-$(target)): $$(ZSTD_LIB-$(target))
484+
@echo ">>> Build zstd distribution for $(target)"
485+
mkdir -p dist
486+
487+
cd $$(ZSTD_INSTALL-$(target)) && tar zcvf $(PROJECT_DIR)/$$(ZSTD_DIST-$(target)) lib include
488+
489+
.PHONY: zstd-$(target)
490+
zstd-$(target): $$(ZSTD_DIST-$(target))
491+
439492
###########################################################################
440493
# Target: libFFI
441494
###########################################################################
@@ -488,6 +541,7 @@ vars-$(target):
488541
@echo "TARGET_TRIPLE-$(target): $$(TARGET_TRIPLE-$(target))"
489542
@echo "SDK_ROOT-$(target): $$(SDK_ROOT-$(target))"
490543
@echo "CC-$(target): $$(CC-$(target))"
544+
@echo "AS-$(target): $$(AS-$(target))"
491545
@echo "CFLAGS-$(target): $$(CFLAGS-$(target))"
492546
@echo "LDFLAGS-$(target): $$(LDFLAGS-$(target))"
493547
@echo "BZIP2_SRCDIR-$(target): $$(BZIP2_SRCDIR-$(target))"
@@ -543,6 +597,7 @@ BZip2-$(sdk): $$(foreach target,$$(SDK_TARGETS-$(sdk)),BZip2-$$(target))
543597
XZ-$(sdk): $$(foreach target,$$(SDK_TARGETS-$(sdk)),XZ-$$(target))
544598
OpenSSL-$(sdk): $$(foreach target,$$(SDK_TARGETS-$(sdk)),OpenSSL-$$(target))
545599
mpdecimal-$(sdk): $$(foreach target,$$(SDK_TARGETS-$(sdk)),mpdecimal-$$(target))
600+
zstd-$(sdk): $$(foreach target,$$(SDK_TARGETS-$(sdk)),zstd-$$(target))
546601
libFFI-$(sdk): $$(foreach target,$$(SDK_TARGETS-$(sdk)),libFFI-$$(target))
547602

548603
###########################################################################
@@ -597,9 +652,10 @@ BZip2-$(os): $$(foreach sdk,$$(SDKS-$(os)),BZip2-$$(sdk))
597652
XZ-$(os): $$(foreach sdk,$$(SDKS-$(os)),XZ-$$(sdk))
598653
OpenSSL-$(os): $$(foreach sdk,$$(SDKS-$(os)),OpenSSL-$$(sdk))
599654
mpdecimal-$(os): $$(foreach sdk,$$(SDKS-$(os)),mpdecimal-$$(sdk))
655+
zstd-$(os): $$(foreach sdk,$$(SDKS-$(os)),zstd-$$(sdk))
600656
libFFI-$(os): $$(foreach sdk,$$(SDKS-$(os)),libFFI-$$(sdk))
601657

602-
.PHONY: clean-BZip2-$(os) clean-XZ-$(os) clean-OpenSSL-$(os) clean-mpdecimal-$(os) clean-libFFI-$(os)
658+
.PHONY: clean-BZip2-$(os) clean-XZ-$(os) clean-OpenSSL-$(os) clean-mpdecimal-$(os) clean-zstd-$(os) clean-libFFI-$(os)
603659
clean-BZip2-$(os):
604660
@echo ">>> Clean BZip2 build products on $(os)"
605661
rm -rf \
@@ -636,6 +692,15 @@ clean-mpdecimal-$(os):
636692
install/$(os)/*/mpdecimal-$(MPDECIMAL_VERSION).*.log \
637693
dist/mpdecimal-$(MPDECIMAL_VERSION)-*
638694

695+
clean-zstd-$(os):
696+
@echo ">>> Clean zstd build products on $(os)"
697+
rm -rf \
698+
build/$(os)/*/zstd-$(ZSTD_VERSION) \
699+
build/$(os)/*/zstd-$(ZSTD_VERSION).*.log \
700+
install/$(os)/*/zstd-$(ZSTD_VERSION) \
701+
install/$(os)/*/zstd-$(ZSTD_VERSION).*.log \
702+
dist/zstd-$(ZSTD_VERSION)-*
703+
639704
clean-libFFI-$(os):
640705
@echo ">>> Clean libFFI build products on $(os)"
641706
rm -rf \
@@ -646,7 +711,7 @@ clean-libFFI-$(os):
646711
dist/libffi-$(LIBFFI_VERSION)-*
647712

648713
.PHONY: $(os)
649-
$(os): BZip2-$(os) XZ-$(os) OpenSSL-$(os) mpdecimal-$(os) libFFI-$(os)
714+
$(os): BZip2-$(os) XZ-$(os) OpenSSL-$(os) mpdecimal-$(os) zstd-$(os) libFFI-$(os)
650715

651716
###########################################################################
652717
# Build: Debug
@@ -666,17 +731,19 @@ endef # build
666731
vars: $(foreach os,$(OS_LIST),vars-$(os))
667732

668733
# Expand the targets for each product
669-
.PHONY: BZip2 XZ OpenSSL mpdecimal libFFI
734+
.PHONY: BZip2 XZ OpenSSL mpdecimal zstd libFFI
670735
BZip2: $(foreach os,$(OS_LIST),BZip2-$(os))
671736
XZ: $(foreach os,$(OS_LIST),XZ-$(os))
672737
OpenSSL: $(foreach os,$(OS_LIST),OpenSSL-$(os))
673738
mpdecimal: $(foreach os,$(OS_LIST),mpdecimal-$(os))
739+
zstd: $(foreach os,$(OS_LIST),zstd-$(os))
674740
libFFI: $(foreach os,$(OS_LIST),libFFI-$(os))
675741

676742
clean-BZip2: $(foreach os,$(OS_LIST),clean-BZip2-$(os))
677743
clean-XZ: $(foreach os,$(OS_LIST),clean-XZ-$(os))
678744
clean-OpenSSL: $(foreach os,$(OS_LIST),clean-OpenSSL-$(os))
679745
clean-mpdecimal: $(foreach os,$(OS_LIST),clean-mpdecimal-$(os))
746+
clean-zstd: $(foreach os,$(OS_LIST),clean-zstd-$(os))
680747
clean-libFFI: $(foreach os,$(OS_LIST),clean-libFFI-$(os))
681748

682749
# Expand the build macro for every OS

0 commit comments

Comments
 (0)