wiki:Unifying the build system

Version 1 (modified by, 12 years ago) (diff)

Dumped my notes

Current status

  • 8 build systems
    • XCode -> Mac
    • VCProj -> Win, WinCairo
    • CMake -> WinCE, EFL
    • QMake -> Qt
    • MakeFile -> Gtk
    • GYP -> Chromium
    • -> Android
    • wx
  • Some of them requiring a special IDE to add a file
  • Adding and removing a file is more and more expensive which hinders refactoring the code
  • As an example, someone removed some empty files lately that were in the tree for years, presumably because of the barrier to removing files
  • Potential unifying systems: CMake, GYP and QMake were mentioned


  • Constraint: people use whatever IDE they currently use (XCode, Visual Studio)
  • CMake vs GYP (
  • GYP keeps the look'n'feel of the native build system
    • For example, it is easy to map from GYP to the native system and vice-versa
    • There is currently no tool to propagate native changes back to GYP though


  • Used by several projects
  • However CMake generated files calls back CMake which made some of the Apple people sad

The current implementation

  • We had a look at some of the GYP files
  • The current way is sub-optimal as it uses a lot of arcane 'exclude' (this gave rise to a lot of comments)
  • We would need to refactor the way it is done for people to be fine with such a change
  • A one GYP per platform was mentioned (and using some include mechanism)

Constraints on the build system files

  • Adding/Removing a file is a rare operation whereas checking out the source is common
  • Thus we should not put a burden on the most common operation
  • There was a discussion about adding the XCode files as we don't want to add another step
  • Also this would introduce some issues with Apple internal build system
  • The tools to generate the native build system should either use XCode or a Makefile on Mac


  • If we check-in the build files, we have issues with people just doing 'svn up' and building using make or native method
  • There is a cost with this switch and we need to solve them before making the big switch

Other ports

  • Qt and Gtk have their own build integration constraint that needs to be captured
  • CMake is used an 'include' system and not an 'exclude' system