Build config/Projects: Difference between revisions

Jump to navigation Jump to search
m
organize into accepted and proposed
m (fix grouping)
m (organize into accepted and proposed)
 
Line 1: Line 1:
This page enumerates active and potential projects for the Build Config module.
This page enumerates active and potential projects for the Build Config module. This module encompasses the core build system (read: in-tree code). Although, some projects do involve automation.


== MozillaBuild ==
Please add new projects to the '''Proposed Projects''' section at the bottom of the page.
 
== Accepted Projects ==
 
=== MozillaBuild ===


MozillaBuild is the Windows development environment. We have a few projects for it.
MozillaBuild is the Windows development environment. We have a few projects for it.


=== Release 1.9.0 ===
==== Release 1.9.0 ====


MozillaBuild 1.9.0 with GNU Make 4 should be released.
MozillaBuild 1.9.0 with GNU Make 4 should be released.
Line 11: Line 15:
Tracked by {{bug|928594}}.
Tracked by {{bug|928594}}.


=== Overhaul to Use msys2 ===
==== Overhaul to Use msys2 ====


*MozillaBuild 2.0* will be an overhaul of MozillaBuild to use msys2, a decent terminal, and a bunch of other improvements.
*MozillaBuild 2.0* will be an overhaul of MozillaBuild to use msys2, a decent terminal, and a bunch of other improvements.
Line 17: Line 21:
See https://groups.google.com/d/msg/mozilla.dev.builds/X760-Y4DSRc/LTlo39uNKSEJ
See https://groups.google.com/d/msg/mozilla.dev.builds/X760-Y4DSRc/LTlo39uNKSEJ


== Automation Interaction and Needs ==
=== Automation Interaction and Needs ===


These are projects that relate to how the core build system interacts with automation.
These are projects that relate to how the core build system interacts with automation.


=== Establish Clear API for Command Interaction ===
==== Establish Clear API for Command Interaction ====


We want all in-tree calls in automation to be proxied through well-defined points so we have a clearly supported API.
We want all in-tree calls in automation to be proxied through well-defined points so we have a clearly supported API.
Line 27: Line 31:
{{bug|978211}} tracks.
{{bug|978211}} tracks.


=== Build with GNU Make 4.0 on Windows ===
==== Build with GNU Make 4.0 on Windows ====


Automation should use GNU Make 4.0 on Windows.
Automation should use GNU Make 4.0 on Windows.
Line 35: Line 39:
A follow-up goal is likely to remove code for supporting pymake and eventually pymake itself from the tree.
A follow-up goal is likely to remove code for supporting pymake and eventually pymake itself from the tree.


=== Cross-compile Mac builds from Linux ===
==== Cross-compile Mac builds from Linux ====


This  is a request from Release Engineering. For capacity reasons, we  want  to perform Mac builds on Linux. We should add support for this.  
This  is a request from Release Engineering. For capacity reasons, we  want  to perform Mac builds on Linux. We should add support for this.  
Line 41: Line 45:
{{bug|927061}}
{{bug|927061}}


== Core Build System ==
=== Core Build System ===


=== Move all build config for linking libxul to moz.build ===
==== Move all build config for linking libxul to moz.build ====


{{bug|928196}}
{{bug|928196}}
Line 50: Line 54:
This work will enable Tup, Ninja, etc building.
This work will enable Tup, Ninja, etc building.


=== Improve chrome building, packaging ===
==== Improve chrome building, packaging ====


We have a number of build actions that run unconditionally, either due to clownshoes (like removing large parts of dist/) or due to bad build rules. These build actions add excessive overhead to light builds. Light builds are so slow that developers commonly perform a partial tree build and hope they build everything they needed to. This is playing with fire and this practice needs to be curtailed through us providing faster light builds.  
We have a number of build actions that run unconditionally, either due to clownshoes (like removing large parts of dist/) or due to bad build rules. These build actions add excessive overhead to light builds. Light builds are so slow that developers commonly perform a partial tree build and hope they build everything they needed to. This is playing with fire and this practice needs to be curtailed through us providing faster light builds.  
Line 69: Line 73:
Progress towards this goal is measured by comparing the number of  non-make processes launched during no-op and light builds over time. This number needs to go down. Drastically.  
Progress towards this goal is measured by comparing the number of  non-make processes launched during no-op and light builds over time. This number needs to go down. Drastically.  


=== Minimize ICU impact ===
==== Minimize ICU impact ====


ICU  has been a world of pain for the build system. It makes builds significantly slower and it is often the long pole, especially for builds close to the no-op side of the spectrum.  
ICU  has been a world of pain for the build system. It makes builds significantly slower and it is often the long pole, especially for builds close to the no-op side of the spectrum.  
Line 75: Line 79:
We need to mitigate the impact of ICU on the build system. This might mean loudly recommending people not build it (although more and more  features want to start using it, so likely not a long term solution). This might mean someone contributing patches back to ICU to make its build system suck less.
We need to mitigate the impact of ICU on the build system. This might mean loudly recommending people not build it (although more and more  features want to start using it, so likely not a long term solution). This might mean someone contributing patches back to ICU to make its build system suck less.


=== Improve SpiderMonkey build system integration ===
==== Improve SpiderMonkey build system integration ====


The  way SpiderMonkey integrates with the build system is very hacky.  Nobody likes it - including the SpiderMonkey developers. Furthermore, the way things are slows down builds. e.g. SpiderMonkey has its own  configure script, which is extremely similar to the one in m-c. This slows down configure time, especially on Windows.  
The  way SpiderMonkey integrates with the build system is very hacky.  Nobody likes it - including the SpiderMonkey developers. Furthermore, the way things are slows down builds. e.g. SpiderMonkey has its own  configure script, which is extremely similar to the one in m-c. This slows down configure time, especially on Windows.  
The  goal here is to integrate SpiderMonkey into the main build system. We'll also provide mach command(s) for building just SpiderMonkey (they've asked me for this).  
The  goal here is to integrate SpiderMonkey into the main build system. We'll also provide mach command(s) for building just SpiderMonkey (they've asked me for this).  


=== Fix the Fennec build system ===
==== Fix the Fennec build system ====


The Android make rules are horrible. They are slow and do a lot of actions when not needed. There is much room for improvement here.
The Android make rules are horrible. They are slow and do a lot of actions when not needed. There is much room for improvement here.


=== Use nose for running Python tests ===
==== Use nose for running Python tests ====


Our current Python unit testing solution is quite fragile. Failures will result in all tests being aborted. We don't get as much context from failures as we'd like. It's somewhat difficult to run specific tests in isolation (not whole test files).
Our current Python unit testing solution is quite fragile. Failures will result in all tests being aborted. We don't get as much context from failures as we'd like. It's somewhat difficult to run specific tests in isolation (not whole test files).
Line 91: Line 95:
This will likely involve defining Python unit tests in moz.build files somehow. We can probably define things as a directory containing test files plus an optional regex used to discover them. Generally speaking, nose's algorithm for finding tests is pretty robust. Worst case, we can adapt our existing tests that don't conform to its expectations. This is probably a good idea anyway.
This will likely involve defining Python unit tests in moz.build files somehow. We can probably define things as a directory containing test files plus an optional regex used to discover them. Generally speaking, nose's algorithm for finding tests is pretty robust. Worst case, we can adapt our existing tests that don't conform to its expectations. This is probably a good idea anyway.


=== Kill client.mk ===
==== Kill client.mk ====


client.mk is a glorified shell script. The way it interacts with the world (especially mozconfigs) is very hacky. client.mk's days are numbered. Everything it does should be replaced with mach commands.
client.mk is a glorified shell script. The way it interacts with the world (especially mozconfigs) is very hacky. client.mk's days are numbered. Everything it does should be replaced with mach commands.
Line 97: Line 101:
This requires release automation to not use client.mk (another project).
This requires release automation to not use client.mk (another project).


=== Tup support ===
==== Tup support ====
We want to be able to build the tree with Tup, not make.
We want to be able to build the tree with Tup, not make.
Benefits: Faster and proper builds. Eliminate clobbers.
Benefits: Faster and proper builds. Eliminate clobbers.
Line 105: Line 109:
We would support this as a local development mode first then move to automation when it is stable.
We would support this as a local development mode first then move to automation when it is stable.


=== reinvent mozconfigs ===
==== reinvent mozconfigs ====


There is a longstanding desire for mach to support config files and for some aspects of mozconfigs to be reinvented. These can be independent, but they may overlap.
There is a longstanding desire for mach to support config files and for some aspects of mozconfigs to be reinvented. These can be independent, but they may overlap.
Line 118: Line 122:




== mach ==
=== mach ===


=== Config file support ===
==== Config file support ====


There are many options being landed in mach commands that are effectively user preferences. There is no good way to define sticky  defaults for those options. mach needs config files so people can tailor their environments to their liking. We should add config file support to mach.
There are many options being landed in mach commands that are effectively user preferences. There is no good way to define sticky  defaults for those options. mach needs config files so people can tailor their environments to their liking. We should add config file support to mach.


=== Faster startup ===
==== Faster startup ====


Mach has become slower as more commands are added. We should look at making it faster.  
Mach has become slower as more commands are added. We should look at making it faster.  


=== More robust available command support ===
==== More robust available command support ====


Support for detecting what commands are runnable at run-time has been added recently. When you run |mach help| it even prunes the list to commands that should work. We should hook up most of the commands to this mechanism so people can't do things like attempt to run tests when the tree isn't built.
Support for detecting what commands are runnable at run-time has been added recently. When you run |mach help| it even prunes the list to commands that should work. We should hook up most of the commands to this mechanism so people can't do things like attempt to run tests when the tree isn't built.


=== Improve comm-central and fxos integration ===
==== Improve comm-central and fxos integration ====


Mach integration with comm-central and b2g is fragile. We should make that work so we don't have to continue supporting legacy interfaces and so developers there don't complain so much about not being able to use mach. This is more important than ever since functionality like test running is starting to require mach.
Mach integration with comm-central and b2g is fragile. We should make that work so we don't have to continue supporting legacy interfaces and so developers there don't complain so much about not being able to use mach. This is more important than ever since functionality like test running is starting to require mach.


== Developer workflow ==
=== Developer workflow ===


=== Ability to develop browser/Firefox without compiling Gecko ===
==== Ability to develop browser/Firefox without compiling Gecko ====


In theory we can provide a build mode so developers can build just the browser app without having to build all of Gecko/libxul. This will dramatically reduce the horsepower required to obtain a working build from source.
In theory we can provide a build mode so developers can build just the browser app without having to build all of Gecko/libxul. This will dramatically reduce the horsepower required to obtain a working build from source.
Line 147: Line 151:
{{bug|901840}}
{{bug|901840}}


=== Build with containers, Docker ===
==== Build with containers, Docker ====


Release engineering is now publishing archives of their chroot environments at https://s3.amazonaws.com/mozilla-releng-mock-archive/mock_archives.json. It would be rad if someone hooked this up to mach and the build system so local builds could be performed in containers using the exact same bits that automation uses.
Release engineering is now publishing archives of their chroot environments at https://s3.amazonaws.com/mozilla-releng-mock-archive/mock_archives.json. It would be rad if someone hooked this up to mach and the build system so local builds could be performed in containers using the exact same bits that automation uses.


=== "Metrics" for build system and command usage ===
==== "Metrics" for build system and command usage ====


It's always nice to make data-driven decisions. Currently, we have no reliable way of knowing what hardware people are building on, what mach commands they use, which parts of the tree are getting built the most locally, etc.
It's always nice to make data-driven decisions. Currently, we have no reliable way of knowing what hardware people are building on, what mach commands they use, which parts of the tree are getting built the most locally, etc.
Line 160: Line 164:


While other companies that do this kind of instrumentation can get away with having it enabled by default because all developers are under the corporate banner and thus not susceptible to privacy concerns because they signed them away as part of employment, Mozilla can't. Anyone can download the source code and we can't have things reporting automatically without notification. It's likely not legal and it's definitely not the Mozilla way. However, for this data to be useful and not skewed, we'd want near 100% participation. We obviously need to work with privacy and legal to flush out how this would work.
While other companies that do this kind of instrumentation can get away with having it enabled by default because all developers are under the corporate banner and thus not susceptible to privacy concerns because they signed them away as part of employment, Mozilla can't. Anyone can download the source code and we can't have things reporting automatically without notification. It's likely not legal and it's definitely not the Mozilla way. However, for this data to be useful and not skewed, we'd want near 100% participation. We obviously need to work with privacy and legal to flush out how this would work.
== Proposed Projects ==
Please place new project ideas here.
canmove, Confirmed users
409

edits

Navigation menu