| <?xml version="1.0"?> |
| <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" |
| "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ |
| ]> |
| <refentry id="glib-cross-compiling" revision="7 Aug 2018"> |
| <refmeta> |
| <refentrytitle>Cross-compiling the GLib package</refentrytitle> |
| <manvolnum>3</manvolnum> |
| <refmiscinfo>GLib Library</refmiscinfo> |
| </refmeta> |
| |
| <refnamediv> |
| <refname>Cross-compiling the GLib Package</refname> |
| <refpurpose> |
| How to cross-compile GLib |
| </refpurpose> |
| </refnamediv> |
| |
| <refsect1 id="cross"> |
| <title>Building the Library for a different architecture</title> |
| <para> |
| Cross-compilation is the process of compiling a program or |
| library on a different architecture or operating system then |
| it will be run upon. GLib is slightly more difficult to |
| cross-compile than many packages because much of GLib is |
| about hiding differences between different systems. |
| </para> |
| <para> |
| These notes cover things specific to cross-compiling GLib; |
| for general information about cross-compilation, see the |
| <ulink url="http://mesonbuild.com/Cross-compilation.html">meson</ulink> |
| info pages. |
| </para> |
| <para> |
| GLib tries to detect as much information as possible about |
| the target system by compiling and linking programs without |
| actually running anything; however, some information GLib |
| needs is not available this way. This information needs |
| to be provided to meson via a ‘cross file’. |
| </para> |
| <para> |
| As an example of using a cross file, to cross compile for |
| the ‘MingW32’ Win64 runtime environment on a Linux system, |
| create a file <filename>cross_file.txt</filename> with the following |
| contents: |
| </para> |
| <programlisting> |
| [host_machine] |
| system = 'windows' |
| cpu_family = 'x86_64' |
| cpu = 'x86_64' |
| endian = 'little' |
| |
| [properties] |
| c_args = [] |
| c_link_args = [] |
| |
| [binaries] |
| c = 'x86_64-w64-mingw32-gcc' |
| cpp = 'x86_64-w64-mingw32-g++' |
| ar = 'x86_64-w64-mingw32-ar' |
| ld = 'x86_64-w64-mingw32-ld' |
| objcopy = 'x86_64-w64-mingw32-objcopy' |
| strip = 'x86_64-w64-mingw32-strip' |
| pkgconfig = 'x86_64-w64-mingw32-pkg-config' |
| windres = 'x86_64-w64-mingw32-windres' |
| </programlisting> |
| <para> |
| Then execute the following commands: |
| </para> |
| <programlisting> |
| meson --cross-file cross_file.txt builddir |
| </programlisting> |
| <para> |
| The complete list of cross properties follows. Most |
| of these won't need to be set in most cases. |
| </para> |
| </refsect1> |
| <refsect1 id="cross-properties"> |
| <title>Cross properties</title> |
| <formalpara> |
| <title>have_[function]</title> |
| |
| <para> |
| When meson checks if a function is supported, the test can be |
| overridden by setting the |
| <literal>have_<replaceable>function</replaceable></literal> property |
| to <constant>true</constant> or <constant>false</constant>. |
| For example <programlisting>Checking for function "fsync" : YES</programlisting> |
| can be overridden by setting <programlisting>have_fsync = false</programlisting> |
| </para> |
| </formalpara> |
| <formalpara> |
| <title>growing_stack=[true/false]</title> |
| |
| <para> |
| Whether the stack grows up or down. Most places will want |
| <constant>false</constant>. |
| A few architectures, such as PA-RISC need <constant>true</constant>. |
| </para> |
| </formalpara> |
| <formalpara> |
| <title>have_strlcpy=[true/false]</title> |
| |
| <para> |
| Whether you have <function>strlcpy()</function> that matches |
| OpenBSD. Defaults to <constant>false</constant>, which is safe, |
| since GLib uses a built-in version in that case. |
| </para> |
| </formalpara> |
| <formalpara> |
| <title>va_val_copy=[true/false]</title> |
| |
| <para> |
| Whether <type>va_list</type> can be copied as a pointer. If set |
| to <constant>false</constant>, then <function>memcopy()</function> |
| will be used. Only matters if you don't have |
| <function>va_copy()</function> or <function>__va_copy()</function>. |
| (So, doesn't matter for GCC.) |
| Defaults to <constant>true</constant> which is slightly more common |
| than <constant>false</constant>. |
| </para> |
| </formalpara> |
| <formalpara> |
| <title>have_c99_vsnprintf=[true/false]</title> |
| |
| <para> |
| Whether you have a <function>vsnprintf()</function> with C99 |
| semantics. (C99 semantics means returning the number of bytes |
| that would have been written had the output buffer had enough |
| space.) Defaults to <constant>false</constant>. |
| </para> |
| </formalpara> |
| <formalpara> |
| <title>have_c99_snprintf=[true/false]</title> |
| |
| <para> |
| Whether you have a <function>snprintf()</function> with C99 |
| semantics. (C99 semantics means returning the number of bytes |
| that would have been written had the output buffer had enough |
| space.) Defaults to <constant>false</constant>. |
| </para> |
| </formalpara> |
| |
| </refsect1> |
| |
| </refentry> |