From 4065c4dadf2dbdcdd22ff456c93690873213cf5b Mon Sep 17 00:00:00 2001 From: Andras Laszlo Date: Fri, 16 Oct 2026 14:09:00 +0200 Subject: [PATCH] Optimize library runtime builders with -O3 -march=native -mtune=native -fomit-frame-pointer --- tools/build-riot-cxx-runtime.py | 13 ++++++++----- tools/build-riot-libc-runtime.py | 5 ++--- tools/build-riot-platform-strings.py | 5 +++-- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/tools/build-riot-cxx-runtime.py b/tools/build-riot-cxx-runtime.py index 6328901..572724e 100644 --- a/tools/build-riot-cxx-runtime.py +++ b/tools/build-riot-cxx-runtime.py @@ -15,6 +15,7 @@ generation only. Outputs build/riot-libc++.1.dylib and build/riot-libc++abi.dyli """ from concurrent.futures import ThreadPoolExecutor from pathlib import Path +import os import re import shlex import subprocess @@ -47,20 +48,22 @@ def build(library, object_dir, link_dir, output): obj = root / ("build/riot-opt-%s-%s.o" % (library, relative.replace("/", "_"))) jobs.append((relative, obj)) link[index] = str(obj) - print(library, "recompiling", len(jobs), "objects at -O2", flush=True) + print(library, "recompiling", len(jobs), "objects at -O3", flush=True) def compile_one(job): relative, obj = job - subprocess.run(["clang++", *flags["CXX_DEFINES"], *flags["CXX_INCLUDES"], *flags["CXX_FLAGS"], - "-O2", "-fno-strict-aliasing", "-c", str(source / relative), "-o", str(obj)], + cxx_flags = [f for f in flags["CXX_FLAGS"] if f not in ("-g", "-O0", "-O1", "-O2")] + subprocess.run(["clang++", *flags["CXX_DEFINES"], *flags["CXX_INCLUDES"], *cxx_flags, + "-O3", "-march=native", "-mtune=native", "-fomit-frame-pointer", "-fno-strict-aliasing", + "-c", str(source / relative), "-o", str(obj)], check=True, capture_output=True) riot_build_gate.wait_until_free() - with ThreadPoolExecutor(max_workers=6) as pool: + with ThreadPoolExecutor(max_workers=os.cpu_count() or 8) as pool: list(pool.map(compile_one, jobs)) link[link.index("-o") + 1] = str(root / "build" / output) subprocess.run(link, cwd=folder, check=True) - print("built build/" + output, len(jobs), "objects at -O2", flush=True) + print("built build/" + output, len(jobs), "objects at -O3", flush=True) if __name__ == "__main__": diff --git a/tools/build-riot-libc-runtime.py b/tools/build-riot-libc-runtime.py index 3060326..1ff53c6 100644 --- a/tools/build-riot-libc-runtime.py +++ b/tools/build-riot-libc-runtime.py @@ -100,9 +100,8 @@ def compile_command(target_folder, source, object_path): skip = True continue cleaned.append(token) - if "-O2" not in cleaned: - cleaned.append("-O2") - cleaned.append("-fno-strict-aliasing") + cleaned = [t for t in cleaned if t not in ("-g", "-O0", "-O1", "-O2")] + cleaned.extend(["-O3", "-march=native", "-mtune=native", "-fno-strict-aliasing", "-fomit-frame-pointer"]) return cleaned return None diff --git a/tools/build-riot-platform-strings.py b/tools/build-riot-platform-strings.py index 18bfcda..a4a1732 100644 --- a/tools/build-riot-platform-strings.py +++ b/tools/build-riot-platform-strings.py @@ -27,10 +27,11 @@ for original in list(link): if not original.startswith('CMakeFiles/platform_obj.dir/src/string/generic/') or not original.endswith('.c.o'):continue relative=original.split('platform_obj.dir/',1)[1].removesuffix('.o') obj=root/('build/riot-platform-'+Path(relative).name+'.o') - subprocess.run(['clang',*flags['C_DEFINES'],*flags['C_INCLUDES'],*flags['C_FLAGS'],'-O2','-fno-builtin','-fno-strict-aliasing','-c',str(root/'build/darling-src/src/external/libplatform'/relative),'-o',str(obj)],check=True) + c_flags = [f for f in flags['C_FLAGS'] if f not in ('-g', '-O0', '-O1', '-O2')] + subprocess.run(['clang',*flags['C_DEFINES'],*flags['C_INCLUDES'],*c_flags,'-O3','-march=native','-mtune=native','-fomit-frame-pointer','-fno-builtin','-fno-strict-aliasing','-c',str(root/'build/darling-src/src/external/libplatform'/relative),'-o',str(obj)],check=True) link[link.index(original)]=str(obj) recompiled+=1 link[link.index('-o')+1]=str(root/'build/riot-libsystem_platform.dylib') subprocess.run(link,cwd=folder,check=True) -print('built build/riot-libsystem_platform.dylib with',recompiled,'string objects at -O2') +print('built build/riot-libsystem_platform.dylib with',recompiled,'string objects at -O3') p=root/'build/m810-platform-runtime';p.mkdir(exist_ok=True);shutil.copy2(root/'build/riot-libsystem_platform.dylib',p/'libsystem_platform.dylib')