OpenTasks/Generic/Improve the build system

From ScummVM :: Wiki
< OpenTasks
Revision as of 18:43, 4 March 2011 by DJWillis (talk | contribs) (Move OpenTasks onto unique pages with an Infobox and Category so we can collect them all up onto a summary page.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
Open Task
Task Name Improve the build system
Technical Contact(s) Max Horn, Eugene Sandulenko
Subsystem Generic


ScummVM uses a custom hand-made Makefile based build system by default. In addition, we maintain a set of project files for various versions of MSVC, and some other development environments. Some of our ports tie into the default Makefile build system, but others need yet other project files (e.g. the PalmOS port).

This leads to the following problem. Whenever we add, move or delete files from our repository, the default build system is updated, but the other project files in general are not -- they have to be maintained separately. This is a manual task, and if forgotten, causes these project files to become out of date and hence more or less unusable. Therefore, we would like to be able to generate these project files from the master build system. For MSVC, we already do this with the help of our custom C++ tool [code]create_msvc[/code].

Another issue is the following: There are several people who develop 3rd party engines, which use the core code from ScummVM, but are not hosted within the ScummVM repository. Since ScummVM allows building engines as loadable modules, that is fine. However, in order to build these engines, one currently has to copy them into a checkout of the ScummVM trunk, and then hook them into the build system (by modifying the [code]engines/[/code] file). It would be so much easier if one could build an engine as a loadable module *outside* of the ScummVM source tree, and without any need to modify files in the ScummVM source tree. This is definitely doable, but needs somebody to implement it.

Then there are the ScummVM tools, which are hosted in a separate module of our repository. It would be nice if the tools could share code with ScummVM other than by copying it, e.g. by hooking into the ScummVM build system somehow. (Please ask us for details on this very vague statement if you are interested in pursuing this ;-). In addition, it would be nice to be able to generate project files for the tools, too.

All of the above needs to be implemented in a portable fashion.

The Task:

  • Generate project files for various IDEs (XCode, Eclipse, ...) from the default build system. (MSVC has already been done.)
  • Modify the ScummVM build system with the ability to build engines outside of the main source tree.
  • Enhance the build system of the ScummVM tools (they are in a separate Subversion module, and not to be confused with the tools included in the ScummVM source tree itself).

An alternative approach to hand-rolling everything described above would be to switch our build system to CMake. However, since this would be a major change for us, it would have to be carefully researched first, in particular with regards to the next point:

A prime requirement is that the resulting system must still work on Linux, Mac OS X and Windows, and all other platforms that use the default build system (e.g. WinCE, Nintendo DS, ...). Any negative impact on portability should be avoided.

Required Skills:

  • Good C++ skills.
  • Excellent Makefile skills.
  • Possibly experience with CMake, SCons or another meta-build system.