From 0245c1585588486afc562d531bb7b9fd36a1e0eb Mon Sep 17 00:00:00 2001 From: insleker Date: Fri, 22 May 2026 21:29:44 +0800 Subject: [PATCH] feat: linux-kbuild-tree download source from CDN rather than git now fix: linux-kbuild-tree path move in `all` subfolder --- .../linux-kbuild-tree/{ => all}/.gitignore | 0 recipes/linux-kbuild-tree/all/conandata.yml | 21 ++++++++++ .../linux-kbuild-tree/{ => all}/conanfile.py | 42 ++++++++++++++----- 3 files changed, 53 insertions(+), 10 deletions(-) rename recipes/linux-kbuild-tree/{ => all}/.gitignore (100%) create mode 100644 recipes/linux-kbuild-tree/all/conandata.yml rename recipes/linux-kbuild-tree/{ => all}/conanfile.py (86%) diff --git a/recipes/linux-kbuild-tree/.gitignore b/recipes/linux-kbuild-tree/all/.gitignore similarity index 100% rename from recipes/linux-kbuild-tree/.gitignore rename to recipes/linux-kbuild-tree/all/.gitignore diff --git a/recipes/linux-kbuild-tree/all/conandata.yml b/recipes/linux-kbuild-tree/all/conandata.yml new file mode 100644 index 0000000..c09d426 --- /dev/null +++ b/recipes/linux-kbuild-tree/all/conandata.yml @@ -0,0 +1,21 @@ +sources: + "7.0.0": + "6.17.0": + "6.8.0": + "6.5.9": + url: "https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.5.9.tar.gz" + sha256: "3c269612220746ba87dc9063bec2afcb2df04b4fdaa9f7e1f67751284966cf37" + "5.19.9": + url: "https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.19.9.tar.gz" + sha256: "1f01b0ee846547737793103f23cc46a382e4694e7728e8cb8c48ea51a2bb7a8d" + "5.19.0": + "5.15.0": + "5.15.128": + url: "https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.128.tar.gz" + sha256: "4ce1331bb3877bc92581ec5faff76d63d19e7b1fa174acdda1f5cba4a8f2abf7" + "5.14.9": + url: "https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.14.9.tar.gz" + sha256: "b5cd37e6d193c8f6a98e41ce6f9d97260d178e0a3cfc43d7ff684f67c6c25f29" + "5.13.9": + url: "https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.13.9.tar.gz" + sha256: "cc82e4461d5f759c820b74079164450d1f1ad09def9f3356a58814abd0268787" diff --git a/recipes/linux-kbuild-tree/conanfile.py b/recipes/linux-kbuild-tree/all/conanfile.py similarity index 86% rename from recipes/linux-kbuild-tree/conanfile.py rename to recipes/linux-kbuild-tree/all/conanfile.py index 902d252..7b42aae 100644 --- a/recipes/linux-kbuild-tree/conanfile.py +++ b/recipes/linux-kbuild-tree/all/conanfile.py @@ -6,7 +6,7 @@ import subprocess from conan import ConanFile from conan.errors import ConanInvalidConfiguration from conan.tools.build import cross_building -from conan.tools.files import copy, save +from conan.tools.files import copy, get, save class LinuxKbuildTreeConan(ConanFile): @@ -22,8 +22,8 @@ class LinuxKbuildTreeConan(ConanFile): } default_options = { - "url": "https://github.com/torvalds/linux.git", - "defconfig": "", + "url": "", + "defconfig": "defconfig", "make_modules": False, } @@ -57,10 +57,13 @@ class LinuxKbuildTreeConan(ConanFile): ) def source(self): - self.run( - "git clone --depth=1 " - f"--branch {shlex.quote(self._linux_ref_from_version())} " - "https://github.com/torvalds/linux.git linux" + source_url, sha256 = self._linux_source() + get( + self, + source_url, + sha256=sha256, + destination=os.path.join(self.source_folder, "linux"), + strip_root=True, ) def build(self): @@ -87,16 +90,16 @@ class LinuxKbuildTreeConan(ConanFile): kernelrelease = self._capture(f"{make_base} kernelrelease") compiler = self._capture(f"{self._cross_gcc} --version").splitlines()[0] - git_commit = self._capture(f"git -C {shlex.quote(linux)} rev-parse HEAD") + source_url, sha256 = self._linux_source() save( self, os.path.join(self.build_folder, "kbuild-tree-info.txt"), "\n".join( [ - f"url={self.options.url}", + f"url={source_url}", f"ref={self._linux_ref_from_version()}", - f"git_commit={git_commit}", + f"sha256={sha256 or ''}", f"kernelrelease={kernelrelease}", f"arch={arch}", f"cross_compile={cross_compile}", @@ -131,6 +134,25 @@ class LinuxKbuildTreeConan(ConanFile): return f"v{version_parts[0]}.{version_parts[1]}" return f"v{self.version}" + def _linux_archive_version(self): + version_parts = str(self.version).split(".") + if len(version_parts) == 3 and version_parts[2] == "0": + return f"{version_parts[0]}.{version_parts[1]}" + return str(self.version) + + def _linux_source(self): + source = self.conan_data.get("sources", {}).get(str(self.version)) or {} + source_url = source.get("url") or self._kernel_cdn_url() + return source_url, source.get("sha256") + + def _kernel_cdn_url(self): + archive_version = self._linux_archive_version() + major = archive_version.split(".", 1)[0] + return ( + f"https://cdn.kernel.org/pub/linux/kernel/v{major}.x/" + f"linux-{archive_version}.tar.gz" + ) + @property def _kernel_arch(self): arch = str(self.settings.arch)