environ.scons 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import SCons
  2. from SCons.Platform import TempFileMunge
  3. from fbt import util
  4. import os
  5. import multiprocessing
  6. Import("VAR_ENV")
  7. forward_os_env = {
  8. # Import PATH from OS env - scons doesn't do that by default
  9. "PATH": os.environ["PATH"],
  10. }
  11. # Proxying CI environment to child processes & scripts
  12. for env_value_name in ("WORKFLOW_BRANCH_OR_TAG", "DIST_SUFFIX", "HOME", "APPDATA"):
  13. if environ_value := os.environ.get(env_value_name, None):
  14. forward_os_env[env_value_name] = environ_value
  15. coreenv = VAR_ENV.Clone(
  16. tools=[
  17. (
  18. "crosscc",
  19. {
  20. "toolchain_prefix": "arm-none-eabi-",
  21. "versions": VAR_ENV["FBT_TOOLCHAIN_VERSIONS"],
  22. },
  23. ),
  24. "python3",
  25. "sconsmodular",
  26. "sconsrecursiveglob",
  27. "ccache",
  28. ],
  29. TEMPFILE=TempFileMunge,
  30. MAXLINELENGTH=2048,
  31. PROGSUFFIX=".elf",
  32. ENV=forward_os_env,
  33. )
  34. # If DIST_SUFFIX is set in environment, is has precedence (set by CI)
  35. if os_suffix := os.environ.get("DIST_SUFFIX", None):
  36. coreenv.Replace(
  37. DIST_SUFFIX=os_suffix,
  38. )
  39. # print(coreenv.Dump())
  40. if not coreenv["VERBOSE"]:
  41. coreenv.SetDefault(
  42. CCCOMSTR="\tCC\t${SOURCE}",
  43. CXXCOMSTR="\tCPP\t${SOURCE}",
  44. ASCOMSTR="\tASM\t${SOURCE}",
  45. ARCOMSTR="\tAR\t${TARGET}",
  46. RANLIBCOMSTR="\tRANLIB\t${TARGET}",
  47. LINKCOMSTR="\tLINK\t${TARGET}",
  48. INSTALLSTR="\tINSTALL\t${TARGET}",
  49. APPSCOMSTR="\tAPPS\t${TARGET}",
  50. VERSIONCOMSTR="\tVERSION\t${TARGET}",
  51. STRIPCOMSTR="\tSTRIP\t${TARGET}",
  52. OBJDUMPCOMSTR="\tOBJDUMP\t${TARGET}",
  53. # GDBCOMSTR="\tGDB\t${SOURCE}",
  54. # GDBPYCOMSTR="\tGDB-PY\t${SOURCE}",
  55. )
  56. # Default value for commandline options
  57. SetOption("num_jobs", multiprocessing.cpu_count())
  58. # Avoiding re-scan of all sources on every startup
  59. SetOption("implicit_cache", True)
  60. SetOption("implicit_deps_unchanged", True)
  61. # More aggressive caching
  62. SetOption("max_drift", 1)
  63. # Random task queue - to discover isses with build logic faster
  64. # SetOption("random", 1)
  65. # Setting up temp file parameters - to overcome command line length limits
  66. coreenv["TEMPFILEARGESCFUNC"] = util.tempfile_arg_esc_func
  67. util.wrap_tempfile(coreenv, "LINKCOM")
  68. util.wrap_tempfile(coreenv, "ARCOM")
  69. Return("coreenv")