Open main menu

CDOT Wiki β

Add support for more compilers to distcc

Revision as of 16:22, 5 December 2007 by Pcallaghan (talk | contribs) (added 0.3 release plan and another contributor)

Project Name

Add support for more compilers to distcc

Project Description

An earlier project added multi-compiler support to distcc, and then MSVC support. The framework is now in place to support even more compilers. Add support for another compiler; either Java or C#.

Necessary Skills: C, Python, Makefile

Project Leader(s)

Project Contributor(s)

Some options for contributions:

  • publish/find some more c# files to test with
  • NOTE: Please ensure the files compile with Mono c# before sending them.
  • test this on different OSs & networks
  • Make a comprehensive list of the set-up steps on one page, unlike the scattered links there are now. No coding required, but time consuming.

Project Details/News

Plans for 0.3 release

While all the required functions exist, unit tests would streamline the testing process and ensure each function does exaclty what it's supposed to. Therefore, the major component of the 0.3 release is going to be a series of tests for the functions that can be run after any changes. In addition, (Time permitting) I'll clean up the instructions and make them clearer. See Below.

Having found that these instructions are inadequate, I'm setting out to fix them. First up is configuring cygwin. The Instructions given on the linked page aren't enough to compile distcc with. What follows is an alphabetic list of all the packages (with versions and locations) currently in my installation of it (with the exception of those downloaded by default). Most of them are going to be extraneous but I'm not ruling any out until I test them, so I'll weed them out over time, until we're left with just the required packages.

  • bash-completion 20060301-2 (Shells)
  • binutils 20060817-1 (Devel)
  • boost 1.33.1-3 (Devel, Libs)
  • boost-devel 1.33.1-3 (Devel,Libs)
  • c-client 2002e-3 (Devel)
  • cmake 2.4.7-2 (Devel)
  • diffutils 2.8.7-1 (Utils)
  • distcc 2.18.3-1 (Devel)
  • e2fsprogs 1.35-3 (Devel)
  • fontconfig 2.4.1-5 (Libs)
  • freetyps2 2.3.4-2 (Libs)
  • gcc 3.4.4-3 (Devel)
  • gcc-core 3.4.4-3 (Devel)
  • gcc-g++ 3.4.4-3 (Devel)
  • gcc-mingw 20040810-1 (Devel)
  • gcc-mingw-core 20050522-1 (Devel)
  • gcc-mingw-g++ 20050522-1 (Devel)
  • gettext 0.15-1 (Devel, Libs)
  • glib-devel 1.2.10-3 (Devel, Libs)
  • glib2 2.10.3-1 (Gnome, Libs)
  • glib2-devel 2.10.3-1 (Gnome, Libs)
  • indent 2.2.9-2 (Devel)
  • ioperm 0.4-1 (Devel, Libs, System)
  • libapr1 1.2.11-1 (Libs)
  • libaprutil1 1.2.10-1 (Libs)
  • libboost 1.33.1-3 (Devel, Libs)
  • libbz2-devel 1.0.3-2 (Libs)
  • libcharset1 1.11-1 (Libs)
  • libfontconfig1 2.4.1-5 (Libs)
  • libfreetype26 2.3.4-2 (Libs)
  • libiconv 1.11-1 (Devel, Libs)
  • libintl1 0.10.40-1 (Libs)
  • libncurses7 5.3-4 (Libs)
  • libneon26 0.26.4-1 (Libs)
  • libXft 2.1.6-1 (Libs)
  • libXft1 1.0.0-1 (Libs)
  • libXft2 2.1.6-1 (Libs)
  • libxml2 2.6.28-2 (Devel, Doc, Gnome, Interpreters, Libs, Text)
  • m4 1.4.10-1 (interpreters)
  • make 3.81-1 (Devel)
  • mingw-bzip2 1.0.3-2 (Mingw)
  • mingw-libbz2_1 1.0.3-2 (Mingw)
  • mingw_runtime 3.13-1 (Devel, Libs)
  • mingw-zlib 1.2.3-2 (Mingw)
  • ncurses 5.5-3 (Libs)
  • openjade 1.3.3-1 (Libs, Text)
  • OpenSP 1.5.1-1 (Libs, Text)
  • openssl 0.9.8g-1 (Libs, Net)
  • openssl-devel 0.9.8g-1 (Devel, Libs)
  • pango 1.8.1-1 (Devel, Libs, Text)
  • pango-runtime 1.8.1-1 (Devel, Libs, Text)
  • patch 2.5.8-9 (Utils)
  • patchutils 0.2.31-1 (Devel, Libs, Text)
  • pcre 7.2-1 (Devel, Utils)
  • pkg-config 0.21-1 (Devel)
  • pkgconfig 0.17.2-3 (_obsolete)
  • popt 1.6.4-4 (Libs)
  • pylibxml2 2.6.28-2 (Gnome, Python)
  • python 2.5.1-2 (Interpreters, Python)
  • subversion 1.4.5-2 (Devel)
  • tcltk 20060202-1 (Libs)
  • tcsh 6.15.00-4 (Base, Libs)
  • unzip 5.52-2 (Archive)
  • util-linux 2.12r-2 (System, Text, Utils)
  • uw-imap 2002e-3 (Mail)
  • w32api 3.10-1 (Libs)
  • x-startup-scripts 1.0.11-1 (X11)
  • xorg-x11-base 6.8.99.901-1 (X11)
  • xorg-x11-bin 6.8.99.901-1 (X11)
  • xorg-x11-bin-dlls 6.8.99.901-1 (X11)
  • xorg-x11-bin-lndir 6.8.99.901-1 (X11)
  • xorg-x11-etc 6.8.99.901-1 (X11)
  • xorg-x11-fenc 6.8.99.901-1 (X11)
  • xorg-x11-fnts 6.8.99.901-1 (X11)
  • xorg-x11-libs-data 6.8.99.901-1 (X11)
  • xorg-x11-xwin 6.8.99.901-1 (X11)
  • xterm 229-1 (X11)
  • zip 2.32-2 (Archive)
  • zlib 1.2.3-2 (Libs)
  • zsh 4.3.4-1 (Shells)

0.25 Release

A new patch has been created. All required functions are now complete for the Mono C# compiler. Now is a great time for more contributors to test this project and try to find (or fix) any bugs that pop up. I'm still having trouble with SVN, but I expect to get that sorted out soon.

to use this patch:

  1. get cygwin
  2. configure cygwin
  3. download the Mono C# compiler
  • put mono in your PATH
  • set up an environment variable DISTCC_MCS_HOSTS=localhost
  • Checkout the distcc source
  • get the 0.25 patch
  • apply the patch
    • from the trunk directory
    • patch -p0 < pcallaghanzeropointtwofive.txt
  • configure and build distcc
    • from the trunk directory
    • ./configure && make && make install
  • get a simple C# file
  • compile it
    • distcc mcs hello.cs
  • run it
    • ./hello
  • As an alternative to steps 9 through 11, find or write some other c# files and test them.
  • Tell me how it went.

  • 0.2 Release (Obsolete)

    A new patch has been created. All except one of the required functions (dcc_mcs_scan_args) are now complete. As the work required for this update turned out to be a lot less than I anticipated, a 0.25 patch should be released soon that will implement that last function. An SVN branch is not available yet, but should also be ready in time for 0.25.

    to use this patch:

    • Either reverse the first patch or get a non-patched version of the trunk
    • Apply the new patch


    Goal for 0.2 release

    Continue work on the previously identified functions. As of 0.1 several were still little more than shells, by the completion of 0.2 all except dcc_mcs_scan_args should be fully completed. A supplementary goal is to set up the source as a branch of the existing trunk on cdot, so testers may just check out the new code rather than having to check out the trunk and patch it.

    0.1 Release (Obsolete)

    A compiler has been created. Note that it is by no means anywhere near completion. That's why this is the 0.1 release.

    This patch has been tested on Windows XP, using cygwin to tell distcc to compile a single, simple c# file. To use it:

    1. get cygwin
    2. configure cygwin
    3. download the Mono C# compiler
    • put mono in your PATH
  • set up an environment variable DISTCC_MCS_HOSTS=localhost
  • Checkout the distcc source
  • get the 0.1 patch
  • apply the patch
    • from the trunk directory
    • patch -p0 < pcallaghanzeropointone.txt
  • configure and build distcc
    • from the trunk directory
    • ./configure && make && make install
  • get a simple C# file
  • compile it
    • distcc mcs hello.cs
  • run it
    • ./hello

    Goal for 0.1 Release

    - Add support for Mono's cSharp compiler[1]. By the 0.1 release, Distcc should be able to at least compile C# locally. While the earlier work done on Distcc With MSVC suggests that only a hand-full of functions need to be coded in order for it to add a new compiler, both Java and C# compile in a manner significantly different than C. This will likely cause some trouble shortly...regardless, the following functions are the minimum which need to be created:

    • arg.c
      • dcc_<compilerName>_set_action_opt
      • dcc_<compilerName>_set_output
      • dcc_<compilerName>_scan_args
    • strip.c
      • dcc_<compilerName>_strip_local_args
      • dcc_<compilerName>_strip_dasho
    • filename.c
      • dcc_<compilerName>_is_source
      • dcc_<compilerName>_is_preprocessed
      • dcc_<compilerName>_is_object
      • dcc_<compilerName>_preproc_exten
    • hosts.c
      • dcc_<compilerName>_get_hostlist

    Known Bugs

    See the list within Distcc With MSVC