# Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos import os import sysconfig Import('env', 'common') _PRIVATE_ROOT_RAW = os.environ.get("IQPILOT_PROPRIETARY_RUNTIME_SOURCE_ROOT", "").strip() _REQUIRE_PRIVATE_SOURCE = os.environ.get("IQPILOT_BUILD_PROPRIETARY_RUNTIME", "") == "1" _ALLOW_HOST_RUNTIME = os.environ.get("IQPILOT_BUILD_HOST_RUNTIME", "") == "1" _BUILD_NATIVE_RUNTIME = env["PLATFORM"] != "darwin" or _ALLOW_HOST_RUNTIME if _PRIVATE_ROOT_RAW: from pathlib import Path _PRIVATE_ROOT = Path(_PRIVATE_ROOT_RAW).resolve() _PRIVATE_SOURCES = { name: _PRIVATE_ROOT / name for name in ("runner.cc", "bundle_common.cc", "bundle_common.h", "verified_import.cc") } else: _PRIVATE_ROOT = None _PRIVATE_SOURCES = {} def _private_sources_ready() -> bool: if _PRIVATE_ROOT is None: if _REQUIRE_PRIVATE_SOURCE: raise FileNotFoundError( "IQPILOT_PROPRIETARY_RUNTIME_SOURCE_ROOT is not set" ) print("Skipping proprietary runtime native build; no private source root configured.") return False missing = [str(path) for path in _PRIVATE_SOURCES.values() if not path.exists()] if not missing: return True if _REQUIRE_PRIVATE_SOURCE: raise FileNotFoundError( "missing proprietary runtime source files:\n" + "\n".join(missing) ) print( "Skipping proprietary runtime native build; private source unavailable at " f"{_PRIVATE_ROOT}" ) return False runner = None verified_import = None if not _BUILD_NATIVE_RUNTIME: print( "Skipping proprietary runtime host build on darwin; " "set IQPILOT_BUILD_HOST_RUNTIME=1 to override." ) elif _private_sources_ready(): runner = env.Program( 'iqpilot_bundle_runner', [str(_PRIVATE_SOURCES["runner.cc"]), str(_PRIVATE_SOURCES["bundle_common.cc"])], LIBS=common + ['json11', 'crypto', 'pthread'], ) python_module_env = env.Clone() python_module_env["SHLIBPREFIX"] = "" python_module_env["SHLIBSUFFIX"] = ".so" python_module_env.Append(CPPPATH=[sysconfig.get_paths()["include"], str(_PRIVATE_ROOT)]) python_module_env["LINKFLAGS"] = [flag for flag in python_module_env["LINKFLAGS"] if flag != "-Wl,--no-undefined"] if python_module_env["PLATFORM"] == "darwin": python_module_env.Append(LINKFLAGS=["-undefined", "dynamic_lookup"]) verified_import = python_module_env.SharedLibrary( '_verified_import', [str(_PRIVATE_SOURCES["verified_import.cc"]), str(_PRIVATE_SOURCES["bundle_common.cc"])], LIBS=common + ['json11', 'crypto', 'pthread'], ) Export('runner', 'verified_import')