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. assetslib = assetsenv.Library("${FW_LIB_NAME}", assets_parts)
  44. assetsenv.Install("${LIB_DIST_DIR}", assetslib)
  45. # Resources for SD card
  46. if assetsenv["IS_BASE_FIRMWARE"]:
  47. # External dolphin animations
  48. dolphin_external = assetsenv.DolphinExtBuilder(
  49. assetsenv.Dir("#/assets/resources/dolphin"),
  50. assetsenv.Dir("#/assets/dolphin"),
  51. DOLPHIN_RES_TYPE="external",
  52. )
  53. if assetsenv["FORCE"]:
  54. assetsenv.AlwaysBuild(dolphin_external)
  55. assetsenv.Alias("dolphin_ext", dolphin_external)
  56. assetsenv.Clean(dolphin_external, assetsenv.Dir("#/assets/resources/dolphin"))
  57. # Resources manifest
  58. resources = assetsenv.Command(
  59. "#/assets/resources/Manifest",
  60. assetsenv.GlobRecursive(
  61. "*", assetsenv.Dir("resources").srcnode(), exclude="Manifest"
  62. ),
  63. action=Action(
  64. '${PYTHON3} "${ASSETS_COMPILER}" manifest "${TARGET.dir.posix}" --timestamp=${GIT_UNIX_TIMESTAMP}',
  65. "${RESMANIFESTCOMSTR}",
  66. ),
  67. )
  68. assetsenv.Precious(resources)
  69. assetsenv.AlwaysBuild(resources)
  70. assetsenv.Clean(
  71. resources,
  72. assetsenv.Dir("#/assets/resources/apps"),
  73. )
  74. # Exporting resources node to external environment
  75. env["FW_ASSETS_HEADERS"] = assets_parts
  76. env["FW_RESOURCES"] = resources
  77. assetsenv.Alias("resources", resources)
  78. Return("assetslib")