diff options
54 files changed, 2845 insertions, 37 deletions
@@ -34,6 +34,19 @@ else DUMPDIR ?= ~/lfs-sysd-commands endif +ifndef ARCH + ARCH = default +endif +ifneq ($(ARCH), default) + ifneq ($(ARCH), ml_32) + ifneq ($(ARCH), ml_x32) + ifneq ($(ARCH), ml_all) + $(error ARCH must be either 'default' (default if unset), 'ml_32', 'ml_x32' or 'ml_all'.) + endif + endif + endif +endif + book: validate profile-html @echo "Generating chunked XHTML files at $(BASEDIR)/ ..." $(Q)xsltproc --nonet \ @@ -129,6 +142,7 @@ validate: tmpdir version --xinclude \ --output $(RENDERTMP)/lfs-html2.xml \ --stringparam profile.revision $(REV) \ + --stringparam profile.arch $(ARCH) \ stylesheets/lfs-xsl/profile.xsl \ index.xml @@ -182,6 +196,7 @@ $(BASEDIR)/md5sums: stylesheets/wget-list.xsl chapter03/chapter03.xml \ $(Q)xsltproc --nonet --xinclude \ --stringparam profile.revision $(REV) \ + --stringparam profile.arch $(ARCH) \ --output $(RENDERTMP)/md5sum.xml \ stylesheets/lfs-xsl/profile.xsl \ chapter03/chapter03.xml diff --git a/chapter01/askforhelp.xml b/chapter01/askforhelp.xml index 5eb1d939f..80fab7fed 100644 --- a/chapter01/askforhelp.xml +++ b/chapter01/askforhelp.xml @@ -60,7 +60,7 @@ <itemizedlist> <listitem> - <para>The version of the book being used (in this case &version;)</para> + <para>The version of the book being used (in this case &version;<phrase arch="ml_32,ml_x32,ml_all">-multilib</phrase>)</para> </listitem> <listitem> <para>The host distribution and version being used to create LFS</para> @@ -75,7 +75,7 @@ <para>The exact error message, or a clear description of the problem</para> </listitem> <listitem> - <para>Note whether you have deviated from the book at all </para> + <para>Note whether you have deviated from the book at all</para> </listitem> </itemizedlist> diff --git a/chapter01/changelog.xml b/chapter01/changelog.xml index 53018d5cd..e02576110 100644 --- a/chapter01/changelog.xml +++ b/chapter01/changelog.xml @@ -10,7 +10,7 @@ <title>Changelog</title> - <para>This is version &version; of the Linux From Scratch book, dated + <para>This is version &version;<phrase arch="ml_32,ml_x32,ml_all">&version;-multilib</phrase> of the Linux From Scratch book, dated &releasedate;. If this book is more than six months old, a newer and better version is probably already available. To find out, please check one of the mirrors via <ulink url="&lfs-root;mirrors.html"/>.</para> diff --git a/chapter02/hostreqs.xml b/chapter02/hostreqs.xml index 862d2605c..e94f41f4c 100644 --- a/chapter02/hostreqs.xml +++ b/chapter02/hostreqs.xml @@ -262,5 +262,26 @@ EOF bash version-check.sh</userinput></screen> - </sect2> + <para arch="ml_32,ml_x32,ml_all"> + Building multilib support requires the kernel of the host system + to have 32-bit emulation support included. + </para> +<screen arch="ml_32,ml_x32,ml_all">Binary Emulations ---> + [*] IA32 Emulation + <M> IA32 a.out support + [*] x32 ABI for 64-bit mode +</screen> + + <para arch="ml_32,ml_x32,ml_all">The option 'IA32 a.out support' is + optional. In case your kernel does not have 'x32 ABI for 64-bit mode' + enabled but only 'IA32 Emulation', you can continue to build your + system but you have to leave out any sections showing instructions + for building x32 objects. If neither 'IA32 Emulation' nor + 'x32 ABI for 64-bit mode' is enabled, you will run in errors + latest when building <application>glibc</application> in Chapter 6, + so an upgrade of your host system kernel is required. + </para> + + </sect2> + </sect1> diff --git a/chapter03/packages.xml b/chapter03/packages.xml index dba151cac..c7d0f3892 100644 --- a/chapter03/packages.xml +++ b/chapter03/packages.xml @@ -378,6 +378,15 @@ </listitem> </varlistentry> + <varlistentry arch="ml_32,ml_x32,ml_all"> + <term>ISL (&isl-version;) - <token>&isl-size;</token>:</term> + <listitem> + <para>Home page: <ulink url="&isl-home;"/></para> + <para>Download: <ulink url="&isl-url;"/></para> + <para>MD5 sum: <literal>&isl-md5;</literal></para> + </listitem> + </varlistentry> + <varlistentry> <term>Jinja2 (&jinja2-version;) - <token>&jinja2-size;</token>:</term> <listitem> diff --git a/chapter04/addinguser.xml b/chapter04/addinguser.xml index 2db1f756f..e0fa1edfc 100644 --- a/chapter04/addinguser.xml +++ b/chapter04/addinguser.xml @@ -84,6 +84,9 @@ useradd -s /bin/bash -g lfs -m -k /dev/null lfs</userinput></screen> case $(uname -m) in x86_64) chown -v lfs $LFS/lib64 ;; esac</userinput></screen> +<screen arch="ml_32" ><userinput>chown -v lfs $LFS/lib32</userinput></screen> +<screen arch="ml_x32" ><userinput>chown -v lfs $LFS/libx32</userinput></screen> +<screen arch="ml_all" ><userinput>chown -v lfs $LFS/{lib32,libx32}</userinput></screen> <note><para>In some host systems, the following <command>su</command> command does not complete properly and suspends the login for the &lfs-user; user to the background. diff --git a/chapter04/creatingminlayout.xml b/chapter04/creatingminlayout.xml index 90c825577..c709c8ed3 100644 --- a/chapter04/creatingminlayout.xml +++ b/chapter04/creatingminlayout.xml @@ -30,6 +30,13 @@ done case $(uname -m) in x86_64) mkdir -pv $LFS/lib64 ;; esac</userinput></screen> +<screen arch="ml_32"><userinput>mkdir -pv $LFS/usr/lib32 +ln -sv usr/lib32 $LFS/lib32</userinput></screen> +<screen arch="ml_x32"><userinput>mkdir -pv $LFS/usr/libx32 +ln -sv usr/libx32 $LFS/libx32</userinput></screen> +<screen arch="ml_all"><userinput>mkdir -pv $LFS/usr/lib{,x}32 +ln -sv usr/lib32 $LFS/lib32 +ln -sv usr/libx32 $LFS/libx32</userinput></screen> <para>Programs in <xref linkend="chapter-temporary-tools"/> will be compiled with a cross-compiler (more details can be found in section <xref diff --git a/chapter04/settingenviron.xml b/chapter04/settingenviron.xml index b255a4b45..8627e9af5 100644 --- a/chapter04/settingenviron.xml +++ b/chapter04/settingenviron.xml @@ -38,7 +38,7 @@ EOF</userinput></screen> <filename>.bashrc</filename> file instead. Create the <filename>.bashrc</filename> file now:</para> -<screen><userinput>cat > ~/.bashrc << "EOF" +<screen arch="default"><userinput>cat > ~/.bashrc << "EOF" <literal>set +h umask 022 LFS=/mnt/lfs @@ -50,6 +50,20 @@ PATH=$LFS/tools/bin:$PATH CONFIG_SITE=$LFS/usr/share/config.site export LFS LC_ALL LFS_TGT PATH CONFIG_SITE</literal> EOF</userinput></screen> +<screen arch="ml_32,ml_x32,ml_all"><userinput>cat > ~/.bashrc << "EOF" +<literal>set +h +umask 022 +LFS=/mnt/lfs +LC_ALL=POSIX +LFS_TGT=x86_64-lfs-linux-gnu +LFS_TGT32=i686-lfs-linux-gnu +LFS_TGTX32=x86_64-lfs-linux-gnux32 +PATH=/usr/bin +if [ ! -L /bin ]; then PATH=/bin:$PATH; fi +PATH=$LFS/tools/bin:$PATH +CONFIG_SITE=$LFS/usr/share/config.site +export LFS LC_ALL LFS_TGT LFS_TGT32 LFS_TGTX32 PATH</literal> +EOF</userinput></screen> <variablelist> <title>The meaning of the settings in <filename>.bashrc</filename></title> diff --git a/chapter05/binutils-pass1.xml b/chapter05/binutils-pass1.xml index 65e8dd2ae..039d36145 100644 --- a/chapter05/binutils-pass1.xml +++ b/chapter05/binutils-pass1.xml @@ -70,12 +70,19 @@ cd build</userinput></screen> <para>Now prepare Binutils for compilation:</para> - <screen><userinput remap="configure">../configure --prefix=$LFS/tools \ + <screen arch="default"><userinput remap="configure">../configure --prefix=$LFS/tools \ --with-sysroot=$LFS \ --target=$LFS_TGT \ --disable-nls \ --enable-gprofng=no \ --disable-werror</userinput></screen> +<screen arch="ml_32,ml_x32,ml_all"><userinput remap="configure">../configure --prefix=$LFS/tools \ + --with-sysroot=$LFS \ + --target=$LFS_TGT \ + --disable-nls \ + --enable-gprofng=no \ + --disable-werror \ + --enable-multilib</userinput></screen> <variablelist> <title>The meaning of the configure options:</title> @@ -132,6 +139,13 @@ cd build</userinput></screen> </listitem> </varlistentry> + <varlistentry arch="ml_32,ml_x32,ml_all"> + <term><parameter>--enable-multilib</parameter></term> + <listitem> + <para>Enables multilib support.</para> + </listitem> + </varlistentry> + </variablelist> <para>Continue with compiling the package:</para> diff --git a/chapter05/gcc-pass1.xml b/chapter05/gcc-pass1.xml index 8ca2e92b5..572251532 100644 --- a/chapter05/gcc-pass1.xml +++ b/chapter05/gcc-pass1.xml @@ -62,16 +62,24 @@ mv -v gmp-&gmp-version; gmp tar -xf ../mpc-&mpc-version;.tar.gz mv -v mpc-&mpc-version; mpc</userinput></screen> - <para>On x86_64 hosts, set the default directory name for + <para arch="default">On x86_64 hosts, set the default directory name for 64-bit libraries to <quote>lib</quote>:</para> -<screen><userinput remap="pre">case $(uname -m) in +<screen arch="default"><userinput remap="pre">case $(uname -m) in x86_64) sed -e '/m64=/s/lib64/lib/' \ -i.orig gcc/config/i386/t-linux64 ;; esac</userinput></screen> + <para arch="ml_32,ml_x32,ml_all">Change the default directory name for + libraries:</para> + +<screen arch="ml_32,ml_x32,ml_all"><userinput remap="pre">sed -e '/m64=/s/lib64/lib/' \ + -e '/m32=/s/m32=.*/m32=..\/lib32$(call if_multiarch,:i386-linux-gnu)/' \ + -i.orig gcc/config/i386/t-linux64 +</userinput></screen> + <para>The GCC documentation recommends building GCC in a dedicated build directory:</para> @@ -80,7 +88,7 @@ cd build</userinput></screen> <para>Prepare GCC for compilation:</para> -<screen><userinput remap="configure">../configure \ +<screen arch="default"><userinput remap="configure">../configure \ --target=$LFS_TGT \ --prefix=$LFS/tools \ --with-glibc-version=&glibc-version; \ @@ -100,6 +108,33 @@ cd build</userinput></screen> --disable-libvtv \ --disable-libstdcxx \ --enable-languages=c,c++</userinput></screen> +<screen arch="ml_32,ml_x32,ml_all"><userinput remap="configure" + arch="ml_32">mlist=m64,m32</userinput><userinput remap="configure" + arch="ml_x32">mlist=m64,mx32</userinput><userinput remap="configure" + arch="ml_all">mlist=m64,m32,mx32</userinput> +<userinput remap="configure">../configure \ + --target=$LFS_TGT \ + --prefix=$LFS/tools \ + --with-glibc-version=&glibc-version; \ + --with-sysroot=$LFS \ + --with-newlib \ + --without-headers \ + --enable-default-pie \ + --enable-default-ssp \ + --enable-initfini-array \ + --disable-nls \ + --disable-shared \ + --enable-multilib --with-multilib-list=$mlist \ + --disable-decimal-float \ + --disable-threads \ + --disable-libatomic \ + --disable-libgomp \ + --disable-libquadmath \ + --disable-libssp \ + --disable-libvtv \ + --disable-libstdcxx \ + --enable-languages=c,c++</userinput></screen> + <variablelist> <title>The meaning of the configure options:</title> @@ -156,13 +191,20 @@ cd build</userinput></screen> </listitem> </varlistentry> - <varlistentry> + <varlistentry arch="default"> <term><parameter>--disable-multilib</parameter></term> <listitem> <para>On x86_64, LFS does not support a multilib configuration. This switch is harmless for x86.</para> </listitem> </varlistentry> + <varlistentry arch="ml_32,ml_x32,ml_all"> + <term><parameter>--enable-multilib --with-multilib-list=...</parameter></term> + <listitem> + <para>LFS canbe used to support multilib. Which they are is + specified in the multilib list.</para> + </listitem> + </varlistentry> <varlistentry> <term><parameter>--disable-threads, diff --git a/chapter05/glibc.xml b/chapter05/glibc.xml index 14f1fac6c..0339a7b22 100644 --- a/chapter05/glibc.xml +++ b/chapter05/glibc.xml @@ -47,13 +47,16 @@ for x86_64, create a compatibility symbolic link required for proper operation of the dynamic library loader:</para> -<screen><userinput remap="pre">case $(uname -m) in +<screen arch="default"><userinput remap="pre">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 ;; esac</userinput></screen> +<!-- no ld-linux.so.2 here as multilib is based on x86_64, not on i686 --> +<screen arch="ml_32,ml_x32,ml_all"><userinput remap="pre">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</userinput></screen> <note> <para> @@ -85,13 +88,21 @@ cd build</userinput></screen> <para>Next, prepare Glibc for compilation:</para> -<screen><userinput remap="configure">../configure \ +<screen arch="default"><userinput remap="configure">../configure \ --prefix=/usr \ --host=$LFS_TGT \ --build=$(../scripts/config.guess) \ --enable-kernel=&min-kernel; \ --with-headers=$LFS/usr/include \ libc_cv_slibdir=/usr/lib</userinput></screen> +<screen arch="ml_32,ml_x32,ml_all"><userinput remap="configure">../configure \ + --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(../scripts/config.guess) \ + --enable-kernel=&min-kernel; \ + --with-headers=$LFS/usr/include \ + --enable-multi-arch \ + libc_cv_slibdir=/usr/lib</userinput></screen> <variablelist> <title>The meaning of the configure options:</title> @@ -203,7 +214,7 @@ readelf -l a.out | grep ld-linux</userinput></screen> <screen><computeroutput>[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</computeroutput></screen> - <para>Note that for 32-bit machines, the interpreter name will be + <para arch="default">Note that for 32-bit machines, the interpreter name will be <filename>/lib/ld-linux.so.2</filename>.</para> <para>If the output is not as shown above, or there is no output at all, @@ -231,6 +242,148 @@ readelf -l a.out | grep ld-linux</userinput></screen> --> </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + <sect2 arch="ml_32,ml_all"> + <title>Building Glibc - 32bit</title> + + <para>Now recompile for m32. The extracted source can be + reused but needs to be cleaned before installing the m32 + version of Glibc.</para> + + <para>Clear the build directory and remove artefacts from + previous build:</para> + +<screen><userinput remap="pre">make clean +find .. -name "*.a" -delete</userinput></screen> + + <para>Configure Glibc for m32 with the following commands:</para> + +<screen><userinput remap="configure">CC="$LFS_TGT-gcc -m32" \ +CXX="$LFS_TGT-g++ -m32" \ +../configure \ + --prefix=/usr \ + --host=$LFS_TGT32 \ + --build=$(../scripts/config.guess) \ + --enable-kernel=&min-kernel; \ + --with-headers=$LFS/usr/include \ + --enable-multi-arch \ + --libdir=/usr/lib32 \ + --libexecdir=/usr/lib32 \ + libc_cv_slibdir=/usr/lib32</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -a DESTDIR/usr/lib32 $LFS/usr/ +install -vm644 DESTDIR/usr/include/gnu/{lib-names,stubs}-32.h \ + $LFS/usr/include/gnu/ +ln -svf ../lib32/ld-linux.so.2 $LFS/lib/ld-linux.so.2</userinput></screen> + + + <caution> + <para>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:</para> + +<screen><userinput>echo 'int main(){}' > dummy.c +$LFS_TGT-gcc -m32 dummy.c +readelf -l a.out | grep '/ld-linux'</userinput></screen> + + <para>If everything is working correctly, there should be no errors, + and the output of the last command will be of the form:</para> + +<screen><computeroutput>[Requesting program interpreter: /lib/ld-linux.so.2]</computeroutput></screen> + + <para>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 + where the problem is and correct it. This issue must be resolved before + continuing on.</para> + + <para>Once all is well, clean up the test files:</para> + +<screen><userinput>rm -v dummy.c a.out</userinput></screen> + + </caution> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all"> + <title>Building Glibc - x32bit</title> + + <para>Now recompile for mx32. The extracted source can be + reused but needs to be cleaned before installing the mx32 + version of Glibc.</para> + + <para>Clear the build directory and remove artefacts from + previous build:</para> + +<screen><userinput remap="pre">make clean +find .. -name "*.a" -delete</userinput></screen> + + <para>Configure Glibc for mx32 with the following commands:</para> + +<screen><userinput remap="configure">CC="$LFS_TGT-gcc -mx32" \ +CXX="$LFS_TGT-g++ -mx32" \ +../configure \ + --prefix=/usr \ + --host=$LFS_TGTX32 \ + --build=$(../scripts/config.guess) \ + --enable-kernel=&min-kernel; \ + --with-headers=$LFS/usr/include \ + --enable-multi-arch \ + --libdir=/usr/libx32 \ + --libexecdir=/usr/libx32 \ + libc_cv_slibdir=/usr/libx32</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -a DESTDIR/usr/libx32 $LFS/usr/ +install -vm644 DESTDIR/usr/include/gnu/{lib-names,stubs}-x32.h \ + $LFS/usr/include/gnu/ +ln -svf ../libx32/ld-linux-x32.so.2 $LFS/lib/ld-linux-x32.so.2</userinput></screen> + + <caution> + <para>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:</para> + +<screen><userinput>echo 'int main(){}' > dummy.c +$LFS_TGT-gcc -mx32 dummy.c +readelf -l a.out | grep '/ld-linux-x32'</userinput></screen> + + <para>If everything is working correctly, there should be no errors, + and the output of the last command will be of the form:</para> + +<screen><computeroutput>[Requesting program interpreter: /libx32/ld-linux-x32.so.2]</computeroutput></screen> + + <para>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 + where the problem is and correct it. This issue must be resolved before + continuing on.</para> + + <para>Once all is well, clean up the test files:</para> + +<screen><userinput>rm -v dummy.c a.out</userinput></screen> + + </caution> + + </sect2><!-- mx32 --> + <sect2 role="content"> <title/> diff --git a/chapter05/libstdc++.xml b/chapter05/libstdc++.xml index e0ea2e790..272e27762 100644 --- a/chapter05/libstdc++.xml +++ b/chapter05/libstdc++.xml @@ -60,7 +60,15 @@ cd build</userinput></screen> <para>Prepare Libstdc++ for compilation:</para> -<screen><userinput remap="configure">../libstdc++-v3/configure \ +<screen arch="ml_32,ml_x32,ml_all"><userinput remap="configure">../libstdc++-v3/configure \ + --host=$LFS_TGT \ + --build=$(../config.guess) \ + --prefix=/usr \ + --enable-multilib \ + --disable-nls \ + --disable-libstdcxx-pch \ + --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/&gcc-version;</userinput></screen> +<screen arch="default"><userinput remap="configure">../libstdc++-v3/configure \ --host=$LFS_TGT \ --build=$(../config.guess) \ --prefix=/usr \ @@ -81,6 +89,13 @@ cd build</userinput></screen> </listitem> </varlistentry> + <varlistentry arch="ml_32,ml_x32,ml_all"> + <term><parameter>--enable-multilib</parameter></term> + <listitem> + <para>Enable building multilib objects.</para> + </listitem> + </varlistentry> + <varlistentry> <term><parameter>--disable-libstdcxx-pch</parameter></term> <listitem> diff --git a/chapter05/libxcrypt.xml b/chapter05/libxcrypt.xml new file mode 100644 index 000000000..8feef9f9b --- /dev/null +++ b/chapter05/libxcrypt.xml @@ -0,0 +1,175 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-libxcrypt" role="wrap"> + <?dbhtml filename="libxcrypt.html"?> + + <sect1info condition="script"> + <productname>libxcrypt</productname> + <productnumber>&libxcrypt-version;</productnumber> + <address>&libxcrypt-url;</address> + </sect1info> + + <title>Libxcrypt-&libxcrypt-version;</title> + + <indexterm zone="ch-tools-libxcrypt"> + <primary sortas="a-Libxcrypt">Libxcrypt</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/libxcrypt.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&libxcrypt-fin-sbu;</seg> + <seg>&libxcrypt-fin-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Libxcrypt</title> + + <para>Prepare Libxcrypt for compilation:</para> + +<screen><userinput remap="configure">./configure --target=$LFS_TGT \ + --prefix=/usr \ + --enable-hashes=strong,glibc \ + --enable-obsolete-api=no \ + --disable-static \ + --disable-failure-tokens</userinput></screen> + + <variablelist> + <title>The meaning of the new configure options:</title> + + <varlistentry> + <term><parameter>--enable-hashes=strong,glibc</parameter></term> + <listitem> + <para>Build strong hash algorithms recommended for security use + cases, and the hash algorithms provided by traditional Glibc + <systemitem class='library'>libcrypt</systemitem> for + compatibility.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--enable-obsolete-api=no</parameter></term> + <listitem> + <para>Disable obsolete API functions. They are not needed for + a modern Linux system built from source.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-failure-tokens</parameter></term> + <listitem> + <para>Disable failure token feature. It's needed for + compatibility with the traditional hash libraries of some + platforms, but a Linux system based on Glibc does not need + it.</para> + </listitem> + </varlistentry> + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To test the results, issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + </sect2> + + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of Libxcrypt - 32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare File for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -m32" \ +./configure --target=$LFS_TGT32 \ + --prefix=/usr \ + --host=i686-pc-linux-gnu \ + --libdir=/usr/lib32 \ + --enable-hashes=strong,glibc \ + --enable-obsolete-api=glibc \ + --disable-static \ + --disable-failure-tokens</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">cp -av .libs/libcrypt.so* $LFS/usr/lib32/ && +make DESTDIR=$LFS install-pkgconfigDATA && +ln -svf libxcrypt.pc $LFS/usr/lib32/pkgconfig/libcrypt.pc</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of Libxcrypt - x32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare File for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -mx32" \ +./configure --target=$LFS_TGT32 \ + --prefix=/usr \ + --host=x86_64-pc-linux-gnux32 \ + --libdir=/usr/libx32 \ + --enable-hashes=strong,glibc \ + --enable-obsolete-api=glibc \ + --disable-static \ + --disable-failure-tokens</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">cp -av .libs/libcrypt.so* $LFS/usr/libx32/ && +make DESTDIR=$LFS install-pkgconfigDATA && +ln -svf libxcrypt.pc $LFS/usr/libx32/pkgconfig/libcrypt.pc</userinput></screen> + + </sect2><!-- mx32 --> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-libxcrypt" role="."/></para> + + </sect2> +</sect1> diff --git a/chapter06/binutils-pass2.xml b/chapter06/binutils-pass2.xml index 7b0f1fc20..4521336f8 100644 --- a/chapter06/binutils-pass2.xml +++ b/chapter06/binutils-pass2.xml @@ -58,7 +58,7 @@ cd build</userinput></screen> <para>Prepare Binutils for compilation:</para> -<screen><userinput remap="configure">../configure \ +<screen arch="default"><userinput remap="configure">../configure \ --prefix=/usr \ --build=$(../config.guess) \ --host=$LFS_TGT \ @@ -67,6 +67,16 @@ cd build</userinput></screen> --enable-gprofng=no \ --disable-werror \ --enable-64-bit-bfd</userinput></screen> +<screen arch="ml_32,ml_x32,ml_all"><userinput remap="configure">../configure \ + --prefix=/usr \ + --build=$(../config.guess) \ + --host=$LFS_TGT \ + --disable-nls \ + --enable-shared \ + --enable-gprofng=no \ + --disable-werror \ + --enable-64-bit-bfd \ + --enable-multilib</userinput></screen> <variablelist> <title>The meaning of the new configure options:</title> @@ -88,6 +98,13 @@ cd build</userinput></screen> </listitem> </varlistentry> + <varlistentry arch="ml_32,ml_x32,ml_all"> + <term><parameter>--enable-multilib</parameter></term> + <listitem> + <para>Enables multilib support in bintutils.</para> + </listitem> + </varlistentry> + </variablelist> <para>Compile the package:</para> diff --git a/chapter06/gcc-pass2.xml b/chapter06/gcc-pass2.xml index b342ae484..7b687d1bd 100644 --- a/chapter06/gcc-pass2.xml +++ b/chapter06/gcc-pass2.xml @@ -57,15 +57,23 @@ mv -v gmp-&gmp-version; gmp tar -xf ../mpc-&mpc-version;.tar.gz mv -v mpc-&mpc-version; mpc</userinput></screen> - <para>If building on x86_64, change the default directory name for 64-bit + + <para arch="default">If building on x86_64, change the default directory name for 64-bit libraries to <quote>lib</quote>:</para> -<screen><userinput remap="pre">case $(uname -m) in +<screen arch="default"><userinput remap="pre">case $(uname -m) in x86_64) sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64 ;; esac</userinput></screen> + <para arch="ml_32,ml_x32,ml_all">Change the default directory name for the + libraries:</para> + +<screen arch="ml_32,ml_x32,ml_all"><userinput remap="pre">sed -e '/m64=/s/lib64/lib/' \ + -e '/m32=/s/m32=.*/m32=..\/lib32$(call if_multiarch,:i386-linux-gnu)/' \ + -i.orig gcc/config/i386/t-linux64</userinput></screen> + <para>Override the building rule of libgcc and libstdc++ headers, to allow building these libraries with POSIX threads support:</para> @@ -82,7 +90,7 @@ cd build</userinput></screen> <para>Now prepare GCC for compilation:</para> -<screen><userinput remap="configure">../configure \ +<screen arch="default"><userinput remap="configure">../configure \ --build=$(../config.guess) \ --host=$LFS_TGT \ --target=$LFS_TGT \ @@ -100,6 +108,28 @@ cd build</userinput></screen> --disable-libssp \ --disable-libvtv \ --enable-languages=c,c++</userinput></screen> +<screen arch="ml_32,ml_x32,ml_all"><userinput remap="configure" + arch="ml_32">mlist=m64,m32</userinput><userinput remap="configure" + arch="ml_x32">mlist=m64,mx32</userinput><userinput remap="configure" + arch="ml_all">mlist=m64,m32,mx32</userinput> +<userinput remap="configure">../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 \ + --enable-multilib --with-multilib-list=$mlist \ + --disable-libatomic \ + --disable-libgomp \ + --disable-libquadmath \ + --disable-libsanitizer \ + --disable-libssp \ + --disable-libvtv \ + --enable-languages=c,c++</userinput></screen> <variablelist> <title>The meaning of the new configure options:</title><!-- WIP --> diff --git a/chapter06/ncurses.xml b/chapter06/ncurses.xml index 9e7764ecf..cd2e06744 100644 --- a/chapter06/ncurses.xml +++ b/chapter06/ncurses.xml @@ -189,6 +189,86 @@ echo "INPUT(-lncursesw)" > $LFS/usr/lib/libncurses.so</userinput></screen> </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + <sect2 arch="ml_32,ml_all"> + <title>Building Ncurses - 32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Ncurses for compilation:</para> + +<screen><userinput remap="configure">CC="$LFS_TGT-gcc -m32" \ +CXX="$LFS_TGT-g++ -m32" \ +./configure --prefix=/usr \ + --host=$LFS_TGT32 \ + --build=$(./config.guess) \ + --libdir=/usr/lib32 \ + --mandir=/usr/share/man \ + --with-shared \ + --without-normal \ + --with-cxx-shared \ + --without-debug \ + --without-ada \ + --disable-stripping \ + --enable-widec</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR TIC_PATH=$(pwd)/build/progs/tic install +ln -s libncursesw.so DESTDIR/usr/lib32/libcursesw.so +cp -Rv DESTDIR/usr/lib32/* $LFS/usr/lib32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + <sect2 arch="ml_x32,ml_all"> + <title>Building Ncurses - x32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Ncurses for compilation:</para> + +<screen><userinput remap="configure">CC="$LFS_TGT-gcc -mx32" \ +CXX="$LFS_TGT-g++ -mx32" \ +./configure --prefix=/usr \ + --host=$LFS_TGTX32 \ + --build=$(./config.guess) \ + --libdir=/usr/libx32 \ + --mandir=/usr/share/man \ + --with-shared \ + --without-normal \ + --with-cxx-shared \ + --without-debug \ + --without-ada \ + --disable-stripping \ + --enable-widec</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR TIC_PATH=$(pwd)/build/progs/tic install +ln -s libncursesw.so DESTDIR/usr/libx32/libcursesw.so +cp -Rv DESTDIR/usr/libx32/* $LFS/usr/libx32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 role="content"> <title/> diff --git a/chapter07/changingowner.xml b/chapter07/changingowner.xml index b412bb278..2bc57d304 100644 --- a/chapter07/changingowner.xml +++ b/chapter07/changingowner.xml @@ -38,4 +38,9 @@ case $(uname -m) in x86_64) chown -R root:root $LFS/lib64 ;; esac</userinput></screen> + <para arch="ml_32,ml_x32,ml_all">Some more directories exists for + multilib support. Change their ownership, too:</para> +<screen arch="ml_32,ml_x32,ml_all"><userinput arch="ml_32,ml_all">chown -R root:root $LFS/lib32</userinput> +<userinput arch="ml_x32,ml_all">chown -R root:root $LFS/libx32</userinput></screen> + </sect1> diff --git a/chapter07/cleanup.xml b/chapter07/cleanup.xml index 356f3c34e..24e57a591 100644 --- a/chapter07/cleanup.xml +++ b/chapter07/cleanup.xml @@ -23,7 +23,10 @@ libltdl, and it's known that some .la files can cause BLFS package failures. Remove those files now:</para> -<screen><userinput>find /usr/{lib,libexec} -name \*.la -delete</userinput></screen> +<screen><userinput>find /usr/{lib,libexec} -name \*.la -delete</userinput><userinput arch="ml_32"> +find /usr/lib32 -name \*.la -delete</userinput><userinput arch="ml_x32"> +find /usr/libx32 -name \*.la -delete</userinput><userinput arch="ml_all"> +find /usr/lib{,x}32 -name \*.la -delete</userinput></screen> <para> The current system size is now about 3 GB, however diff --git a/chapter07/creatingdirs.xml b/chapter07/creatingdirs.xml index e2faa08da..a95f3bd57 100644 --- a/chapter07/creatingdirs.xml +++ b/chapter07/creatingdirs.xml @@ -41,6 +41,9 @@ ln -sfv /run/lock /var/lock install -dv -m 0750 /root install -dv -m 1777 /tmp /var/tmp</userinput></screen> + <para arch="ml_32,ml_x32,ml_all">Required directories for multilib + support has already been created while previous installation steps.</para> + <para>Directories are, by default, created with permission mode 755, but this is not desirable everywhere. In the commands above, two changes are made—one to the home directory of user <systemitem diff --git a/chapter07/util-linux.xml b/chapter07/util-linux.xml index 2f88e7d5f..f5d4f7630 100644 --- a/chapter07/util-linux.xml +++ b/chapter07/util-linux.xml @@ -126,6 +126,88 @@ </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of Util-linux - 32-bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Util-linux for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -m32" \ +./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \ + --libdir=/usr/lib32 \ + --host=i686-pc-linux-gnu \ + --docdir=/usr/share/doc/util-linux-&util-linux-version; \ + --disable-chfn-chsh \ + --disable-login \ + --disable-nologin \ + --disable-su \ + --disable-setpriv \ + --disable-runuser \ + --disable-pylibmount \ + --disable-static \ + --without-python \ + runstatedir=/run</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/lib32/* /usr/lib32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of Util-linux - x32-bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Util-linux for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -mx32" \ +./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \ + --libdir=/usr/libx32 \ + --host=x86_64-pc-linux-gnux32 \ + --docdir=/usr/share/doc/util-linux-&util-linux-version; \ + --disable-chfn-chsh \ + --disable-login \ + --disable-nologin \ + --disable-su \ + --disable-setpriv \ + --disable-runuser \ + --disable-pylibmount \ + --disable-static \ + --without-python \ + runstatedir=/run</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/libx32/* /usr/libx32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 role="content"> <title/> diff --git a/chapter08/acl.xml b/chapter08/acl.xml index 6702af90f..a80ed23fc 100644 --- a/chapter08/acl.xml +++ b/chapter08/acl.xml @@ -64,6 +64,70 @@ </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of Acl - 32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Xz for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -m32" ./configure \ + --prefix=/usr \ + --disable-static \ + --libdir=/usr/lib32 \ + --libexecdir=/usr/lib32 \ + --host=i686-pc-linux-gnu</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/lib32/* /usr/lib32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of Acl - x32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Xz for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -mx32" ./configure \ + --prefix=/usr \ + --disable-static \ + --libdir=/usr/libx32 \ + --libexecdir=/usr/libx32 \ + --host=x86_64-pc-linux-gnux32</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/libx32/* /usr/libx32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 id="contents-acl" role="content"> <title>Contents of Acl</title> diff --git a/chapter08/attr.xml b/chapter08/attr.xml index 5272cfcb2..5b6709995 100644 --- a/chapter08/attr.xml +++ b/chapter08/attr.xml @@ -64,6 +64,70 @@ </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of Attr - 32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Attr for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -m32" ./configure \ + --prefix=/usr \ + --disable-static \ + --sysconfdir=/etc \ + --libdir=/usr/lib32 \ + --host=i686-pc-linux-gnu</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/lib32/* /usr/lib32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of Attr - x32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Attr for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -mx32" ./configure \ + --prefix=/usr \ + --disable-static \ + --sysconfdir=/etc \ + --libdir=/usr/libx32 \ + --host=x86_64-pc-linux-gnux32</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/libx32/* /usr/libx32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 id="contents-attr" role="content"> <title>Contents of Attr</title> diff --git a/chapter08/binutils.xml b/chapter08/binutils.xml index 1fd436bd1..8697853e3 100644 --- a/chapter08/binutils.xml +++ b/chapter08/binutils.xml @@ -49,7 +49,7 @@ cd build</userinput></screen> <para>Prepare Binutils for compilation:</para> -<screen><userinput remap="configure">../configure --prefix=/usr \ +<screen arch="default"><userinput remap="configure">../configure --prefix=/usr \ --sysconfdir=/etc \ --enable-gold \ --enable-ld=default \ @@ -58,6 +58,17 @@ cd build</userinput></screen> --disable-werror \ --enable-64-bit-bfd \ --with-system-zlib</userinput></screen> +<screen arch="ml_32,ml_x32,ml_all"><userinput remap="configure">../configure --prefix=/usr \ + --sysconfdir=/etc \ + --enable-gold \ + --enable-ld=default \ + --enable-plugins \ + --enable-shared \ + --disable-werror \ + --enable-64-bit-bfd \ + --with-system-zlib \ + --enable-multilib</userinput></screen> + <variablelist> <title>The meaning of the configure parameters:</title> @@ -92,6 +103,13 @@ cd build</userinput></screen> </listitem> </varlistentry> + <varlistentry arch="ml_32,ml_x32,ml_all"> + <term><parameter>--enable-multilib</parameter></term> + <listitem> + <para>Enables multilib support in bintutils.</para> + </listitem> + </varlistentry> + <varlistentry> <term><parameter>--with-system-zlib</parameter></term> <listitem> diff --git a/chapter08/bzip2.xml b/chapter08/bzip2.xml index e57fe61c4..4418989da 100644 --- a/chapter08/bzip2.xml +++ b/chapter08/bzip2.xml @@ -103,6 +103,60 @@ done</userinput></screen> </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of Bzip2 - 32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make clean</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">sed -e "s/^CC=.*/CC=gcc -m32/" -i Makefile{,-libbz2_so} +make -f Makefile-libbz2_so +make libbz2.a</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">install -Dm755 libbz2.so.1.0.8 /usr/lib32/libbz2.so.1.0.8 +ln -sf libbz2.so.1.0.8 /usr/lib32/libbz2.so +ln -sf libbz2.so.1.0.8 /usr/lib32/libbz2.so.1 +ln -sf libbz2.so.1.0.8 /usr/lib32/libbz2.so.1.0 +install -Dm644 libbz2.a /usr/lib32/libbz2.a</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of Bzip2 - x32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make clean</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">sed -e "s/^CC=.*/CC=gcc -mx32/" -i Makefile{,-libbz2_so} +make -f Makefile-libbz2_so +make libbz2.a</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">install -Dm755 libbz2.so.1.0.8 /usr/libx32/libbz2.so.1.0.8 +ln -sf libbz2.so.1.0.8 /usr/libx32/libbz2.so +ln -sf libbz2.so.1.0.8 /usr/libx32/libbz2.so.1 +ln -sf libbz2.so.1.0.8 /usr/libx32/libbz2.so.1.0 +install -Dm644 libbz2.a /usr/libx32/libbz2.a</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 id="contents-bzip2" role="content"> <title>Contents of Bzip2</title> diff --git a/chapter08/chapter08.xml b/chapter08/chapter08.xml index 3f356d39e..fb2682132 100644 --- a/chapter08/chapter08.xml +++ b/chapter08/chapter08.xml @@ -33,6 +33,7 @@ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gmp.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="mpfr.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="mpc.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="isl.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="attr.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="acl.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="libcap.xml"/> diff --git a/chapter08/cleanup.xml b/chapter08/cleanup.xml index daa38f597..fc3b55aef 100644 --- a/chapter08/cleanup.xml +++ b/chapter08/cleanup.xml @@ -21,7 +21,9 @@ by libltdl, and it's known that some .la files can break BLFS package builds. Remove those files now:</para> -<screen><userinput>find /usr/lib /usr/libexec -name \*.la -delete</userinput></screen> +<screen><userinput>find /usr/lib /usr/libexec -name \*.la -delete</userinput><userinput arch="ml_32,ml_all"> +find /usr/lib32 -name \*.la -delete</userinput><userinput arch="ml_x32,ml_all"> +find /usr/libx32 -name \*.la -delete</userinput></screen> <para>For more information about libtool archive files, see the <ulink url="&blfs-book;introduction/la-files.html">BLFS section "About Libtool diff --git a/chapter08/expat.xml b/chapter08/expat.xml index 86dd1d287..fd9654eea 100644 --- a/chapter08/expat.xml +++ b/chapter08/expat.xml @@ -65,6 +65,72 @@ </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of Expat - 32bit</title> + + <para>Clean previous build but keep precompiled doc because it + cannot be rebuilt in this stage of the system:</para> + +<screen><userinput remap="pre">sed -e "/^am__append_1/ s/doc//" -i Makefile +make clean</userinput></screen> + + <para>Prepare Expat for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -m32" ./configure \ + --prefix=/usr \ + --disable-static \ + --libdir=/usr/lib32 \ + --host=i686-pc-linux-gnu</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/lib32/* /usr/lib32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of Expat - x32bit</title> + + <para>Clean previous build but keep precompiled doc because it + cannot be rebuilt in this stage of the system:</para> + +<screen><userinput remap="pre">sed -e "/^am__append_1/ s/doc//" -i Makefile +make clean</userinput></screen> + + <para>Prepare Expat for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -mx32" ./configure \ + --prefix=/usr \ + --disable-static \ + --libdir=/usr/libx32 \ + --host=x86_64-pc-linux-gnux32</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/libx32/* /usr/libx32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 id="contents-expat" role="content"> <title>Contents of Expat</title> diff --git a/chapter08/file.xml b/chapter08/file.xml index eb9f41a2b..1b1a1c0a8 100644 --- a/chapter08/file.xml +++ b/chapter08/file.xml @@ -59,6 +59,65 @@ </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of File - 32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare File for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -m32" ./configure \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --host=i686-pc-linux-gnu</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/lib32/* /usr/lib32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of File - x32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare File for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -mx32" ./configure \ + --prefix=/usr \ + --libdir=/usr/libx32 \ + --host=x86_64-pc-linux-gnux32</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/libx32/* /usr/libx32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- mx32 --> <sect2 id="contents-file" role="content"> <title>Contents of File</title> diff --git a/chapter08/gcc.xml b/chapter08/gcc.xml index 693d6e975..644e84339 100644 --- a/chapter08/gcc.xml +++ b/chapter08/gcc.xml @@ -57,13 +57,20 @@ <para>If building on x86_64, change the default directory name for 64-bit libraries to <quote>lib</quote>:</para> -<screen><userinput remap="pre">case $(uname -m) in +<screen arch="default"><userinput remap="pre">case $(uname -m) in x86_64) sed -e '/m64=/s/lib64/lib/' \ -i.orig gcc/config/i386/t-linux64 ;; esac</userinput></screen> + <para arch="ml_32,ml_x32,ml_all">Change the default directory name for 64-bit + libraries to <quote>lib</quote>:</para> + +<screen arch="ml_32,ml_x32,ml_all"><userinput remap="pre">sed -e '/m64=/s/lib64/lib/' \ + -e '/m32=/s/m32=.*/m32=..\/lib32$(call if_multiarch,:i386-linux-gnu)/' \ + -i.orig gcc/config/i386/t-linux64</userinput></screen> + <para>The GCC documentation recommends building GCC in a dedicated build directory:</para> <screen><userinput remap="pre">mkdir -v build @@ -71,7 +78,7 @@ cd build</userinput></screen> <para>Prepare GCC for compilation:</para> -<screen><userinput remap="configure">../configure --prefix=/usr \ +<screen arch="default"><userinput remap="configure">../configure --prefix=/usr \ LD=ld \ --enable-languages=c,c++ \ --enable-default-pie \ @@ -80,6 +87,20 @@ cd build</userinput></screen> --disable-bootstrap \ --disable-fixincludes \ --with-system-zlib</userinput></screen> +<screen arch="ml_32,ml_x32,ml_all"><userinput remap="configure" + arch="ml_32" >mlist=m64,m32</userinput><userinput remap="configure" + arch="ml_x32">mlist=m64,mx32</userinput><userinput remap="configure" + arch="ml_all">mlist=m64,m32,mx32</userinput> +<userinput remap="configure">../configure --prefix=/usr \ + LD=ld \ + --enable-languages=c,c++ \ + --enable-default-pie \ + --enable-default-ssp \ + --enable-multilib \ + --with-multilib-list=$mlist \ + --disable-bootstrap \ + --disable-fixincludes \ + --with-system-zlib</userinput></screen> <para>GCC supports seven different computer languages, but the prerequisites for most of them have not yet been installed. See the @@ -303,10 +324,11 @@ SEARCH_DIR("/usr/local/lib") SEARCH_DIR("/lib") SEARCH_DIR("/usr/lib");</computeroutput></screen> - <para>A 32-bit system may use a few other directories. For example, here + <para arch="default">A 32-bit system may use a few other directories. For example, here is the output from an i686 machine:</para> -<screen><computeroutput>SEARCH_DIR("/usr/i686-pc-linux-gnu/lib32") +<!-- not using entities here as the dir names has nothing to do with multilib --> +<screen arch="default"><computeroutput>SEARCH_DIR("/usr/i686-pc-linux-gnu/lib32") SEARCH_DIR("/usr/local/lib32") SEARCH_DIR("/lib32") SEARCH_DIR("/usr/lib32") diff --git a/chapter08/glibc.xml b/chapter08/glibc.xml index 3932a2147..f12366af7 100644 --- a/chapter08/glibc.xml +++ b/chapter08/glibc.xml @@ -69,12 +69,19 @@ cd build</userinput></screen> <para>Prepare Glibc for compilation:</para> -<screen><userinput remap="configure">../configure --prefix=/usr \ +<screen arch="default"><userinput remap="configure">../configure --prefix=/usr \ --disable-werror \ --enable-kernel=&min-kernel; \ --enable-stack-protector=strong \ --with-headers=/usr/include \ libc_cv_slibdir=/usr/lib</userinput></screen> +<screen arch="ml_32,ml_x32,ml_all"><userinput remap="configure">../configure --prefix=/usr \ + --disable-werror \ + --enable-kernel=&min-kernel; \ + --enable-stack-protector=strong \ + --with-headers=/usr/include \ + --enable-multi-arch \ + libc_cv_slibdir=/usr/lib</userinput></screen> <variablelist> <title>The meaning of the configure options:</title> @@ -468,6 +475,156 @@ mkdir -pv /etc/ld.so.conf.d</userinput></screen> </sect3> </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + <sect2 arch="ml_32,ml_all"> + <title>Building Glibc - 32bit</title> + + <para>Now recompile for m32. The extracted source can be + reused but needs to be cleaned before installing the m32 + version of Glibc.</para> + + <para>Clear the build directory and remove artefacts from + previous build:</para> + +<screen><userinput remap="pre">rm -rf ./* +find .. -name "*.a" -delete</userinput></screen> + + <para>Configure Glibc for m32 with the following commands:</para> + +<screen><userinput remap="configure">CC="gcc -m32" CXX="g++ -m32" \ +../configure \ + --prefix=/usr \ + --host=i686-pc-linux-gnu \ + --build=$(../scripts/config.guess) \ + --enable-kernel=&min-kernel; \ + --with-headers=/usr/include \ + --enable-multi-arch \ + --libdir=/usr/lib32 \ + --libexecdir=/usr/lib32 \ + libc_cv_slibdir=/usr/lib32</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -a DESTDIR/usr/lib32/* /usr/lib32/ +install -vm644 DESTDIR/usr/include/gnu/{lib-names,stubs}-32.h \ + /usr/include/gnu/</userinput></screen> +<!-- no longer required as they are created in chap5 +ln -svf ../lib32/ld-linux.so.2 /lib/ld-linux.so.2 +--> + + <para>Add the library name to the dynamic loader config:</para> + +<screen role="install"><userinput>echo "/usr/lib32" >> /etc/ld.so.conf</userinput></screen> + + <caution> + <para>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:</para> + +<screen><userinput>echo 'int main(){}' > dummy.c +gcc -m32 dummy.c +readelf -l a.out | grep '/ld-linux'</userinput></screen> + + <para>If everything is working correctly, there should be no errors, + and the output of the last command will be of the form:</para> + +<screen><computeroutput>[Requesting program interpreter: /lib/ld-linux.so.2]</computeroutput></screen> + + <para>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 + where the problem is and correct it. This issue must be resolved before + continuing on.</para> + + <para>Once all is well, clean up the test files:</para> + +<screen><userinput>rm -v dummy.c a.out</userinput></screen> + + </caution> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all"> + <title>Building Glibc - x32bit</title> + + <para>Now recompile for mx32. The extracted source can be + reused but needs to be cleaned before installing the mx32 + version of Glibc.</para> + + <para>Clear the build directory and remove artefacts from + previous build:</para> + +<screen><userinput remap="pre">rm -rf ./* +find .. -name "*.a" -delete</userinput></screen> + + <para>Configure Glibc for mx32 with the following commands:</para> + +<screen><userinput remap="configure">CC="gcc -mx32" CXX="g++ -mx32" \ +../configure \ + --prefix=/usr \ + --host=x86_64-pc-linux-gnux32 \ + --build=$(../scripts/config.guess) \ + --enable-kernel=&min-kernel; \ + --with-headers=/usr/include \ + --enable-multi-arch \ + --libdir=/usr/libx32 \ + --libexecdir=/usr/libx32 \ + libc_cv_slibdir=/usr/libx32</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -a DESTDIR/usr/libx32/* /usr/libx32/ +install -vm644 DESTDIR/usr/include/gnu/{lib-names,stubs}-x32.h \ + /usr/include/gnu/</userinput></screen> +<!-- no longer required as they are created in chap5 +ln -svf ../libx32/ld-linux-x32.so.2 /lib/ld-linux-x32.so.2 +--> + <para>Add the library name to the dynamic loader config:</para> + +<screen role="install"><userinput>echo "/usr/libx32" >> /etc/ld.so.conf</userinput></screen> + + <caution> + <para>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:</para> + +<screen><userinput>echo 'int main(){}' > dummy.c +gcc -mx32 dummy.c +readelf -l a.out | grep '/ld-linux-x32'</userinput></screen> + + <para>If everything is working correctly, there should be no errors, + and the output of the last command will be of the form:</para> + +<screen><computeroutput>[Requesting program interpreter: /libx32/ld-linux-x32.so.2]</computeroutput></screen> + + <para>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 + where the problem is and correct it. This issue must be resolved before + continuing on.</para> + + <para>Once all is well, clean up the test files:</para> + +<screen><userinput>rm -v dummy.c a.out</userinput></screen> + + </caution> + + </sect2><!-- mx32 --> + <sect2 id="contents-glibc" role="content"> <title>Contents of Glibc</title> diff --git a/chapter08/gmp.xml b/chapter08/gmp.xml index 05e16722a..c886cb992 100644 --- a/chapter08/gmp.xml +++ b/chapter08/gmp.xml @@ -122,6 +122,138 @@ make install-html</userinput></screen> </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of GMP - 32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Generic libraries can be created by running + the following:</para> + +<screen role="nodump"><userinput remap="pre">cp -v configfsf.guess config.guess +cp -v configfsf.sub config.sub</userinput></screen> + + <para>Prepare GMP for compilation:</para> + +<screen><userinput remap="configure">ABI="32" \ +CFLAGS="-m32 -O2 -pedantic -fomit-frame-pointer -mtune=generic -march=i686" \ +CXXFLAGS="$CFLAGS" \ +PKG_CONFIG_PATH="/usr/lib32/pkgconfig" \ +./configure \ + --host=i686-pc-linux-gnu \ + --prefix=/usr \ + --disable-static \ + --enable-cxx \ + --libdir=/usr/lib32 \ + --includedir=/usr/include/m32/gmp</userinput></screen> + + <variablelist> + <title>The meaning of the new configure options:</title> + + <varlistentry> + <term><parameter>--includedir=/usr/include/m32/gmp</parameter></term> + <listitem> + <para>Some definitions in gmp.h differs for each arch but + has same name. Therefore, the headers must be separated from + each other.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">sed -i 's/$(exec_prefix)\/include/$\(includedir\)/' Makefile +make</userinput></screen> + + <important> + <para>The test suite for GMP in this section is considered critical. + Do not skip it under any circumstances.</para> + </important> + + <para>Test the results:</para> + +<screen><userinput remap="test">make check 2>&1 | tee gmp-check-log</userinput></screen> + + <para>Ensure that all 197 tests in the test suite passed. + Check the results by issuing the following command:</para> + +<screen><userinput remap="test">awk '/# PASS:/{total+=$3} ; END{print total}' gmp-check-log</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/lib32/* /usr/lib32 +cp -Rv DESTDIR/usr/include/m32/* /usr/include/m32/ +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of GMP - x32-bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Generic libraries can be created by running + the following:</para> + +<screen role="nodump"><userinput remap="pre">cp -v configfsf.guess config.guess +cp -v configfsf.sub config.sub</userinput></screen> + + <para>Prepare GMP for compilation:</para> + +<screen><userinput remap="configure">ABI="x32" \ +CFLAGS="-mx32 -O2 -pedantic -fomit-frame-pointer -mtune=generic -march=x86-64" \ +CXXFLAGS="$CFLAGS" \ +PKG_CONFIG_PATH="/usr/libx32/pkgconfig" \ +./configure \ + --host=x86_64-pc-linux-gnux32 \ + --prefix=/usr \ + --disable-static \ + --enable-cxx \ + --libdir=/usr/libx32 \ + --includedir=/usr/include/mx32/gmp</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">sed -i 's/$(exec_prefix)\/include/$\(includedir\)/' Makefile +make</userinput></screen> + + <important> + <para>The test suite for GMP in this section is considered critical. + Do not skip it under any circumstances.</para> + </important> + + <para>Test the results:</para> + +<screen><userinput remap="test">make check 2>&1 | tee gmp-check-log</userinput></screen> + + <para>Ensure that all 197 tests in the test suite passed. + Check the results by issuing the following command:</para> + +<screen><userinput remap="test">awk '/# PASS:/{total+=$3} ; END{print total}' gmp-check-log</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/libx32/* /usr/libx32 +cp -Rv DESTDIR/usr/include/mx32/* /usr/include/mx32/ +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 id="contents-gmp" role="content"> <title>Contents of GMP</title> diff --git a/chapter08/isl.xml b/chapter08/isl.xml new file mode 100644 index 000000000..7d8c8cc45 --- /dev/null +++ b/chapter08/isl.xml @@ -0,0 +1,113 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-isl" role="wrap" arch="ml_32,ml_x32,ml_all"> + <?dbhtml filename="isl.html"?> + + <sect1info condition="script"> + <productname>isl</productname> + <productnumber>&isl-version;</productnumber> + <address>&isl-url;</address> + </sect1info> + + <title>ISL-&isl-version;</title> + + <indexterm zone="ch-system-isl"> + <primary sortas="a-ISL">ISL</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>ISL is a thread-safe C library for manipulating sets and relations + of integer points bounded by affine constraints.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&isl-fin-sbu;</seg> + <seg>&isl-fin-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of ISL</title> + + <para>Prepare ISL for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --disable-static \ + --docdir=/usr/share/doc/isl-&isl-version;</userinput></screen> + + <variablelist> + <title>The meaning of the new configure options:</title> + + <varlistentry> + <term><parameter>--docdir=/usr/share/doc/isl-&isl-version;</parameter></term> + <listitem> + <para>This variable specifies the correct place for the + documentation.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package and its documentation:</para> + +<screen><userinput remap="install">make install +install -vd /usr/share/doc/isl-&isl-version; +install -m644 doc/{CodingStyle,manual.pdf,SubmittingPatches,user.pod} \ + /usr/share/doc/isl-&isl-version;</userinput></screen> + + <para>Finally, move a misplaced file:</para> + +<screen><userinput remap="install">mkdir -pv /usr/share/gdb/auto-load/usr/lib +mv -v /usr/lib/libisl*gdb.py /usr/share/gdb/auto-load/usr/lib</userinput></screen> + + </sect2> + + <sect2 id="contents-isl" role="content"> + <title>Contents of ISL</title> + + <segmentedlist> + <segtitle>Installed Libraries</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg>libisl.so</seg> + <seg>/usr/share/doc/isl-&isl-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="libisl"> + <term><filename class="libraryfile">libisl</filename></term> + <listitem> + <para>Contains integer set manipulation functions</para> + <indexterm zone="ch-system-isl libisl"> + <primary sortas="c-libisl">libisl</primary> + </indexterm> + </listitem> + </varlistentry> + </variablelist> + + </sect2> + +</sect1> + diff --git a/chapter08/kmod.xml b/chapter08/kmod.xml index 728f59bc7..19df8560d 100644 --- a/chapter08/kmod.xml +++ b/chapter08/kmod.xml @@ -98,6 +98,82 @@ ln -sfv kmod /usr/bin/lsmod</userinput></screen> </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of Kmod - 32bit</title> + + <para>Clean previous build but keep man pages as they cannot + be recreated since xsltproc isn't installed yet:</para> + +<screen><userinput remap="pre">sed -e "s/^CLEANFILES =.*/CLEANFILES =/" -i man/Makefile +make clean</userinput></screen> + + <para>Prepare Kmod for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -m32" ./configure \ + --host=i686-pc-linux-gnu \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --sysconfdir=/etc \ + --with-openssl \ + --with-xz \ + --with-zstd \ + --with-zlib \ + --with-rootlibdir=/usr/lib32</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/lib32/* /usr/lib32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of Kmod - x32bit</title> + + <para>Clean previous build but keep man pages as they cannot + be recreated since xsltproc isn't installed yet:</para> + +<screen><userinput remap="pre">sed -e "s/^CLEANFILES =.*/CLEANFILES =/" -i man/Makefile +make clean</userinput></screen> + + <para>Prepare Kmod for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -mx32" ./configure \ + --host=x86_64-pc-linux-gnux32 \ + --prefix=/usr \ + --libdir=/usr/libx32 \ + --sysconfdir=/etc \ + --with-openssl \ + --with-xz \ + --with-zstd \ + --with-zlib \ + --with-rootlibdir=/usr/libx32</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/libx32/* /usr/libx32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 id="contents-kmod" role="content"> <title>Contents of Kmod</title> diff --git a/chapter08/libcap.xml b/chapter08/libcap.xml index 367e05c3f..631afc999 100644 --- a/chapter08/libcap.xml +++ b/chapter08/libcap.xml @@ -75,6 +75,56 @@ </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of Libcap - 32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make CC="gcc -m32 -march=i686"</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make CC="gcc -m32 -march=i686" lib=lib32 prefix=$PWD/DESTDIR/usr -C libcap install +cp -Rv DESTDIR/usr/lib32/* /usr/lib32 +sed -e "s|^libdir=.*|libdir=/usr/lib32|" -i /usr/lib32/pkgconfig/lib{cap,psx}.pc +chmod -v 755 /usr/lib32/libcap.so.&libcap-version; +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of Libcap - x32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make CC="gcc -mx32 -march=x86-64"</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make CC="gcc -mx32 -march=x86-64" lib=libx32 prefix=$PWD/DESTDIR/usr -C libcap install +cp -Rv DESTDIR/usr/libx32/* /usr/libx32 +sed -e "s|^libdir=.*|libdir=/usr/libx32|" -i /usr/libx32/pkgconfig/lib{cap,psx}.pc +chmod -v 755 /usr/libx32/libcap.so.&libcap-version; +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 id="contents-libcap" role="content"> <title>Contents of Libcap</title> diff --git a/chapter08/libelf.xml b/chapter08/libelf.xml index 23b66222a..ca062e58e 100644 --- a/chapter08/libelf.xml +++ b/chapter08/libelf.xml @@ -66,6 +66,72 @@ rm /usr/lib/libelf.a</userinput></screen> </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of Libelf - 32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Libtool for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -m32" ./configure \ + --host=i686-pc-linux-gnu \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --disable-debuginfod \ + --enable-libdebuginfod=dummy</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR -C libelf install +install -vDm644 config/libelf.pc DESTDIR/usr/lib32/pkgconfig/libelf.pc +cp -Rv DESTDIR/usr/lib32/* /usr/lib32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of Libelf - x32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Libtool for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -mx32" ./configure \ + --host=x86_64-pc-linux-gnux32 \ + --prefix=/usr \ + --libdir=/usr/libx32 \ + --disable-debuginfod \ + --enable-libdebuginfod=dummy</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR -C libelf install +install -vDm644 config/libelf.pc DESTDIR/usr/libx32/pkgconfig/libelf.pc +cp -Rv DESTDIR/usr/libx32/* /usr/libx32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 id="contents-elfutils" role="content"> <title>Contents of Libelf</title> diff --git a/chapter08/libffi.xml b/chapter08/libffi.xml index 4c6d2830f..22d882db8 100644 --- a/chapter08/libffi.xml +++ b/chapter08/libffi.xml @@ -96,6 +96,78 @@ </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of Libffi - 32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Libffi for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -m32" CXX="g++ -m32" ./configure \ + --host=i686-pc-linux-gnu \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --disable-static \ + --with-gcc-arch=i686</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To test the results, issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/lib32/* /usr/lib32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of Libffi - x32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Libffi for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -mx32" CXX="g++ -mx32" ./configure \ + --host=x86_64-unknown-linux-gnux32 \ + --prefix=/usr \ + --libdir=/usr/libx32 \ + --disable-static \ + --with-gcc-arch=x86_64</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To test the results, issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/libx32/* /usr/libx32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 id="contents-libffi" role="content"> <title>Contents of Libffi</title> @@ -126,4 +198,3 @@ </sect2> </sect1> - diff --git a/chapter08/libtool.xml b/chapter08/libtool.xml index d21d0b751..63a50ce3e 100644 --- a/chapter08/libtool.xml +++ b/chapter08/libtool.xml @@ -78,6 +78,65 @@ </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of Libtool - 32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Libtool for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -m32" ./configure \ + --host=i686-pc-linux-gnu \ + --prefix=/usr \ + --libdir=/usr/lib32</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/lib32/* /usr/lib32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of Libtool - x32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Libtool for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -mx32" ./configure \ + --host=x86_64-pc-linux-gnux32 \ + --prefix=/usr \ + --libdir=/usr/libx32</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/libx32/* /usr/libx32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- mx32 --> <sect2 id="contents-libtool" role="content"> <title>Contents of Libtool</title> diff --git a/chapter08/libxcrypt.xml b/chapter08/libxcrypt.xml index 3fb59941d..0fec9b7f5 100644 --- a/chapter08/libxcrypt.xml +++ b/chapter08/libxcrypt.xml @@ -115,6 +115,72 @@ cp -av .libs/libcrypt.so.1* /usr/lib</userinput></screen> </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of Libxcrypt - 32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare File for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -m32" \ +./configure --prefix=/usr \ + --host=i686-pc-linux-gnu \ + --libdir=/usr/lib32 \ + --enable-hashes=strong,glibc \ + --enable-obsolete-api=glibc \ + --disable-static \ + --disable-failure-tokens</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">cp -av .libs/libcrypt.so* /usr/lib32/ && +make install-pkgconfigDATA && +ln -svf libxcrypt.pc /usr/lib32/pkgconfig/libcrypt.pc</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of Libxcrypt - x32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare File for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -mx32" \ +./configure --prefix=/usr \ + --host=x86_64-pc-linux-gnux32 \ + --libdir=/usr/libx32 \ + --enable-hashes=strong,glibc \ + --enable-obsolete-api=glibc \ + --disable-static \ + --disable-failure-tokens</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">cp -av .libs/libcrypt.so* /usr/libx32/ && +make install-pkgconfigDATA && +ln -svf libxcrypt.pc /usr/libx32/pkgconfig/libcrypt.pc</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 id="contents-libxcrypt" role="content"> <title>Contents of Libxcrypt</title> diff --git a/chapter08/ncurses.xml b/chapter08/ncurses.xml index b51099001..626acbfbe 100644 --- a/chapter08/ncurses.xml +++ b/chapter08/ncurses.xml @@ -171,10 +171,11 @@ ln -sfv libncurses.so /usr/lib/libcurses.so</userinput></screen> following commands:</para> <screen role="nodump"><userinput>make distclean -./configure --prefix=/usr \ - --with-shared \ - --without-normal \ - --without-debug \ +./configure --prefix=/usr \ + --with-shared \ + --without-normal \ + --with-cxx-shared \ + --without-debug \ --without-cxx-binding \ --with-abi-version=5 make sources libs @@ -183,6 +184,97 @@ cp -av lib/lib*.so.5* /usr/lib</userinput></screen> </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + <sect2 arch="ml_32,ml_all"> + <title>Building Ncurses - 32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Ncurses for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -m32" CXX="g++ -m32" \ +./configure --prefix=/usr \ + --host=i686-pc-linux-gnu \ + --libdir=/usr/lib32 \ + --mandir=/usr/share/man \ + --with-shared \ + --without-debug \ + --without-normal \ + --with-cxx-shared \ + --enable-pc-files \ + --enable-widec \ + --with-pkg-config-libdir=/usr/lib32/pkgconfig</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +mkdir -p DESTDIR/usr/lib32/pkgconfig +for lib in ncurses form panel menu ; do + rm -vf DESTDIR/usr/lib32/lib${lib}.so + echo "INPUT(-l${lib}w)" > DESTDIR/usr/lib32/lib${lib}.so + ln -svf ${lib}w.pc DESTDIR/usr/lib32/pkgconfig/$lib.pc +done +rm -vf DESTDIR/usr/lib32/libcursesw.so +echo "INPUT(-lncursesw)" > DESTDIR/usr/lib32/libcursesw.so +ln -sfv libncurses.so DESTDIR/usr/lib32/libcurses.so +cp -Rv DESTDIR/usr/lib32/* /usr/lib32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + <sect2 arch="ml_x32,ml_all"> + <title>Building Ncurses - x32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Ncurses for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -mx32" CXX="g++ -mx32" \ +./configure --prefix=/usr \ + --host=x86_64-pc-linux-gnux32 \ + --libdir=/usr/libx32 \ + --mandir=/usr/share/man \ + --with-shared \ + --without-debug \ + --without-normal \ + --enable-pc-files \ + --enable-widec \ + --with-pkg-config-libdir=/usr/libx32/pkgconfig</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +mkdir -p DESTDIR/usr/libx32/pkgconfig +for lib in ncurses form panel menu ; do + rm -vf DESTDIR/usr/libx32/lib${lib}.so + echo "INPUT(-l${lib}w)" > DESTDIR/usr/libx32/lib${lib}.so + ln -svf ${lib}w.pc DESTDIR/usr/libx32/pkgconfig/$lib.pc +done +rm -vf DESTDIR/usr/libx32/libcursesw.so +echo "INPUT(-lncursesw)" > DESTDIR/usr/libx32/libcursesw.so +ln -sfv libncurses.so DESTDIR/usr/libx32/libcurses.so +cp -Rv DESTDIR/usr/libx32/* /usr/libx32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 id="contents-ncurses" role="content"> <title>Contents of Ncurses</title> diff --git a/chapter08/openssl.xml b/chapter08/openssl.xml index 40a769311..f466bd5f1 100644 --- a/chapter08/openssl.xml +++ b/chapter08/openssl.xml @@ -126,6 +126,70 @@ make MANSUFFIX=ssl install</userinput></screen> </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of OpenSSL - 32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare OpenSSL for compilation:</para> + +<screen><userinput remap="configure">./config --prefix=/usr \ + --openssldir=/etc/ssl \ + --libdir=lib32 \ + shared \ + zlib-dynamic \ + linux-x86</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/lib32/* /usr/lib32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of OpenSSL - x32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare OpenSSL for compilation:</para> + +<screen><userinput remap="configure">./config --prefix=/usr \ + --openssldir=/etc/ssl \ + --libdir=libx32 \ + shared \ + zlib-dynamic \ + linux-x32</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/libx32/* /usr/libx32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 id="contents-openssl" role="content"> <title>Contents of OpenSSL</title> diff --git a/chapter08/pkgconf.xml b/chapter08/pkgconf.xml index fd61b4d40..841ba1ca2 100644 --- a/chapter08/pkgconf.xml +++ b/chapter08/pkgconf.xml @@ -71,7 +71,43 @@ <screen><userinput remap="install">ln -sv pkgconf /usr/bin/pkg-config ln -sv pkgconf.1 /usr/share/man/man1/pkg-config.1</userinput></screen> - +<!-- + <para arch="ml_32,ml_x32,ml_all"> + For better support of the multilib platform create some + additional files by executing the following commands: + </para> + +<screen arch="ml_32,ml_x32,ml_all"><userinput remap="install">ln -sv pkgconf /usr/bin/i686-pc-linux-gnu-pkg-config +ln -sv pkgconf /usr/bin/x86_64-pc-linux-gnux32-pkg-config +ln -sv pkgconf /usr/bin/x86_64-pc-linux-gnu-pkg-config + +mkdir -pv /usr/share/pkgconfig/personality.d + +cat > /usr/share/pkgconfig/personality.d/i686-pc-linux-gnu.personality <<EOF +Triplet: i686-pc-linux-gnu +SysrootDir: / +DefaultSearchPaths: /usr/lib32/pkgconfig:/usr/share/pkgconfig +SystemIncludePaths: /usr/include +SystemLibraryPaths: /usr/lib32 +EOF + +cat > /usr/share/pkgconfig/personality.d/x86_64-pc-linux-gnux32.personality <<EOF +Triplet: x86_64-pc-linux-gnux32 +SysrootDir: / +DefaultSearchPaths: /usr/libx32/pkgconfig:/usr/share/pkgconfig +SystemIncludePaths: /usr/include +SystemLibraryPaths: /usr/libx32 +EOF + +cat > /usr/share/pkgconfig/personality.d/x86_64-pc-linux-gnu.personality <<EOF +Triplet: x86_64-pc-linux-gnu +SysrootDir: / +DefaultSearchPaths: /usr/lib/pkgconfig:/usr/share/pkgconfig +SystemIncludePaths: /usr/include +SystemLibraryPaths: /usr/lib +EOF +</userinput></screen> +--> </sect2> <sect2 id="contents-pkgconf" role="content"> diff --git a/chapter08/readline.xml b/chapter08/readline.xml index ea073308d..c885b5f9c 100644 --- a/chapter08/readline.xml +++ b/chapter08/readline.xml @@ -104,6 +104,70 @@ sed -i '/{OLDSUFF}/c:' support/shlib-install</userinput></screen> </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of Readline - 32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Readline for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -m32" ./configure \ + --host=i686-pc-linux-gnu \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --disable-static \ + --with-curses</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make SHLIB_LIBS="-lncursesw"</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make SHLIB_LIBS="-lncursesw" DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/lib32/* /usr/lib32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of Readline - x32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Readline for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -mx32" ./configure \ + --host=x86_64-pc-linux-gnux32 \ + --prefix=/usr \ + --libdir=/usr/libx32 \ + --disable-static \ + --with-curses</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make SHLIB_LIBS="-lncursesw"</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make SHLIB_LIBS="-lncursesw" DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/libx32/* /usr/libx32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 id="contents-readline" role="content"> <title>Contents of Readline</title> diff --git a/chapter08/stripping.xml b/chapter08/stripping.xml index 9e71f4382..d07514225 100644 --- a/chapter08/stripping.xml +++ b/chapter08/stripping.xml @@ -76,7 +76,6 @@ libatomic.so.&libatomic-version;" cd /usr/lib - for LIB in $save_usrlib; do objcopy --only-keep-debug $LIB $LIB.dbg cp $LIB /tmp/$LIB @@ -84,7 +83,27 @@ for LIB in $save_usrlib; do objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB install -vm755 /tmp/$LIB /usr/lib rm /tmp/$LIB -done +done</userinput> +<userinput arch="ml_32,ml_all"> +cd /usr/lib32 +for LIB in $save_usrlib; do + objcopy --only-keep-debug $LIB $LIB.dbg + cp $LIB /tmp/$LIB + strip --strip-unneeded /tmp/$LIB + objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB + install -vm755 /tmp/$LIB /usr/lib32 + rm /tmp/$LIB +done</userinput> +<userinput arch="ml_x32,ml_all"> +cd /usr/libx32 +for LIB in $save_usrlib; do + objcopy --only-keep-debug $LIB $LIB.dbg + cp $LIB /tmp/$LIB + strip --strip-unneeded /tmp/$LIB + objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB + install -vm755 /tmp/$LIB /usr/libx32 + rm /tmp/$LIB +done</userinput><userinput> online_usrbin="bash find strip" online_usrlib="libbfd-&binutils-version;.so @@ -108,7 +127,19 @@ for LIB in $online_usrlib; do strip --strip-unneeded /tmp/$LIB install -vm755 /tmp/$LIB /usr/lib rm /tmp/$LIB -done +done</userinput><userinput arch="ml_32,ml_all"> +for LIB in $online_usrlib; do + cp /usr/lib32/$LIB /tmp/$LIB + strip --strip-unneeded /tmp/$LIB + install -vm755 /tmp/$LIB /usr/lib32 + rm /tmp/$LIB +done</userinput><userinput arch="ml_x32,ml_all"> +for LIB in $online_usrlib; do + cp /usr/libx32/$LIB /tmp/$LIB + strip --strip-unneeded /tmp/$LIB + install -vm755 /tmp/$LIB /usr/libx32 + rm /tmp/$LIB +done</userinput><userinput> for i in $(find /usr/lib -type f -name \*.so* ! -name \*dbg) \ $(find /usr/lib -type f -name \*.a) \ @@ -119,7 +150,25 @@ for i in $(find /usr/lib -type f -name \*.so* ! -name \*dbg) \ * ) strip --strip-unneeded $i ;; esac -done +done</userinput><userinput arch="ml_32,ml_all"> +for i in $(find /usr/lib32 -type f -name \*.so* ! -name \*dbg) \ + $(find /usr/lib32 -type f -name \*.a); do + case "$online_usrbin $online_usrlib $save_usrlib" in + *$(basename $i)* ) + ;; + * ) strip --strip-unneeded $i + ;; + esac +done</userinput><userinput arch="ml_x32,ml_all"> +for i in $(find /usr/libx32 -type f -name \*.so* ! -name \*dbg) \ + $(find /usr/libx32 -type f -name \*.a); do + case "$online_usrbin $online_usrlib $save_usrlib" in + *$(basename $i)* ) + ;; + * ) strip --strip-unneeded $i + ;; + esac +done</userinput><userinput> unset BIN LIB save_usrlib online_usrbin online_usrlib </userinput></screen> diff --git a/chapter08/systemd.xml b/chapter08/systemd.xml index 63003ac68..ea77f3696 100644 --- a/chapter08/systemd.xml +++ b/chapter08/systemd.xml @@ -222,6 +222,129 @@ meson setup \ </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of systemd - 32-bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">rm -rf *</userinput></screen> + + <para>Create a symlink to work around missing xsltproc:</para> + +<!-- screen><userinput remap="pre">ln -sf /tools/bin/true /usr/bin/xsltproc</userinput></screen --> +<screen><userinput remap="pre">ln -sf /bin/true /usr/bin/xsltproc</userinput></screen> + +<!-- with cross-LFS we have util-linux in place: + <para>Because we have not yet installed the final version of Util-Linux, + create links to the libraries in the approprite location:</para> + +<screen><userinput remap="pre">for file in /tools/lib32/lib{blkid,mount,uuid}*; do + ln -sf $file /usr/lib32/ +done</userinput></screen> +--> + + <para>Prepare systemd for compilation:</para> + + <screen><userinput remap="configure">PKG_CONFIG_PATH="/usr/lib32/pkgconfig" \ +CC="gcc -m32 -march=i686" \ +CXX="g++ -m32 -march=i686" \ +LANG=en_US.UTF-8 \ +meson --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --libdir=/usr/lib32 \ + -Drootlibdir=/usr/lib32 \ + -Dblkid=true \ + -Ddefault-dnssec=no \ + -Dfirstboot=false \ + -Dinstall-tests=false \ + -Dldconfig=false \ + -Dsysusers=false \ + -Db_lto=false \ + -Drpmmacrosdir=no \ + -Dhomed=false \ + -Duserdb=false \ + -Dman=false \ + -Dmode=release \ + ..</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">LANG=en_US.UTF-8 ninja</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">LANG=en_US.UTF-8 DESTDIR=$PWD/DESTDIR ninja install +cp -Rv DESTDIR/usr/lib32/* /usr/lib32 +rm -rf DESTDIR +rm -f /usr/bin/xsltproc</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of systemd - x32-bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">rm -rf *</userinput></screen> + + <para>Create a symlink to work around missing xsltproc:</para> + +<screen><userinput remap="pre">ln -sf /bin/true /usr/bin/xsltproc</userinput></screen> +<!-- + <para>Fix an issue on x32:</para> + +<screen><userinput remap="pre">sed '/log_debug/s@PRI_TIMEX@PRIi64@' -i src/timesync/timesyncd-manager.c +sed '/long drift_freq;/s@long @int64_t @' -i src/timesync/timesyncd-manager.h</userinput></screen> +--> + <para>Prepare systemd for compilation:</para> + +<screen><userinput remap="configure">PKG_CONFIG_PATH="/usr/libx32/pkgconfig" \ +CC="gcc -mx32" \ +CXX="g++ -mx32" \ +CFLAGS+=" -Wno-error=shift-overflow" \ +CXXFLAGS+=" -Wno-error=shift-overflow" \ +LANG=en_US.UTF-8 \ +meson --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --libdir=/usr/libx32 \ + -Drootlibdir=/usr/libx32 \ + -Dblkid=true \ + -Ddefault-dnssec=no \ + -Dfirstboot=false \ + -Dinstall-tests=false \ + -Dldconfig=false \ + -Dsysusers=false \ + -Db_lto=false \ + -Drpmmacrosdir=no \ + -Dhomed=false \ + -Duserdb=false \ + -Dman=false \ + -Dmode=release \ + ..</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">LANG=en_US.UTF-8 ninja</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">LANG=en_US.UTF-8 DESTDIR=$PWD/DESTDIR ninja install +cp -Rv DESTDIR/usr/libx32/* /usr/libx32 +rm -rf DESTDIR +rm -f /usr/bin/xsltproc</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 id="contents-systemd" role="content"> <title>Contents of systemd</title> diff --git a/chapter08/udev.xml b/chapter08/udev.xml index 35bb12f46..27bc6e96a 100644 --- a/chapter08/udev.xml +++ b/chapter08/udev.xml @@ -160,6 +160,85 @@ rm /usr/share/man/man8/systemd-*.8</userinput></screen> </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of Udev - 32bit</title> + + <para>Clean previous build (while still in the build directory):</para> + +<screen><userinput remap="pre">rm -rf *</userinput></screen> + + <para>Prepare File for compilation:</para> + +<screen><userinput remap="configure">PKG_CONFIG_PATH="/usr/lib32/pkgconfig" \ +CC="gcc -m32 -march=i686" \ +CXX="g++ -m32 -march=i686" \ +LANG=en_US.UTF-8 \ +meson setup \ + --prefix=/usr \ + --buildtype=release \ + -Dmode=release \ + -Ddev-kvm-mode=0660 \ + -Dlink-udev-shared=false \ + ..</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">ninja \ + $(grep -o -E "^build (src/libudev|src/udev)[^:]*" \ + build.ninja | awk '{ print $2 }') \ + $(realpath libudev.so --relative-to .)</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">mkdir -pv /usr/lib32/pkgconfig && +cp -av libudev.so{,*[0-9]} /usr/lib32/ && +sed -e "s;/usr/lib;&32;g" src/libudev/libudev.pc > /usr/lib32/pkgconfig/libudev.pc</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of Udev - x32bit</title> + <para>Clean previous build (while still in the build directory):</para> + +<screen><userinput remap="pre">rm -rf *</userinput></screen> + + <para>Prepare File for compilation:</para> + +<screen><userinput remap="configure">PKG_CONFIG_PATH="/usr/libx32/pkgconfig" \ +CC="gcc -mx32" \ +CXX="g++ -mx32" \ +CFLAGS+=" -Wno-error=shift-overflow" \ +CXXFLAGS+=" -Wno-error=shift-overflow" \ +LANG=en_US.UTF-8 \ +meson setup \ + --prefix=/usr \ + --buildtype=release \ + -Dmode=release \ + -Ddev-kvm-mode=0660 \ + -Dlink-udev-shared=false \ + ..</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">ninja \ + $(grep -o -E "^build (src/libudev|src/udev)[^:]*" \ + build.ninja | awk '{ print $2 }') \ + $(realpath libudev.so --relative-to .)</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">mkdir -pv /usr/libx32/pkgconfig && +cp -av libudev.so{,*[0-9]} /usr/libx32/ && +sed -e "s;/usr/lib;&x32;g" src/libudev/libudev.pc > /usr/libx32/pkgconfig/libudev.pc</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 id="conf-udev" role="configuration"> <title>Configuring Udev</title> diff --git a/chapter08/util-linux.xml b/chapter08/util-linux.xml index 6c37af728..b588a6a55 100644 --- a/chapter08/util-linux.xml +++ b/chapter08/util-linux.xml @@ -125,6 +125,138 @@ su tester -c "make -k check"</userinput></screen> --> </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of Util-linux - 32-bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Move a tool out of the way which is optionally used by + configure but will report invalid pathes for multilib builds.</para> + +<screen><userinput remap="configure">mv /usr/bin/ncursesw6-config{,.tmp}</userinput></screen> + + <para>Prepare Util-linux for compilation:</para> + +<screen revision="sysv"><userinput remap="configure">CC="gcc -m32" \ +./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \ + --host=i686-pc-linux-gnu \ + --libdir=/usr/lib32 \ + --docdir=/usr/share/doc/util-linux-&util-linux-version; \ + --disable-chfn-chsh \ + --disable-login \ + --disable-nologin \ + --disable-su \ + --disable-setpriv \ + --disable-runuser \ + --disable-pylibmount \ + --disable-static \ + --without-python \ + --without-systemd \ + --without-systemdsystemunitdir</userinput></screen> + +<screen revision="systemd"><userinput remap="configure">CC="gcc -m32" \ +./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \ + --host=i686-pc-linux-gnu \ + --libdir=/usr/lib32 \ + --docdir=/usr/share/doc/util-linux-&util-linux-version; \ + --disable-chfn-chsh \ + --disable-login \ + --disable-nologin \ + --disable-su \ + --disable-setpriv \ + --disable-runuser \ + --disable-pylibmount \ + --disable-static \ + --without-python</userinput></screen> + + <para>Restore the tool previously moved away:</para> + +<screen><userinput remap="configure">mv /usr/bin/ncursesw6-config{.tmp,}</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/lib32/* /usr/lib32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of Util-linux - x32-bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Move a tool out of the way which is optionally used by + configure but will report invalid pathes for multilib builds.</para> + +<screen><userinput remap="configure">mv /usr/bin/ncursesw6-config{,.tmp}</userinput></screen> + + <para>Prepare Util-linux for compilation:</para> + +<screen revision="sysv"><userinput remap="configure">CC="gcc -mx32" \ +./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \ + --host=x86_64-pc-linux-gnux32 \ + --libdir=/usr/libx32 \ + --docdir=/usr/share/doc/util-linux-&util-linux-version; \ + --disable-chfn-chsh \ + --disable-login \ + --disable-nologin \ + --disable-su \ + --disable-setpriv \ + --disable-runuser \ + --disable-pylibmount \ + --disable-static \ + --without-python \ + --without-systemd \ + --without-systemdsystemunitdir</userinput></screen> + +<screen revision="systemd"><userinput remap="configure">CC="gcc -mx32" \ +./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \ + --host=x86_64-pc-linux-gnux32 \ + --libdir=/usr/libx32 \ + --docdir=/usr/share/doc/util-linux-&util-linux-version; \ + --disable-chfn-chsh \ + --disable-login \ + --disable-nologin \ + --disable-su \ + --disable-setpriv \ + --disable-runuser \ + --disable-pylibmount \ + --disable-static \ + --without-python</userinput></screen> + + <para>Restore the tool previously moved away:</para> + +<screen><userinput remap="configure">mv /usr/bin/ncursesw6-config{.tmp,}</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/libx32/* /usr/libx32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 id="contents-utillinux" role="content"> <title>Contents of Util-linux</title> diff --git a/chapter08/xz.xml b/chapter08/xz.xml index 362c667dc..6496544b5 100644 --- a/chapter08/xz.xml +++ b/chapter08/xz.xml @@ -68,6 +68,68 @@ </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of Xz - 32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Xz for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -m32" ./configure \ + --host=i686-pc-linux-gnu \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --disable-static</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/lib32/* /usr/lib32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of Xz - x32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Xz for compilation:</para> + +<screen><userinput remap="configure">CC="gcc -mx32" ./configure \ + --host=x86_64-pc-linux-gnux32 \ + --prefix=/usr \ + --libdir=/usr/libx32 \ + --disable-static</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/libx32/* /usr/libx32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 id="contents-xz" role="content"> <title>Contents of Xz</title> diff --git a/chapter08/zlib.xml b/chapter08/zlib.xml index 604d5d503..74c075ee4 100644 --- a/chapter08/zlib.xml +++ b/chapter08/zlib.xml @@ -63,6 +63,62 @@ </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of Zlib - 32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Zlib for compilation:</para> + +<screen><userinput remap="configure">CFLAGS+=" -m32" CXXFLAGS+=" -m32" \ +./configure --prefix=/usr \ + --libdir=/usr/lib32</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/lib32/* /usr/lib32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of Zlib - x32bit</title> + +<screen><userinput remap="pre">make distclean</userinput></screen> + + <para>Prepare Zlib for compilation:</para> + +<screen><userinput remap="configure">CFLAGS+=" -mx32" CXXFLAGS+=" -mx32" \ +./configure --prefix=/usr \ + --libdir=/usr/libx32</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/libx32/* /usr/libx32 +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 id="contents-zlib" role="content"> <title>Contents of Zlib</title> diff --git a/chapter08/zstd.xml b/chapter08/zstd.xml index ae793a34b..a36a1dddf 100644 --- a/chapter08/zstd.xml +++ b/chapter08/zstd.xml @@ -65,6 +65,54 @@ </sect2> + <!-- - - - - - - - - - --> + <!-- Multilib - 32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_32,ml_all" role="installation"> + <title>Installation of Zstd - 32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make clean</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">CC="gcc -m32" make prefix=/usr</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make prefix=/usr DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/lib/* /usr/lib32/ +sed -e "/^libdir/s/lib$/lib32/" -i /usr/lib32/pkgconfig/libzstd.pc +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- m32 --> + + <!-- - - - - - - - - - --> + <!-- Multilib - x32bit --> + <!-- - - - - - - - - - --> + + <sect2 arch="ml_x32,ml_all" role="installation"> + <title>Installation of Zstd - x32bit</title> + + <para>Clean previous build:</para> + +<screen><userinput remap="pre">make clean</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">CC="gcc -mx32" make prefix=/usr</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make prefix=/usr DESTDIR=$PWD/DESTDIR install +cp -Rv DESTDIR/usr/lib/* /usr/libx32/ +sed -e "/^libdir/s/lib$/libx32/" -i /usr/libx32/pkgconfig/libzstd.pc +rm -rf DESTDIR</userinput></screen> + + </sect2><!-- mx32 --> + <sect2 id="contents-zstd" role="content"> <title>Contents of Zstd</title> diff --git a/chapter10/kernel.xml b/chapter10/kernel.xml index 8609b1474..dc7fc9895 100644 --- a/chapter10/kernel.xml +++ b/chapter10/kernel.xml @@ -185,6 +185,38 @@ UEFI bootloader from the host distro</emphasis>.</para> </note> + <note arch="ml_32,ml_x32,ml_all"> + <para> + The kernel on a multilib system needs to be able to + identify and start binaries compiled for different architectures + than the default. + </para> + + <para arch="ml_32,ml_all"> + If support for any 32bit ABI was built, make sure that the option + "IA32 Emulation" is selected. The option 'IA32 a.out support' is + optional. + </para> + + <para arch="ml_x32,ml_all"> + If support for the x32bit ABI was built, make sure that the option + "x32 ABI for 64-bit mode" is selected. + </para> + +<screen arch="ml_32">Binary Emulations ---> + [*] IA32 Emulation [CONFIG_IA32_EMULATION] + <M> IA32 a.out support [CONFIG_IA32_AOUT] +</screen> +<screen arch="ml_x32">Binary Emulations ---> + [*] x32 ABI for 64-bit mode [CONFIG_X86_X32] +</screen> +<screen arch="ml_all">Binary Emulations ---> + [*] IA32 Emulation [CONFIG_IA32_EMULATION] + <M> IA32 a.out support [CONFIG_IA32_AOUT] + [*] x32 ABI for 64-bit mode [CONFIG_X86_X32] +</screen> + </note> + <variablelist> <title>The rationale for the above configuration items:</title> diff --git a/packages.ent b/packages.ent index a5e7c19a8..b3f498c11 100644 --- a/packages.ent +++ b/packages.ent @@ -351,6 +351,15 @@ <!ENTITY iproute2-fin-du "17 MB"> <!ENTITY iproute2-fin-sbu "0.1 SBU"> +<!ENTITY isl-version "0.24"> +<!ENTITY isl-size "2.1 MB"> +<!-- ENTITY isl-url "http://isl.gforge.inria.fr/isl-&isl-version;.tar.xz" --> +<!ENTITY isl-url "https://gcc.gnu.org/pub/gcc/infrastructure/isl-&isl-version;.tar.bz2"> +<!ENTITY isl-md5 "dd2f7b78e118c25bd96134a52aae7f4d"> +<!ENTITY isl-home "http://isl.gforge.inria.fr/"> +<!ENTITY isl-fin-du "20 MB"> +<!ENTITY isl-fin-sbu "0.1 SBU"> + <!ENTITY jinja2-version "3.1.2"> <!ENTITY jinja2-size "262 KB"> <!ENTITY jinja2-url "&pypi-src;/J/Jinja2/Jinja2-&jinja2-version;.tar.gz"> diff --git a/prologue/bookinfo.xml b/prologue/bookinfo.xml index 18ba29e02..5660a8017 100644 --- a/prologue/bookinfo.xml +++ b/prologue/bookinfo.xml @@ -7,7 +7,7 @@ <bookinfo> <title>Linux From Scratch</title> - <subtitle>Version &version;</subtitle> + <subtitle>Version &version;<phrase arch="ml_32,ml_x32,ml_all">-multilib</phrase></subtitle> <subtitle>Published &releasedate;</subtitle> <authorgroup> @@ -29,6 +29,11 @@ <firstname>Editor: DJ</firstname> <surname>Lucas</surname> </author> + + <author arch="ml_32,ml_x32,ml_all"> + <firstname>Editor: Thomas</firstname> + <surname>Trepl</surname> + </author> </authorgroup> <copyright id="copyright"> diff --git a/prologue/multilib.xml b/prologue/multilib.xml new file mode 100644 index 000000000..b4bf7975d --- /dev/null +++ b/prologue/multilib.xml @@ -0,0 +1,128 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 arch="ml_32,ml_x32,ml_all" id="pre-multilib"> + <?dbhtml filename="multilib.html"?> + + <title>About the Multilib Edition</title> + + <sect2><title>What is Multilib</title> + + <para>Today, most systems in the x86 world have a word size of 64 + bit. The word size is a number of bits which can be used at once + in the most efficient way. Previous architectures of x86 processors + had a word size of 32 bit which means they have a different + understanding of what is the best alignment of data in memory as + well as they have a different mechanism to address a different size + of memory. Even the instruction set of the 64 bit processors is + quite simmilar to the instructions of 32 bit processors, binaries + (objects compiled to machine code) cannot directly be executed on + 64 bit systems.</para> + + <para>Multilib is a mechanism to provide support for the 32 bit + binaries so that they can be executed of modern 64 bit CPUs.</para> + + </sect2> + + <sect2><title>Why doing Multilib?</title> + + <para>From an educational point of view, LFS in its 'native' form is + probably the best way to see how a Linux system is built from source. + There is no need to confuse with different architectures. But when + there is a need to run 32 binaries and you don't want to build the + whole system in 32 bit (which would be waste of ressources + nowadays) then LFS-multilib is an option. Examples for such a + need could be + <itemizedlist> + <listitem><para>Closed-source software without source only + available for 32 bit. That may be the case for printer driver + or any other kind of hardware drivers, the company provides + the binaries. If you have such a driver, LFS-multilib + may help you getting the stuff running</para> + </listitem> + <listitem><para>If you want to go far beyond LFS and setup a + virtualization platform like <application>VirtualBox</application>, + you will need multilib support</para> + </listitem> + <listitem><para>or even just because you can</para> + </listitem> + </itemizedlist> + + </para> + + <para>The multilib edition of LFS goes a small step beyond and a + small step back to what has been said in the previous section + when talking about target architectures. On one hand, the multilib + edition is focused and <emphasis>limited</emphasis> to x86_64 + architectures only, on the other hand, it <emphasis>expands</emphasis> + the instructions to utilize both possible architectures, namely + 32-bit as well as 64-bit.</para> + + <para>It also goes a bit beyond the basic educational + approach of LFS which is to show you how to build a Linux system. + To achieve this, no support for additional architectures than + the default one for your system is required. If you haven't + previously built by the standard LFS book, you are encouraged to + do so before using this edition.</para> + + </sect2> + + <sect2><title>Building a Multilib System</title> + + <para>Building a multilib system is not that much different from + building a system by using the 'native' LFS book. Beside some + tweaks here and there the most prominent difference is that + multilib requires compiling some applications up to three times: + one for the primary 64-bit architecture, + one for the 32-bit architecture (m32), + and once again for the 32-bit architecture with is 32-bit memory + access and 64 bit instruction set (mx32).</para> + + <para>Continue only if you and your system meets the following + requirements: + <itemizedlist> + <listitem> + <para>you have a x86_64 compatible machine</para> + <note><para> + If you have access to the kernel config for your system, + you will need to have + <parameter>CONFIG_IA32_EMULATION=y</parameter> + set in order to build for <parameter>m32</parameter> and + <parameter>CONFIG_X86_X32=y</parameter> set in order to + build for <parameter>mx32</parameter>. + </para> + <para> + If you do not have access to the kernel config for your system, + you may be able to test for compatability by running the + following commands: + </para> +<screen><userinput>echo 'int main(){}' > dummy.c +gcc -m32 dummy.c +./a.out + +gcc -mx32 dummy.c +./a.out</userinput></screen> + <para> + If either of the <command>./a.out</command> commands results in an + "Exec format error" message, then you do not have a system kernel + capable of building for that architecture within LFS, and so you + should probably look to build an LFS system without Multilib, but + with the required kernel capabilities, and use that to build a + Multilib system. + </para></note> + </listitem> + <listitem><para>you already have some experience with LFS</para></listitem> + <listitem><para>you have a need for 32-bit support</para></listitem> + </itemizedlist> + </para> + + <para>If you passed all three requirements, go ahead and build LFS + in multilib mode.</para> + + </sect2> + +</sect1> diff --git a/prologue/preface.xml b/prologue/preface.xml index e940116e1..a4160c49d 100644 --- a/prologue/preface.xml +++ b/prologue/preface.xml @@ -15,6 +15,7 @@ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="audience.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="architecture.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="prerequisites.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="multilib.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="standards.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="why.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="typography.xml"/> |