mirror of
https://github.com/lucannez64/darling-lol.git
synced 2026-10-26 19:47:42 +00:00
Publish portable Darling runtime patch snapshot and testing tools
This commit is contained in:
commit
a96cdc62b1
186 files changed
+45822
No files matched your search
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Build an isolated optimized allocator and its native integrity check."""
|
||||
from pathlib import Path
|
||||
import shlex
|
||||
import subprocess
|
||||
import shutil
|
||||
|
||||
root = Path(__file__).resolve().parent.parent
|
||||
build = root / "build/darling-src/build"
|
||||
component = build / "src/external/libmalloc"
|
||||
flags = {}
|
||||
for line in (component / "CMakeFiles/system_malloc_obj.dir/flags.make").read_text().splitlines():
|
||||
if line.startswith("C_") and " = " in line:
|
||||
key, value = line.split(" = ", 1)
|
||||
flags[key] = shlex.split(value)
|
||||
resource_include = subprocess.check_output(["clang", "-print-resource-dir"], text=True).strip() + "/include"
|
||||
flags["C_INCLUDES"] = [resource_include if value.startswith("/usr/lib/clang/") and value.endswith("/include") else value for value in flags["C_INCLUDES"]]
|
||||
flags["C_INCLUDES"].append("-I" + str(root / "build/darling-src/src/startup/mldr/elfcalls"))
|
||||
link = shlex.split((component / "CMakeFiles/system_malloc.dir/link.txt").read_text())
|
||||
objects = [arg for arg in link if arg.startswith("CMakeFiles/system_malloc_obj.dir/") and arg.endswith(".o")]
|
||||
for original in objects:
|
||||
name = Path(original).name.removesuffix(".o")
|
||||
obj = root / ("build/riot-malloc-" + name + ".o")
|
||||
extra = ["-DOS_VARIANT_NOTRESOLVED=1", "-DOS_VARIANT_RESOLVED=1"] if name == "nanov2_malloc.c" else []
|
||||
subprocess.run(["clang", *flags["C_DEFINES"], *flags["C_INCLUDES"], *flags["C_FLAGS"],
|
||||
*extra, "-O2", "-fno-strict-aliasing", "-c",
|
||||
str(root / "build/darling-src/src/external/libmalloc/src" / name),
|
||||
"-o", str(obj)], check=True)
|
||||
link[link.index(original)] = str(obj)
|
||||
link[link.index("-o") + 1] = str(root / "build/riot-libsystem_malloc.dylib")
|
||||
subprocess.run(link, cwd=component, check=True)
|
||||
candidate = root / "build/riot-malloc-check-runtime"
|
||||
candidate.mkdir(exist_ok=True)
|
||||
shutil.copy2(root / "build/riot-libsystem_malloc.dylib", candidate / "libsystem_malloc.dylib")
|
||||
|
||||
probe_flags = {}
|
||||
for line in (build / "src/frameworks/CoreVideo/CMakeFiles/CoreVideo.dir/flags.make").read_text().splitlines():
|
||||
if line.startswith("C_") and " = " in line:
|
||||
key, value = line.split(" = ", 1)
|
||||
probe_flags[key] = shlex.split(value)
|
||||
probe_flags["C_INCLUDES"] = [resource_include if value.startswith("/usr/lib/clang/") and value.endswith("/include") else value for value in probe_flags["C_INCLUDES"]]
|
||||
obj = root / "build/riot-malloc-integrity-check.o"
|
||||
subprocess.run(["clang", *probe_flags["C_DEFINES"], *probe_flags["C_INCLUDES"],
|
||||
*probe_flags["C_FLAGS"], "-O2", "-c", str(root / "tools/riot-malloc-integrity-check.c"),
|
||||
"-o", str(obj)], check=True)
|
||||
subprocess.run(["clang", "-target", "x86_64-apple-macosx11.0", "-fuse-ld=lld", "-nostdlib",
|
||||
"-isysroot", "@DARLING_SDK@", str(obj), "-lSystem",
|
||||
"-o", str(root / "build/riot-malloc-integrity-check")], check=True)
|
||||
Reference in new issue
Block a user