Platform/Porting to unified sources
This page is here to help coordinate the effort around porting Gecko's build system to UNIFIED_SOURCES, a mechanism that enables faster builds by concatenating sources files to have fewer, larger translation units.
Ongoing porting projects
When we start porting a directory, we file a bug about it, and block the tracking bug with the unified alias (bug 939583).
Here is a bugzilla search that lists all such open bugs i.e. all the directories that are currently being ported by someone.
Directories already ported are listed below (see \o/ UNIFIED_SOURCES \o/ in the list below).
Script to track porting status
Here is a script; run it from the root of your source directory to generate a report on the porting status and number of cpp files under each source directory.
#!/bin/bash MOZBUILDFILES="`find . -name moz.build | grep -v \\./obj`" logfile="unified-conversion-status.log" filescount=`echo "$MOZBUILDFILES" | wc -l` fileindex=0 (while read -r mozbuildfile do fileindex=$((fileindex + 1)) mozbuilddir="`dirname "$mozbuildfile"`" numcpp=`find $mozbuilddir -name "*.cpp" -o -name "*.C" -o -name "*.cc" -o -name "*.mm" | wc -l` if [ $numcpp -eq 0 ] then continue fi if ! ( grep -wq SOURCES "$mozbuildfile" || grep -wq UNIFIED_SOURCES "$mozbuildfile" ) then continue fi echo -ne "\r$((100 * fileindex / filescount))% $mozbuilddir\033[0K" \ 1>&2 outputline="$numcpp $mozbuilddir" unified_msg= if grep -q UNIFIED_SOURCES "$mozbuildfile" then outputline="$outputline \o/ UNIFIED_SOURCES \o/" fi echo "$outputline" done <<< "$MOZBUILDFILES") | sort -rn > "$logfile" echo -e "\rResults written to $logfile\033[0K"
Current porting status
This is just the output of the above script; use it to find a new directory to work on.
The first column is the number of cpp files below each directory, so the higher number hint loosely at greater potential benefits.
Directories that are already ported have \o/ UNIFIED_SOURCES \o/ written next to them.
599 ./gfx/skia \o/ UNIFIED_SOURCES \o/
293 ./js/src 244 ./toolkit/crashreporter 170 ./content/media 143 ./content/svg/content/src \o/ UNIFIED_SOURCES \o/ 141 ./security/sandbox 136 ./ipc/chromium \o/ UNIFIED_SOURCES \o/ 126 ./gfx/angle \o/ UNIFIED_SOURCES \o/ 111 ./gfx/layers \o/ UNIFIED_SOURCES \o/ 91 ./content/base/src \o/ UNIFIED_SOURCES \o/ 80 ./xpcom/tests 80 ./xpcom/reflect/xptcall/src 79 ./toolkit/crashreporter/google-breakpad/src/common 76 ./content/html/content/src \o/ UNIFIED_SOURCES \o/ 74 ./gfx/thebes 70 ./xpcom/reflect/xptcall/src/md/unix 65 ./toolkit/crashreporter/google-breakpad/src/client 64 ./netwerk/base/src 64 ./js/src/jsapi-tests 61 ./widget/windows 56 ./gfx/angle/src/libGLESv2 55 ./security/manager/ssl/src 53 ./content/canvas/src \o/ UNIFIED_SOURCES \o/ 51 ./toolkit/crashreporter/google-breakpad/src/processor 50 ./content/media/webaudio \o/ UNIFIED_SOURCES \o/ 49 ./gfx/2d \o/ UNIFIED_SOURCES \o/ 47 ./layout/style \o/ UNIFIED_SOURCES \o/ 46 ./layout/generic \o/ UNIFIED_SOURCES \o/ 44 ./gfx/harfbuzz/src \o/ UNIFIED_SOURCES \o/ 42 ./widget/gonk 41 ./layout/xul/base/src \o/ UNIFIED_SOURCES \o/ 41 ./hal 40 ./netwerk/test 40 ./content/events/src \o/ UNIFIED_SOURCES \o/ 39 ./widget/cocoa \o/ UNIFIED_SOURCES \o/ 38 ./content/xslt/src/xpath \o/ UNIFIED_SOURCES \o/ 37 ./xpcom/glue \o/ UNIFIED_SOURCES \o/ 37 ./dom/base \o/ UNIFIED_SOURCES \o/ 36 ./layout/base \o/ UNIFIED_SOURCES \o/ 36 ./ipc/ipdl/test/cxx 36 ./gfx/graphite2/src \o/ UNIFIED_SOURCES \o/ 33 ./parser/html \o/ UNIFIED_SOURCES \o/ 33 ./netwerk/protocol/http \o/ UNIFIED_SOURCES \o/ 33 ./build/stlport 32 ./js/xpconnect/src 32 ./dom/plugins/base 31 ./gfx/ots/src 30 ./layout/svg \o/ UNIFIED_SOURCES \o/ 30 ./content/xslt/src/xslt \o/ UNIFIED_SOURCES \o/ 29 ./dom/plugins/ipc 28 ./widget/xpwidgets \o/ UNIFIED_SOURCES \o/ 28 ./toolkit/xre 27 ./widget/gtk 27 ./uriloader/exthandler 26 ./xpcom/io \o/ UNIFIED_SOURCES \o/ 26 ./widget/qt 26 ./tools/profiler 26 ./gfx/gl \o/ UNIFIED_SOURCES \o/ 26 ./content/xul/templates/src \o/ UNIFIED_SOURCES \o/ 25 ./ipc/glue 25 ./extensions/universalchardet/src/base 25 ./dom/system 24 ./xpcom/base \o/ UNIFIED_SOURCES \o/ 24 ./image/src 24 ./dom/indexedDB 24 ./dom/bluetooth 24 ./content/smil \o/ UNIFIED_SOURCES \o/ 24 ./accessible/src/base \o/ UNIFIED_SOURCES \o/ 23 ./toolkit/crashreporter/google-breakpad/src/common/linux 23 ./storage/src \o/ UNIFIED_SOURCES \o/ 23 ./netwerk/protocol/rtsp \o/ UNIFIED_SOURCES \o/ 23 ./intl/locale/src 22 ./xpcom/ds \o/ UNIFIED_SOURCES \o/ 22 ./layout/mathml \o/ UNIFIED_SOURCES \o/ 22 ./editor/libeditor/base \o/ UNIFIED_SOURCES \o/ 19 ./testing/gtest 19 ./accessible/src/windows/msaa 19 ./accessible/src/atk 18 ./xpcom/string/src \o/ UNIFIED_SOURCES \o/ 18 ./widget/os2 18 ./widget/android 18 ./layout/forms \o/ UNIFIED_SOURCES \o/ 18 ./content/media/webaudio/blink \o/ UNIFIED_SOURCES \o/ 17 ./toolkit/components/places 17 ./netwerk/cache 17 ./editor/libeditor/html \o/ UNIFIED_SOURCES \o/ 17 ./dom/system/gonk 17 ./dom/mobilemessage/src 17 ./dom/file 17 ./content/xbl/src \o/ UNIFIED_SOURCES \o/ 16 ./netwerk/cache2 \o/ UNIFIED_SOURCES \o/ 16 ./intl/uconv/src \o/ UNIFIED_SOURCES \o/ 16 ./image/decoders \o/ UNIFIED_SOURCES \o/ 16 ./dom/workers 16 ./dom/camera 15 ./js/jsd 15 ./dom/ipc 14 ./rdf/base/src 13 ./widget/windows/winrt 13 ./parser/htmlparser/src \o/ UNIFIED_SOURCES \o/ 13 ./modules/libjar \o/ UNIFIED_SOURCES \o/ 13 ./media/omx-plugin 13 ./gfx/src 13 ./extensions/spellcheck/hunspell/src \o/ UNIFIED_SOURCES \o/ 12 ./xpcom/build \o/ UNIFIED_SOURCES \o/ 12 ./toolkit/mozapps/update/updater 12 ./toolkit/crashreporter/google-breakpad/src/common/mac 12 ./toolkit/components/url-classifier 12 ./layout/tables \o/ UNIFIED_SOURCES \o/ 12 ./docshell/base \o/ UNIFIED_SOURCES \o/ 12 ./content/media/webspeech/recognition \o/ UNIFIED_SOURCES \o/ 12 ./accessible/src/xul \o/ UNIFIED_SOURCES \o/ 12 ./accessible/src/windows/ia2 12 ./accessible/src/generic \o/ UNIFIED_SOURCES \o/ 11 ./xpcom/threads \o/ UNIFIED_SOURCES \o/ 11 ./toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer 11 ./netwerk/streamconv/converters \o/ UNIFIED_SOURCES \o/ 11 ./gfx/ycbcr 11 ./dom/plugins/base/android 11 ./content/media/omx 10 ./toolkit/components/protobuf 10 ./content/media/webspeech/synth \o/ UNIFIED_SOURCES \o/ 10 ./accessible/src/mac \o/ UNIFIED_SOURCES \o/ 9 ./media/libsoundtouch/src \o/ UNIFIED_SOURCES \o/ 9 ./layout/xul/tree \o/ UNIFIED_SOURCES \o/ 9 ./layout/xul/grid \o/ UNIFIED_SOURCES \o/ 9 ./layout/inspector/src \o/ UNIFIED_SOURCES \o/ 9 ./image/decoders/icon 9 ./dom/telephony 9 ./dom/network/src 8 ./xpfe/appshell/src 8 ./toolkit/crashreporter/google-breakpad/src/client/mac/handler 8 ./python/mozbuild/mozbuild/test/frontend/data/variable-passthru 8 ./python/mozbuild/mozbuild/test/backend/data/variable_passthru 8 ./netwerk/wifi \o/ UNIFIED_SOURCES \o/ 8 ./js/src/gdb 8 ./extensions/spellcheck/src \o/ UNIFIED_SOURCES \o/ 8 ./editor/composer/src \o/ UNIFIED_SOURCES \o/ 8 ./caps/src 8 ./accessible/src/html \o/ UNIFIED_SOURCES \o/ 7 ./tools/jprof 7 ./mozglue/build 7 ./intl/lwbrk/src 7 ./content/media/directshow 7 ./content/html/document/src \o/ UNIFIED_SOURCES \o/ 6 ./xpcom/reflect/xptcall/src/md/win32 6 ./widget/gonk/nativewindow 6 ./uriloader/prefetch 6 ./tools/trace-malloc 6 ./toolkit/system/gnome 6 ./toolkit/crashreporter/client 6 ./toolkit/components/startup 6 ./toolkit/components/maintenanceservice 6 ./security/manager/pki/src 6 ./security/manager/boot/src 6 ./other-licenses/snappy 6 ./netwerk/protocol/ftp \o/ UNIFIED_SOURCES \o/ 6 ./netwerk/ipc \o/ UNIFIED_SOURCES \o/ 6 ./mozglue/linker 6 ./modules/libjar/zipwriter/src \o/ UNIFIED_SOURCES \o/ 6 ./js/xpconnect/wrappers 6 ./extensions/cookie 6 ./extensions/auth 6 ./embedding/browser/webBrowser 6 ./editor/libeditor/text \o/ UNIFIED_SOURCES \o/ 6 ./dom/src/storage 6 ./dom/fmradio 6 ./content/xul/document/src 6 ./content/media/wmf 6 ./content/media/webrtc \o/ UNIFIED_SOURCES \o/ 6 ./accessible/src/xpcom \o/ UNIFIED_SOURCES \o/ 5 ./widget/gonk/libdisplay 5 ./toolkit/crashreporter/google-breakpad/src/client/solaris/handler 5 ./toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation 5 ./toolkit/components/downloads 5 ./other-licenses/skia-npapi 5 ./netwerk/protocol/wyciwyg \o/ UNIFIED_SOURCES \o/ 5 ./netwerk/protocol/about 5 ./netwerk/dns 5 ./modules/libpref/src 5 ./memory/mozalloc \o/ UNIFIED_SOURCES \o/ 5 ./layout/printing \o/ UNIFIED_SOURCES \o/ 5 ./intl/unicharutil/util \o/ UNIFIED_SOURCES \o/ 5 ./intl/unicharutil/src \o/ UNIFIED_SOURCES \o/ 5 ./intl/locale/src/unix 5 ./gfx/angle/src/libEGL 5 ./embedding/components/commandhandler/src 5 ./editor/txmgr/src \o/ UNIFIED_SOURCES \o/ 5 ./content/xslt/src/base \o/ UNIFIED_SOURCES \o/ 5 ./content/media/omx/mediaresourcemanager 5 ./content/media/mediasource \o/ UNIFIED_SOURCES \o/ 5 ./content/media/gstreamer 4 ./xpcom/reflect/xptinfo/src \o/ UNIFIED_SOURCES \o/ 4 ./xpcom/components \o/ UNIFIED_SOURCES \o/ 4 ./toolkit/components/ctypes 4 ./startupcache \o/ UNIFIED_SOURCES \o/ 4 ./netwerk/socket \o/ UNIFIED_SOURCES \o/ 4 ./netwerk/protocol/websocket \o/ UNIFIED_SOURCES \o/ 4 ./netwerk/protocol/device \o/ UNIFIED_SOURCES \o/ 4 ./netwerk/cookie 4 ./mozglue/android 4 ./layout/tools/layout-debug/src \o/ UNIFIED_SOURCES \o/ 4 ./intl/locale/src/windows 4 ./intl/locale/src/os2 4 ./gfx/cairo/cairo/src \o/ UNIFIED_SOURCES \o/ 4 ./extensions/pref/autoconfig/src 4 ./embedding/components/printingui/src/win 4 ./dom/time \o/ UNIFIED_SOURCES \o/ 4 ./dom/quota \o/ UNIFIED_SOURCES \o/ 4 ./dom/media 4 ./dom/fmradio/ipc 4 ./dom/encoding \o/ UNIFIED_SOURCES \o/ 4 ./dom/audiochannel \o/ UNIFIED_SOURCES \o/ 4 ./docshell/shistory/src \o/ UNIFIED_SOURCES \o/ 4 ./content/xml/document/src 4 ./content/xml/content/src 4 ./content/media/plugins 4 ./content/media/ogg \o/ UNIFIED_SOURCES \o/ 4 ./chrome/src 3 ./xpcom/sample \o/ UNIFIED_SOURCES \o/ 3 ./widget/shared \o/ UNIFIED_SOURCES \o/ 3 ./tools/trace-malloc/lib 3 ./toolkit/system/dbus 3 ./toolkit/library 3 ./toolkit/crashreporter/google-breakpad/src/common/solaris 3 ./toolkit/crashreporter/google-breakpad/src/client/linux/handler 3 ./toolkit/components/remote 3 ./toolkit/components/ctypes/tests 3 ./rdf/tests/dsds 3 ./parser/xml/src 3 ./netwerk/protocol/data \o/ UNIFIED_SOURCES \o/ 3 ./mobile/android/components/build 3 ./layout/build \o/ UNIFIED_SOURCES \o/ 3 ./js/xpconnect/tests/components/native 3 ./js/xpconnect/loader 3 ./js/src/shell 3 ./js/ipc 3 ./ipc/testshell 3 ./ipc/dbus 3 ./intl/locale/src/mac 3 ./intl/hyphenation/src 3 ./gfx/ipc 3 ./embedding/tests/winEmbed 3 ./embedding/components/windowwatcher/src 3 ./embedding/components/printingui/src/unixshared 3 ./embedding/components/printingui/src/os2 3 ./embedding/components/printingui/src/mac 3 ./editor/txtsvc/src \o/ UNIFIED_SOURCES \o/ 3 ./dom/wifi 3 ./dom/power 3 ./dom/gamepad 3 ./dom/devicestorage 3 ./content/xul/content/src 3 ./content/media/webm \o/ UNIFIED_SOURCES \o/ 3 ./content/media/encoder \o/ UNIFIED_SOURCES \o/ 3 ./build/win32 3 ./browser/components/shell/src 3 ./accessible/src/windows/sdn 2 ./xpcom/reflect/xptcall/src/md/test 2 ./widget/qt/faststartupqt 2 ./view/src 2 ./uriloader/base 2 ./toolkit/xre/test/win 2 ./toolkit/system/unixproxy 2 ./toolkit/mozapps/update/tests 2 ./toolkit/mozapps/plugins/tests 2 ./toolkit/crashreporter/test 2 ./toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation 2 ./toolkit/components/mediasniffer 2 ./toolkit/components/autocomplete 2 ./toolkit/components/alerts 2 ./testing/tools/screenshot 2 ./security/manager/ssl/tests/unit/tlsserver/lib 2 ./rdf/datasource/src 2 ./profile/dirserviceprovider/src 2 ./netwerk/system/qt 2 ./netwerk/streamconv/test \o/ UNIFIED_SOURCES \o/ 2 ./netwerk/protocol/viewsource \o/ UNIFIED_SOURCES \o/ 2 ./netwerk/protocol/file \o/ UNIFIED_SOURCES \o/ 2 ./mozglue/tests 2 ./layout/ipc \o/ UNIFIED_SOURCES \o/ 2 ./js/xpconnect/shell 2 ./ipc/app 2 ./intl/unicharutil/tests 2 ./intl/strres/src 2 ./intl/chardet/src 2 ./extensions/universalchardet/src/xpcom 2 ./extensions/permissions 2 ./embedding/components/find/src 2 ./dom/system/unix 2 ./dom/system/android 2 ./dom/src/notification 2 ./dom/src/geolocation 2 ./dom/promise 2 ./dom/plugins/ipc/interpose 2 ./dom/plugins/ipc/hangui 2 ./dom/indexedDB/ipc 2 ./content/xslt/src/xml \o/ UNIFIED_SOURCES \o/ 2 ./content/media/webspeech/synth/pico 2 ./content/media/wave \o/ UNIFIED_SOURCES \o/ 2 ./content/media/raw \o/ UNIFIED_SOURCES \o/ 2 ./content/media/apple \o/ UNIFIED_SOURCES \o/ 2 ./content/mathml/content/src 2 ./build/unix/elfhack 2 ./browser/metro/shell/commandexecutehandler 2 ./accessible/src/other 1 ./xulrunner/tools/redit 1 ./xulrunner/stub 1 ./xulrunner/examples/simple/components/src 1 ./xulrunner/app 1 ./xpfe/components/windowds 1 ./xpfe/components/directory 1 ./xpfe/components/build 1 ./xpcom/windbgdlg 1 ./xpcom/tests/external 1 ./xpcom/tests/component_no_aslr 1 ./xpcom/tests/component 1 ./xpcom/tests/bug656331_component 1 ./xpcom/sample/program 1 ./xpcom/reflect/xptinfo/tests 1 ./xpcom/reflect/xptcall/tests 1 ./xpcom/reflect/xptcall/src/md/os2 1 ./xpcom/glue/tests/gtest 1 ./xpcom/glue/standalone 1 ./webapprt/win 1 ./webapprt/mac 1 ./webapprt/gtk2 1 ./uriloader/exthandler/tests 1 ./tools/jprof/stub 1 ./toolkit/system/windowsproxy 1 ./toolkit/system/osxproxy 1 ./toolkit/system/androidproxy 1 ./toolkit/profile 1 ./toolkit/library/winvccorlib 1 ./toolkit/identity 1 ./toolkit/devtools/server 1 ./toolkit/crashreporter/injector 1 ./toolkit/components/typeaheadfind 1 ./toolkit/components/telemetry 1 ./toolkit/components/statusfilter 1 ./toolkit/components/satchel 1 ./toolkit/components/reflect 1 ./toolkit/components/perf 1 ./toolkit/components/parentalcontrols 1 ./toolkit/components/jsdownloads/src 1 ./toolkit/components/intl 1 ./toolkit/components/find 1 ./toolkit/components/finalizationwitness 1 ./toolkit/components/filepicker 1 ./toolkit/components/diskspacewatcher 1 ./toolkit/components/commandlines 1 ./toolkit/components/build 1 ./testing/mochitest/ssltunnel 1 ./storage/build 1 ./services/crypto/component 1 ./security/sandbox/win/src/sandboxbroker 1 ./security/sandbox/linux 1 ./security/manager/ssl/tests/unit/tlsserver/cmd 1 ./rdf/util/src 1 ./rdf/tests/triplescat 1 ./rdf/tests/rdfpoll 1 ./rdf/tests/rdfcat 1 ./rdf/build 1 ./netwerk/system/win32 1 ./netwerk/system/mac 1 ./netwerk/system/android 1 ./netwerk/streamconv/src 1 ./netwerk/sctp/src 1 ./netwerk/sctp/datachannel 1 ./netwerk/protocol/res 1 ./netwerk/protocol/app 1 ./netwerk/mime 1 ./netwerk/build 1 ./memory/replace/dmd 1 ./media/omx-plugin/lib/ics/libutils 1 ./media/omx-plugin/lib/ics/libstagefright 1 ./media/omx-plugin/lib/hc/libstagefright 1 ./media/omx-plugin/lib/gb/libutils 1 ./media/omx-plugin/lib/gb/libstagefright_color_conversion 1 ./media/omx-plugin/lib/gb/libstagefright 1 ./media/omx-plugin/lib/gb235/libstagefright 1 ./media/omx-plugin/lib/froyo/libstagefright 1 ./media/omx-plugin/hc 1 ./media/omx-plugin/gb235 1 ./media/omx-plugin/gb 1 ./media/omx-plugin/froyo 1 ./media/libspeex_resampler/src 1 ./media/libcubeb/src 1 ./js/ductwork/debugger 1 ./ipc/unixsocket 1 ./ipc/ril 1 ./ipc/nfc 1 ./ipc/netd 1 ./ipc/keystore 1 ./ipc/ipdl/test/cxx/app 1 ./intl/build 1 ./image/encoders/png 1 ./image/encoders/jpeg 1 ./image/encoders/ico 1 ./image/encoders/bmp 1 ./image/decoders/icon/win 1 ./image/decoders/icon/qt 1 ./image/decoders/icon/os2 1 ./image/decoders/icon/mac 1 ./image/decoders/icon/gtk 1 ./image/decoders/icon/android 1 ./image/build 1 ./extensions/widgetutils/src 1 ./extensions/gnomevfs 1 ./extensions/gio 1 ./embedding/components/webbrowserpersist/src 1 ./embedding/components/build 1 ./embedding/components/appstartup/src 1 ./embedding/browser/build 1 ./dom/voicemail 1 ./dom/system/windows 1 ./dom/system/mac 1 ./dom/src/offline 1 ./dom/src/jsurl 1 ./dom/src/json 1 ./dom/src/events 1 ./dom/nfc 1 ./dom/media/bridge 1 ./dom/icc/src 1 ./dom/cellbroadcast/src 1 ./dom/browser-element 1 ./dom/battery 1 ./dom/apps/src 1 ./dom/alarm 1 ./dom/activities/src 1 ./docshell/build 1 ./content/svg/document/src 1 ./build/win32/vmwarerecordinghelper 1 ./build/win32/crashinjectdll 1 ./build/unix/stdc++compat 1 ./browser/metro/shell/testing 1 ./browser/metro/shell/linktool 1 ./browser/components/migration/src 1 ./browser/components/feeds/src 1 ./browser/components/dirprovider 1 ./browser/components/build 1 ./browser/components/about 1 ./browser/app 1 ./b2g/gaia 1 ./b2g/app 1 ./accessible/src/windows/uia