From f9dba39603363755b55bca22ada896563b04deb1 Mon Sep 17 00:00:00 2001 From: sisungo Date: Wed, 10 Jun 2026 07:17:27 +0800 Subject: [PATCH] feat: add package aws-lc Signed-off-by: sisungo --- lib/common.py | 21 ++++++++++++ lib/cpp.py | 68 ++++++++++++++++++++++++++++--------- lib/pkgcomposer.py | 3 ++ packages/aws-lc/pkgbuild.py | 26 ++++++++++++++ 4 files changed, 102 insertions(+), 16 deletions(-) create mode 100644 lib/common.py create mode 100644 packages/aws-lc/pkgbuild.py diff --git a/lib/common.py b/lib/common.py new file mode 100644 index 0000000..2e00d17 --- /dev/null +++ b/lib/common.py @@ -0,0 +1,21 @@ +import os +import types + + +def _wrap_treedir_entry(ent, prefix=""): + wrapped = types.SimpleNamespace() + wrapped.name = f"{prefix}/{ent.name}" if prefix else ent.name + wrapped.path = ent.path + wrapped.is_dir = ent.is_dir + wrapped.is_file = ent.is_file + wrapped.is_symlink = ent.is_symlink + return wrapped + + +def treedir(root: str, prefix: str = ""): + with os.scandir(root) as entries: + for ent in entries: + wrapped = _wrap_treedir_entry(ent, prefix) + yield wrapped + if wrapped.is_dir(follow_symlinks=False): + yield from treedir(ent.path, wrapped.name) diff --git a/lib/cpp.py b/lib/cpp.py index d1ecd63..6c58745 100644 --- a/lib/cpp.py +++ b/lib/cpp.py @@ -1,6 +1,8 @@ import os import subprocess +from lib.common import treedir + from . import make as libmake from . import pkgcomposer @@ -9,6 +11,23 @@ def configure(rem: list[str] = []): subprocess.run(["./configure"] + rem, check=True) +def cmake(rem: list[str] = []): + source_dir = os.getcwd() + os.makedirs("../cmake_build", exist_ok=True) + os.chdir("../cmake_build") + subprocess.run( + [ + "cmake", + "-GNinja", + "-DCMAKE_BUILD_TYPE=Release", + "-DCMAKE_INSTALL_PREFIX=/", + source_dir, + ] + + rem, + check=True, + ) + + def make(rem: list[str] = []): subprocess.run(["make", f"-j{os.cpu_count()}"] + rem, check=True) @@ -20,6 +39,18 @@ def make_install(rem: list[str] | None = None, chdir: bool = True): os.chdir("../cpp_install") +def ninja(rem: list[str] = []): + subprocess.run(["ninja"] + rem, check=True) + + +def ninja_install(rem: list[str] = [], chdir: bool = True): + if chdir: + os.environ["DESTDIR"] = os.getcwd() + "/../cpp_install" + subprocess.run(["ninja", "install"] + rem, check=True) + if chdir: + os.chdir(os.environ["DESTDIR"]) + + def _do_auto_pack(pc: pkgcomposer.PkgComposer, srcdir: str, dstdir: str, filter): if not os.path.exists(srcdir): return @@ -27,31 +58,36 @@ def _do_auto_pack(pc: pkgcomposer.PkgComposer, srcdir: str, dstdir: str, filter) pc.makedir(dstdir) except Exception: pass - with os.scandir(srcdir) as entries: - for ent in entries: - if filter(ent): - if ent.is_dir(follow_symlinks=False): - pc.makedir(f"{dstdir}/{ent.name}") - elif ent.is_file(follow_symlinks=False): - pc.addfile(ent.path, f"{dstdir}/{ent.name}") - elif ent.is_symlink() and not os.path.isabs(os.readlink(ent.path)): - pc.addfile(ent.path, f"{dstdir}/{ent.name}") + for ent in treedir(srcdir): + if filter(ent): + if ent.is_file(follow_symlinks=False): + pc.makedirs(os.path.dirname(f"{dstdir}/{ent.name}")) + pc.addfile(ent.path, f"{dstdir}/{ent.name}") + elif ent.is_symlink() and not os.path.isabs(os.readlink(ent.path)): + pc.addfile(ent.path, f"{dstdir}/{ent.name}") + + +def _is_dev_file(ent) -> bool: + return ( + ent.name.endswith(".o") + or ent.name.endswith(".a") + or ent.name.endswith(".la") + or ent.name.endswith(".pc") + or ent.name.endswith(".h") + or ent.name.endswith(".cmake") + ) def _autopack_filter_lib(ent) -> bool: - if ent.name.endswith(".o") or ent.name.endswith(".a"): - return False - return True + return not _is_dev_file(ent) def _autopack_filter_bin(ent) -> bool: - return True + return os.access(ent.path, os.X_OK) and ent.is_file(follow_symlinks=False) def _autopack_filter_dev(ent): - if ".so" in ent.name: - return False - return True + return _is_dev_file(ent) def _auto_pack(profiles: list[str], pc: pkgcomposer.PkgComposer): diff --git a/lib/pkgcomposer.py b/lib/pkgcomposer.py index be2b085..34a087f 100644 --- a/lib/pkgcomposer.py +++ b/lib/pkgcomposer.py @@ -32,6 +32,9 @@ class PkgComposer: def makedir(self, name: str): os.mkdir(f"{self.workdir}/bundle/{name}") + def makedirs(self, name: str): + os.makedirs(f"{self.workdir}/bundle/{name}", exist_ok=True) + def addfile(self, src: str, dst: str): shutil.copy2(src, f"{self.workdir}/bundle/{dst}", follow_symlinks=False) diff --git a/packages/aws-lc/pkgbuild.py b/packages/aws-lc/pkgbuild.py new file mode 100644 index 0000000..c72f660 --- /dev/null +++ b/packages/aws-lc/pkgbuild.py @@ -0,0 +1,26 @@ +import os + +import lib.cpp as cpp +from lib.make import * + +version("5.0.0") +source_url("https://github.com/aws/aws-lc/archive/refs/tags/v5.0.0.tar.gz") + + +def build(): + cpp.cmake(["-DBUILD_SHARED_LIBS=1"]) + cpp.ninja() + cpp.ninja_install() + os.chdir("usr") + + +on_build(build) + +package("aws-lc") +cpp.use_auto_pack(["lib"]) + +package("aws-lc-bin") +cpp.use_auto_pack(["bin"]) + +package("aws-lc-dev") +cpp.use_auto_pack(["dev"])