SConscript 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. Import("env")
  2. from fbt.version import get_git_commit_unix_timestamp
  3. assetsenv = env.Clone(
  4. tools=["fbt_assets"],
  5. FW_LIB_NAME="assets",
  6. GIT_UNIX_TIMESTAMP=get_git_commit_unix_timestamp(),
  7. )
  8. assetsenv.ApplyLibFlags()
  9. icons = assetsenv.CompileIcons(
  10. assetsenv.Dir("compiled"), assetsenv.Dir("#/assets/icons")
  11. )
  12. assetsenv.Alias("icons", icons)
  13. # Protobuf .proto -> .c + .h
  14. proto_src = assetsenv.Glob("protobuf/*.proto", source=True)
  15. proto_options = assetsenv.Glob("protobuf/*.options", source=True)
  16. proto = assetsenv.ProtoBuilder(assetsenv.Dir("compiled"), proto_src)
  17. assetsenv.Depends(proto, proto_options)
  18. # Precious(proto)
  19. assetsenv.Alias("proto", proto)
  20. # Internal animations
  21. dolphin_internal = assetsenv.DolphinSymBuilder(
  22. assetsenv.Dir("compiled"),
  23. assetsenv.Dir("#/assets/dolphin"),
  24. DOLPHIN_RES_TYPE="internal",
  25. )
  26. assetsenv.Alias("dolphin_internal", dolphin_internal)
  27. # Blocking animations
  28. dolphin_blocking = assetsenv.DolphinSymBuilder(
  29. assetsenv.Dir("compiled"),
  30. assetsenv.Dir("#/assets/dolphin"),
  31. DOLPHIN_RES_TYPE="blocking",
  32. )
  33. assetsenv.Alias("dolphin_blocking", dolphin_blocking)
  34. # Protobuf version meta
  35. proto_ver = assetsenv.ProtoVerBuilder(
  36. "compiled/protobuf_version.h",
  37. "#/assets/protobuf/Changelog",
  38. )
  39. assetsenv.Depends(proto_ver, proto)
  40. assetsenv.Alias("proto_ver", proto_ver)
  41. # Gather everything into a static lib
  42. assets_parts = (icons, proto, dolphin_blocking, dolphin_internal, proto_ver)
  43. env.Replace(FW_ASSETS_HEADERS=assets_parts)
  44. assetslib = assetsenv.Library("${FW_LIB_NAME}", assets_parts)
  45. assetsenv.Install("${LIB_DIST_DIR}", assetslib)
  46. # Resources for SD card
  47. env.SetDefault(FW_RESOURCES=None)
  48. if assetsenv["IS_BASE_FIRMWARE"]:
  49. # External dolphin animations
  50. dolphin_external = assetsenv.DolphinExtBuilder(
  51. assetsenv.Dir("#/assets/resources/dolphin"),
  52. assetsenv.Dir("#/assets/dolphin"),
  53. DOLPHIN_RES_TYPE="external",
  54. )
  55. if assetsenv["FORCE"]:
  56. assetsenv.AlwaysBuild(dolphin_external)
  57. assetsenv.Alias("dolphin_ext", dolphin_external)
  58. assetsenv.Clean(dolphin_external, assetsenv.Dir("#/assets/resources/dolphin"))
  59. # Resources manifest
  60. resources = assetsenv.Command(
  61. "#/assets/resources/Manifest",
  62. assetsenv.GlobRecursive(
  63. "*", assetsenv.Dir("resources").srcnode(), exclude="Manifest"
  64. ),
  65. action=Action(
  66. '${PYTHON3} "${ASSETS_COMPILER}" manifest "${TARGET.dir.posix}" --timestamp=${GIT_UNIX_TIMESTAMP}',
  67. "${RESMANIFESTCOMSTR}",
  68. ),
  69. )
  70. assetsenv.Precious(resources)
  71. assetsenv.AlwaysBuild(resources)
  72. assetsenv.Clean(
  73. resources,
  74. assetsenv.Dir("#/assets/resources/apps"),
  75. )
  76. # Exporting resources node to external environment
  77. env.Replace(FW_RESOURCES=resources)
  78. assetsenv.Alias("resources", resources)
  79. Return("assetslib")