environ.scons 2.7 KB

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