glfs/introduction/welcome/important.xml

138 lines
4.3 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE chapter 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="important" xreflabel="Important Information">
<?dbhtml filename="important.html"?>
<title>Important Information</title>
<para>
BLFS has more information regarding compilation, /usr vs /usr/local,
boot scripts, etc. at
<ulink url="https://linuxfromscratch.org/blfs/view/stable/introduction/important.html"/>.
Unlike this book, this would be a chapter in BLFS.
A lot of that information has been omitted as this book is more linear
and doesn't follow how BLFS follows. However, we will cover some bases
here.
</para>
<sect2>
<title>Building software</title>
<para>
Building software on GLFS is identical to how it's done in the
BLFS books, along with having lib32 compilation instructions. It
goes without saying firstmost that you should have <envar>MAKEFLAGS</envar>
set to save yourself a lot of time. This is useful for the <command>make
</command> utility to use the amount of threads that you both want
and have.
</para>
<screen><userinput>export MAKEFLAGS='-jx'</userinput></screen>
<para>
Replace <option>x</option> with the amount of threads you have.
You can check the amount of threads you have with:
</para>
<screen><userinput>grep processor /proc/cpuinfo</userinput></screen>
<important><para>
Make sure that you have enough RAM for your system!
A general method is having 2.5G per thread that is thrown at
<command>make</command>. For instance, if you want to use 6 threads,
multiply 6 by 2.5 (which is 15), then make sure you have 15G of RAM.
If you don't have that RAM, try and limit the threads you throw at
<command>make</command>.
</para></important>
<para>
Next is compiling for 32-bit. There are many packages which will have
a lib32 counterpart. If you just got done with a normal compilation
of a package and wish to do a 32-bit compilation of that same package,
make sure to clean the directory first:
</para>
<screen><userinput>make distclean</userinput></screen>
<para>Or, if you made a build directory:</para>
<screen><userinput>rm -rf build</userinput></screen>
<para>Then proceed with the 32-bit compilation instructions.</para>
<para>
Generally, the format of targetting 32-bit goes like this:
</para>
<para>For <command>./configure</command>:</para>
<screen><userinput>CC="gcc -m32" CXX="g++ -m32" PKG_CONFIG_PATH=/usr/lib32/pkgconfig \
./configure --prefix=/usr --libdir=/usr/lib32 \
--host=i686-pc-linux-gnu
make
make DESTDIR=$PWD/DESTDIR install
cp -vr DESTDIR/usr/lib32/* /usr/lib32
rm -rf DESTDIR
ldconfig
</userinput></screen>
<para>For <command>meson</command>:</para>
<screen><userinput>mkdir -v build
cd build
CC="gcc -m32" CXX="g++ -m32" PKG_CONFIG_PATH=/usr/lib32/pkgconfig \
meson setup .. --prefix=/usr --libdir=/usr/lib32
ninja
DESTDIR=$PWD/DESTDIR ninja install
cp -vr DESTDIR/usr/lib32/* /usr/lib32
rm -rf DESTDIR
ldconfig</userinput></screen>
<para>For <command>cmake</command>:</para>
<screen><userinput>export CFLAGS="-m32"
export CXXFLAGS="-m32"
export ASFLAGS="--32"
export PKG_CONFIG_PATH="/usr/lib32/pkgconfig"
mkdir -v build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_LIBDIR=lib32
make
make DESTDIR=$PWD/DESTDIR install
cp -vr DESTDIR/usr/lib32/* /usr/lib32
rm -rf DESTDIR
ldconfig
unset CFLAGS CXXFLAGS ASFLAGS PKG_CONFIG_PATH</userinput></screen>
<note>
<para>
After you do a DESTDIR installation, it is recommended to
to use <command>file</command> on one of the libraries in
<filename>DESTDIR/usr/lib32</filename>. An output of such
a command for a 32-bit build of a library should be
comparable to the following:
</para>
<screen><computeroutput>ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked</computeroutput></screen>
<para>
Note the <computeroutput>32-bit LSB shared object</computeroutput> part.
A 64-bit library would show as a <computeroutput>64-bit LSB shared
object</computeroutput>.
</para>
</note>
</sect2>
</sect1>