from SCons.Platform import TempFileMunge from fbt.util import tempfile_arg_esc_func, single_quote, wrap_tempfile import os import multiprocessing Import("VAR_ENV") forward_os_env = { # Import PATH from OS env - scons doesn't do that by default "PATH": os.environ["PATH"], } # Proxying CI environment to child processes & scripts variables_to_forward = [ # CI/CD variables "WORKFLOW_BRANCH_OR_TAG", "DIST_SUFFIX", # Python & other tools "HOME", "APPDATA", "PYTHONHOME", "PYTHONNOUSERSITE", "TMP", "TEMP", # Colors for tools "TERM", ] if proxy_env := GetOption("proxy_env"): variables_to_forward.extend(proxy_env.split(",")) for env_value_name in variables_to_forward: if environ_value := os.environ.get(env_value_name, None): forward_os_env[env_value_name] = environ_value coreenv = VAR_ENV.Clone( tools=[ ( "crosscc", { "toolchain_prefix": "arm-none-eabi-", "versions": VAR_ENV["FBT_TOOLCHAIN_VERSIONS"], }, ), "python3", "sconsmodular", "sconsrecursiveglob", "ccache", ], TEMPFILE=TempFileMunge, MAXLINELENGTH=2048, PROGSUFFIX=".elf", ENV=forward_os_env, ) # If DIST_SUFFIX is set in environment, is has precedence (set by CI) if os_suffix := os.environ.get("DIST_SUFFIX", None): coreenv.Replace( DIST_SUFFIX=os_suffix, ) # print(coreenv.Dump()) if not coreenv["VERBOSE"]: coreenv.SetDefault( CCCOMSTR="\tCC\t${SOURCE}", CXXCOMSTR="\tCPP\t${SOURCE}", ASCOMSTR="\tASM\t${SOURCE}", ARCOMSTR="\tAR\t${TARGET}", RANLIBCOMSTR="\tRANLIB\t${TARGET}", LINKCOMSTR="\tLINK\t${TARGET}", INSTALLSTR="\tINSTALL\t${TARGET}", APPSCOMSTR="\tAPPS\t${TARGET}", VERSIONCOMSTR="\tVERSION\t${TARGET}", STRIPCOMSTR="\tSTRIP\t${TARGET}", OBJDUMPCOMSTR="\tOBJDUMP\t${TARGET}", # GDBCOMSTR="\tGDB\t${SOURCE}", # GDBPYCOMSTR="\tGDB-PY\t${SOURCE}", ) # Default value for commandline options SetOption("num_jobs", multiprocessing.cpu_count()) # Avoiding re-scan of all sources on every startup SetOption("implicit_cache", True) # SetOption("implicit_deps_unchanged", True) # More aggressive caching SetOption("max_drift", 1) # Random task queue - to discover isses with build logic faster # SetOption("random", 1) # Setting up temp file parameters - to overcome command line length limits coreenv["TEMPFILEARGESCFUNC"] = tempfile_arg_esc_func wrap_tempfile(coreenv, "LINKCOM") wrap_tempfile(coreenv, "ARCOM") coreenv["SINGLEQUOTEFUNC"] = single_quote Return("coreenv")