Instructions for Setting Up DXR
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"
- Get Mozilla source code (needed for indexing, but also for SpiderMonkey)
- mkdir ~/dxr/mozilla-central
- cd ~/dxr/mozilla-central
- hg clone http://hg.mozilla.org/mozilla-central/ mozilla
- 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
- cd ..
- 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)
- Build Dehydra
- hg clone http://hg.mozilla.org/users/tglek_mozilla.com/dehydra-gcc/
- cd dehydra-gcc
- ./configure --js-libs=/home/dave/dxr/tools/SpiderMonkey/lib --js-headers=/home/dave/dxr/tools/SpiderMonkey/include --js-name=mozjs
- make
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
- 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/mozilla-central/moz_types.js"