summaryrefslogtreecommitdiff
path: root/hurd/building
diff options
context:
space:
mode:
Diffstat (limited to 'hurd/building')
-rw-r--r--hurd/building/cross-compiling.mdwn208
-rw-r--r--hurd/building/cross-compiling/discussion.mdwn26
-rw-r--r--hurd/building/example.mdwn60
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.