fix compress/uncompress
diff --git a/Makefile b/Makefile
index fc74db5..dc9d74c 100644
--- a/Makefile
+++ b/Makefile
@@ -14,12 +14,27 @@
#
# SPDX-License-Identifier: Apache-2.0
-# cannot commit files larger than 100 MB to GitHub
-FILE_SIZE_LIMIT_MB = 100
+# cannot commit files larger than 100 MB to GitHub
+FILE_SIZE_LIMIT_MB = 80
+FILE_SIZE_SPLIT_MB = 80
LARGE_FILES := $(shell find ./gds -type f -name "*.gds")
-LARGE_FILES += $(shell find . -type f -size +$(FILE_SIZE_LIMIT_MB)M -not -path "./.git/*" -not -path "./gds/*" -not -path "./openlane/*")
+LARGE_FILES += $(shell find . -type f -size +$(FILE_SIZE_LIMIT_MB)M \
+ -not -path "./.git/*" \
+ -not -path "./gds/*" \
+ -not -path "./openlane/*")
-LARGE_FILES_GZ := $(addsuffix .gz, $(LARGE_FILES))
+LARGE_FILES_XZ := $(addsuffix .xz, $(LARGE_FILES))
+LARGE_FILES_XZ_PART := $(addsuffix .part, $(LARGE_FILES_XZ))
+
+# These are compressed (.xz) and split (.part*) archives.
+ARCHIVES_XZ_PART := $(shell find . -type f -name "*.xz.part*")
+
+# These are the name of the .xz archives to restore by joining split parts.
+ARCHIVES_XZ := $(sort $(basename $(ARCHIVES_XZ_PART)))
+
+# These are names of the .gds files to restores from the compressed and split
+# archives.
+ARCHIVED := $(sort $(basename $(ARCHIVES_XZ)) $(basename $(shell find . -type f -name "*.xz")))
ARCHIVES := $(shell find . -type f -name "*.gz")
ARCHIVE_SOURCES := $(basename $(ARCHIVES))
@@ -33,6 +48,16 @@
OPEN_PDKS_COMMIT ?= 32cdb2097fd9a629c91e8ea33e1f6de08ab25946
.DEFAULT_GOAL := ship
+
+.PHONY: print_vars
+print_vars:
+ @echo "LARGE_FILES = $(LARGE_FILES)"
+ @echo "LARGE_FILES_XZ = $(LARGE_FILES_XZ)"
+ @echo "LARGE_FILES_XZ_PART = $(LARGE_FILES_XZ_PART)"
+ @echo "ARCHIVES_XZ_PART = $(ARCHIVES_XZ_PART)"
+ @echo "ARCHIVES_XZ = $(ARCHIVES_XZ)"
+ @echo "ARCHIVED = $(ARCHIVED)"
+
# We need portable GDS_FILE pointers...
.PHONY: ship
ship: check-env uncompress
@@ -54,28 +79,32 @@
verify:
echo "verify"
-
-
-$(LARGE_FILES_GZ): %.gz: %
- @if ! [ $(suffix $<) == ".gz" ]; then\
- gzip -n --best $< > /dev/null &&\
- echo "$< -> $@";\
- fi
+$(LARGE_FILES_XZ_PART): %.xz.part: %
+ @xz --extreme --force --threads=$(THREADS) $< && \
+ split -b $(FILE_SIZE_SPLIT_MB)M $(addsuffix .xz, $<) $@ && \
+ rm $<.xz && \
+ echo "$< -> $$(find . -wholename '*$<*' | xargs)"
# This target compresses all files larger than $(FILE_SIZE_LIMIT_MB) MB
.PHONY: compress
-compress: $(LARGE_FILES_GZ)
- @echo "Files larger than $(FILE_SIZE_LIMIT_MB) MBytes are compressed!"
+compress: $(LARGE_FILES_XZ_PART)
+ @echo "Files larger than $(FILE_SIZE_LIMIT_MB) MBytes are compressed and split!"
+$(ARCHIVES_XZ):
-
-$(ARCHIVE_SOURCES): %: %.gz
- @gzip -d $< &&\
- echo "$< -> $@";\
+$(ARCHIVED): $(ARCHIVES_XZ)
+ @export PARTS="$(sort $(wildcard $@.xz.par*))" && \
+ cat $${PARTS} > $@.xz && \
+ unxz --force --threads=$(THREADS) $@.xz && \
+ rm $${PARTS} && \
+ echo "$${PARTS} -> $@"
.PHONY: uncompress
-uncompress: $(ARCHIVE_SOURCES)
- @echo "All files are uncompressed!"
+uncompress: $(ARCHIVED)
+ @echo "All files are concatenated and uncompressed!"
+
+.PHONY: decompress
+decompress: uncompress
# LVS