Crosscompiling with distcc HOWTO ================================ Purpose: -------- croscompiling of sourcecode in general including NetBSD's source tree and NetBSD's pkgsrc packages using `pkgsrc/devel/distcc' Note that this current setup is not intended for build builds as it might confuse the buildbuild system. Terminology: ------------ There are multiple terminologies in use for cross building. In pkgsrc, we use build platform: the system on which you are doing the compilation of packages target platform: the system on which you will run the packages (An alternative terminology is that used by autoconf: build: as above host: as "target", above target: the architecture that the cross-built compiler produces code for pkgsrc chooses the more simple build/target terms because the Canadian Cross situation is not common in pkgsrc. Partially because of the potential for confusion with autoconf's terminology, we avoid the word "host". Target machine setup: --------------------- 1) install `pkgsrc/devel/distcc' package. 2) install helper script "use-distcc" in f.e. /usr/local/bin/: --------- #!/usr/pkg/bin/tcsh setenv PATH "/usr/distcc/bin:$PATH" setenv CC gcc --------- 3) create directory "/usr/distcc/bin" contents with softlinks : lrwxr-xr-x 1 root wheel 20 Sep 16 02:58 c++@ -> ../../pkg/bin/distcc lrwxr-xr-x 1 root wheel 20 Sep 16 02:57 cc@ -> ../../pkg/bin/distcc lrwxr-xr-x 1 root wheel 20 Sep 16 02:58 g++@ -> ../../pkg/bin/distcc lrwxr-xr-x 1 root wheel 20 Sep 16 02:57 gcc@ -> ../../pkg/bin/distcc Helper machine setup: --------------------- 1) install `pkgsrc/devel/distcc' package. 2) create a crosscompiler to compile from any architecture to NetBSD/sparc, go to the NetBSD src dir and run : ./build.sh -a sparc -m sparc -T /usr/gcc-cross-sparc/ tools this will create a directory called /usr/gcc-cross-sparc/ with the crosscompilation tools. 3) install helper script "START-distcc' ------------ #!/usr/pkg/bin/tcsh setenv PATH "/usr/gcc-cross-sparc/sparc--netbsdelf/bin/:$PATH" setenv DISTCC_VERBOSE 1 distccd -a 192.168.0.137/24 --listen 192.168.0.137 -p 3632 ----------- this will start the `distcc' daemon to listen on the 192.168.0/24 network and listen on 192.168.0.137 specificly and on port 3632 (why doesn't it do this on default?) Compilation of sources (not pkgsrc): ------------------------------------ 1) on each helper machine run the `START-distcc' script 2) on the target machine (replace helper1, helper2 etc. by the names/ip addresses of the helper machines) : ----------- source /usr/local/bin/use-distcc setenv DISTCC_HOSTS "helper1 helper2 helper3" cd .../sourcedir make -j2 target ----------- Compilation of pkgsrc packages: ------------------------------- 1) on each helper machine run the `START-distcc' script 2) on the target machine, do NOT run the `use-distcc' script, go to the package dir and set : set the helpers (,lzo addition sets compression of the data transport): setenv DISTCC_HOSTS "helper1 helper2 helper3,lzo" instruct pkgsrc to use distcc: setenv PKGSRC_COMPILER "distcc gcc" set the concurrency level (not all packages allow this) setenv BUILD_MAKE_FLAGS "-j2" compile/update package make update thats all :)