From 460f5756e15d3805235f4beec7d1cf86e6fa093c Mon Sep 17 00:00:00 2001 From: William Harrington Date: Fri, 25 Feb 2022 14:47:36 -0600 Subject: [PATCH] Initial LFS-ARM book. --- README.md | 12 ++++ appendices/acknowledgments.xml | 5 ++ appendices/dependencies.xml | 45 +++++++++++-- chapter01/whatsnew.xml | 3 + chapter03/packages.xml | 10 +++ chapter04/addinguser.xml | 2 +- chapter04/creatingminlayout.xml | 2 +- chapter05/gcc-pass1.xml | 20 +++--- chapter05/glibc.xml | 16 ++--- chapter06/gcc-pass2.xml | 21 +++--- chapter07/changingowner.xml | 2 +- chapter08/adjusting.xml | 12 ++-- chapter08/binutils.xml | 18 +++-- chapter08/chapter08.xml | 1 + chapter08/expect.xml | 19 ++++-- chapter08/findutils.xml | 5 +- chapter08/gcc.xml | 32 ++++----- chapter08/glibc.xml | 13 ++-- chapter08/gmp.xml | 4 +- chapter08/grub.xml | 10 +++ chapter08/isl.xml | 107 ++++++++++++++++++++++++++++++ chapter08/libcap.xml | 4 +- chapter08/libffi.xml | 4 +- chapter08/readline.xml | 12 +++- chapter08/stripping.xml | 5 +- chapter08/tcl.xml | 4 +- chapter08/util-linux.xml | 20 ------ chapter10/kernel.xml | 4 +- general.ent | 2 +- packages.ent | 11 ++- part3intro/toolchaintechnotes.xml | 7 +- prologue/architecture.xml | 38 ++--------- prologue/bookinfo.xml | 9 ++- prologue/why.xml | 11 ++- 34 files changed, 332 insertions(+), 158 deletions(-) create mode 100644 README.md create mode 100644 chapter08/isl.xml diff --git a/README.md b/README.md new file mode 100644 index 000000000..440aa3cd7 --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +# LFS ARM +Branch of Linux From Scratch Development for ARM + +# Rendered Book Location + +## Sysvinit +https://clfs.org/~kb0iic/lfs-sysv/index.html
+https://linuxfromscratch.org/~kb0iic/lfs-sysv/index.html + +## Systemd +https://clfs.org/~kb0iic/lfs-systemd/index.html
+https://linuxfromscratch.org/~kb0iic/lfs-systemd/index.html diff --git a/appendices/acknowledgments.xml b/appendices/acknowledgments.xml index 2d3041dc6..524a37af0 100644 --- a/appendices/acknowledgments.xml +++ b/appendices/acknowledgments.xml @@ -49,6 +49,11 @@ <ken@linuxfromscratch.org> – BLFS Editor + + William Harrington + <kb0iic@gmail.com> – LFS ARM Editor + + Countless other people on the various LFS and BLFS mailing lists who helped make this book possible by giving their suggestions, testing diff --git a/appendices/dependencies.xml b/appendices/dependencies.xml index 30d385e86..df7713cca 100644 --- a/appendices/dependencies.xml +++ b/appendices/dependencies.xml @@ -918,8 +918,8 @@ &dependencies; Bash, Binutils, Coreutils, Diffutils, Findutils, Gawk, GCC, - Gettext, Glibc, GMP, Grep, M4, Make, MPC, MPFR, Patch, Perl, Sed, - Tar, Texinfo, and Zstd + Gettext, Glibc, GMP, Grep, ISL, M4, Make, MPC, MPFR, Patch, Perl, + Sed, Tar, Texinfo, and Zstd @@ -949,8 +949,6 @@ GNAT - and - ISL @@ -1473,6 +1471,45 @@ + + ISL + + + &dependencies; + + Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, + GMP, Make, Sed, and Texinfo + + + + + &runtime; + + Glibc, GMP + + + + + &testsuites; + + None + + + + + &before; + + GCC + + + + + &external; + + None + + + Jinja2 diff --git a/chapter01/whatsnew.xml b/chapter01/whatsnew.xml index 817e3e4c8..8c7a1f5b6 100644 --- a/chapter01/whatsnew.xml +++ b/chapter01/whatsnew.xml @@ -138,6 +138,9 @@ IPRoute2-&iproute2-version; + Jinja2-&jinja2-version; diff --git a/chapter03/packages.xml b/chapter03/packages.xml index 67adc3e31..67bd46188 100644 --- a/chapter03/packages.xml +++ b/chapter03/packages.xml @@ -358,6 +358,16 @@ + + ISL (&isl-version;) - &isl-size;: + + Home page: + Download: + MD5 sum: &isl-md5; + SHA256 sum: &isl-sha256; + + + Jinja2 (&jinja2-version;) - &jinja2-size;: diff --git a/chapter04/addinguser.xml b/chapter04/addinguser.xml index 49fb43466..1a442d3b5 100644 --- a/chapter04/addinguser.xml +++ b/chapter04/addinguser.xml @@ -82,7 +82,7 @@ useradd -s /bin/bash -g lfs -m -k /dev/null lfs chown -v lfs $LFS/{usr{,/*},lib,var,etc,bin,sbin,tools} case $(uname -m) in - x86_64) chown -v lfs $LFS/lib64 ;; + aarch64) chown -v lfs $LFS/lib64 ;; esac If a separate working directory was created as suggested, give diff --git a/chapter04/creatingminlayout.xml b/chapter04/creatingminlayout.xml index cc640a450..59ae53268 100644 --- a/chapter04/creatingminlayout.xml +++ b/chapter04/creatingminlayout.xml @@ -27,7 +27,7 @@ for i in bin lib sbin; do done case $(uname -m) in - x86_64) mkdir -pv $LFS/lib64 ;; + aarch64) mkdir -pv $LFS/lib64 ;; esac Programs in will be compiled diff --git a/chapter05/gcc-pass1.xml b/chapter05/gcc-pass1.xml index 32ace456a..2aa25dbdc 100644 --- a/chapter05/gcc-pass1.xml +++ b/chapter05/gcc-pass1.xml @@ -43,8 +43,8 @@ Installation of Cross GCC - GCC requires the GMP, MPFR and MPC packages. As these packages may - not be included in your host distribution, they will be built with + GCC requires the GMP, ISL, MPFR and MPC packages. As these packages + may not be included in your host distribution, they will be built with GCC. Unpack each package into the GCC source directory and rename the resulting directories so the GCC build procedures will automatically use them: @@ -60,15 +60,17 @@ mv -v mpfr-&mpfr-version; mpfr tar -xf ../gmp-&gmp-version;.tar.xz mv -v gmp-&gmp-version; gmp tar -xf ../mpc-&mpc-version;.tar.gz -mv -v mpc-&mpc-version; mpc +mv -v mpc-&mpc-version; mpc +tar -xf ../isl-&isl-version;.tar.xz +mv -v isl-&isl-version; isl - On x86_64 hosts, set the default directory name for + On aarch64 hosts, set the default directory name for 64-bit libraries to lib: case $(uname -m) in - x86_64) - sed -e '/m64=/s/lib64/lib/' \ - -i.orig gcc/config/i386/t-linux64 + aarch64) + sed -e '/mabi.lp64=/s/lib64/lib/' \ + -i.orig gcc/config/aarch64/t-aarch64-linux ;; esac @@ -154,8 +156,8 @@ cd build --disable-multilib - On x86_64, LFS does not support a multilib configuration. - This switch is harmless for x86. + On aarch64, LFS does not support a multilib configuration. + This switch is harmless for arm. diff --git a/chapter05/glibc.xml b/chapter05/glibc.xml index 5c4e27119..e3ab82d02 100644 --- a/chapter05/glibc.xml +++ b/chapter05/glibc.xml @@ -44,15 +44,15 @@ Installation of Glibc First, create a symbolic link for LSB compliance. Additionally, - for x86_64, create a compatibility symbolic link required for proper + for aarch64, create a compatibility symbolic link required for proper operation of the dynamic library loader: case $(uname -m) in - i?86) ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3 - ;; - x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64 - ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3 - ;; + arm) ln -sfv ld-linux-armhf.so.3 $LFS/lib/ld-lsb.so.3 + ;; + aarch64) ln -sfv ../lib/ld-linux-aarch64.so.1 $LFS/lib64 + ln -sfv ../lib/ld-linux-aarch64.so.1 $LFS/lib64/ld-lsb-aarch64.so.3 + ;; esac @@ -202,10 +202,10 @@ readelf -l a.out | grep '/ld-linux' If everything is working correctly, there should be no errors, and the output of the last command will be of the form: -[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2] +[Requesting program interpreter: /lib/ld-linux-aarch64.so.1] Note that for 32-bit machines, the interpreter name will be - /lib/ld-linux.so.2. + /lib/ld-linux-armhf.so.3. If the output is not shown as above or there was no output at all, then something is wrong. Investigate and retrace the steps to find out diff --git a/chapter06/gcc-pass2.xml b/chapter06/gcc-pass2.xml index bf3007848..913ab5391 100644 --- a/chapter06/gcc-pass2.xml +++ b/chapter06/gcc-pass2.xml @@ -43,7 +43,7 @@ Installation of GCC - As in the first build of GCC, the GMP, MPFR, and MPC packages are + As in the first build of GCC, the GMP, ISL, MPFR, and MPC packages are required. Unpack the tarballs and move them into the required directory names: @@ -52,22 +52,21 @@ mv -v mpfr-&mpfr-version; mpfr tar -xf ../gmp-&gmp-version;.tar.xz mv -v gmp-&gmp-version; gmp tar -xf ../mpc-&mpc-version;.tar.gz -mv -v mpc-&mpc-version; mpc +mv -v mpc-&mpc-version; mpc +tar -xf ../isl-&isl-version;.tar.xz +mv -v isl-&isl-version; isl - If building on x86_64, change the default directory name for 64-bit + + If building on aarch64, change the default directory name for 64-bit libraries to lib: case $(uname -m) in - x86_64) - sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64 + aarch64) + sed -e '/mabi.lp64=/s/lib64/lib/' \ + -i.orig gcc/config/aarch64/t-aarch64-linux ;; esac - Create a separate build directory again: mkdir -v build @@ -122,7 +121,7 @@ ln -s ../../../libgcc/gthr-posix.h $LFS_TGT/libgcc/gthr-default.h--enable-initfini-array This option is automatically enabled when building a native - compiler with a native compiler on x86. But here, we build with + compiler with a native compiler on ARM. But here, we build with a cross compiler, so we need to explicitly set this option. diff --git a/chapter07/changingowner.xml b/chapter07/changingowner.xml index b412bb278..44f89d8a7 100644 --- a/chapter07/changingowner.xml +++ b/chapter07/changingowner.xml @@ -35,7 +35,7 @@ chown -R root:root $LFS/{usr,lib,var,etc,bin,sbin,tools} case $(uname -m) in - x86_64) chown -R root:root $LFS/lib64 ;; + aarch64) chown -R root:root $LFS/lib64 ;; esac diff --git a/chapter08/adjusting.xml b/chapter08/adjusting.xml index 7d01dcfb6..3976f898c 100644 --- a/chapter08/adjusting.xml +++ b/chapter08/adjusting.xml @@ -52,14 +52,14 @@ readelf -l a.out | grep ': /lib' and the output of the last command will be (allowing for platform-specific differences in the dynamic linker name): -[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2] +[Requesting program interpreter: /lib/ld-linux-aarch64.so.1] Note that on 64-bit systems /lib is the location of our dynamic linker, but is accessed via a symbolic link in /lib64. On 32-bit systems the interpreter should be - /lib/ld-linux.so.2. + /lib/ld-linux-armhf.so.3. Now make sure that we're setup to use the correct start files: @@ -79,12 +79,12 @@ readelf -l a.out | grep ': /lib' This command should return the following output: #include <...> search starts here: - /tools/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/include + /tools/lib/gcc/aarch64-pc-linux-gnu/&gcc-version;/include /tools/include - /tools/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/include-fixed + /tools/lib/gcc/aarch64-pc-linux-gnu/&gcc-version;/include-fixed /usr/include - On a 32 bit system, x86_64 is replaced with i686. + On a 32 bit system, aarch64 is replaced with an ARM 32bit variant. Next, verify that the new linker is being used with the correct search paths: @@ -111,7 +111,7 @@ SEARCH_DIR("/lib") The output of the last command should be (allowing for platform-specific differences in dynamic linker name): -found ld-linux-x86-64.so.2 at /usr/lib/ld-linux-x86-64.so.2 +found ld-linux-aarch64.so.1 at /usr/lib/ld-linux-aarch64.so.1 If the output does not appear as shown above or is not received at all, then something is seriously wrong. Investigate and retrace the diff --git a/chapter08/binutils.xml b/chapter08/binutils.xml index 0aa4e8456..ac602119b 100644 --- a/chapter08/binutils.xml +++ b/chapter08/binutils.xml @@ -71,14 +71,12 @@ Ask your system administrator to create more. sed -i '63d' etc/texi2pod.pl find -name \*.1 -delete --> + The Binutils documentation recommends building Binutils in a dedicated build directory: @@ -152,9 +150,9 @@ cd build Normally, the tooldir (the directory where the executables will ultimately be located) is set to $(exec_prefix)/$(target_alias). For - example, x86_64 machines would expand that to /usr/x86_64-pc-linux-gnu. Because this is - a custom system, this target-specific directory in /usr/aarch64-unknown-linux-gnu. Because + this is a custom system, this target-specific directory in /usr is not required. $(exec_prefix)/$(target_alias) would be used if the system was used to cross-compile (for example, compiling a diff --git a/chapter08/chapter08.xml b/chapter08/chapter08.xml index 90433ce53..0799f8829 100644 --- a/chapter08/chapter08.xml +++ b/chapter08/chapter08.xml @@ -34,6 +34,7 @@ + diff --git a/chapter08/expect.xml b/chapter08/expect.xml index 6286d9033..37a41ee83 100644 --- a/chapter08/expect.xml +++ b/chapter08/expect.xml @@ -50,11 +50,12 @@ Prepare Expect for compilation: -./configure --prefix=/usr \ - --with-tcl=/usr/lib \ - --enable-shared \ - --mandir=/usr/share/man \ - --with-tclinclude=/usr/include +./configure --prefix=/usr \ + --with-tcl=/usr/lib \ + --enable-shared \ + --mandir=/usr/share/man \ + --with-tclinclude=/usr/include \ + --build=$(uname -m)-unknown-linux-gnu The meaning of the configure options: @@ -76,6 +77,14 @@ + + --build=$(uname -m)-uknown-linux-gnu + + This tells Expect what the architecture build of the machine + is for ARM. + + + Build the package: diff --git a/chapter08/findutils.xml b/chapter08/findutils.xml index c37f3aab0..ea355ae79 100644 --- a/chapter08/findutils.xml +++ b/chapter08/findutils.xml @@ -46,10 +46,9 @@ Prepare Findutils for compilation: case $(uname -m) in - i?86) TIME_T_32_BIT_OK=yes ./configure --prefix=/usr --localstatedir=/var/lib/locate ;; - x86_64) ./configure --prefix=/usr --localstatedir=/var/lib/locate ;; + arm) TIME_T_32_BIT_OK=yes ./configure --prefix=/usr --localstatedir=/var/lib/locate ;; + aarch64) ./configure --prefix=/usr --localstatedir=/var/lib/locate ;; esac - The meaning of the configure options: diff --git a/chapter08/gcc.xml b/chapter08/gcc.xml index cd3a9b9fe..2ff55f23d 100644 --- a/chapter08/gcc.xml +++ b/chapter08/gcc.xml @@ -49,13 +49,13 @@ -e 's/return kAltStackSize/return SIGSTKSZ * 4/' \ -i libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp - If building on x86_64, change the default directory name for 64-bit + If building on aarch64, change the default directory name for 64-bit libraries to lib: case $(uname -m) in - x86_64) - sed -e '/m64=/s/lib64/lib/' \ - -i.orig gcc/config/i386/t-linux64 + aarch64) + sed -e '/mabi.lp64=/s/lib64/lib/' \ + -i.orig gcc/config/aarch64/t-aarch64-linux ;; esac @@ -221,9 +221,9 @@ rm -rf /usr/lib/gcc/$(gcc -dumpmachine)/&gcc-version;/include-fixed/bits/ -/usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/../../../../lib/crt1.o succeeded -/usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/../../../../lib/crti.o succeeded -/usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/../../../../lib/crtn.o succeeded +/usr/lib/gcc/aarch64-unknown-linux-gnu/&gcc-version;/../../../../lib/crt1.o succeeded +/usr/lib/gcc/aarch64-unknown-linux-gnu/&gcc-version;/../../../../lib/crti.o succeeded +/usr/lib/gcc/aarch64-unknown-linux-gnu/&gcc-version;/../../../../lib/crtn.o succeeded Depending on your machine architecture, the above may differ slightly. The difference will be the name of the directory @@ -243,9 +243,9 @@ rm -rf /usr/lib/gcc/$(gcc -dumpmachine)/&gcc-version;/include-fixed/bits/ #include <...> search starts here: - /usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/include + /usr/lib/gcc/aarch-64-unknown-linux-gnu/&gcc-version;/include /usr/local/include - /usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/include-fixed + /usr/lib/gcc/aarch64-unknown-linux-gnu/&gcc-version;/include-fixed /usr/include Again, the directory named after your target triplet may be @@ -263,23 +263,19 @@ rm -rf /usr/lib/gcc/$(gcc -dumpmachine)/&gcc-version;/include-fixed/bits/ -SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib64") +SEARCH_DIR("/usr/aarch64-unknown-linux-gnu/lib64") SEARCH_DIR("/usr/local/lib64") SEARCH_DIR("/lib64") SEARCH_DIR("/usr/lib64") -SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib") +SEARCH_DIR("/usr/aarch64-unknown-linux-gnu/lib") SEARCH_DIR("/usr/local/lib") SEARCH_DIR("/lib") SEARCH_DIR("/usr/lib"); A 32-bit system may see a few different directories. For example, here - is the output from an i686 machine: + is the output from a 32bit ARM machine: -SEARCH_DIR("/usr/i686-pc-linux-gnu/lib32") -SEARCH_DIR("/usr/local/lib32") -SEARCH_DIR("/lib32") -SEARCH_DIR("/usr/lib32") -SEARCH_DIR("/usr/i686-pc-linux-gnu/lib") +SEARCH_DIR("/usr/armv6l-unknown-linux-gnueabihf/lib") SEARCH_DIR("/usr/local/lib") SEARCH_DIR("/lib") SEARCH_DIR("/usr/lib"); @@ -351,7 +347,7 @@ mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib libasan.{a,so}, libatomic.{a,so}, libcc1.so, libgcc.a, libgcc_eh.a, libgcc_s.so, libgcov.a, libgomp.{a,so}, libitm.{a,so}, liblsan.{a,so}, liblto_plugin.so, - libquadmath.{a,so}, libssp.{a,so}, libssp_nonshared.a, + libssp.{a,so}, libssp_nonshared.a, libstdc++.{a,so}, libstdc++fs.a, libsupc++.a, libtsan.{a,so}, and libubsan.{a,so} diff --git a/chapter08/glibc.xml b/chapter08/glibc.xml index 6615926ec..75a2c95e0 100644 --- a/chapter08/glibc.xml +++ b/chapter08/glibc.xml @@ -49,6 +49,7 @@ sed -e '/NOTIFY_REMOVED)/s/)/ \&\& data.attr != NULL)/' \ -i sysdeps/unix/sysv/linux/mq_notify.c --> + Some of the Glibc programs use the non-FHS compliant /var/db directory to store their runtime data. Apply the following patch to make such programs @@ -139,8 +140,8 @@ cd build @@ -50,7 +50,6 @@ save_usrlib="$(cd /usr/lib; ls ld-linux*) libc.so.6 libthread_db.so.1 - libquadmath.so.&libquadmath-version; libstdc++.so.&libstdcpp-version; libitm.so.&libitm-version; libatomic.so.&libatomic-version;" diff --git a/chapter08/tcl.xml b/chapter08/tcl.xml index 4e03f8625..4b6b274b1 100644 --- a/chapter08/tcl.xml +++ b/chapter08/tcl.xml @@ -64,13 +64,13 @@ cd unix ./configure --prefix=/usr \ --mandir=/usr/share/man \ - $([ "$(uname -m)" = x86_64 ] && echo --enable-64bit) + $([ "$(uname -m)" = aarch64 ] && echo --enable-64bit) The meaning of the configure options: - $([ "$(uname -m)" = x86_64 ] && echo --enable-64bit) + $([ "$(uname -m)" = aarch64 ] && echo --enable-64bit) The construct $(<shell command>) is replaced by the output of the shell command. Here this output is diff --git a/chapter08/util-linux.xml b/chapter08/util-linux.xml index a7c0c3d59..d42bf5a3b 100644 --- a/chapter08/util-linux.xml +++ b/chapter08/util-linux.xml @@ -511,16 +511,6 @@ su tester -c "make -k check" - - i386 - - A symbolic link to setarch - - i386 - - - - ionice @@ -1259,16 +1249,6 @@ su tester -c "make -k check" - - x86_64 - - A symbolic link to setarch - - x86_64 - - - - zramctl diff --git a/chapter10/kernel.xml b/chapter10/kernel.xml index 396573170..f3baaa7ee 100644 --- a/chapter10/kernel.xml +++ b/chapter10/kernel.xml @@ -246,9 +246,9 @@ File systems ---> used. The filename below can be changed to suit your taste, but the stem of the filename should be vmlinuz to be compatible with the automatic setup of the boot process described in the next section. The - following command assumes an x86 architecture: + following command assumes an ARM64 architecture: -cp -iv arch/x86/boot/bzImage /boot/vmlinuz-&linux-version;-lfs-&version; +cp -iv arch/arm64/boot/bzImage /boot/vmlinuz-&linux-version;-lfs-&version; System.map is a symbol file for the kernel. It maps the function entry points of every function in the kernel API, diff --git a/general.ent b/general.ent index 4f15d3fdd..e3c26c1a6 100644 --- a/general.ent +++ b/general.ent @@ -84,7 +84,7 @@ - + @@ -353,6 +353,15 @@ + + + + + + + + + diff --git a/part3intro/toolchaintechnotes.xml b/part3intro/toolchaintechnotes.xml index 93f27f267..57df96a93 100644 --- a/part3intro/toolchaintechnotes.xml +++ b/part3intro/toolchaintechnotes.xml @@ -156,9 +156,10 @@ the config.guess script that comes with the source for many packages. Unpack the binutils sources and run the script: ./config.guess and note - the output. For example, for a 32-bit Intel processor the - output will be i686-pc-linux-gnu. On a 64-bit - system it will be x86_64-pc-linux-gnu. + the output. For example, for a 32-bit ARM processor the + output may be armv6l-unknown-linux-gnueabi. On a + 64-bit system it may + be aarch64-unknown-linux-gnu. Also be aware of the name of the platform's dynamic linker, often referred to as the dynamic loader (not to be confused with the standard diff --git a/prologue/architecture.xml b/prologue/architecture.xml index ca240183c..70450f8d8 100644 --- a/prologue/architecture.xml +++ b/prologue/architecture.xml @@ -10,41 +10,13 @@ LFS Target Architectures -The primary target architectures of LFS are the AMD/Intel x86 (32-bit) -and x86_64 (64-bit) CPUs. On the other hand, the instructions in this book are -also known to work, with some modifications, with the Power PC and ARM CPUs. To -build a system that utilizes one of these CPUs, the main prerequisite, in +The primary target architectures of LFS-ARM are the ARM and ARM64 CPUs. +For other ARCHs refer to the main LFS book or CLFS as a historical reference. +To build a system that utilizes one of these CPUs, the main prerequisite, in addition to those on the next page, is an existing Linux system such as an earlier LFS installation, Ubuntu, Red Hat/Fedora, SuSE, or other distribution that targets the architecture that you have. Also note that a 32-bit -distribution can be installed and used as a host system on a 64-bit AMD/Intel -computer. - -For building LFS, the gain of building on a 64-bit system -compared to a 32-bit system is minimal. -For example, in a test build of LFS-9.1 on a Core i7-4790 CPU based system, -using 4 cores, the following statistics were measured: - -Architecture Build Time Build Size -32-bit 239.9 minutes 3.6 GB -64-bit 233.2 minutes 4.4 GB - -As you can see, on the same hardware, the 64-bit build is only 3% faster -and is 22% larger than the 32-bit build. If you plan to use LFS as a LAMP -server, or a firewall, a 32-bit CPU may be largely sufficient. On the other -hand, several packages in BLFS now need more than 4GB of RAM to be built -and/or to run, so that if you plan to use LFS as a desktop, the LFS authors -recommend building on a 64-bit system. - -The default 64-bit build that results from LFS is considered a -pure 64-bit system. That is, it supports 64-bit executables -only. Building a multi-lib system requires compiling many -applications twice, once for a 32-bit system and once for a 64-bit system. -This is not directly supported in LFS because it would interfere with the -educational objective of providing the instructions needed for a -straightforward base Linux system. Some LFS/BLFS editors maintain a fork -of LFS for multilib, which is accessible at . But it -is an advanced topic. +distribution can be installed and used as a host system on a 64-bit ARM +unoptimized computer. diff --git a/prologue/bookinfo.xml b/prologue/bookinfo.xml index 18ba29e02..d9f64bca3 100644 --- a/prologue/bookinfo.xml +++ b/prologue/bookinfo.xml @@ -29,8 +29,15 @@ Editor: DJ Lucas + + + Editor: William + Harrington + + + ©rightdate; Gerard Beekmans @@ -38,8 +45,6 @@ - Copyright © ©rightdate;, Gerard Beekmans - All rights reserved. This book is licensed under a . diff --git a/prologue/why.xml b/prologue/why.xml index a66141fc4..897c66c0b 100644 --- a/prologue/why.xml +++ b/prologue/why.xml @@ -291,7 +291,16 @@ This package contains programs for basic and advanced IPv4 and IPv6 networking. It was chosen over the other common network - tools package (net-tools) for its IPv6 capabilities. + tools package (net-tools) for its IPv6 capabilities. + + + + ISL + + This package provides a thread-safe C library for manipulating + sets and relations of integer points bounded by affine constraints. + It is used as backend polyhedral library in the GCC Graphite framework + and in the LLVM Polly framework for loop optimizations.