Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • chapter05/glibc.xml

    r1b1acbed r0ebda11  
    4848    operation of the dynamic library loader:</para>
    4949
    50 <screen><userinput remap="pre">case $(uname -m) in
     50<screen arch="default"><userinput remap="pre">case $(uname -m) in
    5151    i?86)   ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
    5252    ;;
     
    5555    ;;
    5656esac</userinput></screen>
     57<!-- no ld-linux.so.2 here as multilib is based on x86_64, not on i686 -->
     58<screen arch="ml_32,ml_x32,ml_all"><userinput remap="pre">ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
     59ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3</userinput></screen>
    5760
    5861    <para>Some of the Glibc programs use the non-FHS compliant
     
    7578    <para>Next, prepare Glibc for compilation:</para>
    7679
    77 <screen><userinput remap="configure">../configure                             \
     80<screen arch="default"><userinput remap="configure">../configure                             \
    7881      --prefix=/usr                      \
    7982      --host=$LFS_TGT                    \
     
    8386      libc_cv_slibdir=/usr/lib           \
    8487      libc_cv_rtlddir=/usr/lib</userinput></screen>
     88<screen arch="ml_32,ml_x32,ml_all"><userinput remap="configure">../configure                             \
     89      --prefix=/usr                      \
     90      --host=$LFS_TGT                    \
     91      --build=$(../scripts/config.guess) \
     92      --enable-kernel=&min-kernel;                \
     93      --with-headers=$LFS/usr/include    \
     94      --enable-multi-arch                \
     95      libc_cv_slibdir=/usr/lib           \
     96      libc_cv_rtlddir=/usr/lib</userinput></screen>
    8597
    8698    <variablelist>
     
    195207    </variablelist>
    196208
     209    <!--
     210      The /usr which gets removed from the RTLDLIST by the sed
     211      below is set by the libc_cv_rtlddir=/usr/lib above. When
     212      changing the libc_cv_rtlddir to /lib, the content of the
     213      ldd script does not need to be patched, but some other
     214      symlinks created by glibc itself will be not that correct
     215      and needs to be fixed by other symlinks.
     216
     217      First setting /usr and than removing /usr seems strange,
     218      but it looks like that libc_cv_rtlddir has more effect than
     219      only the pathes in ldd (it has influence on which symlinks
     220      to the loader are created where) and makes the handling
     221      in a multilib environment much easier.
     222      To me, it feels better to go the way with adding/removing
     223      /usr than to introduce a symlink hell.
     224     
     225      Another option to get ldd working properly is to set a
     226      symlink as "ln -svf lib /usr/lib64" but it has been reported
     227      that we used that already years ago but dropped it since
     228      libtool will complain sometimes with "library has been moved"
     229      warnings.
     230      Don't know if this is still the case - if not, this one
     231      symlink seems to be the cleanest way and the sed on ldd will
     232      be obsolete.
     233    -->
    197234    <para>Fix hardcoded path to the executable loader in
    198235    <command>ldd</command> script:</para>
     
    214251<screen><computeroutput>[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</computeroutput></screen>
    215252
    216       <para>Note that for 32-bit machines, the interpreter name will be
     253      <para arch="default">Note that for 32-bit machines, the interpreter name will be
    217254      <filename>/lib/ld-linux.so.2</filename>.</para>
    218255
     
    242279  </sect2>
    243280
     281  <!-- - - - - - - - - - -->
     282  <!-- Multilib - 32bit  -->
     283  <!-- - - - - - - - - - -->
     284  <sect2 arch="ml_32,ml_all">
     285    <title>Building Glibc - 32bit</title>
     286
     287    <para>Now recompile for m32. The extracted source can be
     288    reused but needs to be cleaned before installing the m32
     289    version of Glibc.</para>
     290
     291    <para>Clear the build directory and remove artefacts from
     292    previous build:</para>
     293     
     294<screen><userinput remap="pre">make clean
     295find .. -name "*.a" -delete</userinput></screen>
     296
     297    <para>Configure Glibc for m32 with the following commands:</para>
     298
     299<screen><userinput remap="configure">CC="$LFS_TGT-gcc -m32" \
     300CXX="$LFS_TGT-g++ -m32" \
     301../configure                             \
     302      --prefix=/usr                      \
     303      --host=$LFS_TGT32                  \
     304      --build=$(../scripts/config.guess) \
     305      --enable-kernel=&min-kernel;                \
     306      --with-headers=$LFS/usr/include    \
     307      --enable-multi-arch                \
     308      --libdir=/usr/lib32                \
     309      --libexecdir=/usr/lib32            \
     310      libc_cv_slibdir=/usr/lib32           \
     311      libc_cv_rtlddir=/usr/lib32</userinput></screen>
     312
     313    <para>Compile the package:</para>
     314
     315<screen><userinput remap="make">make</userinput></screen>
     316
     317    <para>Install the package:</para>
     318
     319<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install
     320cp -a DESTDIR/usr/lib32 $LFS/usr/
     321install -vm644 DESTDIR/usr/include/gnu/{lib-names,stubs}-32.h \
     322               $LFS/usr/include/gnu/
     323ln -svf ../lib32/ld-linux.so.2 $LFS/lib/ld-linux.so.2</userinput></screen>
     324
     325
     326    <caution>
     327      <para>At this point, it is imperative to stop and ensure that the basic
     328      functions (compiling and linking) of the new toolchain are working as
     329      expected. To perform a sanity check, run the following commands:</para>
     330
     331<screen><userinput>echo 'int main(){}' &gt; dummy.c
     332$LFS_TGT-gcc -m32 dummy.c
     333readelf -l a.out | grep '/ld-linux'</userinput></screen>
     334
     335      <para>If everything is working correctly, there should be no errors,
     336      and the output of the last command will be of the form:</para>
     337
     338<screen><computeroutput>[Requesting program interpreter: /lib/ld-linux.so.2]</computeroutput></screen>
     339
     340      <para>If the output is not shown as above or there was no output at all,
     341      then something is wrong. Investigate and retrace the steps to find out
     342      where the problem is and correct it. This issue must be resolved before
     343      continuing on.</para>
     344
     345      <para>Once all is well, clean up the test files:</para>
     346
     347<screen><userinput>rm -v dummy.c a.out</userinput></screen>
     348
     349    </caution>
     350
     351  </sect2><!-- m32 -->
     352
     353  <!-- - - - - - - - - - -->
     354  <!-- Multilib - x32bit -->
     355  <!-- - - - - - - - - - -->
     356 
     357  <sect2 arch="ml_x32,ml_all">
     358    <title>Building Glibc - x32bit</title>
     359
     360    <para>Now recompile for mx32. The extracted source can be
     361    reused but needs to be cleaned before installing the mx32
     362    version of Glibc.</para>
     363
     364    <para>Clear the build directory and remove artefacts from
     365    previous build:</para>
     366     
     367<screen><userinput remap="pre">make clean
     368find .. -name "*.a" -delete</userinput></screen>
     369
     370    <para>Configure Glibc for mx32 with the following commands:</para>
     371
     372<screen><userinput remap="configure">CC="$LFS_TGT-gcc -mx32" \
     373CXX="$LFS_TGT-g++ -mx32" \
     374../configure                             \
     375      --prefix=/usr                      \
     376      --host=$LFS_TGTX32                 \
     377      --build=$(../scripts/config.guess) \
     378      --enable-kernel=&min-kernel;                \
     379      --with-headers=$LFS/usr/include    \
     380      --enable-multi-arch                \
     381      --libdir=/usr/libx32               \
     382      --libexecdir=/usr/libx32           \
     383      libc_cv_slibdir=/usr/libx32           \
     384      libc_cv_rtlddir=/usr/libx32</userinput></screen>
     385
     386    <para>Compile the package:</para>
     387
     388<screen><userinput remap="make">make</userinput></screen>
     389
     390    <para>Install the package:</para>
     391
     392<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install
     393cp -a DESTDIR/usr/libx32 $LFS/usr/
     394install -vm644 DESTDIR/usr/include/gnu/{lib-names,stubs}-x32.h \
     395               $LFS/usr/include/gnu/
     396ln -svf ../libx32/ld-linux-x32.so.2 $LFS/lib/ld-linux-x32.so.2</userinput></screen>
     397
     398    <caution>
     399      <para>At this point, it is imperative to stop and ensure that the basic
     400      functions (compiling and linking) of the new toolchain are working as
     401      expected. To perform a sanity check, run the following commands:</para>
     402
     403<screen><userinput>echo 'int main(){}' &gt; dummy.c
     404$LFS_TGT-gcc -mx32 dummy.c
     405readelf -l a.out | grep '/ld-linux-x32'</userinput></screen>
     406
     407      <para>If everything is working correctly, there should be no errors,
     408      and the output of the last command will be of the form:</para>
     409
     410<screen><computeroutput>[Requesting program interpreter: /libx32/ld-linux-x32.so.2]</computeroutput></screen>
     411
     412      <para>If the output is not shown as above or there was no output at all,
     413      then something is wrong. Investigate and retrace the steps to find out
     414      where the problem is and correct it. This issue must be resolved before
     415      continuing on.</para>
     416
     417      <para>Once all is well, clean up the test files:</para>
     418
     419<screen><userinput>rm -v dummy.c a.out</userinput></screen>
     420
     421    </caution>
     422
     423  </sect2><!-- mx32 -->
     424
    244425  <sect2 role="content">
    245426    <title/>
Note: See TracChangeset for help on using the changeset viewer.