Static Analysis/Installing the Oink Stack: Difference between revisions
| Line 11: | Line 11: | ||
== Build and Install MCPP == | == Build and Install MCPP == | ||
Note, do not pass absolute path names to mcpp's configure. Instead make sure your $CC and $CXX appear first in the path | |||
<pre>svn co https://mcpp.svn.sourceforge.net/svnroot/mcpp/trunk mcpp | <pre>svn co https://mcpp.svn.sourceforge.net/svnroot/mcpp/trunk mcpp | ||
Revision as of 00:25, 10 June 2008
This is a kinda rough scratchpad for how to install and use the oink stack on a Linux system to do Static Analysis.
Base system: FC7
Install GCC 3.4
sudo yum install compat-gcc-34 sudo yum install compat-gcc-34-c++
You may want to do a test-build of Mozilla at this point to make sure that it builds and links correctly.
Build and Install MCPP
Note, do not pass absolute path names to mcpp's configure. Instead make sure your $CC and $CXX appear first in the path
svn co https://mcpp.svn.sourceforge.net/svnroot/mcpp/trunk mcpp cd mcpp ./configure --enable-replace-cpp CC=gcc34 CXX=g++34 make sudo make install
Get Spidermonkey
System spidermonkey is used by dehydra:
sudo yum install js-devel
(The corresponding apt-get command had the curious side effect of removing 30 packages from my system, including little things like firefox and gnome-terminal. --jorendorff 13:38, 19 October 2007 (PDT))
(I haven't been able to install js-devel through a package manager on my systems. I used a standalone js source distro from http://www.ossp.org/pkg/lib/js/). --User:dmandelin
Do the oink thing
wget http://people.mozilla.org/~tglek/checkout.sh sh checkout.sh http://hg.mozilla.org
Now, depending on your version of hg, you may need to manually update the working directory for elsa and elkhound:
hg -R oink-stack/elkhound update -C tip hg -R oink-stack/elsa update -C tip hg -R oink-stack/oink update -C tip
Build it.
cd oink-stack ./configure make
Building Mozilla with MCPP
To build Mozilla with MCPP to generate annotated .ii files, use the following configure command:
ac_cv_visibility_hidden=no CC="gcc34 -save-temps -Wp,-W0,-K" CXX="g++34 -save-temps -Wp,-W0,-K" CPPFLAGS=-DNS_DISABLE_LITERAL_TEMPLATE $srcdir/configure --enable-debug --disable-optimize --disable-accessibility --enable-application=browser --disable-crashreporter
Building will probably require disabling WARNINGS_AS_ERRORS:
make WARNINGS_AS_ERRORS=
Building a 32-bit MCPP on a 64-bit system
This is dark magic, and I hope I've got it right. First I built GCC in a separate --prefix=/builds/gcc-3.4.6-installed. Note: once you do this, you can only use this version of GCC in -m32 mode.
Apply this patch:
Index: src/set_mcpp.sh
===================================================================
--- src/set_mcpp.sh (revision 78)
+++ src/set_mcpp.sh (working copy)
@@ -35,14 +35,14 @@
echo " cd ${inc_dir}/mcpp-gcc"
cd ${inc_dir}/mcpp-gcc
if test ! -f gcc${gcc_maj_ver}${gcc_min_ver}_predef_std.h; then
- echo " generating g*.h header files"
- ${CC} -E -xc -dM /dev/null | sort | grep ' *#define *_' \
+ echo " generating g*.h header files: ${CPPFLAGS}"
+ ${CC} ${CPPFLAGS} -E -xc -dM /dev/null | sort | grep ' *#define *_' \
> gcc${gcc_maj_ver}${gcc_min_ver}_predef_std.h
- ${CC} -E -xc -dM /dev/null | sort | grep -E ' *#define *[A-Za-z]+' \
+ ${CC} ${CPPFLAGS} -E -xc -dM /dev/null | sort | grep -E ' *#define *[A-Za-z]+' \
> gcc${gcc_maj_ver}${gcc_min_ver}_predef_old.h
- ${CXX} -E -xc++ -dM /dev/null | sort | grep ' *#define *_' \
+ ${CXX} ${CPPFLAGS} -E -xc++ -dM /dev/null | sort | grep ' *#define *_' \
> gxx${gcc_maj_ver}${gcc_min_ver}_predef_std.h
- ${CXX} -E -xc++ -dM /dev/null | sort | grep -E ' *#define *[A-Za-z]+' \
+ ${CXX} ${CPPFLAGS} -E -xc++ -dM /dev/null | sort | grep -E ' *#define *[A-Za-z]+' \
> gxx${gcc_maj_ver}${gcc_min_ver}_predef_old.h
fi
if test ${host_system} = SYS_CYGWIN; then
If you don't do this, MCPP will get the wrong set of automatic definitions and you'll end up with an unpleasant hybrid x86-64/i686 build system.
$ export PATH=/builds/gcc-3.4.6-installed/bin:$PATH $ export CPPFLAGS=-m32 $ CC=gcc34 CXX=g++34 CPPFLAGS=-m32 LDFLAGS=-m32 ../src/configure --enable-replace-cpp --prefix=/builds/gcc-3.4.6-installed --target=i686-pc-linux $ make $ make install program_transform_name=