Mercurial > hg > aboriginal
changeset 1352:6da94a74a8a9
Convert downloads/README into build-stages.html
author | Rob Landley <rob@landley.net> |
---|---|
date | Mon, 18 Apr 2011 22:51:21 -0500 |
parents | c41de203f9b8 |
children | e948f92964b5 |
files | www/build-stages.html www/downloads/README www/header.html |
diffstat | 3 files changed, 249 insertions(+), 142 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/www/build-stages.html Mon Apr 18 22:51:21 2011 -0500 @@ -0,0 +1,248 @@ +<html> +<title>Aboriginal Linux - Build Stages</title> +<body> +<!--#include file="header.html" --> + +<p>The Aboriginal Linux build scripts are the source code for the Aboriginal +Linux project. If you would like to build your own cross compiler or target +system image from source, use these build scripts. They're written in bash +and should be fairly easy to read.</p> + +<h2>Quick start</h2> + +<p>Run <b>build.sh</b> with no arguments to see a list of targets. Select +a target, and run <b>build.sh $TARGET</b> with the target name in place of +$TARGET. When it finishes, run <b>more/dev-environment.sh $TARGET</b> to +boot the resulting system image under QEMU, configured for use as a +development environment. Type <b>exit</b> to shut down the emulator.</p> + +<h2>Overview</h2> + +<p>The build runs the following stages, in order:</p> + +<ul> +<li><b>download.sh</b> - Download source packages used by the rest of the build.</li> +<li><b>host-tools.sh</b> - Build prerequisites host needs to run remaining stages.</li> +<li><b>simple-cross-compiler.sh</b> - Build cross compiler for selected target architecture.</li> +<li><b>[</b>cross-compiler.sh<b>]</b> - optionally produce a more portable cross compiler (not needed by rest of build).</li> +<li><b>native-compiler.sh</b> - Build native compiler to install/run on target.</li> +<li><b>simple-root-filesystem.sh</b> - Build root filesystem that can boot to a shell prompt.</li> +<li><b>root-filesystem.sh</b> - Combine output of native-compiler and simple-root-filesystem stages into a single directory.</li> +<li><b>root-image.sh</b> - Create ext2/squashfs/initramfs image file from root-filesystem or simple-root-filesystem output.</li> +<li><b>linux-kernel.sh</b> - Build bootable Linux kernel.</li> +<li><b>system-image.sh</b> - Package together filesystem image and kernel with scripts to launch them under an emulator.</li> +</ul> + +<p>The top level wrapper script <b>build.sh</b> runs the above stages in order, +but each stage script can also be run individually. Each of the above +build scripts (except download.sh and host-tools.sh) take a single argument: +the name of the target architecture to build code for. Run build.sh with no +arguments to see a list of available targets.</p> + +<p>Each build stage (except download.sh and host-tools.sh) produces its output +in the "build" directory under a subdirectory named after the script plus the +target. It also produces a tarball of that directory if the build stage +completed successfully. (The download.sh script populates the "packages" +directory instead, and host-tools.sh produces its output the directory +"build/host" with no tarball version since those programs are intended to +run locally.)</p> + +<p>All downloaded files wind up in the "packages" directory. Output from +compiles is generated in the "build" directory. These are the only two +directories the build writes to, and both directories may be deleted and +then recreated by the build scripts. (The equivalent of "distclean" is +<b>rm -rf build packages</b> from the top level directory.)</p> + +<p>None of these scripts need to be run as root -- an explicit design goal of +Aboriginal Linux is that root access on the host is never required.</p> + +<h2>Build stages</h2> + +<p>The files in the top level directory of the Aboriginal Linux source +are:</p> + +<ul> +<li><b>configure</b> +<blockquote> +<p>Contains several variables that can be set to control the build's behavior, +with descriptions of each. These variables may be set in this file, or +exported as environment variables.</p> + +<p>A useful shell syntax to export environment variables for just a single +command, without persistently altering the environment, is to list the +assignments before the command on the same line. For example:</p> + +<blockquote><pre><b>CROSS_HOST=i686 SYSIMAGE_TYPE=ext2 ./build.sh armv5l</b></pre></blockquote> +</li> + +<li><b>build.sh $TARGET</b> +<blockquote> +<p>Top level wrapper script which builds a system image for a target, +by calling most of the other scripts listed here in the appropriate +order. It requires one argument, which is the target platform to build +for. When run without arguments, build.sh lists available architectures.</p> + +<p>This script is just a wrapper, it contains no actual build logic (except +checking some of the configuration variables).</p> +</li> + +<li><b>download.sh</b> + +<blockquote> +<p>Uses wget to download the source code required by the later build stages, +saving it in the "packages" directory. It compares the sha1 checksum +of any existing tarballs to an expected value, only downloading new +source tarballs when it needs to.</p> + +<p>If a package's primary site is down, it checks a series of fallback mirrors. +The environment variable PREFERRED_MIRROR can insert a new mirror at +the start of the list, which is checked before even the official website.</p> + +<p>This script is not target-specific, and only needs to be called once +even when building multiple architectures.</p> +</blockquote> +</li> + +<li><b>host-tools.sh</b> + +<blockquote> +<p>Sanitizes the host environment by building known versions of needed tools +from source code, then restricting the $PATH to just those tools. This is +an optional step which can be skipped, but without it the build process +is very brittle.</p> + +<p>This "airlock" step serves a similar purpose to the temporary system built +by Linux From Scratch's chapter 5, isolating the new system from variations +in the host. It also acts as an early check that the resulting system +images offer a sufficient development environment to rebuild themselves +from source, because the host tool versions used to build them in the first +place are the same ones the scripts install into the target root filesystem.</p> + +<p>This script populates the "build/host" directory, which is automatically +<p>used by later stages if it exists. It is not target specific, and only +<p>needs to be run once when building multiple architectures.</p> +</blockquote> +</li> + +<li><b>simple-cross-compiler.sh $TARGET</b> + +<blockquote> +<p>Creates a cross compiler for the selected target architecture, built from +gcc, binutils, uClibc, and the Linux kernel headers. This compiler runs +on the host and produces programs that run on the target.</p> + +<p>This compiler is sufficient to build a system image for the target, but +isn't as powerful as the compilers created by cross-compiler.sh or +native-compiler.sh. (It doesn't include thread support, uClibc++, or the +shared version of libgcc.)</p> +</blockquote> +</li> + +<li><b>cross-compiler.sh $TARGET</b> + +<blockquote> +<p>This optional step creates a more full-featured cross compiler, with +thread support, uClibc++, and the shared version of libgcc. This is +not required to build a system image, but the prebuilt binary compilers +shipped in the downloads/binaries directory are built this way.</p> + +<p>The build.sh wrapper script only calls this stage if the config variable +CROSS_HOST is set, indicating which host architecture to build for. +(For PC hardware, i686 is a good value, since most 64 bit PCs can run 32 bit +code.)</p> + +<p>This compiler is statically linked against uClibc, for maximum +portability. (You can set BUILD_STATIC=none to dynamically link instead, +but then have to install uClibc's shared libraries on the host.)</p> +</blockquote> +</li> + +<li><b>native-compiler.sh $TARGET</b> + +<blockquote> +<p>This step creates a compiler for the selected target, using one +or more of the existing simple cross compilers. The compiler it produces +runs on the target and produces programs that also run on the target.</p> + +<p>By default this compiler is statically linked so you can add it to an +existing target root filesystem. Use BUILD_STATIC=none to disable this.,/p> + +<p>This compiler includes binutils, gcc, make, bash, and distcc. Because +it's a native compiler, the executable names do not have any prefixes the +way the cross compilers do. (I.E. just "ld" instead of "$TARGET-ld".)</p> +</blockquote> +</li> + +<li><b>simple-root-filesystem.sh $TARGET</b> + +<blockquote> +<p>Creates a root filesystem (with uCLibc, BusyBox, and an init script) +that contains just enough infrastructure to boot up to a shell prompt.</p> + +<p>The config variable SIMPLE_ROOT_OVERLAY can supplement this stage.</p> +</blockquote> +</li> + +<li><b>root-filesystem.sh $TARGET</b> +<blockquote> +<p>Combines the simple root filesystem and native compiler into a single +root filesystem, producing a bootable root filesystem with development +tools.</p> +</blockquote> +</li> + +<li><b>root-image.sh $TARGET</b> +<blockquote> +<p>Creates a filesystem image from the root-filesystem +(or simple-root-filesystem) directory. The default is squashfs, but +the config variable SYSIMAGE_TYPE can also select ext2 or initramfs formats.</p> +</blockquote> +</li> + +<li><b>linux-kernel.sh $TARGET</b> +<blockquote> +<p>Builds a bootable Linux kernel for the target, generally configured for use +with QEMU.</p> + +<p>The kernel configuration combines the sources/baseconfig-linux settings +(which are the same for each $TARGET) with the target-specific LINUX_CONFIG +entries from sources/targets/$TARGET/settings. This configuration mechanism +essentially starts with "allnoconfig" and then switches on each mentioned +symbol, resolving dependencies as it goes, just as if you opened up menuconfig +and set that list of symbols by hand.</p> + +<p>Alternately, you could put your own kernel config in +"sources/targets/$TARGET/miniconfig-linux". Or just build your own kernel.</p> +</blockquote> +</li> + +<li><b>system-image.sh $TARGET</b> +<blockquote> +<p>Combines the output of root-image and linux-kernel, and adds emulator +launch scripts.</p> + +<p>For more information, see the <a href=prebuilt-binaries.html>the binary +docs</a></p> +</blockquote> +</li> +</ul> + +<p>The sources/more directory contains additional scripts the user can run, +but which are not called from build.sh. This directory contains the external +user interfaces the user can call directly which are not build stages. +See more/README in the Aboriginal source code for details.</p> + +<!-- + run-from-build.sh ARCH + + Boot up a system image under its emulator, with full native development + environment options (a 2 gigabyte /dev/hdb mounted on /home and distcc + calling out to the appropriate cross compiler). + + Note that targets with the hw- prefix are aimed at actual hardware, and do + not have an emulator configured. Hardware targets are derived from an + existing architecture, repackaging the other architecture's root filesystem + with a different Linux kernel configuration. +--> + +<!--#include file="footer.html" -->
--- a/www/downloads/README Mon Apr 18 19:34:48 2011 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,141 +0,0 @@ -The Aboriginal Linux build scripts are the source code for the Aboriginal -Linux project. If you would like to build your own cross compiler or target -system image from source, use these build scripts. They're written in bash -and should be fairly easy to read. - -If you want to download prebuilt binary cross compilers or system images, -see the downloads/binaries directory (which has its own README). The -rest of this README describes the contents of the current source tarball. - -Scripts that build code for a specific target (everything except download.sh, -clean.sh, and host-tools.sh) produce output under the "build" directory, in a -subdirectory with the same name as the script plus the name of the target -architecture the output is built for. At the end of each stage, the -result is saved to a tarball of the same name. - -All downloaded files wind up in the "packages" directory. Output from -compiles is generated in the "build" directory. These are the only two -directories the build writes to, and both directories may be deleted and -then recreated by the build scripts. - -To do a full "distclean", do "rm -rf build packages" from the top level -directory. - -None of these scripts need to be run as root -- a design goal of -Aboriginal Linux is that root access on the host is never required. - -These scripts include the following stages: - - build.sh ARCH - - Top level wrapper script which builds a system image for a target, - by calling most of the other scripts listed here in the appropriate - order. It requires one argument, which is the target platform to build - for. When run without arguments, build.sh lists available architectures. - - Several environment variables can be set to control the build's behavior, - see the file "configure" for details. - - download.sh - - Uses wget to download the source code required by the later build stages, - saving it in the "packages" directory. It compares the sha1 checksum - of any existing tarballs to an expected value, only downloading new - source tarballs when it needs to. - - If the primary site is down, it checks a series of fallback mirrors. - The environment variable PREFERRED_MIRROR can insert a new mirror at - the start of the list, which is checked before even the official website. - - This script is not target-specific, and only needs to be called once - when building multiple architectures. - - host-tools.sh - - Sanitizes the host environment by building known versions of needed tools - from source code, then restricting the $PATH to just those tools. This is - an optional step which can be skipped, but without it the build process - is very brittle. - - This "airlock" step serves a similar purpose to the temporary system built - by Linux From Scratch's chapter 5, isolating the new system from variations - in the host. It also acts as an early check that the resulting system - images offer a sufficient development environment to rebuild themselves - from source, because the host tool versions used to build them in the first - place are the same ones the scripts install into the target root filesystem. - - This script populates the "build/host" directory, which is automatically - used by later stages if it exists. It is not target specific, and only - needs to be run once when building multiple architectures. - - simple-cross-compiler.sh ARCH - - Creates a cross compiler for the selected target architecture, built from - gcc, binutils, uClibc, and the Linux kernel headers. This compiler runs - on the host and produces programs that run on the target. - - This compiler is sufficient to build a system image for the target, but - isn't as powerful as the compilers created by native-compiler.sh. It - doesn't include thread support, uClibc++, or the shared version of libgcc. - - cross-compiler.sh ARCH - - This optional step creates a more full-featured cross compiler, with - thread support, uClibc++, and the shared version of libgcc. (This is - not required to build a system image, but the prebuilt binary compilers - shipped in the downloads/binaries directory are built this way.) - - The build.sh wrapper script only calls this stage if CROSS_HOST_ARCH is - set, indicating which host architecture to build for. (For PC hardware, - i686 is a good value, since most 64 bit PCs can run 32 bit code.) - - This compiler is statically linked against uClibc, for maximum - portability. (You can set BUILD_STATIC=none to dynamically link instead, - but then have to install uClibc's shared libraries on the host.) - - native-compiler.sh ARCH - - This step creates a compiler for the selected target, using one - or more of the existing simple cross compilers. The compiler it produces - runs on the target and produces programs that also run on the target. - - By default this compiler is statically linked so you can add it to an - existing target root filesystem. Use BUILD_STATIC=none to disable this. - - This compiler includes binutils, gcc, make, bash, and distcc. Because - it's a native compiler, the executable names do not have any prefixes the - way the cross compilers do. (I.E. just "ld" instead of "$ARCH-ld".) - - simple-root-filesystem.sh ARCH - - Creates a root filesystem (with uCLibc, BusyBox, and an init script) - that contains just enough infrastructure to boot up to a shell prompt. - - root-filesystem.sh ARCH - - Combines the simple root filesystem and native compiler into a single - root filesystem, producing a bootable root filesystem with development - tools. - - system-image.sh ARCH - - Package up the root filesystem into a filesystem image (ext2, squashfs, - or initramfs), build a Linux kernel configured for the target, and - generate a wrapper script capable of invoking an appropriate emulator - (generally qemu). - - run-from-build.sh ARCH - - Boot up a system image under its emulator, with full native development - environment options (a 2 gigabyte /dev/hdb mounted on /home and distcc - calling out to the appropriate cross compiler). - - Note that targets with the hw- prefix are aimed at actual hardware, and do - not have an emulator configured. Hardware targets are derived from an - existing architecture, repackaging the other architecture's root filesystem - with a different Linux kernel configuration. - -The sources/more directory contains additional scripts the user can run, -but which are not called from build.sh. This directory contains the external -user interfaces the user can call directly which are not build stages. -See more/README in the Aboriginal source code for details.
--- a/www/header.html Mon Apr 18 19:34:48 2011 -0500 +++ b/www/header.html Mon Apr 18 22:51:21 2011 -0500 @@ -32,7 +32,7 @@ <ul> <li><a href=about.html>About</a></li> <li><a href=README>README (intro)</a></li> - <li><a href=downloads/README>Source README</a></li> + <li><a href=build-stages.html>Build Stages</a></li> <li><a href=downloads/binaries/README>Binaries README</a></li> <li><a href=screenshots>Screenshots</a></li> <li><a href=FAQ.html>FAQ</a></li>