mirror of
https://github.com/Zeckmathederg/glfs.git
synced 2025-02-02 22:07:15 +08:00
Addressed Issue #6. Yes, NVK can now be built.
Added back Meson cross toolchain file, fixed LLVM, Fixed Rustc, and Fixed Mesa.
This commit is contained in:
parent
0ade4fb2bd
commit
02779b3a63
@ -39,6 +39,16 @@
|
|||||||
</listitem>
|
</listitem>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>June 22, 2024</para>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>[Zeckmathederg] - Addressed Issue #6. Yes, NVK can now be
|
||||||
|
built.</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>June 21, 2024</para>
|
<para>June 21, 2024</para>
|
||||||
<itemizedlist>
|
<itemizedlist>
|
||||||
|
@ -20,6 +20,6 @@
|
|||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="needml.xml"/>
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="needml.xml"/>
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="achievingml.xml"/>
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="achievingml.xml"/>
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pkgconf.xml"/>
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pkgconf.xml"/>
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="mesonnative.xml"/>
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="mesonfiles.xml"/>
|
||||||
|
|
||||||
</chapter>
|
</chapter>
|
||||||
|
@ -5,11 +5,11 @@
|
|||||||
%general-entities;
|
%general-entities;
|
||||||
]>
|
]>
|
||||||
|
|
||||||
<sect1 id="mesonnative" xreflabel="Meson Native Toolchain File">
|
<sect1 id="mesonfiles" xreflabel="Meson Toolchain Files">
|
||||||
<?dbhtml filename="mesonnative.html"?>
|
<?dbhtml filename="mesonfiles.html"?>
|
||||||
|
|
||||||
|
|
||||||
<title>Meson Native Toolchain File</title>
|
<title>Meson Toolchain Files</title>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Most applications that rely on the <application>Meson</application>
|
Most applications that rely on the <application>Meson</application>
|
||||||
@ -20,27 +20,64 @@
|
|||||||
</userinput> command to compile 32-bit binaries on a 64-bit system.
|
</userinput> command to compile 32-bit binaries on a 64-bit system.
|
||||||
However, some projects are more complicated for many different
|
However, some projects are more complicated for many different
|
||||||
reasons, leading to the necessity of a <application>Meson
|
reasons, leading to the necessity of a <application>Meson
|
||||||
</application> native toolchain file. It specifies the compilers,
|
</application> toolchain files. They specify compilers,
|
||||||
options that should be invoked, the <application>pkg-conf</application>
|
options that should be invoked, the <application>pkg-conf</application>
|
||||||
binary (or rather symlink that uses a certain personality file) to use,
|
binary (or rather symlink that uses a certain personality file) to use,
|
||||||
<command>llvm-config</command> to use, etc. This isn't required for
|
<command>llvm-config</command> to use, etc. This is required for Mesa's
|
||||||
<xref linkend="steam"/> unless you want to install Mesa's NVK driver,
|
Nouveau and/or Swrast Vulkan drivers. It is also needed for Gstreamer
|
||||||
which isn't in the book at the moment. It is needed for Gstreamer which
|
(not in the book), which is a recommended dependency of
|
||||||
is a recommended dependency of <xref linkend="wine"/>.
|
<xref linkend="wine"/>.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
There exists another type of <application>Meson</application> file
|
There are two <application>Meson</application> files: the cross
|
||||||
called a cross toolchain file. However, it equates to pretending
|
toolchain file and the native toolchain file. There are different situations
|
||||||
that cross compilation is happening, leading to build failures.
|
for using either.
|
||||||
Native toolchain files are the solution to this.
|
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The instructions below will show how to create and use the file if
|
The instructions below will show how to create and use the files if
|
||||||
necessary.
|
necessary.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<sect2 role="installation">
|
||||||
|
<title>Creating the Cross Toolchain File</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Create the following toolchain file by running the following
|
||||||
|
commands as the <systemitem class="username">root</systemitem>
|
||||||
|
user:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<screen role="root"><userinput>mkdir -v /usr/share/meson/cross
|
||||||
|
|
||||||
|
cat > /usr/share/meson/cross/lib32 << "EOF"
|
||||||
|
<literal>[binaries]
|
||||||
|
c = ['gcc', '-m32']
|
||||||
|
cpp = ['g++', '-m32']
|
||||||
|
rust = ['rustc', '--target', 'i686-unknown-linux-gnu']
|
||||||
|
pkg-config = 'i686-pc-linux-gnu-pkg-config'
|
||||||
|
ar = '/usr/bin/ar'
|
||||||
|
strip = '/usr/bin/strip'
|
||||||
|
cups-config = 'cups-config'
|
||||||
|
llvm-config = 'llvm-config'
|
||||||
|
exe_wrapper = ''
|
||||||
|
|
||||||
|
[properties]
|
||||||
|
sizeof_void* = 4
|
||||||
|
sizeof_long = 4
|
||||||
|
|
||||||
|
[host_machine]
|
||||||
|
system = 'linux'
|
||||||
|
subsystem = 'linux'
|
||||||
|
kernel = 'linux'
|
||||||
|
cpu_family = 'x86'
|
||||||
|
cpu = 'i686'
|
||||||
|
endian = 'little'</literal>
|
||||||
|
EOF</userinput></screen>
|
||||||
|
|
||||||
|
</sect2>
|
||||||
|
|
||||||
<sect2 role="installation">
|
<sect2 role="installation">
|
||||||
<title>Creating the Native Toolchain File</title>
|
<title>Creating the Native Toolchain File</title>
|
||||||
|
|
||||||
@ -70,6 +107,8 @@ sizeof_long = 4
|
|||||||
|
|
||||||
[host_machine]
|
[host_machine]
|
||||||
system = 'linux'
|
system = 'linux'
|
||||||
|
subsystem = 'linux'
|
||||||
|
kernel = 'linux'
|
||||||
cpu_family = 'x86'
|
cpu_family = 'x86'
|
||||||
cpu = 'i686'
|
cpu = 'i686'
|
||||||
endian = 'little'</literal>
|
endian = 'little'</literal>
|
||||||
@ -85,8 +124,14 @@ EOF</userinput></screen>
|
|||||||
<userinput>meson setup ..</userinput>, you can simply do:
|
<userinput>meson setup ..</userinput>, you can simply do:
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<screen><userinput>meson setup .. --cross-file lib32 <other-options></userinput></screen>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Or...
|
||||||
|
</para>
|
||||||
|
|
||||||
<screen><userinput>meson setup .. --native-file x86 <other-options></userinput></screen>
|
<screen><userinput>meson setup .. --native-file x86 <other-options></userinput></screen>
|
||||||
|
|
||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
</sect1>
|
</sect1>
|
@ -184,17 +184,17 @@ mv projects/compiler-rt-&llvm-version;.src projects/compiler-rt</userinput></scr
|
|||||||
<screen><userinput>mkdir -v build &&
|
<screen><userinput>mkdir -v build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
|
|
||||||
CC=gcc CXX=g++ \
|
CC=gcc CXX=g++ \
|
||||||
cmake -DCMAKE_INSTALL_PREFIX=/usr \
|
cmake -DCMAKE_INSTALL_PREFIX=/usr \
|
||||||
-DLLVM_ENABLE_FFI=ON \
|
-DLLVM_ENABLE_FFI=ON \
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
-DLLVM_BUILD_LLVM_DYLIB=ON \
|
-DLLVM_BUILD_LLVM_DYLIB=ON \
|
||||||
-DLLVM_LINK_LLVM_DYLIB=ON \
|
-DLLVM_LINK_LLVM_DYLIB=ON \
|
||||||
-DLLVM_ENABLE_RTTI=ON \
|
-DLLVM_ENABLE_RTTI=ON \
|
||||||
-DLLVM_TARGETS_TO_BUILD="host;AMDGPU" \
|
-DLLVM_TARGETS_TO_BUILD="X86;host;AMDGPU" \
|
||||||
-DLLVM_BINUTILS_INCDIR=/usr/include \
|
-DLLVM_BINUTILS_INCDIR=/usr/include \
|
||||||
-DLLVM_INCLUDE_BENCHMARKS=OFF \
|
-DLLVM_INCLUDE_BENCHMARKS=OFF \
|
||||||
-DCLANG_DEFAULT_PIE_ON_LINUX=ON \
|
-DCLANG_DEFAULT_PIE_ON_LINUX=ON \
|
||||||
-DCLANG_CONFIG_FILE_SYSTEM_DIR=/etc/clang \
|
-DCLANG_CONFIG_FILE_SYSTEM_DIR=/etc/clang \
|
||||||
-Wno-dev -G Ninja .. &&
|
-Wno-dev -G Ninja .. &&
|
||||||
ninja</userinput></screen>
|
ninja</userinput></screen>
|
||||||
@ -208,52 +208,6 @@ cp bin/FileCheck /usr/bin</userinput></screen>
|
|||||||
|
|
||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>32-bit Installation of LLVM</title>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
First clean the build directory:
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
Install lib32-<application>LLVM</application> by running the following
|
|
||||||
commands:
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<screen><userinput>cmake -DCMAKE_INSTALL_PREFIX=/usr \
|
|
||||||
-DCMAKE_INSTALL_LIBDIR=lib32 \
|
|
||||||
-DCMAKE_CXX_FLAGS:STRING=-m32 \
|
|
||||||
-DCMAKE_C_FLAGS:STRING=-m32 \
|
|
||||||
-DLLVM_ENABLE_FFI=ON \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-DLLVM_BUILD_LLVM_DYLIB=ON \
|
|
||||||
-DLLVM_LINK_LLVM_DYLIB=ON \
|
|
||||||
-DLLVM_ENABLE_RTTI=ON \
|
|
||||||
-DLLVM_DEFAULT_TARGET_TRIPLE="i686-pc-linux-gnu" \
|
|
||||||
-DLLVM_TARGETS_TO_BUILD="AMDGPU;X86" \
|
|
||||||
-DLLVM_HOST_TRIPLE=x86_64-pc-linux-gnu \
|
|
||||||
-DLLVM_BINUTILS_INCDIR=/usr/include \
|
|
||||||
-DLLVM_INCLUDE_BENCHMARKS=OFF \
|
|
||||||
-DCLANG_DEFAULT_PIE_ON_LINUX=ON \
|
|
||||||
-DLLVM_LIBDIR_SUFFIX=32 \
|
|
||||||
-DLLVM_TARGET_ARCH:STRING=i686 \
|
|
||||||
-DLLVM_BUILD_32_BITS=ON \
|
|
||||||
-DCLANG_CONFIG_FILE_SYSTEM_DIR=/etc/clang \
|
|
||||||
-Wno-dev -G Ninja .. &&
|
|
||||||
ninja</userinput></screen>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
Now, as the &root; user:
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<screen role="root"><userinput>DESTDIR=$PWD/DESTDIR ninja install
|
|
||||||
cp -vr DESTDIR/usr/lib32/* /usr/lib32
|
|
||||||
rm -rf DESTDIR
|
|
||||||
ldconfig</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
|
|
||||||
<sect2 role="commands">
|
<sect2 role="commands">
|
||||||
<title>Command Explanations</title>
|
<title>Command Explanations</title>
|
||||||
|
|
||||||
|
@ -119,12 +119,13 @@
|
|||||||
<para>
|
<para>
|
||||||
<xref linkend="llvm"/> (required for the r300, r600, and radeonsi
|
<xref linkend="llvm"/> (required for the r300, r600, and radeonsi
|
||||||
drivers, and the LLVMpipe software rasterizer which can make the
|
drivers, and the LLVMpipe software rasterizer which can make the
|
||||||
swrast driver much faster... also Clang is required for Vulkan swrast)
|
Swrast driver much faster... also Clang is required for Vulkan Swrast)
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
<xref linkend="mesonnative"/> (required for multilib lib32-NVK)
|
<xref linkend="mesonfiles"/> (required for multilib 32-bit Nouveau and
|
||||||
|
Swrast Vulkan)
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
@ -362,23 +363,7 @@ ldconfig</userinput></screen>
|
|||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
<sect2 role="installation">
|
<sect2 role="installation">
|
||||||
<title>32-bit Installation of NVK and Vulkan swrast</title>
|
<title>32-bit Installation of NVK and Vulkan Swrast</title>
|
||||||
|
|
||||||
<note>
|
|
||||||
<para>
|
|
||||||
NVK does not currently build with current GLFS instructions.
|
|
||||||
You can try but odds are the build will fail. However, they
|
|
||||||
work for Vulkan swrast. Errors regarding NVK have an unknown
|
|
||||||
cause but it may be a programming error. <xref linkend="steam"/>
|
|
||||||
<emphasis>WILL</emphasis> want a 32-bit Vulkan driver. You have
|
|
||||||
a few options at the moment - consider installing <xref linkend="nvidia"/>
|
|
||||||
as it often just works and is more performant, compiling 32-bit
|
|
||||||
NVK on Arch or in a Distrobox, or copy the drivers installed on
|
|
||||||
another system onto the LFS system. These aren't ideal solutions
|
|
||||||
but are solutions nonetheless that you should consider before
|
|
||||||
continuing.
|
|
||||||
</para>
|
|
||||||
</note>
|
|
||||||
|
|
||||||
<note>
|
<note>
|
||||||
<para>
|
<para>
|
||||||
@ -388,7 +373,7 @@ ldconfig</userinput></screen>
|
|||||||
</note>
|
</note>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
NVK and Vulkan swrast has special requirements to be configured and
|
NVK and Vulkan swrast have special requirements to be configured and
|
||||||
compiled, requiring extra steps. You are going to need to modify a
|
compiled, requiring extra steps. You are going to need to modify a
|
||||||
few paths in a personality
|
few paths in a personality
|
||||||
file used by <application>Pkgconf</application>, as it searches in
|
file used by <application>Pkgconf</application>, as it searches in
|
||||||
@ -417,7 +402,7 @@ ldconfig</userinput></screen>
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<screen><userinput>meson setup \
|
<screen><userinput>meson setup \
|
||||||
--native-file x86 \
|
--cross-file lib32 \
|
||||||
--prefix=$XORG_PREFIX \
|
--prefix=$XORG_PREFIX \
|
||||||
--libdir=$XORG_PREFIX/lib32 \
|
--libdir=$XORG_PREFIX/lib32 \
|
||||||
--buildtype=release \
|
--buildtype=release \
|
||||||
|
@ -336,7 +336,7 @@ llvm-config = "/usr/bin/llvm-config"
|
|||||||
cc = "/usr/bin/gcc"
|
cc = "/usr/bin/gcc"
|
||||||
cxx = "/usr/bin/g++"
|
cxx = "/usr/bin/g++"
|
||||||
ar = "/usr/bin/gcc-ar"
|
ar = "/usr/bin/gcc-ar"
|
||||||
ranlib = "/usr/bin/gcc-ranlib</literal>
|
ranlib = "/usr/bin/gcc-ranlib"</literal>
|
||||||
EOF</userinput></screen>
|
EOF</userinput></screen>
|
||||||
|
|
||||||
<note>
|
<note>
|
||||||
|
@ -76,8 +76,8 @@
|
|||||||
(gstreamer is not included in this book yet due to its wide variety of
|
(gstreamer is not included in this book yet due to its wide variety of
|
||||||
recommended dependencies. If you are on multilib and want a 32-bit or WoW64
|
recommended dependencies. If you are on multilib and want a 32-bit or WoW64
|
||||||
build, you must install 32-bit variants of the dependencies if they provide
|
build, you must install 32-bit variants of the dependencies if they provide
|
||||||
a library, and when compiling gstreamer, use the cross file from
|
a library, and when compiling gstreamer, use the native toolchain file from
|
||||||
<xref linkend="mesonnative"/>. Do this this for the Base and
|
<xref linkend="mesonfiles"/>. Do this this for the Base and
|
||||||
Good plugins as well),
|
Good plugins as well),
|
||||||
OSMesa from <xref linkend="mesa"/> (compiled using the <parameter>
|
OSMesa from <xref linkend="mesa"/> (compiled using the <parameter>
|
||||||
-Dosmesa=true</parameter> option),
|
-Dosmesa=true</parameter> option),
|
||||||
|
Loading…
Reference in New Issue
Block a user