@@ -4,10 +4,10 @@ COMPRESSED_IS_DIR :=
44EXTRACTOR :=
55VERIFIER :=
66
7- # temporarily files to store correct SHA1 value and computed SHA1 value
7+ # temporarily files to store correct SHA value and computed SHA value
88# respectively for verification of directory source
9- $(eval SHA1_FILE1 := $(shell mktemp))
10- $(eval SHA1_FILE2 := $(shell mktemp))
9+ $(eval SHA_FILE1 := $(shell mktemp))
10+ $(eval SHA_FILE2 := $(shell mktemp))
1111
1212# $(1): compressed source
1313define prologue
3232
3333# $(1): destination directory
3434# $(2): compressed source(.zip or.gz)
35+ # $(3): strip component level (only for tar)
3536# For Buildroot and Linux kernel, no need to extract
3637define extract
3738 $(eval COMPRESSED_SUFFIX := $(suffix $(2 ) ) )
@@ -42,85 +43,107 @@ define extract
4243 ($(eval _ := \
4344 $(if $(COMPRESSED_IS_ZIP ) , \
4445 ($(eval EXTRACTOR := unzip -d $(1 ) $(2 ) ) ) , \
45- ($(eval EXTRACTOR := tar -xf $(2 ) -C $(1 ) ) ) \
46+ ($(eval EXTRACTOR := tar -xf $(2 ) --strip-components= $( 3 ) - C $(1 ) ) ) \
4647 ) ) \
4748 $(eval _ := $(shell $(EXTRACTOR ) ) ) )
4849 ) \
4950 )
5051endef
5152
52- # $(1): correct SHA1 value
53- # $(2): filename or directory path
54- # $(3): (optional) returned result
53+ # $(1): SHA algorithm command
54+ # $(2): correct SHA value
55+ # $(3): filename or directory path
56+ # $(4): (optional) returned result
5557#
5658# Note:
57- # 1. for regular file, $(SHA1SUM ) command's -c option generates keyword "FAILED" for indicating an unmatch
59+ # 1. for regular file, $(1 ) command's -c option generates keyword "FAILED" for indicating an unmatch
5860# 2. for directory, cmp command outputs keyword "differ" for indicating an unmatch
5961define verify
60- $(eval COMPRESSED_IS_DIR := $(if $(wildcard $(2 ) /* ) ,1,0) )
62+ $(eval COMPRESSED_IS_DIR := $(if $(wildcard $(3 ) /* ) ,1,0) )
6163 $(eval _ := \
6264 $(if $(filter 1,$(COMPRESSED_IS_DIR ) ) , \
6365 ($(eval VERIFIER := \
64- echo $(1 ) > $(SHA1_FILE1 ) \
65- | find $(2 ) -type f -not -path '* /.git/* ' -print0 \
66+ echo $(2 ) > $(SHA_FILE1 ) \
67+ | find $(3 ) -type f -not -path '* /.git/* ' -print0 \
6668 | sort -z \
67- | xargs -0 $(SHA1SUM ) \
69+ | xargs -0 $(1 ) \
6870 | sort \
69- | $(SHA1SUM ) \
70- | cut -f 1 -d ' ' > $(SHA1_FILE2 ) && cmp $(SHA1_FILE1 ) $(SHA1_FILE2 ) ) ) , \
71- ($(eval VERIFIER := (ls $(2 ) >/dev/null 2>&1 || echo FAILED) && echo "$(strip $(1 ) ) $(strip $(2 ) ) " | $(SHA1SUM ) -c -) ) \
71+ | $(1 ) \
72+ | cut -f 1 -d ' ' > $(SHA_FILE2 ) && cmp $(SHA_FILE1 ) $(SHA_FILE2 ) ) ) , \
73+ ($(eval VERIFIER := (ls $(3 ) >/dev/null 2>&1 || echo FAILED) && echo "$(strip $(2 ) ) $(strip $(3 ) ) " | $(1 ) -c -) ) \
7274 ))
7375 $(eval _ := $(shell $(VERIFIER ) 2>&1) )
7476 $(eval _ := \
7577 $(if $(filter FAILED differ:,$(_ ) ) , \
76- ($(if $(3 ) , \
77- $(eval $(3 ) := 1) , \
78+ ($(if $(4 ) , \
79+ $(eval $(4 ) := 1) , \
7880 $(error $(_ ) ) \
7981 ) ) , \
80- (# SHA1 value match, do nothing) \
82+ (# SHA value match, do nothing) \
8183 ))
8284endef
8385
8486# For each external target, the following must be defined in advance:
8587# _DATA_URL : the hyperlink which points to archive.
88+ # _DATA_DEST : the extract destination of the file (only for compressed file)
8689# _DATA : the file to be read by specific executable.
87- # _DATA_SHA1 : the checksum of the content in _DATA
90+ # _DATA_SKIP_DIR_LEVEL : the strip component level when using tar
91+ # _DATA_SHA : the SHA value of the content in _DATA
92+ # _DATA_SHA_CMD : the SHA command
8893
8994# Doom
9095# https://tipsmake.com/how-to-run-doom-on-raspberry-pi-without-emulator
9196DOOM_DATA_URL = http://www.doomworld.com/3ddownloads/ports/shareware_doom_iwad.zip
92- DOOM_DATA = $(OUT ) /DOOM1.WAD
93- DOOM_DATA_SHA1 = 5b2e249b9c5133ec987b3ea77596381dc0d6bc1d
97+ DOOM_DATA_DEST = $(OUT )
98+ DOOM_DATA = $(DOOM_DATA_DEST ) /DOOM1.WAD
99+ DOOM_DATA_SHA = 5b2e249b9c5133ec987b3ea77596381dc0d6bc1d
100+ DOOM_DATA_SHA_CMD = $(SHA1SUM )
94101
95102# Quake
96103QUAKE_DATA_URL = https://www.libsdl.org/projects/quake/data/quakesw-1.0.6.zip
97- QUAKE_DATA = $(OUT ) /id1/pak0.pak
98- QUAKE_DATA_SHA1 = 36b42dc7b6313fd9cabc0be8b9e9864840929735
104+ QUAKE_DATA_DEST = $(OUT )
105+ QUAKE_DATA = $(QUAKE_DATA_DEST ) /id1/pak0.pak
106+ QUAKE_DATA_SHA = 36b42dc7b6313fd9cabc0be8b9e9864840929735
107+ QUAKE_DATA_SHA_CMD = $(SHA1SUM )
99108
100109# Timidity software synthesizer configuration for SDL2_mixer
101110TIMIDITY_DATA_URL = http://www.libsdl.org/projects/mixer/timidity/timidity.tar.gz
102- TIMIDITY_DATA = $(OUT ) /timidity
103- TIMIDITY_DATA_SHA1 = cf6217a5d824b717ec4a07e15e6c129a4657ca25
111+ TIMIDITY_DATA_DEST = $(OUT )
112+ TIMIDITY_DATA = $(TIMIDITY_DATA_DEST ) /timidity
113+ TIMIDITY_DATA_SKIP_DIR_LEVEL = 0
114+ TIMIDITY_DATA_SHA = cf6217a5d824b717ec4a07e15e6c129a4657ca25
115+ TIMIDITY_DATA_SHA_CMD = $(SHA1SUM )
104116
105117# Buildroot
106118BUILDROOT_VERSION = 2024.11
107119BUILDROOT_DATA = /tmp/buildroot
108120BUILDROOT_DATA_URL = git clone https://github.com/buildroot/buildroot $(BUILDROOT_DATA ) -b $(BUILDROOT_VERSION ) --depth=1
109- BUILDROOT_DATA_SHA1 = e678801287ab68369af1731dcf1acc39e4adccff
121+ BUILDROOT_DATA_SHA = e678801287ab68369af1731dcf1acc39e4adccff
122+ BUILDROOT_DATA_SHA_CMD = $(SHA1SUM )
110123
111124# Linux kernel
112- LINUX_VERSION = linux-6.1.y
113- LINUX_DATA = /tmp/linux
114- LINUX_DATA_URL = git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git $(LINUX_DATA ) -b $(LINUX_VERSION ) --depth=1
115- LINUX_DATA_SHA1 = 43b6b7fbf9231656d7b65f118445996172250fc0
125+ LINUX_VERSION = 6
126+ LINUX_PATCHLEVEL = 1
127+ LINUX_CDN_BASE_URL = https://cdn.kernel.org/pub/linux/kernel
128+ LINUX_CDN_VERSION_URL = $(LINUX_CDN_BASE_URL ) /v$(LINUX_VERSION ) .x
129+ $(shell mkdir -p /tmp/linux)
130+ LINUX_DATA_DEST = /tmp/linux
131+ LINUX_DATA = $(shell wget -q -O- $(LINUX_CDN_VERSION_URL ) | \
132+ grep -o 'linux-$(LINUX_VERSION ) .$(LINUX_PATCHLEVEL ) .[0-9]\+\.tar.gz' | \
133+ sort -V | tail -n 1)
134+ LINUX_DATA_URL = $(LINUX_CDN_VERSION_URL ) /$(LINUX_DATA )
135+ LINUX_DATA_SKIP_DIR_LEVEL = 1
136+ LINUX_DATA_SHA = $(shell wget -q -O- $(LINUX_CDN_VERSION_URL ) /sha256sums.asc | \
137+ grep $(LINUX_DATA ) | awk '{print $$1}')
138+ LINUX_DATA_SHA_CMD = $(SHA256SUM )
116139
117140define download-extract-verify
118141$($(T ) _DATA) :
119142 $(Q )$$(call prologue,$$@ )
120143 $(Q )$$(call download,$(strip $($(T ) _DATA_URL) ) )
121- $(Q )$$(call extract,$(OUT ) ,$(notdir $($(T ) _DATA_URL) ) )
122- $(Q )$$(call verify,$($(T ) _DATA_SHA1 ) ,$($(T ) _DATA) )
123- $(Q )$$(call epilogue,$(notdir $($(T ) _DATA_URL) ) ,$(SHA1_FILE1 ) ,$(SHA1_FILE2 ) )
144+ $(Q )$$(call extract,$($( T ) _DATA_DEST) ,$(notdir $($(T ) _DATA_URL) ) , $( $( T ) _DATA_SKIP_DIR_LEVEL ) )
145+ $(Q )$$(call verify,$($(T ) _DATA_SHA_CMD) , $( $( T ) _DATA_SHA ) ,$($(T ) _DATA) )
146+ $(Q )$$(call epilogue,$(notdir $($(T ) _DATA_URL) ) ,$(SHA_FILE1 ) ,$(SHA_FILE2 ) )
124147endef
125148
126149EXTERNAL_DATA = DOOM QUAKE TIMIDITY BUILDROOT LINUX
0 commit comments