diff options
Diffstat (limited to 'hurd/building')
-rw-r--r-- | hurd/building/cross-compiling.mdwn | 208 | ||||
-rw-r--r-- | hurd/building/cross-compiling/discussion.mdwn | 26 | ||||
-rw-r--r-- | hurd/building/example.mdwn | 60 |
3 files changed, 294 insertions, 0 deletions
diff --git a/hurd/building/cross-compiling.mdwn b/hurd/building/cross-compiling.mdwn new file mode 100644 index 00000000..d5beade9 --- /dev/null +++ b/hurd/building/cross-compiling.mdwn @@ -0,0 +1,208 @@ +[[!meta copyright="Copyright © 2007, 2008, 2010 Free Software Foundation, +Inc."]] + +[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable +id="license" text="Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no Invariant +Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license +is included in the section entitled +[[GNU Free Documentation License|/fdl]]."]]"""]] + +# `cross-gnu` + +[[Thomas_Schwinge|tschwinge]] has written a shell script for building a +complete cross-build environment for GNU/Hurd systems. + +Find it in the [[source repositories/incubator]], *cross-gnu* branch. + + +## Using + +Read through it. Understand it. Only then use it by following the next steps. + + +## Status + +/!\ Please note that these cross toolchains does not yet encompass all of the +functionality that native toolchains provide. For example, there is only +support for C and C++ so far, but not for other languages. A bunch of fixes / +enhancements of [[glibc]] are missing. We're working towards minimizing these +differences, as well as towards pushing all patches upstream. + + +### Supported Versions of Source Packages + +The following ones are known to work. Others may work as well, but no +guarantee is given. Always the preferred version is listed first. + + * `src/binutils`: [[GNU_Binutils|binutils]] + + * CVS `binutils-2_20-branch` + + $ mkdir binutils-2_20-branch + $ cd binutils-2_20-branch/ + $ cvs -d:pserver:anoncvs@sources.redhat.com:/cvs/src ↩ + co -r binutils-2_20-branch binutils + + The sources are rooted in `binutils-2_20-branch/src/`. Also use the above + commands for updating, instead of the usual `cvs update`. + + * Release of the 2.20 series from <ftp://ftp.gnu.org/gnu/binutils/> + should also be fine. + + * `src/gcc`: [[GNU_Compiler_Collection|gcc]] + + * SVN `gcc-4_5-branch` + + $ svn co svn://gcc.gnu.org/svn/gcc/branches/gcc-4_5-branch + + Patches: + + * <http://gcc.gnu.org/ml/gcc-patches/2010-04/msg00602.html> + + Prepare: + + $ ( cd gcc-4_5-branch/ && contrib/gcc_update --touch ) + + * SVN `gcc-4_4-branch` + + $ svn co svn://gcc.gnu.org/svn/gcc/branches/gcc-4_4-branch + + Patches: + + * <http://gcc.gnu.org/ml/gcc-patches/2010-04/msg00602.html> + + Prepare: + + $ ( cd gcc-4_4-branch/ && contrib/gcc_update --touch ) + + * Releases of the 4.5 and 4.4 series from <ftp://ftp.gnu.org/gnu/gcc/> + should also be fine, but need the same set of patches as the + `gcc-4_5-branch` needs. + + * `src/gnumach`: [[GNU_Mach|microkernel/mach/gnumach]] + + * Git `master` branch + + $ git clone ↩ + git://git.sv.gnu.org/hurd/gnumach.git gnumach + + Prepare: + + $ ( cd gnumach/ && autoreconf -vi ) + + * `src/mig`: [[microkernel/mach/mig/GNU_MIG]] + + * Git `master` branch + + $ git clone ↩ + git://git.sv.gnu.org/hurd/mig.git mig + + Prepare: + + $ ( cd mig/ && autoreconf -vi ) + + * `src/hurd`: [[GNU_Hurd|hurd]] + + * Git `master` branch + + $ git clone ↩ + git://git.sv.gnu.org/hurd/hurd.git hurd + + * `src/libpthread`: [[libpthread]] + + * Git `tschwinge/Peter_Herbolzheimer` branch + + $ git clone --no-checkout ↩ + git://git.sv.gnu.org/hurd/libpthread.git libpthread + $ cd libpthread/ + $ git checkout origin/tschwinge/Peter_Herbolzheimer + + * `src/glibc`: [[GNU_C_Library|glibc]] + + * Git `tschwinge/Roger_Whittaker` branch + + $ git clone --no-checkout ↩ + git://git.sv.gnu.org/hurd/glibc.git glibc + $ cd glibc/ + $ git checkout origin/tschwinge/Roger_Whittaker + +<!-- + + * `src/gdb`: [[GNU_Debugger|gdb]] + + This is optional and will only be compiled if present. + + * CVS `gdb_6_6-branch` + + $ cvs -d:pserver:anoncvs@sources.redhat.com:/cvs/src ↩ + co -r gdb_6_6-branch gdb + $ mv src gdb_6_6-branch + + Also needs some patch because of MIG changes, if I remember correctly. + + * Recent tarballs from <ftp://ftp.gnu.org/gnu/gdb/> should also work. + +--> + + +### Preparation + +Unpack the tarballs if you downloaded any. + +Create a directory where the cross build shall be rooted in and a `src` +subdirectory in there. Then create symbolic links for every of the above +packages: from `src/PACKAGE` to where you stored or unpacked it. If you don't +intend to build several cross compilers or use the source trees otherwise, you +can also directly store the source trees in `src/`. The source trees can be +shared between multiple cross build trees since the packages' build systems are +supposed not to modify the files in the source trees. Not all packages adhere +to that, but they fail to do so only for pre-processed documentation, etc. + +Either make sure that `cross-gnu-env` and `cross-gnu` are found in `$PATH` +(`~/bin/`, for example) or alternatively remember to use their full paths in +the following. + +The system you're running the script on (the *build* system) needs to have a +basic compiling environment installed, i.e., a C compiler with the basic +libraries and `make`. You might also need `flex` and `bison`. For building +recent version of GCC (4.3 onwards) +you'll need to have development packages of GMP and MPFR installed. + + +### Setting Up the Environment + +Do this every time you intend to use the cross compiler: + + $ ROOT=to/the/cross/build/root + $ . cross-gnu-env + +This will set several environment variables, which are later used by (a) the +`cross-gnu` script and (b) by you, the user of the cross compiler. `$TARGET` +will be set by the script, `$PATH` will be adjusted, etc. See the +`cross-gnu-env` file for all environment variables that are set, as well as +their default values. `$ROOT` will be made an absolute path if it isn't +already. + +Later, you'll be able to do things like `../configure --host="$TARGET"` and the +cross compiler will be found automatically. + + +### Creating the Cross Build Environment + +After setting up the environemt, just run `cross-gnu` and watch the messages +flow by. In the end you should see a message: *[...]/cross-gnu: Everything +should be in place now.* + + +### Staying Up-To-Date + +You can re-run `cross-gnu` to rebuild the parts of the sources that have +changed since the last run. This will save a lot of time compared to starting +from scratch again. Also, it is especially useful if you aren't working with +unpacked tarballs, but on CVS's / SVN's / Git's branches or want to quickly get +a new toolchain +with patches you applied to the source trees. However: do *not* use this +technique when doing major changes to the source trees, like switching from GCC +4.4 to GCC 4.5. diff --git a/hurd/building/cross-compiling/discussion.mdwn b/hurd/building/cross-compiling/discussion.mdwn new file mode 100644 index 00000000..dbe317ad --- /dev/null +++ b/hurd/building/cross-compiling/discussion.mdwn @@ -0,0 +1,26 @@ +[[!meta copyright="Copyright © 2007, 2008 Free Software Foundation, Inc."]] + +[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable +id="license" text="Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no Invariant +Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license +is included in the section entitled +[[GNU Free Documentation License|/fdl]]."]]"""]] + +What happens if the external link goes down? Is there any way to store files +within the wiki itself? --[[vincentvikram]] + +> You can store files in the wiki if you have direct access to the Git +> repository. + +> I'm not sure I'd like arbitrary people to be able to store files in the wiki, +> as that might be abused easily and once a file is stored in the Git +> repository, there's no clean way to get rid of it anymore. Of course, there +> are valid cases for adding raw files, then you can always send me a link and +> ask me to add that file. + +> Now, as for the `cross-gnu` shell script, as I said: it will eventually be +> made part of the Hurd CVS repository. + +> --[[tschwinge]] diff --git a/hurd/building/example.mdwn b/hurd/building/example.mdwn new file mode 100644 index 00000000..bf31bf7e --- /dev/null +++ b/hurd/building/example.mdwn @@ -0,0 +1,60 @@ +[[!meta copyright="Copyright © 2007, 2008 Free Software Foundation, Inc."]] + +[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable +id="license" text="Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no Invariant +Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license +is included in the section entitled +[[GNU Free Documentation License|/fdl]]."]]"""]] + +I checked out the source code on my Ubuntu GNU/Linux system connected to the +Internet using: + + cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/hurd co hurd + +I mounted the hurd directory on Ubuntu from my GNU Hurd system connected to the +LAN through NFS: + + settrans -ac /mnt /hurd/nfs ubuntu:/home/shaks/code + +Copy the hurd directory, locally. + +For compilation, you require build-essential, libc0.3-dev, hurd-dev. I used +Debian GNU Hurd K10 CDs for installation and they are available in the first +CD. + + apt-get update + apt-get install build-essential libc0.3-dev hurd-dev + +Enter into the hurd directory and start building it: + + cd hurd + mkdir build + cd build + ../configure + make + +There is a "libiohelp needed by" error. So, do a manual compilation for +libiohelp. + + cd .. + make libiohelp + cd build + make + +There is a "libiostore needed by" error. So, do a manual compilation for +libiostore. + + cd .. + make libiostore + cd build + make + +There is a "libiohelp.so: No such file or directory" error. + +Copy libiohelp/libiohelp.so file to build/libiohelp/ and re-run make, + + make + +The executables are created in the subdirectories in build/ directory. |