SConscript 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. assetsenv.NoClean(dolphin_external)
  54. if assetsenv["FORCE"]:
  55. assetsenv.AlwaysBuild(dolphin_external)
  56. assetsenv.Alias("dolphin_ext", dolphin_external)
  57. # Resources manifest
  58. resources = assetsenv.Command(
  59. "#/assets/resources/Manifest",
  60. assetsenv.GlobRecursive("*", "resources", exclude="Manifest"),
  61. action=Action(
  62. '${PYTHON3} "${ASSETS_COMPILER}" manifest "${TARGET.dir.posix}" --timestamp=${GIT_UNIX_TIMESTAMP}',
  63. "${RESMANIFESTCOMSTR}",
  64. ),
  65. )
  66. assetsenv.Precious(resources)
  67. assetsenv.AlwaysBuild(resources)
  68. assetsenv.Clean(
  69. resources,
  70. assetsenv.Dir("#/assets/resources/apps"),
  71. )
  72. # Exporting resources node to external environment
  73. env["FW_ASSETS_HEADERS"] = assets_parts
  74. env["FW_RESOURCES"] = resources
  75. assetsenv.Alias("resources", resources)
  76. Return("assetslib")