Abstract
Most complex software projects are compiled using a build tool (e.g. make), which runs commands in an order satisfying user-defined dependencies. Unfortunately, most build tools require all dependencies to be specified before the build starts. This restriction makes many dependency patterns difficult to express, especially those involving files generated at build time. We show how to eliminate this restriction, allowing additional dependencies to be specified while building. We have implemented our ideas in the Haskell library Shake, and have used Shake to write a complex build system which compiles millions of lines of code.
- Bram Adams, Herman Tromp, Kris De Schutter, and Wolfgang De Meuter. Design recovery and maintenance of build systems. In Proc. ICSM '07, pages 214--223. IEEE, October 2007.Google Scholar
Cross Ref
- Max Bolingbroke. OpenShake build system. https://github.com/batterseapower/openshake, 2011.Google Scholar
- Merijn de Jonge. Build-level components. IEEE Transactions on Software Engineering, 31 (7): 588--600, 2005. Google Scholar
Digital Library
- Stuart Feldman. Make - a program for maintaining computer programs. Technical Report 5, Bell Laboratories, 1978.Google Scholar
- Berwyn Hoyt, Bryan Hoyt, and Ben Hoyt. fabricate - the better build tool. http://code.google.com/p/fabricate, 2009.Google Scholar
- Ralf Lämmel and Simon Peyton Jones. Scrap your boilerplate: a practical design pattern for generic programming. In Proc. TLDI '03, pages 26--37. ACM Press, March 2003. Google Scholar
Digital Library
- Konstantin Läufer and Martin Odersky. Polymorphic type inference and abstract data types. ACM Transactions on Programming Language Systems, 16: 1411--1430, September 1994. Google Scholar
Digital Library
- Evan Martin. Ninja manual. http://martine.github.com/ninja/manual.html, December 2011.Google Scholar
- Peter Miller. Recursive make considered harmful. Journal of AUUG Inc, 19 (1): 14--25, 1998.Google Scholar
- Avery Pennarun. redo: a top-down software build system. https://github.com/apenwarr/redo, December 2011.Google Scholar
- Tom Schrijvers, Simon Peyton Jones, Manuel Chakravarty, and Martin Sulzmann. Type checking with open type functions. In Proc. ICFP '08, pages 51--62. ACM Press, 2008. Google Scholar
Digital Library
- Mike Shal. Build system rules and algorithms. http://gittup.org/tup/build_system_rules_and_algorithms.pdf, 2009.Google Scholar
- The GHC Team. The GHC compiler, version 7.2.2. http://www.haskell.org/ghc/, November 2011.Google Scholar
Index Terms
Shake before building: replacing make with haskell
Recommendations
Non-recursive make considered harmful: build systems at scale
Haskell 2016: Proceedings of the 9th International Symposium on HaskellMost build systems start small and simple, but over time grow into hairy monsters that few dare to touch. As we demonstrate in this paper, there are a few issues that cause build systems major scalability challenges, and many pervasively used build ...
Non-recursive make considered harmful: build systems at scale
Haskell '16Most build systems start small and simple, but over time grow into hairy monsters that few dare to touch. As we demonstrate in this paper, there are a few issues that cause build systems major scalability challenges, and many pervasively used build ...
Shake before building: replacing make with haskell
ICFP '12: Proceedings of the 17th ACM SIGPLAN international conference on Functional programmingMost complex software projects are compiled using a build tool (e.g. make), which runs commands in an order satisfying user-defined dependencies. Unfortunately, most build tools require all dependencies to be specified before the build starts. This ...







Comments