Files
semios-packages/lib/rust.py
T
2026-06-17 20:27:37 +08:00

64 lines
1.8 KiB
Python

import os
import subprocess
from . import arch, make, pkgcomposer
def _rust_triple(semios: str) -> str:
return semios.replace("-semios-linux", "-unknown-linux-musl")
def build(rem: list[str] = []):
cmdline = [
"cargo",
"build",
"--release",
"--target",
_rust_triple(arch.get_target()),
] + rem
os.environ["RUSTFLAGS"] = (
os.environ.get("RUSTFLAGS", "") + " -C target-feature=-crt-static"
)
subprocess.run(cmdline)
def artifacts_dir():
return f"target/{_rust_triple(arch.get_target())}/release"
def _do_auto_pack(pc: pkgcomposer.PkgComposer, srcdir: str, dstdir: str, filter):
pc.makedir(dstdir)
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}")
def _autopack_filter_lib(ent) -> bool:
if ent.is_dir(follow_symlinks=False):
return False
if ent.name.endswith(".so"):
return True
else:
return False
def _autopack_filter_bin(ent) -> bool:
return os.access(ent.path, os.X_OK) and ent.is_file(follow_symlinks=False)
def _auto_pack(profiles: list[str], pc: pkgcomposer.PkgComposer):
if "lib" in profiles:
_do_auto_pack(pc, artifacts_dir(), "lib", _autopack_filter_lib)
if "bin" in profiles:
_do_auto_pack(pc, artifacts_dir(), "bin", _autopack_filter_bin)
def use_auto_pack(profiles: list[str]):
make.on_pack(lambda pc: _auto_pack(profiles, pc))