Platform/Porting to unified sources

From MozillaWiki
< Platform
Revision as of 22:11, 17 November 2013 by Ehsan (talk | contribs)
Jump to navigation Jump to search

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

To avoid stepping on each other's toes while porting, please update this table when you start on porting a new source directory to UNIFIED_SOURCES, and remove it when it's landed.

Directory Status Owner Bug
content/canvas/src in progress bjacob bug 937886
gfx/layers in progress bjacob bug 938970
content/svg in progress ehsan bug 937908
layout/svg in progress ehsan bug 938864

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" -maxdepth 1 | 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.

    143 ./content/svg/content/src \o/ UNIFIED_SOURCES \o/
     91 ./content/base/src
     76 ./content/html/content/src
     74 ./gfx/thebes
     70 ./xpcom/reflect/xptcall/src/md/unix
     65 ./xpcom/tests
     64 ./netwerk/base/src
     64 ./js/src/jsapi-tests
     55 ./security/manager/ssl/src
     53 ./content/canvas/src
     49 ./toolkit/crashreporter/google-breakpad/src/processor
     47 ./widget/windows
     46 ./layout/generic \o/ UNIFIED_SOURCES \o/
     44 ./layout/style \o/ UNIFIED_SOURCES \o/
     44 ./gfx/harfbuzz/src
     41 ./layout/xul/base/src \o/ UNIFIED_SOURCES \o/
     40 ./netwerk/test
     40 ./content/events/src
     39 ./widget/cocoa
     39 ./js/src
     39 ./gfx/2d
     38 ./content/xslt/src/xpath
     38 ./content/media
     37 ./dom/base
     36 ./layout/base \o/ UNIFIED_SOURCES \o/
     36 ./gfx/graphite2/src
     35 ./xpcom/glue
     35 ./layout/svg \o/ UNIFIED_SOURCES \o/
     35 ./ipc/ipdl/test/cxx
     33 ./parser/html \o/ UNIFIED_SOURCES \o/
     33 ./netwerk/protocol/http
     32 ./js/xpconnect/src
     31 ./gfx/ots/src
     31 ./content/media/webaudio
     30 ./content/xslt/src/xslt
     28 ./widget/xpwidgets \o/ UNIFIED_SOURCES \o/
     27 ./widget/gtk
     26 ./xpcom/io
     26 ./tools/profiler
     26 ./toolkit/xre
     26 ./toolkit/crashreporter/google-breakpad/src/common
     26 ./gfx/gl
     26 ./content/xul/templates/src
     25 ./ipc/glue
     25 ./extensions/universalchardet/src/base
     25 ./dom/plugins/ipc
     24 ./xpcom/base
     24 ./widget/qt
     24 ./image/src
     24 ./content/smil
     24 ./accessible/src/base
     23 ./storage/src
     22 ./xpcom/ds
     22 ./toolkit/crashreporter/google-breakpad/src/common/linux
     22 ./layout/mathml \o/ UNIFIED_SOURCES \o/
     22 ./editor/libeditor/base \o/ UNIFIED_SOURCES \o/
     22 ./dom/indexedDB
     21 ./dom/plugins/base
     19 ./accessible/src/windows/msaa
     19 ./accessible/src/atk
     18 ./xpcom/string/src
     18 ./widget/os2
     18 ./widget/android
     18 ./layout/forms \o/ UNIFIED_SOURCES \o/
     18 ./gfx/layers
     18 ./gfx/angle/src/libGLESv2
     18 ./dom/bluetooth
     18 ./content/media/webaudio/blink
     17 ./netwerk/cache
     17 ./editor/libeditor/html \o/ UNIFIED_SOURCES \o/
     17 ./dom/system/gonk
     17 ./dom/file
     17 ./content/xbl/src
     16 ./toolkit/components/places
     16 ./netwerk/cache2
     16 ./intl/uconv/src \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 ./gfx/src
     13 ./extensions/spellcheck/hunspell/src
     12 ./widget/gonk
     12 ./toolkit/mozapps/update/updater
     12 ./toolkit/crashreporter/google-breakpad/src/common/mac
     12 ./layout/tables \o/ UNIFIED_SOURCES \o/
     12 ./docshell/base
     12 ./accessible/src/xul
     12 ./accessible/src/windows/ia2
     12 ./accessible/src/generic
     11 ./xpcom/threads
     11 ./xpcom/build
     11 ./toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer
     11 ./toolkit/components/url-classifier
     11 ./netwerk/streamconv/converters
     11 ./gfx/ycbcr
     11 ./dom/plugins/base/android
     11 ./dom/mobilemessage/src
     11 ./content/media/webspeech/recognition
     10 ./accessible/src/mac
      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 ./dom/network/src
      8 ./xpfe/appshell/src
      8 ./uriloader/exthandler
      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 ./extensions/spellcheck/src
      8 ./editor/composer/src \o/ UNIFIED_SOURCES \o/
      8 ./caps/src
      8 ./accessible/src/html
      7 ./mozglue/build
      7 ./modules/libjar \o/ UNIFIED_SOURCES \o/
      7 ./intl/lwbrk/src
      7 ./intl/locale/src
      7 ./image/decoders
      7 ./content/media/directshow
      7 ./content/html/document/src
      6 ./xpcom/reflect/xptcall/src/md/win32
      6 ./widget/gonk/nativewindow
      6 ./uriloader/prefetch
      6 ./tools/jprof
      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 ./netwerk/protocol/ftp
      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/telephony
      6 ./dom/src/storage
      6 ./content/xul/document/src
      6 ./content/media/wmf
      6 ./content/media/webspeech/synth
      6 ./content/media/webrtc
      6 ./content/media/omx
      5 ./widget/gonk/libdisplay
      5 ./toolkit/crashreporter/google-breakpad/src/client/solaris/handler
      5 ./toolkit/crashreporter/google-breakpad/src/client/mac/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
      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
      5 ./content/media/omx/mediaresourcemanager
      5 ./content/media/mediasource
      5 ./content/media/gstreamer
      4 ./xpcom/reflect/xptinfo/src
      4 ./xpcom/components
      4 ./toolkit/crashreporter
      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
      4 ./extensions/pref/autoconfig/src
      4 ./embedding/components/printingui/src/win
      4 ./dom/time
      4 ./dom/quota
      4 ./dom/fmradio/ipc
      4 ./dom/encoding
      4 ./docshell/shistory/src
      4 ./content/xml/document/src
      4 ./content/xml/content/src
      4 ./content/media/plugins
      4 ./content/media/ogg
      4 ./chrome/src
      4 ./accessible/src/xpcom
      3 ./widget/shared
      3 ./tools/trace-malloc/lib
      3 ./tools/trace-malloc
      3 ./toolkit/system/dbus
      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 ./startupcache
      3 ./rdf/tests/dsds
      3 ./parser/xml/src
      3 ./netwerk/protocol/data \o/ UNIFIED_SOURCES \o/
      3 ./mobile/android/components/build
      3 ./layout/build
      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 ./image/decoders/icon
      3 ./hal
      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/media
      3 ./dom/gamepad
      3 ./dom/devicestorage
      3 ./dom/audiochannel
      3 ./content/xul/content/src
      3 ./content/media/webm
      3 ./content/media/encoder
      3 ./browser/components/shell/src
      3 ./accessible/src/windows/sdn
      2 ./xpcom/sample
      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/library
      2 ./toolkit/crashreporter/test
      2 ./toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation
      2 ./toolkit/crashreporter/google-breakpad/src/client
      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
      2 ./netwerk/protocol/viewsource \o/ UNIFIED_SOURCES \o/
      2 ./netwerk/protocol/rtsp
      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/system
      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 ./dom/fmradio
      2 ./content/xslt/src/xml
      2 ./content/media/webspeech/synth/pico
      2 ./content/media/wave
      2 ./content/media/raw
      2 ./content/media/apple
      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/reflect/xptcall/src
      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/ctypes
      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/gb235/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/froyo/libstagefright
      1 ./media/omx-plugin/hc
      1 ./media/omx-plugin/gb235
      1 ./media/omx-plugin/gb
      1 ./media/omx-plugin/froyo
      1 ./media/omx-plugin
      1 ./media/libspeex_resampler/src
      1 ./media/libcubeb/src
      1 ./js/src/gdb
      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/win32
      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