diff --git a/appendices/dependencies.xml b/appendices/dependencies.xml index 84dc75acd..fa20d3688 100644 --- a/appendices/dependencies.xml +++ b/appendices/dependencies.xml @@ -399,49 +399,6 @@ - - Check - - - &dependencies; - - Gawk, GCC, Grep, Make, Sed, and Texinfo - - - - - &runtime; - - Bash and Gawk - - - - - &testsuites; - - None - - - - - &before; - - None - - - - - &external; - - - libsubunit - and - - patchutils - - - - Coreutils @@ -871,7 +828,7 @@ &before; - Wheel + Packaging and Wheel @@ -1239,7 +1196,7 @@ &testsuites; - No test suite available + None @@ -1641,7 +1598,7 @@ &testsuites; - No test suite available + None @@ -2459,6 +2416,46 @@ + + Packaging + + + &dependencies; + + Flit-core and Python + + + + + &runtime; + + Python + + + + + &testsuites; + + No test suite available + + + + + &before; + + Wheel + + + + + &external; + + + pytest + + + + Patch @@ -2650,7 +2647,7 @@ &testsuites; - No test suite available + Expect @@ -3312,7 +3309,7 @@ &dependencies; - Python and Flit-core + Python, Flit-core, and packaging diff --git a/chapter01/changelog.xml b/chapter01/changelog.xml index 4d4d9bc0c..14f3cb970 100644 --- a/chapter01/changelog.xml +++ b/chapter01/changelog.xml @@ -39,541 +39,269 @@ or as appropriate for the entry or if needed the entire day's listitem. --> - - 2025-02-19 + 2025-05-15 - [xry111] - Update to vim-9.1.1122 (Security Update). - Addresses #4500. + [bdubbs] - Update to setuptools-80.7.1. Fixes + #5715. - [xry111] - Update to man-pages-6.11. Fixes - #5646. + [bdubbs] - Update to man-pages-6.14. Fixes + #5720. + + + [bdubbs] - Update to man-db-2.13.1. Fixes + #5719. + + + [bdubbs] - Update to m4-1.4.20. Fixes + #5722. + + + [bdubbs] - Update to linux-6.14.6. Fixes + #5717. + + + [bdubbs] - Update to gettext-0.25. Fixes + #5718. - 2025-02-13 + 2025-05-01 - [bdubbs] - Update to vim-9.1.1106. Addresses - #4500. - - - [bdubbs] - Update to diffutils-3.11. Fixes - #5639. - - - [bdubbs] - Update to libffi-3.4.7. Fixes - #5642. - - - [bdubbs] - Update to linux-6.13.2. Fixes - #5643. - - - [bdubbs] - Update to Python3-3.13.2. Fixes - #5640. - - - [bdubbs] - Update to sysvinit-3.14. Fixes - #5641. - - - - - - 2025-02-02 - - - [bdubbs] - Update to vim-9.1.1071. Addresses - #4500. - - - [bdubbs] - Update to iana-etc-20250123. Addresses - #5006. - - - [bdubbs] - Update to binutils-2.44.0. Fixes - #5634. - - - [bdubbs] - Update to coreutils-9.6. Fixes - #5628. - - - [bdubbs] - Update to e2fsprogs-1.47.2. Fixes - #5637. - - - [bdubbs] - Update to glibc-2.41. Fixes - #5638. - - - [bdubbs] - Update to iproute2-6.13.0. Fixes - #5631. - - - [bdubbs] - Update to libxcrypt-4.4.38. Fixes - #5626. - - - [bdubbs] - Update to linux-6.13.1. Fixes - #5629. - - - [bdubbs] - Update to man-pages-6.10. Fixes - #5632. - - - [bdubbs] - Update to meson-1.7.0. Fixes - #5636. - - - [bdubbs] - Update to perl-5.40.1. Fixes - #5630. - - - [bdubbs] - Update to tcl8.6.16. Fixes - #5635. - - - [bdubbs] - Update to tzdata2025a. Fixes - #5627. - - - [bdubbs] - Update to xz-5.6.4. Fixes - #5633. - - - - - - 2025-01-15 - - - [bdubbs] - Update to vim-9.1.1016. Addresses - #4500. - - - [bdubbs] - Update to iana-etc-20250108. Addresses - #5006. - - - [bdubbs] - Update to util-linux-2.40.4. Fixes - #5624. - - - [bdubbs] - Update to sysvinit-3.13. Fixes - #5621. - - - [bdubbs] - Update to sysklogd-2.7.0. Fixes - #5623. - - - [bdubbs] - Update to shadow-4.17.2. Fixes - #5625. - - - [bdubbs] - Update to setuptools-75.8.0. Fixes - #5622. - - - [bdubbs] - Update to linux-6.12.9. Fixes - #5620. - - - [bdubbs] - Update to gettext-0.23.1. Fixes - #5619. - - - - - - 2025-01-01 - - - [renodr] - Update to libxcrypt-4.4.37. Fixes - #5618. - - - [renodr] - Update to dbus-1.16.0. Fixes - #5609. - - - [bdubbs] - Update to iana-etc-20241220. Addresses - #5006. - - - [bdubbs] - Update to texinfo-7.2. Fixes - #5616. - - - [bdubbs] - Update to sysvinit-3.12. Fixes - #5615. - - - [bdubbs] - Update to shadow-4.17.1. Fixes - #5617. - - - [bdubbs] - Update to procps-ng-4.0.5. Fixes - #5611. - - - [bdubbs] - Update to meson-1.6.1. Fixes - #5610. - - - [bdubbs] - Update to linux-6.12.7. Fixes - #5613. - - - [bdubbs] - Update to kbd-2.7.1. Fixes - #5608. - - - [bdubbs] - Update to jinja2-3.1.5 (Security Update). Fixes - #5614. - - - - - - 2024-12-15 - - - [bdubbs] - Update to vim-9.1.0927. Addresses + [bdubbs] - Update to vim-9.1.1353. Addresses #4500. - [bdubbs] - Update to iana-etc-20241206. Addresses + [bdubbs] - Update to setuptools-80.0.1. Fixes + #5710. + + + [bdubbs] - Update to packaging-25.0. Fixes + #5706. + + + [bdubbs] - Update to meson-1.8.0. Fixes + #5713. + + + [bdubbs] - Update to linux-6.14.4. Fixes + #5709. + + + [bdubbs] - Update to iana-etc-20250407. Addresses #5006. - [bdubbs] - Update to systemd-257. Fixes - #5559. + [bdubbs] - Update to gperf-3.3. Fixes + #5708. - [bdubbs] - Update to Python-3.13.1 (Security Update). Fixes - #5605. - - - [bdubbs] - Update to libcap-2.73. Fixes - #5604. - - - [bdubbs] - Update to linux-6.12.5. Fixes - #5607. - - - [bdubbs] - Update to kbd-2.7. Fixes - #5608. - - - [bdubbs] - Update to gettext-0.23. Fixes - #5603. + [bdubbs] - Update to elfutils-0.193. Fixes + #5711. - 2024-12-01 + 2025-04-15 - [bdubbs] - Update to iana-etc-20241122. Addresses - #5006. + [bdubbs] - Update to libcap-2.76. Fixes + #5704. - [bdubbs] - Update to file-5.46. Fixes - #5601. + [bdubbs] - Update to perl-5.40.2 (Security update). Fixes + #5703. - [bdubbs] - Update to iproute2-6.12.0. Fixes - #5597. + [bdubbs] - Add packaging-24.2 (Python module). Needed for wheel. + - [bdubbs] - Update to libtool-2.5.4. Fixes - #5598. + [bdubbs] - Update to xz-5.8.1. Fixes + #5694. - [bdubbs] - Update to linux-6.12.1. Fixes - #5586. + [bdubbs] - Update to wheel-0.46.1 (Python Module). Fixes + #5693. - [bdubbs] - Update to setuptools-75.6.0 (Python Module). Fixes - #5599. + [bdubbs] - Update to sysklogd-2.7.2. Fixes + #5690. - [bdubbs] - Update to wheel-0.45.1 (Python Module). Fixes - #5600. + [bdubbs] - Update to Python3-3.13.3. Fixes + #5697. + + + [bdubbs] - Update to openssl-3.5.0. Fixes + #5701. + + + [bdubbs] - Update to meson-1.7.2. Fixes + #5691. + + + [bdubbs] - Update to linux-6.14.2. Fixes + #5680. + + + [bdubbs] - Update to libffi-3.4.8. Fixes + #5700. + + + [bdubbs] - Update to iproute2-6.14.0. Fixes + #5682. + + + [bdubbs] - Update to gzip-1.14. Fixes + #5699. + + + [bdubbs] - Update to grep-3.12. Fixes + #5702. + + + [bdubbs] - Update to gperf-3.2.1. Fixes + #5695. + + + [bdubbs] - Update to gawk-5.3.2. Fixes + #5692. + + + [bdubbs] - Update to diffutils-3.12. Fixes + #5696. + + + [bdubbs] - Update to coreutils-9.7. Fixes + #5698. - 2024-11-15 + 2025-04-01 - [bdubbs] - Update to vim-9.1.0866. Addresses + [bdubbs] - Update to vim-9.1.1263. Addresses #4500. - [bdubbs] - Update to iana-etc-20241024. Addresses + [bdubbs] - Update to iana-etc-20250328. Addresses #5006. - [bdubbs] - Update to wheel-0.45.0 (Python Module). Fixes - #5593. + [bdubbs] - Update to xz-5.8.0. Fixes + #5684. - [bdubbs] - Update to setuptools-75.5.0 (Python Module). Fixes - #5595. + [bdubbs] - Update to util-linux-2.41. Fixes + #5648. - [bdubbs] - Update to linux-6.11.8. Fixes - #5582. + [bdubbs] - Update to tzdata-2025b. Fixes + #5681. + + + [bdubbs] - Update to shadow-4.17.4. Fixes + #5678. - [bdubbs] - Update to libcap-2.72. Fixes - #5594. + [bdubbs] - Update to setuptools-78.1.0. Fixes + #5676. + + + [bdubbs] - Update to patch-2.8. Fixes + #5689. + + + [bdubbs] - Update to mpfr-4.2.2. Fixes + #5677. + + + [bdubbs] - Update to kmod-34.2. Fixes + #5688. + + + [bdubbs] - Update to gdbm-1.25. Fixes + #5679. + + + [bdubbs] - Update to flit_core-3.12.0. Fixes + #5683. + + + [bdubbs] - Update to expat-2.7.1. Fixes + #5685. - 2024-11-08 + 2025-03-15 - [bdubbs] - Added binutils-2.43.1-upstream_fix-1.patch. Fixes - #5591. - - - [bdubbs] - Update to flit_core-3.10.1. Fixes - #5589. - - - [bdubbs] - Update to expat-2.6.4. Fixes - #5590. - - - - - - 2024-10-25 - - - [bdubbs] - Update to linux-6.11.6. Fixes - #5588. - - - [bdubbs] - Update to libcap-2.71. Fixes - #5584. - - - [bdubbs] - Update to setuptools-75.3.0. Fixes - #5585. - - - [bdubbs] - Update to flit_core-3.10.0. Fixes - #5587. - - - - - - 2024-10-25 - - - [bdubbs] - Update to iana-etc-20241015. Addresses - #5006. - - - [bdubbs] - Update to vim-9.1.0813. Addresses + [bdubbs] - Update to vim-9.1.1202. Addresses #4500. - [bdubbs] - Update to xz-5.6.3. Fixes - #5572. - - - [bdubbs] - Update to sysvinit-3.11. Fixes - #5581. - - - [bdubbs] - Update to setuptools-75.2.0. Fixes - #5577. - - - [bdubbs] - Update to Python3-3.13.0. Fixes - #5575. - - - [bdubbs] - Update to openssl-3.4.0. Fixes - #5582. - - - [bdubbs] - Update to meson-1.6.0. Fixes - #5580. - - - [bdubbs] - Update to markupsafe-3.0.2. Fixes - #5576. - - - [bdubbs] - Update to linux-6.11.5. Fixes - #5574. - - - [bdubbs] - Update to less-668. Fixes - #5578. - - - [bdubbs] - Update to elfutils-0.192. Fixes - #5579. - - - - - - 2024-10-03 - - - [bdubbs] - Revert back to tcl8.6.15. - - - - - - 2024-10-01 - - - [bdubbs] - Update to Python3-3.12.7. Fixes - #5571. - - - [bdubbs] - Update to tcl9.0.0. Fixes - #5570. - - - [bdubbs] - Update to linux-6.11.1. Fixes - #5556. - - - [bdubbs] - Update to libtool-2.5.3. Fixes - #5569. - - - [bdubbs] - Update to iproute2-6.11.0. Fixes - #5561. - - - [bdubbs] - Update to bash-5.2.37. Fixes - #5567. - - - [bdubbs] - Update to bc-7.0.3. Fixes - #5568. - - - - - - 2024-09-20 - - - [bdubbs] - Update to vim-9.1.0738. Addresses - #4500. - - - [bdubbs] - Update to texinfo-7.1.1. Fixes - #5558. - - - [bdubbs] - Update to tcl8.6.15. Fixes - #5562. - - - [bdubbs] - Update to sysklogd-2.6.2. Fixes - #5557. - - - [bdubbs] - Update to setuptools-75.1.0. Fixes - #5560. - - - [bdubbs] - Update to meson-1.5.2. Fixes - #5566. - - - [bdubbs] - Update to iana-etc-20240912. Addresses + [bdubbs] - Update to iana-etc-20250304. Addresses #5006. - - [bdubbs] - Update to gawk-5.3.1. Fixes - #5564. + + [bdubbs] - Update to sysklogd-2.7.1. Fixes + #5668. - [bdubbs] - Update to bc-7.0.2. Fixes - #5563. + [bdubbs] - Update to setuptools-76.0.0. Fixes + #5665. + + + [bdubbs] - Update to pkgconf-2.4.3. Fixes + #5672. + + + [bdubbs] - Update to man-pages-6.13. Fixes + #5673. + + + [bdubbs] - Update to linux-6.13.7. Fixes + #5664. + + + [bdubbs] - Update to libcap-2.75. Fixes + #5667. + + + [bdubbs] - Update to kmod-34.1. Fixes + #5671. + + + [bdubbs] - Update to jinja2-3.1.6. Fixes + #5670. + + + [bdubbs] - Update to expat-2.7.0. Fixes + #5675. + + + [bdubbs] - Update to dbus-1.16.2. Fixes + #5663. - 2024-09-07 + 2025-03-05 - [bdubbs] - Update to tzdata-2024b. Fixes - #5554. - - - [bdubbs] - Update to systemd-256.5. Fixes - #5551. - - - [bdubbs] - Update to setuptools-74.1.2. Fixes - #5546. - - - [bdubbs] - Update to python3-3.12.6. Fixes - #5555. - - - [bdubbs] - Update to openssl-3.3.2. Fixes - #5552. - - - [bdubbs] - Update to man-db-2.13.0. Fixes - #5550. - - - [bdubbs] - Update to linux-6.10.8. Fixes - #5545. - - - [bdubbs] - Update to libpipeline-1.5.8. Fixes - #5548. - - - [bdubbs] - Update to expat-2.6.3. Fixes - #5553. - - - [bdubbs] - Update to bc-7.0.1. Fixes - #5547. - - - - - - 2024-09-01 - - - [bdubbs] - LFS-12.2 released. + [bdubbs] - LFS-12.3 released. diff --git a/chapter01/whatsnew.xml b/chapter01/whatsnew.xml index dc748661e..819b1f243 100644 --- a/chapter01/whatsnew.xml +++ b/chapter01/whatsnew.xml @@ -38,24 +38,21 @@ - + + + - Coreutils-&coreutils-version; @@ -68,18 +65,18 @@ Diffutils-&diffutils-version; - + Expat-&expat-version; - + @@ -87,7 +84,7 @@ Flex-&flex-version; --> - Flit-core-&flit-core-version; + Flit-Core-&flit-core-version; Gawk-&gawk-version; @@ -95,33 +92,33 @@ - + Gettext-&gettext-version; - + - - + - + Iana-Etc-&iana-etc-version; @@ -137,15 +134,15 @@ Jinja2-&jinja2-version; - - Kbd-&kbd-version; - - Less-&less-version; + Kmod-&kmod-version; + @@ -158,24 +155,24 @@ Libffi-&libffi-version; - + + + Linux-&linux-version; - + @@ -185,18 +182,18 @@ Man-pages-&man-pages-version; - + Meson-&meson-version; - + @@ -206,18 +203,18 @@ OpenSSL-&openssl-version; - + Perl-&perl-version; - - Procps-ng-&procps-ng-version; + Pkgconf-&pkgconf-version; + @@ -239,27 +236,27 @@ Sysklogd-&sysklogd-version; - + + - + + Tzdata-&tzdata-version; - + Util-linux-&util-linux-version; @@ -295,22 +292,19 @@ Added: - + Removed: - - + + Check-0.15.2 + diff --git a/chapter03/packages.xml b/chapter03/packages.xml index d58002ad2..6cdb5e224 100644 --- a/chapter03/packages.xml +++ b/chapter03/packages.xml @@ -110,15 +110,6 @@ - - Check (&check-version;) - &check-size;: - - Home page: - Download: - MD5 sum: &check-md5; - - - Coreutils (&coreutils-version;) - &coreutils-size;: @@ -597,6 +588,15 @@ + + Packaging (&packaging-version;) - &packaging-size;: + + Home page: + Download: + MD5 sum: &packaging-md5; + + + Patch (&patch-version;) - &patch-size;: diff --git a/chapter04/addinguser.xml b/chapter04/addinguser.xml index 5c6dbb76e..876b0f9a8 100644 --- a/chapter04/addinguser.xml +++ b/chapter04/addinguser.xml @@ -80,7 +80,7 @@ useradd -s /bin/bash -g &lfs-groupname; -m -k /dev/null &lfs-username;$LFS by making lfs the owner: -chown -v &lfs-username; $LFS/{usr{,/*},lib*,var,etc,bin,sbin,tools} +chown -v &lfs-username; $LFS/{usr{,/*},lib64,var,etc,tools} In some host systems, the following su command does not complete properly and suspends the login for the &lfs-user; user to the background. diff --git a/chapter05/glibc.xml b/chapter05/glibc.xml index 6f9d6f171..f306b3f7a 100644 --- a/chapter05/glibc.xml +++ b/chapter05/glibc.xml @@ -87,10 +87,9 @@ cd build --prefix=/usr \ --host=$LFS_TGT \ --build=$(../scripts/config.guess) \ - --enable-kernel=&min-kernel; \ - --with-headers=$LFS/usr/include \ --disable-nscd \ - libc_cv_slibdir=/usr/lib + libc_cv_slibdir=/usr/lib \ + --enable-kernel=&min-kernel; The meaning of the configure options: @@ -113,16 +112,6 @@ cd build - - --with-headers=$LFS/usr/include - - This tells Glibc to compile itself against the headers - recently installed to the $LFS/usr/include directory, so that - it knows exactly what features the kernel has and can optimize - itself accordingly. - - - libc_cv_slibdir=/usr/lib @@ -186,7 +175,7 @@ cd build class="directory">/) directory. Here we specify that the package is installed in $LFS, which will become the root directory in . + "ch-tools-chroot" role='.'/> @@ -197,16 +186,16 @@ cd build sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd - - At this point, it is imperative to stop and ensure that the basic - functions (compiling and linking) of the new toolchain are working as - expected. To perform a sanity check, run the following commands: + Now that our cross toolchain is in place, it is important to ensure + that compiling and linking will work as expected. We do this by performing + some sanity checks: -echo 'int main(){}' | $LFS_TGT-gcc -xc - -readelf -l a.out | grep /ld +echo 'int main(){}' | $LFS_TGT-gcc -x c - -v -Wl,--verbose &> dummy.log +readelf -l a.out | grep ': /lib' - If everything is working correctly, there should be no errors, - and the output of the last command will be of the form: + There should be no errors, + and the output of the last command will be (allowing for + platform-specific differences in the dynamic linker name): [Requesting program interpreter: /lib64/ld.so.1 @@ -214,16 +203,85 @@ readelf -l a.out | grep /ld GCC, the interpreter name will be /lib64/ld-linux-mipsn8.so.1. - If the output is not as shown above, or there is no output at all, - then something is wrong. Investigate and retrace the steps to find out - where the problem is and correct it. This issue must be resolved before - continuing. + Note that this path should not contain + /mnt/lfs (or the value of + the LFS variable if you used a different one). The path is + resolved when the compiled program is executed, and that should only happen + after we enter the chroot environment where the kernel would consider + $LFS as the root directory + (/). - Once all is well, clean up the test file: + Now make sure that we're set up to use the correct start files: -rm -v a.out +grep -E -o "$LFS/lib.*/S?crt[1in].*succeeded" dummy.log - + The output of the last command should be: + +/mnt/lfs/lib/../lib/Scrt1.o succeeded +/mnt/lfs/lib/../lib/crti.o succeeded +/mnt/lfs/lib/../lib/crtn.o succeeded + + Verify that the compiler is searching for the correct header + files: + +grep -B3 "^ $LFS/usr/include" dummy.log + + This command should return the following output: + +#include <...> search starts here: + /mnt/lfs/tools/lib/gcc/x86_64-lfs-linux-gnu/&gcc-version;/include + /mnt/lfs/tools/lib/gcc/x86_64-lfs-linux-gnu/&gcc-version;/include-fixed + /mnt/lfs/usr/include + + Again, the directory named after your target triplet may be + different than the above, depending on your system architecture. + + Next, verify that the new linker is being used with the correct search paths: + +grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g' + + References to paths that have components with '-linux-gnu' should + be ignored, but otherwise the output of the last command should be: + +SEARCH_DIR("=/mnt/lfs/tools/x86_64-lfs-linux-gnu/lib64") +SEARCH_DIR("=/usr/local/lib64") +SEARCH_DIR("=/lib64") +SEARCH_DIR("=/usr/lib64") +SEARCH_DIR("=/mnt/lfs/tools/x86_64-lfs-linux-gnu/lib") +SEARCH_DIR("=/usr/local/lib") +SEARCH_DIR("=/lib") +SEARCH_DIR("=/usr/lib"); + + A 32-bit system may use a few other directories, but anyway + the important facet here is all the paths should begin with an equal sign + (=), which would be replaced with the sysroot + directory that we've configured for the linker. + + Next make sure that we're using the correct libc: + +grep "/lib.*/libc.so.6 " dummy.log + + The output of the last command should be: + +attempt to open /mnt/lfs/usr/lib/libc.so.6 succeeded + + Make sure GCC is using the correct dynamic linker: + +grep found dummy.log + + 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 /mnt/lfs/usr/lib/ld-linux-x86-64.so.2 + + If the output does not appear as shown above or is not received + at all, then something is seriously wrong. Investigate and retrace the + steps to find out where the problem is and correct it. Any + issues should be resolved before continuing with the process. + + Once everything is working correctly, clean up the test files: + +rm -v a.out dummy.log Building the packages in the next chapter will serve as an additional check that the toolchain has been built properly. If some diff --git a/chapter05/libstdc++.xml b/chapter05/libstdc++.xml index e16efdea9..c7020290d 100644 --- a/chapter05/libstdc++.xml +++ b/chapter05/libstdc++.xml @@ -60,13 +60,13 @@ cd build Prepare Libstdc++ for compilation: -../libstdc++-v3/configure \ - --host=$LFS_TGT \ - --build=$(../config.guess) \ - --prefix=/usr \ - --disable-multilib \ - --disable-nls \ - --disable-libstdcxx-pch \ +../libstdc++-v3/configure \ + --host=$LFS_TGT \ + --build=$(../config.guess) \ + --prefix=/usr \ + --disable-multilib \ + --disable-nls \ + --disable-libstdcxx-pch \ --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/&gcc-version; diff --git a/chapter06/diffutils.xml b/chapter06/diffutils.xml index 92951604d..404fe9b66 100644 --- a/chapter06/diffutils.xml +++ b/chapter06/diffutils.xml @@ -47,8 +47,36 @@ ./configure --prefix=/usr \ --host=$LFS_TGT \ + gl_cv_func_strcasecmp_works=y \ --build=$(./build-aux/config.guess) + + The meaning of the configure options: + + + + gl_cv_func_strcasecmp_works=y + + This option specify the result of a check for the + strcasecmp. The check requires running a + compiled C program, and this is impossible during + cross-compilation because in general a cross-compiled program + cannot run on the host distro. Normally for such a check the + configure script would use a fall-back value + for cross-compilation, but the fall-back value for this check is + absent and the configure script would have no + value to use and error out. The upstream has already fixed the + issue, but to apply the fix we'd need to run + autoconf that the host distro may lack. So + we just specify the check result (y as we know + the strcasecmp function in + Glibc-&glibc-version; works fine) instead, then + configure will just use the specified value and + skip the check. + + + + Compile the package: make diff --git a/chapter06/gcc-pass2.xml b/chapter06/gcc-pass2.xml index f316c8208..1aedf4508 100644 --- a/chapter06/gcc-pass2.xml +++ b/chapter06/gcc-pass2.xml @@ -85,25 +85,24 @@ cd build Now prepare GCC for compilation: -../configure \ - --build=$(../config.guess) \ - --host=$LFS_TGT \ - --target=$LFS_TGT \ - LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc \ - --prefix=/usr \ - --with-arch=mips64r2 \ - --with-build-sysroot=$LFS \ - --enable-default-pie \ - --enable-default-ssp \ - --disable-nls \ - --disable-multilib \ - --disable-libatomic \ - --disable-libgomp \ - --disable-libquadmath \ - --disable-libsanitizer \ - --disable-libssp \ - --disable-libvtv \ - --enable-languages=c,c++ \ +../configure \ + --build=$(../config.guess) \ + --host=$LFS_TGT \ + --target=$LFS_TGT \ + LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc \ + --prefix=/usr \ + --with-build-sysroot=$LFS \ + --enable-default-pie \ + --enable-default-ssp \ + --disable-nls \ + --disable-multilib \ + --disable-libatomic \ + --disable-libgomp \ + --disable-libquadmath \ + --disable-libsanitizer \ + --disable-libssp \ + --disable-libvtv \ + --enable-languages=c,c++ \ $($LFS_TGT-gcc -v 2>&1 | grep -o ..with-nan=2008) diff --git a/chapter06/make.xml b/chapter06/make.xml index eaf0db48f..3d3ca9b38 100644 --- a/chapter06/make.xml +++ b/chapter06/make.xml @@ -45,23 +45,9 @@ Prepare Make for compilation: ./configure --prefix=/usr \ - --without-guile \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) - - The meaning of the new configure option: - - - --without-guile - - Although we are cross-compiling, configure tries to use - guile from the build host if it finds it. This makes compilation - fail, so this switch prevents using it. - - - - Compile the package: make diff --git a/chapter06/tar.xml b/chapter06/tar.xml index 67bc22540..691094e12 100644 --- a/chapter06/tar.xml +++ b/chapter06/tar.xml @@ -45,8 +45,8 @@ Prepare Tar for compilation: -./configure --prefix=/usr \ - --host=$LFS_TGT \ +./configure --prefix=/usr \ + --host=$LFS_TGT \ --build=$(build-aux/config.guess) Compile the package: diff --git a/chapter08/acl.xml b/chapter08/acl.xml index 63892d68e..f122deda1 100644 --- a/chapter08/acl.xml +++ b/chapter08/acl.xml @@ -44,8 +44,8 @@ Prepare Acl for compilation: -./configure --prefix=/usr \ - --disable-static \ +./configure --prefix=/usr \ + --disable-static \ --docdir=/usr/share/doc/acl-&acl-version; Compile the package: diff --git a/chapter08/bison.xml b/chapter08/bison.xml index f466c76eb..a680a7b7e 100644 --- a/chapter08/bison.xml +++ b/chapter08/bison.xml @@ -48,7 +48,7 @@ make - To test the results (about 5.5 SBU), issue: + To test the results, issue: make check diff --git a/chapter08/chapter08.xml b/chapter08/chapter08.xml index b660ef6af..87197df84 100644 --- a/chapter08/chapter08.xml +++ b/chapter08/chapter08.xml @@ -60,17 +60,17 @@ - + + - diff --git a/chapter08/check.xml b/chapter08/check.xml deleted file mode 100644 index 1000aaa68..000000000 --- a/chapter08/check.xml +++ /dev/null @@ -1,109 +0,0 @@ - - - %general-entities; -]> - - - - - - check - &check-version; -
&check-url;
-
- - Check-&check-version; - - - Check - - - - - - <para>Check is a unit testing framework for C.</para> - - <segmentedlist> - <segtitle>&buildtime;</segtitle> - <segtitle>&diskspace;</segtitle> - - <seglistitem> - <seg>&check-fin-sbu;</seg> - <seg>&check-fin-du;</seg> - </seglistitem> - </segmentedlist> - - </sect2> - - <sect2 role="installation"> - <title>Installation of Check - - Prepare Check for compilation: - -./configure --prefix=/usr --disable-static - - Build the package: - -make - - Compilation is now complete. To run the Check test suite, issue the - following command: - -make check - - - Install the package: - - make docdir=/usr/share/doc/check-&check-version; install - - - - - Contents of Check - - - Installed program - Installed library - - - checkmk - libcheck.so - - - - - Short Descriptions - - - - - checkmk - - Awk script for generating C unit tests for use with the Check - unit testing framework - - checkmk - - - - - - libcheck.so - - Contains functions that allow Check to be called from a test - program - - libcheck - - - - - - - - -
diff --git a/chapter08/e2fsprogs.xml b/chapter08/e2fsprogs.xml index 6f93dc99e..89f1fadb3 100644 --- a/chapter08/e2fsprogs.xml +++ b/chapter08/e2fsprogs.xml @@ -52,12 +52,12 @@ cd build
Prepare E2fsprogs for compilation: -../configure --prefix=/usr \ - --sysconfdir=/etc \ - --enable-elf-shlibs \ - --disable-libblkid \ - --disable-libuuid \ - --disable-uuidd \ +../configure --prefix=/usr \ + --sysconfdir=/etc \ + --enable-elf-shlibs \ + --disable-libblkid \ + --disable-libuuid \ + --disable-uuidd \ --disable-fsck diff --git a/chapter08/flex.xml b/chapter08/flex.xml index ff90f0a1a..7e44e38e9 100644 --- a/chapter08/flex.xml +++ b/chapter08/flex.xml @@ -61,7 +61,7 @@ make - To test the results (about 0.5 SBU), issue: + To test the results, issue: make check diff --git a/chapter08/gcc.xml b/chapter08/gcc.xml index 4d86fdf1d..f53116246 100644 --- a/chapter08/gcc.xml +++ b/chapter08/gcc.xml @@ -230,8 +230,7 @@ su tester -c "PATH=$PATH make -k check" that compiling and linking will work as expected. We do this by performing some sanity checks:
-echo 'int main(){}' > dummy.c -cc dummy.c -v -Wl,--verbose &> dummy.log +echo 'int main(){}' | cc -x c - -v -Wl,--verbose &> dummy.log readelf -l a.out | grep ': /lib' There should be no errors, @@ -326,7 +325,7 @@ SEARCH_DIR("/usr/lib"); Once everything is working correctly, clean up the test files: -rm -v dummy.c a.out dummy.log +rm -v a.out dummy.log Finally, move a misplaced file: diff --git a/chapter08/gettext.xml b/chapter08/gettext.xml index c0829253a..b0b4c89e9 100644 --- a/chapter08/gettext.xml +++ b/chapter08/gettext.xml @@ -77,8 +77,7 @@ --> - To test the results (this takes a long time, around 3 SBUs), - issue: + To test the results, issue: make check diff --git a/chapter08/glibc.xml b/chapter08/glibc.xml index 082e5a69b..2a840e2e5 100644 --- a/chapter08/glibc.xml +++ b/chapter08/glibc.xml @@ -68,12 +68,12 @@ cd build Prepare Glibc for compilation: -../configure --prefix=/usr \ - --disable-werror \ - --enable-kernel=&min-kernel; \ - --enable-stack-protector=strong \ - --disable-nscd \ - libc_cv_slibdir=/usr/lib +../configure --prefix=/usr \ + --disable-werror \ + --disable-nscd \ + libc_cv_slibdir=/usr/lib \ + --enable-stack-protector=strong \ + --enable-kernel=&min-kernel; The meaning of the configure options: @@ -350,7 +350,8 @@ install -vm755 dest/usr/lib/*.so.* /usr/lib DIR=$(dirname $(gcc -print-libgcc-file-name)) [ -e $DIR/include/limits.h ] || mv $DIR/include{-fixed,}/limits.h [ -e $DIR/include/syslimits.h ] || mv $DIR/include{-fixed,}/syslimits.h -rm -rfv $(dirname $(gcc -print-libgcc-file-name))/include-fixed/* +rm -rfv $DIR/include-fixed/* +unset DIR Install the package: @@ -414,7 +415,6 @@ localedef -i it_IT -f ISO-8859-1 it_IT localedef -i it_IT -f ISO-8859-15 it_IT@euro localedef -i it_IT -f UTF-8 it_IT.UTF-8 localedef -i ja_JP -f EUC-JP ja_JP -localedef -i ja_JP -f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true localedef -i ja_JP -f UTF-8 ja_JP.UTF-8 localedef -i nl_NL@euro -f ISO-8859-15 nl_NL@euro localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R @@ -436,15 +436,6 @@ localedef -i zh_TW -f UTF-8 zh_TW.UTF-8 make localedata/install-locales - Then use the localedef command to create and - install locales not listed in the - glibc-&glibc-version;/localedata/SUPPORTED file - when you need them. For instance, the following two locales are - needed for some tests later in this chapter: - -localedef -i C -f UTF-8 C.UTF-8 -localedef -i ja_JP -f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true - Glibc now uses libidn2 when resolving internationalized domain names. This is a run time dependency. If this capability is needed, the instructions for installing libidn2 are in the diff --git a/chapter08/gperf.xml b/chapter08/gperf.xml index bbfbbe735..25939135a 100644 --- a/chapter08/gperf.xml +++ b/chapter08/gperf.xml @@ -48,11 +48,9 @@ make - The tests are known to fail if running multiple - simultaneous tests (-j option greater than 1). To test - the results, issue: + To test the results, issue: -make -j1 check +make check Install the package: diff --git a/chapter08/inetutils.xml b/chapter08/inetutils.xml index 693c08405..5b4f32b78 100644 --- a/chapter08/inetutils.xml +++ b/chapter08/inetutils.xml @@ -40,7 +40,7 @@ Installation of Inetutils - First, make the package build with gcc-14.1 or later:: + First, make the package build with gcc-14.1 or later: sed -i 's/def HAVE_TERMCAP_TGETENT/ 1/' telnet/telnet.c diff --git a/chapter08/kmod.xml b/chapter08/kmod.xml index 5b4ab4fb3..0041199f5 100644 --- a/chapter08/kmod.xml +++ b/chapter08/kmod.xml @@ -43,41 +43,19 @@ Prepare Kmod for compilation: -./configure --prefix=/usr \ - --sysconfdir=/etc \ - --with-openssl \ - --with-xz \ - --with-zstd \ - --with-zlib \ - --disable-manpages + mkdir -p build +cd build + +meson setup --prefix=/usr .. \ + --buildtype=release \ + -D manpages=false The meaning of the configure options: - --with-openssl - - - This option enables Kmod to handle PKCS7 signatures for - kernel modules. - - - - - - --with-xz, - --with-zlib, and - --with-zstd - - - These options enable Kmod to handle compressed kernel modules. - - - - - - --disable-manpages + -D manpages=false This option disables generating the man pages which @@ -89,25 +67,15 @@ Compile the package: -make +ninja The test suite of this package requires raw kernel headers (not the sanitized kernel headers installed earlier), which are beyond the scope of LFS. - Install the package and recreate some symlinks for - compatibility with Module-Init-Tools (the package that previously handled - Linux kernel modules). The building system will create all these - symlinks in /usr/bin, but we - only want lsmod there and all other symlinks in - /usr/sbin instead: + Now install the package: -make install - -for target in depmod insmod modinfo modprobe rmmod; do - ln -sfv ../bin/kmod /usr/sbin/$target - rm -fv /usr/bin/$target -done +ninja install diff --git a/chapter08/libelf.xml b/chapter08/libelf.xml index 4fab3cf8b..64142a4fc 100644 --- a/chapter08/libelf.xml +++ b/chapter08/libelf.xml @@ -46,8 +46,8 @@ Prepare Libelf for compilation: - ./configure --prefix=/usr \ - --disable-debuginfod \ + ./configure --prefix=/usr \ + --disable-debuginfod \ --enable-libdebuginfod=dummy Compile the package: @@ -58,6 +58,9 @@ make check + Two tests are known to fail, dwarf_srclang_check and + run-backtrace-native-core.sh. + Six tests are known to fail due to incomplete MIPS support. diff --git a/chapter08/libffi.xml b/chapter08/libffi.xml index d19bddeb1..9e7517016 100644 --- a/chapter08/libffi.xml +++ b/chapter08/libffi.xml @@ -51,17 +51,20 @@ Like GMP, Libffi builds with optimizations specific to the processor in use. If building for another system, change the value of the --with-gcc-arch= parameter in the - following command to an architecture name fully implemented by the + following command to an architecture name fully implemented by + both the host CPU and the CPU on that system. If this is not done, all applications that link to libffi will trigger - Illegal Operation Errors. + Illegal Operation Errors. If you cannot figure out a value + safe for both the CPUs, replace the parameter with + to produce a generic library. Prepare Libffi for compilation: - ./configure --prefix=/usr \ - --disable-static \ +./configure --prefix=/usr \ + --disable-static \ --with-gcc-arch=native diff --git a/chapter08/libtool.xml b/chapter08/libtool.xml index be88fa169..872495afd 100644 --- a/chapter08/libtool.xml +++ b/chapter08/libtool.xml @@ -50,7 +50,7 @@ make -To test the results, issue: +To test the results, issue: make check diff --git a/chapter08/packaging.xml b/chapter08/packaging.xml new file mode 100644 index 000000000..17891d65b --- /dev/null +++ b/chapter08/packaging.xml @@ -0,0 +1,75 @@ + + + %general-entities; +]> + + + + + + packaging + &packaging-version; +
&packaging-url;
+
+ + Packaging-&packaging-version; + + + packaging + + + + + + <para> + The packaging module is a Python library that provides utilities that + implement the interoperability specifications which have clearly one + correct behaviour (PEP440) or benefit greatly from having a single shared + implementation (PEP425). This includes utilities for version handling, + specifiers, markers, tags, and requirements. + </para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + <seglistitem> + <seg>&packaging-fin-sbu;</seg> + <seg>&packaging-fin-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Packaging + + Compile packaging with the following command: + +pip3 wheel -w dist --no-cache-dir --no-build-isolation --no-deps $PWD + + Install packaging with the following command: + +pip3 install --no-index --find-links dist packaging + + + + + Contents of Packaging + + + Installed directories + + + + /usr/lib/python&python-minor;/site-packages/packaging and + /usr/lib/python&python-minor;/site-packages/packaging-&packaging-version;.dist-info + + + + + + +
+ diff --git a/chapter08/perl.xml b/chapter08/perl.xml index 23a0a35c2..0c0cb7067 100644 --- a/chapter08/perl.xml +++ b/chapter08/perl.xml @@ -108,7 +108,7 @@ export BUILD_BZIP2=0
make - To test the results (approximately 11 SBU), issue: + To test the results, issue: TEST_JOBS=$(nproc) make test_harness diff --git a/chapter08/pkgconf.xml b/chapter08/pkgconf.xml index 3e7e737fa..d9f9c4da3 100644 --- a/chapter08/pkgconf.xml +++ b/chapter08/pkgconf.xml @@ -46,8 +46,8 @@ Prepare Pkgconf for compilation: -./configure --prefix=/usr \ - --disable-static \ +./configure --prefix=/usr \ + --disable-static \ --docdir=/usr/share/doc/pkgconf-&pkgconf-version; Compile the package: diff --git a/chapter08/pkgmgt.xml b/chapter08/pkgmgt.xml index b6b230b3f..b16894750 100644 --- a/chapter08/pkgmgt.xml +++ b/chapter08/pkgmgt.xml @@ -69,10 +69,25 @@
If a package containing a shared library is updated, and - if the name of the library changes, then any packages dynamically + if the name of the libraryThe name of a shared library is + the string coded in the DT_SONAME entry of its + ELF dynamic section. You can get it with the + readelf -d <library file> + | grep SONAME command. In most cases it's suffixed with + .so.<a version + number>, but there are some cases where + it contains multiple numbers for versioning (like + libbz2.so.1.0), contains the version number + before the .so suffix (like + libbfd-&binutils-version;), or does not contain + any version number at all (for example + libmemusage.so). + Generally there is no correlation between the package version and the + version number(s) in the library name. + changes, then any packages dynamically linked to the library must be recompiled, to link against the - newer library. (Note that there is no correlation between the package - version and the name of the library.) For example, consider a package + newer library. + For example, consider a package foo-1.2.3 that installs a shared library with the name libfoo.so.1. Suppose you upgrade the package to a newer version foo-1.2.4 that installs a shared library with the name @@ -370,11 +385,13 @@ make DESTDIR=/usr/pkg/libfoo/1.1 install differences in system hardware and the original kernel configuration. - There have been some reports of issues when copying between - similar but not identical architectures. For instance, the instruction set - for an Intel system is not identical with the AMD processor's instructions, and later - versions of some processors may provide instructions that are unavailable with - earlier versions. + If you want to deploy the LFS system onto a system + with a different CPU, when you build and + you must follow the notes about + overriding the architecture-specific optimization to produce libraries + suitable for both the host system and the system(s) where you'll deploy + the LFS system. Otherwise you'll get Illegal + Instruction errors running LFS. Finally, the new system has to be made bootable by configuring a bootloader correctly. diff --git a/chapter08/stripping.xml b/chapter08/stripping.xml index 095bf672a..c41c42bcb 100644 --- a/chapter08/stripping.xml +++ b/chapter08/stripping.xml @@ -24,16 +24,20 @@ backup of the LFS system in its current state. A strip command with the - --strip-unneeded option removes all debug symbols - from a binary or library. It also removes all symbol table entries not + --strip-unneeded option removes all debug symbols from + a binary or library. It also removes all symbol table entries not normally needed by the linker (for static libraries) or dynamic linker (for - dynamically linked binaries and shared libraries). + dynamically linked binaries and shared libraries). Using + --strip-debug does not remove symbol table entries + that may be needed by some applications. The difference between + unneeded and debug is very small. + For example, an unstripped libc.a + is 22.4 MB. After stripping with --strip-debug it + is 5.9 MB. Using --strip-unneeded only reduces the + size further to 5.8 MB. - The debugging symbols from selected libraries are compressed with - Zlib and preserved in separate files. That + Zstd and preserved in separate files. That debugging information is needed to run regression tests with valgrind or gdb later, in BLFS. @@ -80,9 +84,9 @@ cd /usr/lib for LIB in $save_usrlib; do - objcopy --only-keep-debug --compress-debug-sections=zlib $LIB $LIB.dbg + objcopy --only-keep-debug --compress-debug-sections=zstd $LIB $LIB.dbg cp $LIB /tmp/$LIB - strip --strip-unneeded /tmp/$LIB + strip --strip-debug /tmp/$LIB objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB install -vm755 /tmp/$LIB /usr/lib rm /tmp/$LIB @@ -101,14 +105,14 @@ online_usrlib="libbfd-&binutils-version;.so for BIN in $online_usrbin; do cp /usr/bin/$BIN /tmp/$BIN - strip --strip-unneeded /tmp/$BIN + strip --strip-debug /tmp/$BIN install -vm755 /tmp/$BIN /usr/bin rm /tmp/$BIN done for LIB in $online_usrlib; do cp /usr/lib/$LIB /tmp/$LIB - strip --strip-unneeded /tmp/$LIB + strip --strip-debug /tmp/$LIB install -vm755 /tmp/$LIB /usr/lib rm /tmp/$LIB done @@ -119,7 +123,7 @@ for i in $(find /usr/lib -type f -name \*.so* ! -name \*dbg) \ case "$online_usrbin $online_usrlib $save_usrlib" in *$(basename $i)* ) ;; - * ) strip --strip-unneeded $i + * ) strip --strip-debug $i ;; esac done diff --git a/chapter08/sysklogd.xml b/chapter08/sysklogd.xml index af9b860f6..4bd5c00cd 100644 --- a/chapter08/sysklogd.xml +++ b/chapter08/sysklogd.xml @@ -47,6 +47,7 @@ --sysconfdir=/etc \ --runstatedir=/run \ --without-logger \ + --disable-static \ --docdir=/usr/share/doc/sysklogd-&sysklogd-version; Compile the package: diff --git a/chapter08/systemd.xml b/chapter08/systemd.xml index 989082419..01730e235 100644 --- a/chapter08/systemd.xml +++ b/chapter08/systemd.xml @@ -243,7 +243,7 @@ ninja test tar -xf ../../systemd-man-pages-&systemd-man-version;.tar.xz \ - --no-same-owner --strip-components=1 \ + --no-same-owner --strip-components=1 \ -C /usr/share/man Create the /etc/machine-id file needed by diff --git a/chapter08/tcl.xml b/chapter08/tcl.xml index 0905af0d4..2cb10d72c 100644 --- a/chapter08/tcl.xml +++ b/chapter08/tcl.xml @@ -82,9 +82,9 @@ sed -e "s|$SRCDIR/unix|/usr/lib|" \ -i tclConfig.sh sed -e "s|$SRCDIR/unix/pkgs/tdbc&tdbc-ver;|/usr/lib/tdbc&tdbc-ver;|" \ - -e "s|$SRCDIR/pkgs/tdbc&tdbc-ver;/generic|/usr/include|" \ - -e "s|$SRCDIR/pkgs/tdbc&tdbc-ver;/library|/usr/lib/tcl8.6|" \ - -e "s|$SRCDIR/pkgs/tdbc&tdbc-ver;|/usr/include|" \ + -e "s|$SRCDIR/pkgs/tdbc&tdbc-ver;/generic|/usr/include|" \ + -e "s|$SRCDIR/pkgs/tdbc&tdbc-ver;/library|/usr/lib/tcl8.6|" \ + -e "s|$SRCDIR/pkgs/tdbc&tdbc-ver;|/usr/include|" \ -i pkgs/tdbc&tdbc-ver;/tdbcConfig.sh sed -e "s|$SRCDIR/unix/pkgs/itcl&itcl-ver;|/usr/lib/itcl&itcl-ver;|" \ diff --git a/chapter10/fstab.xml b/chapter10/fstab.xml index ad835be30..8eb314b87 100644 --- a/chapter10/fstab.xml +++ b/chapter10/fstab.xml @@ -108,6 +108,8 @@ EOF Default iocharset for FAT (). There is no way to specify these settings for the ntfs filesystem at kernel compilation time. + diff --git a/general.ent b/general.ent index b3bce5ae8..1d2d0ee97 100644 --- a/general.ent +++ b/general.ent @@ -7,9 +7,9 @@ - - - + + + @@ -44,7 +44,7 @@ ]]> - + ]]> - + so for LFS 12.5 we may consider moving to 5.10. --> + - + + - + - - - - + + + + @@ -200,18 +192,18 @@ - - + + - + - - + + - + @@ -237,18 +229,18 @@ - - + + - + - - + + - + @@ -273,18 +265,18 @@ - - + + - + - - + + - + @@ -307,28 +299,28 @@ - - + + - + - - + + - + - - + + - + @@ -341,18 +333,18 @@ - - + + - + - - + + - + @@ -365,10 +357,10 @@ - - + + - + @@ -389,18 +381,18 @@ - - + + - + - - + + - + @@ -430,13 +422,13 @@ - - + + - + - + - + - + - + - - + + @@ -637,45 +637,45 @@ - - + + - + - - + + - + - - + + - + - + - + - + - - + + - + @@ -719,10 +719,10 @@ - - + + - + @@ -733,21 +733,21 @@ - - - + + + - + - + - + - + - - + + - + @@ -782,10 +782,10 @@ - - + + - + @@ -804,10 +804,10 @@ - - + + - + diff --git a/part3intro/toolchaintechnotes.xml b/part3intro/toolchaintechnotes.xml index 1dad94103..2239b2c7a 100644 --- a/part3intro/toolchaintechnotes.xml +++ b/part3intro/toolchaintechnotes.xml @@ -3,6 +3,9 @@ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ %general-entities; + + <the host triplet>"> ]> @@ -44,6 +47,14 @@ book for a cross-toolchain for some purpose other than building LFS, unless you really understand what you are doing. + + + It's known installing GCC pass 2 will break the cross-toolchain. + We don't consider it a bug because GCC pass 2 is the last package + to be cross-compiled in the book, and we won't fix + it until we really need to cross-compile some package after GCC + pass 2 in the future. + Cross-compilation involves some concepts that deserve a section of @@ -197,14 +208,105 @@ page. - In order to fake a cross-compilation in LFS, the name of the host triplet - is slightly adjusted by changing the "vendor" field in the - LFS_TGT variable so it says "lfs". We also use the - --with-sysroot option when building the cross-linker and - cross-compiler, to tell them where to find the needed host files. This - ensures that none of the other programs built in can link to libraries on the build - machine. Only two stages are mandatory, plus one more for tests. + + There are two key points for a cross-compilation: + + + + + + When producing and processing the machine code supposed to be + executed on the host, the cross-toolchain must be + used. Note that the native toolchain from the build + may be still invoked to generate machine code supposed to be + executed on the build. For example, the build system + may compile a generator with the native toolchain, then generate + a C source file with the generator, and finally compile the C + source file with the cross-toolchain so the generated code will + be able to run on the host. + + + With an autoconf-based build system, this requirement is ensured + by using the --host switch to specify + the host triplet. With this switch the build + system will use the toolchain components prefixed + with &host-triplet; + for generating and processing the machine code for + the host; e.g. the compiler will be + &host-triplet;-gcc and the + readelf tool will be + &host-triplet;-readelf. + + + + + The build system should not attempt to run any generated machine + code supposed to be executed on the host. For + example, when building a utility natively, its man page can be + generated by running the utility with the + --help switch and processing the output, + but generally it's not possible to do so for a cross-compilation + as the utility may fail + to run on the build: it's obviously impossible to + run ARM64 machine code on a x86 CPU (without an emulator). + + + With an autoconf-based build system, this requirement is + satisfied in the cross-compilation mode where + the optional features requiring to run machine code for + the host during the build time are disabled. When the + host triplet is explicitly specified, the + cross-compilation mode is enabled if and only if either + the configure script fails to run a dummy + program compiled into the host machine code, or + the build triplet is explicitly specified via the + --build switch and it's different from + the host triplet. + + + + + In order to cross-compile a package for the LFS temporary system, + the name of the system triplet is slightly adjusted by changing the + "vendor" field in the LFS_TGT variable so it + says "lfs" and LFS_TGT is then specified as + the host triplet via --host, so + the cross-toolchain will be used for generating and processing the + machine code running as a part of the LFS temporary system. And, we + also need to enable the cross-compilation mode: despite + the host machine code, i.e. the machine code for the LFS + temporary system, is able to execute on the current CPU, it may refer + to a library not available on the the build (the host + distro), or some code or data non-exist or defined differently in the + library even if it happens to be available. When cross-compiling a + package for the LFS temporary system, we cannot rely on the + configure script to detect this issue with the + dummy program: the dummy only uses a few components in + libc that the host distro + libc likely provides (unless, + maybe the host distro uses a different + libc implementation like Musl), + so it won't fail like how the really useful programs would likely. + Thus we must explicitly specify the build triplet to + enable the cross-compilation mode. The value we use is + just the default, i.e. the original system triplet from + config.guess output, but the cross-compilation + mode depends on an explicit specification as we've + discussed. + + We use the --with-sysroot option when + building the cross-linker and cross-compiler, to tell them where to find + the needed files for the host. This nearly ensures that + none of the other programs built in + can link to libraries on + the build. The word nearly is used because + libtool, a compatibility wrapper of + the compiler and the linker for autoconf-based build systems, + can try to be too clever and mistakenly pass options allowing the linker + to find libraries of the build. + To prevent this fallout, we need to delete the libtool archive + (.la) files and fix up an + outdated libtool copy shipped with the Binutils code. @@ -228,7 +330,7 @@ 3lfslfslfs - Rebuild and test cc-lfs using cc-lfs on lfs. + Rebuild (and maybe test) cc-lfs using cc-lfs on lfs. @@ -256,30 +358,11 @@ The upshot of the preceding paragraph is that cc1 is unable to build a fully functional libstdc++ with the degraded libgcc, but cc1 is the only compiler available for building the C/C++ libraries - during stage 2. There are two reasons we don't immediately use the - compiler built in stage 2, cc-lfs, to build those libraries. - - - - - Generally speaking, cc-lfs cannot run on pc (the host system). Even though the - triplets for pc and lfs are compatible with each other, an executable - for lfs must depend on glibc-&glibc-version;; the host distro - may utilize either a different implementation of libc (for example, musl), or - a previous release of glibc (for example, glibc-2.13). - - - - - Even if cc-lfs can run on pc, using it on pc would create - a risk of linking to the pc libraries, since cc-lfs is a native - compiler. - - - - - So when we build gcc stage 2, we instruct the building system to - rebuild libgcc and libstdc++ with cc1, but we link libstdc++ to the newly + during stage 2. As we've discussed, we cannot run cc-lfs on pc (the + host distro) because it may require some library, code, or data not + available on the build (the host distro). + So when we build gcc stage 2, we override the library + search path to link libstdc++ against the newly rebuilt libgcc instead of the old, degraded build. This makes the rebuilt libstdc++ fully functional. @@ -290,12 +373,11 @@ package on a completed LFS system, the reinstalled content of the package should be the same as the content of the same package when first installed in &ch-final;. The temporary packages installed in &ch-tmp-cross; or - &ch-tmp-chroot; cannot satisfy this requirement, because some of them - are built without optional dependencies, and autoconf cannot - perform some feature checks in &ch-tmp-cross; because of cross-compilation, - causing the temporary packages to lack optional features, - or use suboptimal code routines. Additionally, a minor reason for - rebuilding the packages is to run the test suites. + &ch-tmp-chroot; cannot satisfy this requirement, because some optional + features of them are disabled because of either the missing + dependencies or the cross-compilation mode. + Additionally, a minor reason for rebuilding the packages is to run the + test suites. @@ -357,39 +439,25 @@ checking what linker to use... /mnt/lfs/tools/i686-lfs-linux-gnu/bin/ld - Next comes glibc. The most important - considerations for building glibc are the compiler, binary tools, and - kernel headers. The compiler and binary tools are generally not an issue - since glibc will always use those relating to the --host - parameter passed to its configure script; e.g., in our case, the compiler - will be $LFS_TGT-gcc and the readelf - tool will be $LFS_TGT-readelf. The kernel headers can - be a bit more complicated. Therefore, we take no risks and use - the available configure switch to enforce the correct selection. After - the run of configure, check the contents of the - config.make file in the build directory for all important details. - These items highlight an important aspect of the glibc - package—it is very self-sufficient in terms of its build machinery, - and generally does not rely on toolchain defaults. + Next comes glibc. This is the first package that we cross-compile. + We use the --host=$LFS_TGT option to make + the build system to use those tools prefixed with + $LFS_TGT-, and the + --build=$(../scripts/config.guess) option to + enable the cross-compilation mode as we've discussed. + The DESTDIR variable is used to force installation into + the LFS file system. As mentioned above, the standard C++ library is compiled next, followed in by other programs that must be cross-compiled to break circular dependencies at build time. - The install step of all those packages uses the - DESTDIR variable to force installation - in the LFS filesystem. + The steps for those packages are similar to the steps for glibc. At the end of the native LFS compiler is installed. First binutils-pass2 is built, in the same DESTDIR directory as the other programs, then the second pass of gcc is constructed, omitting some - non-critical libraries. Due to some weird logic in gcc's - configure script, CC_FOR_TARGET ends up as - cc when the host is the same as the target, but - different from the build system. This is why - CC_FOR_TARGET=$LFS_TGT-gcc is declared explicitly - as one of the configuration options. + non-critical libraries. Upon entering the chroot environment in , diff --git a/patches.ent b/patches.ent index c90d38120..c7b2ab19b 100644 --- a/patches.ent +++ b/patches.ent @@ -17,8 +17,8 @@ - - + + diff --git a/stylesheets/lfs-xsl/chunk-master.xsl b/stylesheets/lfs-xsl/chunk-master.xsl index 029332162..b353e75ca 100644 --- a/stylesheets/lfs-xsl/chunk-master.xsl +++ b/stylesheets/lfs-xsl/chunk-master.xsl @@ -27,8 +27,12 @@ Prevent creation of dummy sect1 files used to emulate sub-chapters. The original template is in {docbook-xsl}/xhtml/chunk-code.xsl It also matches other sect* tags. The code for those tags are - unchanged. --> - + unchanged. Note that the priority attribute is not strictly + required, because the original template is less restrictive in + matching, so has less precedence. But in case the docbook dev + add a match="sect1" template in their chunk-code.xsl, then it will + be necessary!--> + diff --git a/stylesheets/lfs-xsl/pdf/lfs-mixed.xsl b/stylesheets/lfs-xsl/pdf/lfs-mixed.xsl index 834b7057c..8f5576d9f 100644 --- a/stylesheets/lfs-xsl/pdf/lfs-mixed.xsl +++ b/stylesheets/lfs-xsl/pdf/lfs-mixed.xsl @@ -80,6 +80,16 @@ + + + + + + + + + + diff --git a/stylesheets/lfs-xsl/xhtml/lfs-sections.xsl b/stylesheets/lfs-xsl/xhtml/lfs-sections.xsl index b13e5e11b..0ecfaa4f6 100644 --- a/stylesheets/lfs-xsl/xhtml/lfs-sections.xsl +++ b/stylesheets/lfs-xsl/xhtml/lfs-sections.xsl @@ -166,7 +166,7 @@ - +