forked from semios/semios-packages
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4e84558f9a |
+4
-37
@@ -1,8 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import stat
|
import stat
|
||||||
import subprocess
|
import subprocess
|
||||||
import tempfile
|
|
||||||
import shutil
|
|
||||||
|
|
||||||
from lib import common
|
from lib import common
|
||||||
|
|
||||||
@@ -15,8 +13,6 @@ def _is_elf(filepath):
|
|||||||
|
|
||||||
|
|
||||||
def autostrip(composer):
|
def autostrip(composer):
|
||||||
processed_inodes = {}
|
|
||||||
|
|
||||||
for ent in common.treedir(composer.workdir):
|
for ent in common.treedir(composer.workdir):
|
||||||
if not ent.is_file(follow_symlinks=False):
|
if not ent.is_file(follow_symlinks=False):
|
||||||
continue
|
continue
|
||||||
@@ -24,36 +20,7 @@ def autostrip(composer):
|
|||||||
continue
|
continue
|
||||||
if not _is_elf(ent.path):
|
if not _is_elf(ent.path):
|
||||||
continue
|
continue
|
||||||
|
oldperm = stat.S_IMODE(os.stat(ent.path).st_mode)
|
||||||
stat_info = os.stat(ent.path)
|
os.chmod(ent.path, 0o777)
|
||||||
inode_key = (stat_info.st_dev, stat_info.st_ino)
|
subprocess.run([strip, ent.path], check=True)
|
||||||
if inode_key in processed_inodes:
|
os.chmod(ent.path, oldperm)
|
||||||
continue
|
|
||||||
processed_inodes[inode_key] = True
|
|
||||||
|
|
||||||
oldperm = stat.S_IMODE(stat_info.st_mode)
|
|
||||||
|
|
||||||
try:
|
|
||||||
with tempfile.NamedTemporaryFile(mode='wb', delete=False) as tmp_file:
|
|
||||||
tmp_path = tmp_file.name
|
|
||||||
shutil.copy2(ent.path, tmp_path)
|
|
||||||
os.chmod(tmp_path, 0o777)
|
|
||||||
|
|
||||||
subprocess.run([strip, tmp_path], check=True)
|
|
||||||
|
|
||||||
with open(tmp_path, 'rb') as tmp_file:
|
|
||||||
stripped_data = tmp_file.read()
|
|
||||||
|
|
||||||
with open(ent.path, 'r+b') as original_file:
|
|
||||||
original_file.truncate(0)
|
|
||||||
original_file.write(stripped_data)
|
|
||||||
original_file.flush()
|
|
||||||
os.fsync(original_file.fileno())
|
|
||||||
|
|
||||||
os.chmod(ent.path, oldperm)
|
|
||||||
os.unlink(tmp_path)
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
if 'tmp_path' in locals() and os.path.exists(tmp_path):
|
|
||||||
os.unlink(tmp_path)
|
|
||||||
raise RuntimeError(f"Failed to strip {ent.path}: {e}") from e
|
|
||||||
|
|||||||
+6
-6
@@ -4,16 +4,16 @@ from . import packie
|
|||||||
|
|
||||||
all: dict[str, dict[str, str]] = {
|
all: dict[str, dict[str, str]] = {
|
||||||
"aarch64-semios-linux": {
|
"aarch64-semios-linux": {
|
||||||
"CC": "clang -target aarch64-unknown-linux-musl",
|
"CC": "clang -target aarch64-semios-linux-musl",
|
||||||
"CXX": "clang++ -target aarch64-unknown-linux-musl",
|
"CXX": "clang++ -target aarch64-semios-linux-musl",
|
||||||
},
|
},
|
||||||
"x86_64-semios-linux": {
|
"x86_64-semios-linux": {
|
||||||
"CC": "clang -target x86_64-unknown-linux-musl",
|
"CC": "clang -target x86_64-semios-linux-musl",
|
||||||
"CXX": "clang++ -target x86_64-unknown-linux-musl",
|
"CXX": "clang++ -target x86_64-semios-linux-musl",
|
||||||
},
|
},
|
||||||
"riscv64-semios-linux": {
|
"riscv64-semios-linux": {
|
||||||
"CC": "clang -target riscv64-unknown-linux-musl",
|
"CC": "clang -target riscv64-semios-linux-musl",
|
||||||
"CXX": "clang++ -target riscv64-unknown-linux-musl",
|
"CXX": "clang++ -target riscv64-semios-linux-musl",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
_target: str = packie.host_arch()
|
_target: str = packie.host_arch()
|
||||||
|
|||||||
+24
-15
@@ -13,11 +13,8 @@ BASE_REQUIREMENTS = [
|
|||||||
# Packages for running `semios-packages` scripts
|
# Packages for running `semios-packages` scripts
|
||||||
"python",
|
"python",
|
||||||
"packie",
|
"packie",
|
||||||
"zstd",
|
|
||||||
"libarchive-tools",
|
|
||||||
# Packages for building packages that require patching
|
|
||||||
"patch",
|
"patch",
|
||||||
# Packages for downloading various formats of tarballs
|
"zstd",
|
||||||
"libz-ng",
|
"libz-ng",
|
||||||
"liblzma",
|
"liblzma",
|
||||||
"libbzip2",
|
"libbzip2",
|
||||||
@@ -95,20 +92,32 @@ def enter_build_env(root: str, cmd: list[str], chdir: str = "/"):
|
|||||||
subprocess.run(
|
subprocess.run(
|
||||||
[
|
[
|
||||||
"bwrap",
|
"bwrap",
|
||||||
"--bind", root, "/",
|
"--bind",
|
||||||
|
root,
|
||||||
|
"/",
|
||||||
"--unshare-pid",
|
"--unshare-pid",
|
||||||
"--unshare-user",
|
"--unshare-user",
|
||||||
"--uid", "0",
|
"--uid",
|
||||||
"--gid", "0",
|
"0",
|
||||||
"--dev", "/dev",
|
"--gid",
|
||||||
"--bind", "/sys", "/sys",
|
"0",
|
||||||
"--proc", "/proc",
|
"--dev",
|
||||||
|
"/dev",
|
||||||
|
"--bind",
|
||||||
|
"/sys",
|
||||||
|
"/sys",
|
||||||
|
"--proc",
|
||||||
|
"/proc",
|
||||||
"--clearenv",
|
"--clearenv",
|
||||||
"--setenv", "HOME", "/home/root",
|
"--setenv",
|
||||||
"--setenv", "PATH", "/bin",
|
"HOME",
|
||||||
"--setenv", "SEMIOS_PKGBUILD_IN_ATOMIC", "1",
|
"/home/root",
|
||||||
"--setenv", "USER", "root",
|
"--setenv",
|
||||||
"--setenv", "LOGNAME", "root",
|
"PATH",
|
||||||
|
"/bin",
|
||||||
|
"--setenv",
|
||||||
|
"SEMIOS_PKGBUILD_IN_ATOMIC",
|
||||||
|
"1",
|
||||||
"--chdir",
|
"--chdir",
|
||||||
chdir,
|
chdir,
|
||||||
]
|
]
|
||||||
|
|||||||
+10
-11
@@ -4,10 +4,17 @@ import shutil
|
|||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
if sys.version_info >= (3, 14):
|
||||||
|
_archive_format = "zstdtar"
|
||||||
|
_archive_suffix = ".tar.zst"
|
||||||
|
else:
|
||||||
|
_archive_format = "gztar"
|
||||||
|
_archive_suffix = ".tar.gz"
|
||||||
|
|
||||||
|
|
||||||
class PkgComposer:
|
class PkgComposer:
|
||||||
def __init__(self, pkgfile: str):
|
def __init__(self, pkgfile: str):
|
||||||
self.pkgfile = os.path.abspath(pkgfile)
|
self.pkgfile = pkgfile
|
||||||
|
|
||||||
def setworkdir(self, workdir: str):
|
def setworkdir(self, workdir: str):
|
||||||
self.workdir = workdir
|
self.workdir = workdir
|
||||||
@@ -26,16 +33,8 @@ class PkgComposer:
|
|||||||
f.write("\n")
|
f.write("\n")
|
||||||
|
|
||||||
def compose(self):
|
def compose(self):
|
||||||
subprocess.run(
|
shutil.make_archive(self.pkgfile, _archive_format, self.workdir)
|
||||||
[
|
shutil.move(self.pkgfile + _archive_suffix, self.pkgfile)
|
||||||
"tar", "cpf", f"{self.pkgfile}.tar",
|
|
||||||
"-C", self.workdir,
|
|
||||||
"--numeric-owner",
|
|
||||||
".",
|
|
||||||
],
|
|
||||||
check=True,
|
|
||||||
)
|
|
||||||
subprocess.run(["zstd", "--rm", "-f", f"{self.pkgfile}.tar", "-o", self.pkgfile], check=True)
|
|
||||||
|
|
||||||
def makedir(self, name: str):
|
def makedir(self, name: str):
|
||||||
os.mkdir(f"{self.workdir}/bundle/{name}")
|
os.mkdir(f"{self.workdir}/bundle/{name}")
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ srcdir = None
|
|||||||
packname = None
|
packname = None
|
||||||
|
|
||||||
def llvm_host_triple():
|
def llvm_host_triple():
|
||||||
return arch.get_target().replace("-semios-linux", "-unknown-linux-musl")
|
return arch.get_target().replace("-semios-linux", "-semios-linux-musl")
|
||||||
|
|
||||||
def cmake(sourcedir, args):
|
def cmake(sourcedir, args):
|
||||||
builddir = os.getcwd() + f"/../_build_{sourcedir}"
|
builddir = os.getcwd() + f"/../_build_{sourcedir}"
|
||||||
@@ -76,7 +76,7 @@ def auto_pack_dev(composer, name, devbins=[], extdirs=["lib/cmake"]):
|
|||||||
composer.makedir("lib")
|
composer.makedir("lib")
|
||||||
for i in os.listdir("lib"):
|
for i in os.listdir("lib"):
|
||||||
prefix = None
|
prefix = None
|
||||||
if os.path.isdir(f"lib/{i}") and f"lib/{i}" in extdirs:
|
if os.path.isdir(i) and f"lib/{i}" in extdirs:
|
||||||
composer.add_dir(f"lib/{i}", f"lib/{i}")
|
composer.add_dir(f"lib/{i}", f"lib/{i}")
|
||||||
elif ".so" in i:
|
elif ".so" in i:
|
||||||
prefix = get_prefix(f"lib{name}")
|
prefix = get_prefix(f"lib{name}")
|
||||||
@@ -132,7 +132,7 @@ def build_clang():
|
|||||||
"-DCLANG_DEFAULT_CXX_STDLIB=libc++",
|
"-DCLANG_DEFAULT_CXX_STDLIB=libc++",
|
||||||
"-DCLANG_DEFAULT_RTLIB=compiler-rt",
|
"-DCLANG_DEFAULT_RTLIB=compiler-rt",
|
||||||
"-DLLVM_INCLUDE_TESTS=OFF",
|
"-DLLVM_INCLUDE_TESTS=OFF",
|
||||||
f"-DC_INCLUDE_DIRS=/lib/{arch.get_target()}/include:{get_prefix('clang')}/lib/clang/{pkgver_major}/include",
|
f"-DC_INCLUDE_DIRS=/lib/{arch.get_target()}/include",
|
||||||
]
|
]
|
||||||
cmake("clang", import_llvm() + options)
|
cmake("clang", import_llvm() + options)
|
||||||
|
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
from lib.make import *
|
|
||||||
from lib import python
|
|
||||||
|
|
||||||
|
|
||||||
python.version("26.3")
|
|
||||||
description("Core utilities for Python packages")
|
|
||||||
maintainer("sisungo <[email protected]>")
|
|
||||||
source_url("https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz")
|
|
||||||
|
|
||||||
python.builddep("$shortcut")
|
|
||||||
|
|
||||||
|
|
||||||
def build():
|
|
||||||
python.build()
|
|
||||||
python.install()
|
|
||||||
|
|
||||||
on_build(build)
|
|
||||||
|
|
||||||
|
|
||||||
package("packaging.py")
|
|
||||||
python.dep("python")
|
|
||||||
python.use_auto_pack()
|
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
from lib.make import *
|
||||||
|
from lib import cpp
|
||||||
|
|
||||||
|
|
||||||
|
version("1.4.357.0")
|
||||||
|
description("SPIR-V headers")
|
||||||
|
maintainer("sisungo <[email protected]>")
|
||||||
|
source_url("https://github.com/KhronosGroup/SPIRV-Headers/archive/refs/tags/vulkan-sdk-1.4.357.0.tar.gz")
|
||||||
|
|
||||||
|
builddep("shortcut/cmake")
|
||||||
|
builddep("shortcut/c")
|
||||||
|
|
||||||
|
|
||||||
|
def build():
|
||||||
|
cpp.cmake()
|
||||||
|
cpp.ninja()
|
||||||
|
cpp.ninja_install()
|
||||||
|
|
||||||
|
on_build(build)
|
||||||
|
|
||||||
|
|
||||||
|
def fix_pc(path):
|
||||||
|
with open(path, 'r') as file:
|
||||||
|
content = file.read()
|
||||||
|
content = content.replace("includedir=//usr/include", f"includedir={get_prefix('spirv-headers')}/include")
|
||||||
|
with open(path, 'wt+') as file:
|
||||||
|
file.write(content)
|
||||||
|
|
||||||
|
def pack(composer):
|
||||||
|
composer.add_dir("include", "include")
|
||||||
|
composer.add_dir("share", "lib")
|
||||||
|
fix_pc(f"{composer.workdir}/bundle/lib/pkgconfig/SPIRV-Headers.pc")
|
||||||
|
|
||||||
|
package("spirv-headers")
|
||||||
|
on_pack(pack)
|
||||||
Reference in New Issue
Block a user