summaryrefslogtreecommitdiff
path: root/docs/5 - Using the toolchain.txt
diff options
context:
space:
mode:
authorYann E. MORIN" <yann.morin.1998@anciens.enib.fr>2010-08-14 14:37:11 (GMT)
committerYann E. MORIN" <yann.morin.1998@anciens.enib.fr>2010-08-14 14:37:11 (GMT)
commita211f4100d3e0196807dbd3b4f1839c41f79f5b1 (patch)
treed29a9ed57c0946e22afaed850658e4075c6ab1d9 /docs/5 - Using the toolchain.txt
parentebaebdacf45166a587e4e4d2d5e7b2f7a08965e2 (diff)
docs: split into multiple files
The overview.txt file has evolved into more than just an overview. Split it into chapters, and include the misc tutorials. Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Diffstat (limited to 'docs/5 - Using the toolchain.txt')
-rw-r--r--docs/5 - Using the toolchain.txt103
1 files changed, 103 insertions, 0 deletions
diff --git a/docs/5 - Using the toolchain.txt b/docs/5 - Using the toolchain.txt
new file mode 100644
index 0000000..0c38da1
--- /dev/null
+++ b/docs/5 - Using the toolchain.txt
@@ -0,0 +1,103 @@
+File.........: 5 - Using the toolchain.txt
+Copyrigth....: (C) 2010 Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
+License......: Creative Commons Attribution Share Alike (CC-by-sa), v2.5
+
+
+Using the toolchain /
+____________________/
+
+
+Using the toolchain is as simple as adding the toolchain's bin directory in
+your PATH, such as:
+ export PATH="${PATH}:/your/toolchain/path/bin"
+
+and then using the target tuple to tell the build systems to use your
+toolchain:
+ ./configure --target=your-target-tuple
+or
+ make CC=your-target-tuple-gcc
+or
+ make CROSS_COMPILE=your-target-tuple-
+and so on...
+
+It is strongly advised not to use the toolchain sys-root directory as an
+install directory for your programs/packages. If you do so, you will not be
+able to use your toolchain for another project. It is even strongly advised
+that your toolchain is chmod-ed to read-only once successfully build, so that
+you don't go polluting your toolchain with your programs/packages' files.
+
+Thus, when you build a program/package, install it in a separate directory,
+eg. /your/root. This directory is the /image/ of what would be in the root file
+system of your target, and will contain all that your programs/packages have
+installed.
+
+
+The 'populate' script |
+----------------------+
+
+When your root directory is ready, it is still missing some important bits: the
+toolchain's libraries. To populate your root directory with those libs, just
+run:
+ your-target-tuple-populate -s /your/root -d /your/root-populated
+
+This will copy /your/root into /your/root-populated, and put the needed and only
+the needed libraries there. Thus you don't polute /your/root with any cruft that
+would no longer be needed should you have to remove stuff. /your/root always
+contains only those things you install in it.
+
+You can then use /your/root-populated to build up your file system image, a
+tarball, or to NFS-mount it from your target, or whatever you need.
+
+The populate script accepts the following options:
+
+ -s src_dir
+ Use 'src_dir' as the un-populated root directory.
+
+ -d dst_dir
+ Put the populated root directory in 'dst_dir'.
+
+ -l lib1 [...]
+ Always add specified libraries.
+
+ -L file
+ Always add libraries listed in 'file'.
+
+ -f
+ Remove 'dst_dir' if it previously existed; continue even if any library
+ specified with -l or -L is missing.
+
+ -v
+ Be verbose, and tell what's going on (you can see exactly where libs are
+ coming from).
+
+ -h
+ Print the help.
+
+See 'your-target-tuple-populate -h' for more information on the options.
+
+Here is how populate works:
+
+ 1) performs some sanity checks:
+ - src_dir and dst_dir are specified
+ - src_dir exists
+ - unless forced, dst_dir does not exist
+ - src_dir != dst_dir
+
+ 2) copy src_dir to dst_dir
+
+ 3) add forced libraries to dst_dir
+ - build the list from -l and -L options
+ - get forced libraries from the sysroot (see below for heuristics)
+ - abort on the first missing library, unless -f is specified
+
+ 4) add all missing libraries to dst_dir
+ - scan dst_dir for every ELF files that are 'executable' or
+ 'shared object'
+ - list the "NEEDED Shared library" fields
+ - check if the library is already in dst_dir/lib or dst_dir/usr/lib
+ - if not, get the library from the sysroot
+ - if it's in sysroot/lib, copy it to dst_dir/lib
+ - if it's in sysroot/usr/lib, copy it to dst_dir/usr/lib
+ - in both cases, use the SONAME of the library to create the file
+ in dst_dir
+ - if it was not found in the sysroot, this is an error.