Files
opencoreC/scripts/build_lvgl.py
T

48 lines
1.6 KiB
Python

#!/usr/bin/env python3
import os
import sys
import glob
import subprocess
import concurrent.futures
def main():
cc = sys.argv[1] if len(sys.argv) > 1 else "gcc"
cflags_str = sys.argv[2] if len(sys.argv) > 2 else ""
build_dir = sys.argv[3] if len(sys.argv) > 3 else "build"
cflags = [f for f in cflags_str.split() if f]
lvgl_obj_dir = os.path.join(build_dir, "lvgl")
target_lib = os.path.join(build_dir, "liblvgl.a")
srcs = sorted(glob.glob("lib/lvgl/src/**/*.c", recursive=True))
tasks = []
for src in srcs:
rel = os.path.relpath(src, "lib/lvgl")
obj = os.path.join(lvgl_obj_dir, os.path.splitext(rel)[0] + ".o")
os.makedirs(os.path.dirname(obj), exist_ok=True)
tasks.append((src, obj))
def compile_task(item):
src, obj = item
if not os.path.exists(obj) or os.path.getmtime(src) > os.path.getmtime(obj):
cmd = [cc] + cflags + ["-Ilib/lvgl", "-O2", "-c", src, "-o", obj]
res = subprocess.run(cmd, capture_output=True, text=True)
if res.returncode != 0:
print(f"[ERR] Failed to compile {src}:\n{res.stderr}", file=sys.stderr)
return False
return True
cpu_count = min(os.cpu_count() or 4, 16)
with concurrent.futures.ThreadPoolExecutor(max_workers=cpu_count) as ex:
results = list(ex.map(compile_task, tasks))
if not all(results):
sys.exit(1)
all_objs = [obj for _, obj in tasks]
subprocess.run(["ar", "rcs", target_lib] + all_objs, check=True)
if __name__ == "__main__":
main()