optimizing_for_size.rst 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. .. _doc_optimizing_for_size:
  2. Optimizing a Build for Size
  3. ===========================
  4. .. highlight:: shell
  5. Rationale
  6. ------------
  7. Sometimes, it is desired to optimize a build for size, rather than speed.
  8. This means reducing unused functions from the engine, as well as using specific compiler flags to aid on this job. Common situations are creating smaller mobile or HTML5 builds.
  9. This tutorial aims to give an overview on different methods to create a smaller binary.
  10. It is recommended that the previous tutorials in this section (on how to build Godot for every paltform) are well understood before continuing.
  11. Disabling 3D
  12. -------------
  13. For 2D games, having the whole 3D engine available usually makes no sense. Because of this, there is a build flag to disable it:
  14. ::
  15. scons p=windows target=release tools=no disable_3d=yes
  16. Tools must be disabled in order to use this flag, as the editor is not designed to operate without 3D support. Without it, the binary size can be reduced about 15%.
  17. Disabling Advanced GUI
  18. -----------------------
  19. Most small games don't require complex GUI controls such as trees, itemlists, text editor, graph editor, etc. They can be disabled with a command line flag:
  20. ::
  21. scons p=windows target=release tools=no disable_advanced_gui=yes
  22. Disabling unwanted modules
  23. --------------------------
  24. A lot of Godot functions are offered as modules. When asking for build options with:
  25. ::
  26. scons --help
  27. The list of modules that can be disabled will appear, together with all the build options. If you are working on a simple 2D game, you could disable a lot of them:
  28. ::
  29. scons p=windows target=release tools=no module_bmp_enabled=no module_bullet_enabled=no module_csg_enabled=no module_dds_enabled=no module_enet_enabled=no module_etc_enabled=no module_gdnative_enabled=no module_gridmap_enabled=no module_hdr_enabled=no module_mbedtls_enabled=no module_mobile_vr_enabled=no module_mono_enabled=no module_opus_enabled=no module_pvr_enabled=no module_recast_enabled=no module_regex_enabled=no module_squish_enabled=no module_tga_enabled=no module_thekla_unwrap_enabled=no module_theora_enabled=no module_tinyexr_enabled=no module_vorbis_enabled=no module_webm_enabled=no module_websocket_enabled=no
  30. Optimizing for size, instead of speed
  31. --------------------------------------
  32. Godot 3.1 onwards allows to compile using size optimizations. To enable this, just use the *optimize* flag:
  33. ::
  34. scons p=windows target=release tools=no optimize=size
  35. Keep in mind some platforms such as HTML5 already use this mode by default.
  36. Link Time Optimization
  37. ----------------------
  38. Enabling link time optimization produces more efficient binaries, both in
  39. performance and size. Duplicate template functions are removed, as well as
  40. unused code.
  41. ::
  42. scons p=windows target=release tools=no use_lto=yes
  43. Linking is slower with this option, so use mainly for release builds.
  44. Strip your binaries
  45. -------------------
  46. If you build from scratch, remember to strip your binaries:
  47. ::
  48. strip godot.64
  49. Using UPX
  50. ---------
  51. If you are aiming for desktop platforms, the UPX compressor can be used:
  52. https://upx.github.io/
  53. This can reduce binary size considerably. Keep in mind some greedy
  54. anti-virus can detect upx compiled binaries as a virus so, if you are
  55. releasing a commercial game, make sure to sign your binaries or use a
  56. platform that will distribute them.