Instructions for Setting Up DXR

From CDOT Wiki
Jump to: navigation, search

This page describes the steps necessary to manually create a working DXR. The goal of this is to eventually be able to automate the process as part of an RPM for Fedora.

  • mkdir ~/dxr
  • mkdir ~/dxr/tools
  • Setup a working Mozilla build environment:
    • su -c "yum groupinstall 'Development Tools' 'Development Libraries' 'GNOME Software Development'"
    • su -c "yum install mercurial autoconf213"
  • Setup a working GCC+plugins build environment
    • su -c "yum install mpfr-devel"
  • Build SpiderMonkey
    • cd ~/dxr/tools
    • link or copy js/ from the mozilla-central tree (cp -R ~/dxr/mozilla-central/mozilla/js/ ./js)
    • cd ~/dxr/tools/js/src
    • autoconf-2.13
    • mkdir build-release
    • cd build-release
    • ../configure --prefix=~/dxr/tools/SpiderMonkey
    • make
    • make install
  • Build GCC 4.3.0 with Plugin Support
    • mkdir ~/dxr/tools/gcc-dehydra
    • cd ~/dxr/tools/gcc-dehydra
    • Obtain GCC 4.3 sources - wget ftp://ftp.nluug.nl/mirror/languages/gcc/releases/gcc-4.3.0/gcc-4.3.0.tar.bz2
    • tar jxvf gcc-4.3.0.tar.bz2
    • cd gcc-4.3.0/
    • hg init .
    • hg clone http://hg.mozilla.org/users/tglek_mozilla.com/gcc-moz-plugin-mq .hg/patches
    • (for file in `cat .hg/patches/series`; do cat .hg/patches/$file; done) |patch -p1
    • cd ..
    • mkdir gcc-build
    • cd gcc-build
    • build for proper arch:
      • (32 bit) ../gcc-4.3.0/configure --without-libstdcxx --enable-checking --disable-bootstrap CFLAGS="-g3 -O0" --enable-languages=c,c++ --enable-__cxa_atexit --prefix=$PWD/../installed
      • (x86_64) ../gcc-4.3.0/configure --without-libstdcxx --enable-checking --disable-bootstrap CFLAGS="-g3 -O0 -m64" --enable-languages=c,c++ --disable-multilib --enable-__cxa_atexit --prefix=$PWD/../installed
    • make
    • make install
    • cd .. (note: ./installed now contains the built gcc)

NOTE: running make check causes a known failure that can be ignored for now:

[dave@Germany dehydra-gcc]$ make check
make -C test check
make[1]: Entering directory `/home/dave/dxr/tools/gcc-dehydra/dehydra-gcc/test'
python unit_test_harness.py dehydra "/home/dave/dxr/tools/gcc-dehydra/gcc-build/gcc/cc1plus -quiet -O1 -ftest-coverage -fplugin=../gcc_%s.so -o /dev/null -fplugin-arg=%s %s"
...x..................................
Test Failure: 
    Test command: /home/dave/dxr/tools/gcc-dehydra/gcc-build/gcc/cc1plus -quiet -O1 -ftest-coverage -fplugin=../gcc_dehydra.so -o /dev/null -fplugin-arg=test_numinfo.js numinfo.cc
   Failure msg: Expected 'OK' output; got 'ERR  TestCase   Error: 0ul != 0u'

Unit Test Suite Summary:
     37 passed
      1 failed
      0 error(s)
make[1]: *** [check_dehydra] Error 1
make[1]: Leaving directory `/home/dave/dxr/tools/gcc-dehydra/dehydra-gcc/test'
make: *** [check] Error 2


SOURCEROOT=$HOME/dxr/mozilla-central/mozilla
OBJDIR=${SOURCEROOT}/objdir-opt
DEHYDRAROOT=$HOME/dxr/tools/xref-scripts
DBROOT=$HOME/dxr/xref-db
DBBACKUP=${DBROOT}-old
  • Create a mozconfig to work with dehydra
. $topsrcdir/browser/config/mozconfig
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir-opt
mk_add_options MOZ_MAKE_FLAGS=-j9
ac_add_options --enable-optimize --disable-debug
ac_add_options --disable-tests
# build with gcc+dehydra instead of normal g++
export CXX=$HOME/dxr/tools/gcc-dehydra/installed/bin/g++
export CXXFLAGS="-fplugin=$HOME/dxr/tools/gcc-dehydra/dehydra-gcc/gcc_dehydra.so -fplugin-arg=$HOME/dxr/tools/xref-scripts/moz_types.js"
  • cd ~/dxr/tools/xref-scripts
  • chmod +x *.pl
  • ./build_db.sh