Skip to content

Commit 9df906a

Browse files
committed
Eliminate Linux SUBLEVEL bump
Add SHA256SUM as a new checksum verifier for downloading Linux tarballs since the latest Linux tarball is available at https://cdn.kernel.org/pub/linux/kernel/v6.x/ and the official SHA256 values can be found at https://cdn.kernel.org/pub/linux/kernel/v6.x/sha256sums.asc. To maintain compatibility with SHA1SUM, the verify function in mk/external.mk has been modified to support multiple SHA commands. Additionally, strip-components option has been added to ensure correct extraction when using tar to address variations in top-level directory structures such as the Linux tarball including a top-level directory while the Timidity tarball does not. With these changes, the Linux kernel SUBLEVEL bump is no longer necessary, and builds can be triggered via a workflow dispatch event. Afterwards, version updates of Linux will only apply to the VERSION and PATCHLEVEL.
1 parent 6928f8c commit 9df906a

File tree

3 files changed

+72
-38
lines changed

3 files changed

+72
-38
lines changed

mk/artifact.mk

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,15 @@ ifeq ($(call has, SYSTEM), 1)
8484
$(Q)$(eval PREBUILT_LINUX_IMAGE_FILENAME := $(shell cat $(BIN_DIR)/sha1sum-linux-image | awk '{ print $$2 };'))
8585

8686
$(Q)$(eval $(foreach FILE,$(PREBUILT_LINUX_IMAGE_FILENAME), \
87-
$(call verify,$(shell grep -w $(FILE) $(BIN_DIR)/sha1sum-linux-image | awk '{ print $$1 };'),$(BIN_DIR)/linux-image/$(FILE),RES) \
87+
$(call verify,$(SHA1SUM),$(shell grep -w $(FILE) $(BIN_DIR)/sha1sum-linux-image | awk '{ print $$1 };'),$(BIN_DIR)/linux-image/$(FILE),RES) \
8888
))
8989

9090
$(Q)$(eval RV32EMU_PREBUILT_TARBALL := rv32emu-linux-image-prebuilt.tar.gz)
9191
else ifeq ($(call has, ARCH_TEST), 1)
9292
$(Q)$(eval PREBUILT_SAIL_FILENAME := $(shell cat $(BIN_DIR)/rv32emu-prebuilt-sail-$(HOST_PLATFORM).sha | awk '{ print $$2 };'))
9393

9494
$(Q)$(eval $(foreach FILE,$(PREBUILT_SAIL_FILENAME), \
95-
$(call verify,$(shell grep -w $(FILE) $(BIN_DIR)/rv32emu-prebuilt-sail-$(HOST_PLATFORM).sha | awk '{ print $$1 };'),$(BIN_DIR)/$(FILE),RES) \
95+
$(call verify,$(SHA1SUM),$(shell grep -w $(FILE) $(BIN_DIR)/rv32emu-prebuilt-sail-$(HOST_PLATFORM).sha | awk '{ print $$1 };'),$(BIN_DIR)/$(FILE),RES) \
9696
))
9797

9898
$(Q)$(eval RV32EMU_PREBUILT_TARBALL := rv32emu-prebuilt-sail-$(HOST_PLATFORM))
@@ -101,10 +101,10 @@ else
101101
$(Q)$(eval PREBUILT_RV32_FILENAME := $(shell cat $(BIN_DIR)/sha1sum-riscv32 | awk '{ print $$2 };'))
102102

103103
$(Q)$(eval $(foreach FILE,$(PREBUILT_X86_FILENAME), \
104-
$(call verify,$(shell grep -w $(FILE) $(BIN_DIR)/sha1sum-linux-x86-softfp | awk '{ print $$1 };'),$(BIN_DIR)/linux-x86-softfp/$(FILE),RES) \
104+
$(call verify,$(SHA1SUM),$(shell grep -w $(FILE) $(BIN_DIR)/sha1sum-linux-x86-softfp | awk '{ print $$1 };'),$(BIN_DIR)/linux-x86-softfp/$(FILE),RES) \
105105
))
106106
$(Q)$(eval $(foreach FILE,$(PREBUILT_RV32_FILENAME), \
107-
$(call verify,$(shell grep -w $(FILE) $(BIN_DIR)/sha1sum-riscv32 | awk '{ print $$1 };'),$(BIN_DIR)/riscv32/$(FILE),RES) \
107+
$(call verify,$(SHA1SUM),$(shell grep -w $(FILE) $(BIN_DIR)/sha1sum-riscv32 | awk '{ print $$1 };'),$(BIN_DIR)/riscv32/$(FILE),RES) \
108108
))
109109

110110
$(Q)$(eval RV32EMU_PREBUILT_TARBALL := rv32emu-prebuilt.tar.gz)
@@ -199,7 +199,7 @@ ifeq ($(call has, PREBUILT), 0)
199199
ifeq ($(call has, SYSTEM), 0)
200200
$(Q)$(call prologue,"scimark2")
201201
$(Q)$(call download,$(SCIMARK2_URL))
202-
$(Q)$(call verify,$(SCIMARK2_SHA1),$(notdir $(SCIMARK2_URL)))
202+
$(Q)$(call verify,$(SHA1SUM),$(SCIMARK2_SHA1),$(notdir $(SCIMARK2_URL)))
203203
$(Q)$(call extract,"./tests/scimark2",$(notdir $(SCIMARK2_URL)))
204204
$(Q)$(call epilogue,$(notdir $(SCIMARK2_URL)),$(SHA1_FILE1),$(SHA1_FILE2))
205205
$(Q)$(PRINTF) "Building scimark2 ...\n"

mk/common.mk

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,14 @@ ifndef SHA1SUM
6464
SHA1SUM := echo
6565
endif
6666
endif
67+
68+
SHA256SUM = sha256sum
69+
SHA256SUM := $(shell which $(SHA256SUM))
70+
ifndef SHA256SUM
71+
SHA256SUM = shasum -a 256
72+
SHA256SUM := $(shell which shasum)
73+
ifndef SHA256SUM
74+
$(warning No sha256sum found. Disable checksums)
75+
SHA256SUM := echo
76+
endif
77+
endif

mk/external.mk

Lines changed: 56 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ COMPRESSED_IS_DIR :=
44
EXTRACTOR :=
55
VERIFIER :=
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
1313
define prologue
@@ -32,6 +32,7 @@ endef
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
3637
define 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
)
5051
endef
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
5961
define 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
))
8284
endef
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
9196
DOOM_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
96103
QUAKE_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
101110
TIMIDITY_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
106118
BUILDROOT_VERSION = 2024.11
107119
BUILDROOT_DATA = /tmp/buildroot
108120
BUILDROOT_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

117140
define 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))
124147
endef
125148

126149
EXTERNAL_DATA = DOOM QUAKE TIMIDITY BUILDROOT LINUX

0 commit comments

Comments
 (0)