[GSoC 2022] Ham: A Jam Replacement

Blog post by Dominic Martinez on Wed, 2022-05-25 05:13

Introduction

Hello everyone! I’m Dominic Martinez, a current rising junior at Duke University, USA. Being a personal victim of build system trauma (looking at you web-dev), I’ve become increasingly fascinated (and frustrated) by build system design, and have been waiting for the chance to build one myself. As such, I’m excited to have been selected to work on Ham - a replacement for the Jam build system - alongside my mentor Stephan Aßmus.

I hope to get to know you all throughout this summer (and beyond). Feel free to reach out to me on IRC (dominicm) or via email (dom@dominicm.dev).

Project Overview

Haiku currently uses a fork of Perforce Jam as its build system. While Jam is a great build system, its legacy codebase makes it difficult to fix bugs or introduce new features.

Ham is a complete Jam rewrite that was started by Ingo Weinhold, but wasn’t completed. This project starts where Ingo left off to bring Ham to where it can be used as Haiku’s official build system. The new repository can be found here.

Goals

Ham is a drop-in replacement for Jam, with compatibility modes for Boost.Jam and Perforce Jam. Alongside supporting various Jam versions and being more rigorously tested, Ham will have the following features:

  • More robust multithreading support, fixing multithreaded build failures like #15620
  • A granular caching system that can detect Jamfile/environment variable changes and correctly decide which targets need to be rebuilt
  • Ability to output a clangd compilation database (compile_commands.json) directly, without actually building the project
  • Written as a library for potential IDE integration
  • Platform support for, at minimum, all platforms Haiku can be built on (Haiku, Linux, BSD, OSX)

If the above goals are completed early, there are also some stretch goals:

  • Direct clangd integration, without having to manually create/update a compile_commands.json database
  • Integration with common IDEs

Thank you all for giving me the chance to get involved, and I can’t wait to get started!