environ.scons 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. variables_to_forward = [
  13. "WORKFLOW_BRANCH_OR_TAG",
  14. "DIST_SUFFIX",
  15. "HOME",
  16. "APPDATA",
  17. "PYTHONHOME",
  18. "PYTHONNOUSERSITE",
  19. "TMP",
  20. "TEMP",
  21. ]
  22. if proxy_env := GetOption("proxy_env"):
  23. variables_to_forward.extend(proxy_env.split(","))
  24. for env_value_name in variables_to_forward:
  25. if environ_value := os.environ.get(env_value_name, None):
  26. forward_os_env[env_value_name] = environ_value
  27. coreenv = VAR_ENV.Clone(
  28. tools=[
  29. (
  30. "crosscc",
  31. {
  32. "toolchain_prefix": "arm-none-eabi-",
  33. "versions": VAR_ENV["FBT_TOOLCHAIN_VERSIONS"],
  34. },
  35. ),
  36. "python3",
  37. "sconsmodular",
  38. "sconsrecursiveglob",
  39. "ccache",
  40. ],
  41. TEMPFILE=TempFileMunge,
  42. MAXLINELENGTH=2048,
  43. PROGSUFFIX=".elf",
  44. ENV=forward_os_env,
  45. )
  46. # If DIST_SUFFIX is set in environment, is has precedence (set by CI)
  47. if os_suffix := os.environ.get("DIST_SUFFIX", None):
  48. coreenv.Replace(
  49. DIST_SUFFIX=os_suffix,
  50. )
  51. # print(coreenv.Dump())
  52. if not coreenv["VERBOSE"]:
  53. coreenv.SetDefault(
  54. CCCOMSTR="\tCC\t${SOURCE}",
  55. CXXCOMSTR="\tCPP\t${SOURCE}",
  56. ASCOMSTR="\tASM\t${SOURCE}",
  57. ARCOMSTR="\tAR\t${TARGET}",
  58. RANLIBCOMSTR="\tRANLIB\t${TARGET}",
  59. LINKCOMSTR="\tLINK\t${TARGET}",
  60. INSTALLSTR="\tINSTALL\t${TARGET}",
  61. APPSCOMSTR="\tAPPS\t${TARGET}",
  62. VERSIONCOMSTR="\tVERSION\t${TARGET}",
  63. STRIPCOMSTR="\tSTRIP\t${TARGET}",
  64. OBJDUMPCOMSTR="\tOBJDUMP\t${TARGET}",
  65. # GDBCOMSTR="\tGDB\t${SOURCE}",
  66. # GDBPYCOMSTR="\tGDB-PY\t${SOURCE}",
  67. )
  68. # Default value for commandline options
  69. SetOption("num_jobs", multiprocessing.cpu_count())
  70. # Avoiding re-scan of all sources on every startup
  71. SetOption("implicit_cache", True)
  72. SetOption("implicit_deps_unchanged", True)
  73. # More aggressive caching
  74. SetOption("max_drift", 1)
  75. # Random task queue - to discover isses with build logic faster
  76. # SetOption("random", 1)
  77. # Setting up temp file parameters - to overcome command line length limits
  78. coreenv["TEMPFILEARGESCFUNC"] = util.tempfile_arg_esc_func
  79. util.wrap_tempfile(coreenv, "LINKCOM")
  80. util.wrap_tempfile(coreenv, "ARCOM")
  81. coreenv["SINGLEQUOTEFUNC"] = util.single_quote
  82. Return("coreenv")