mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-04-15 03:58:04 +02:00
89 lines
3.0 KiB
Markdown
89 lines
3.0 KiB
Markdown
|
Title: Cross-compiling the GLib package
|
|||
|
|
|||
|
# Cross-compiling the GLib Package
|
|||
|
|
|||
|
## Building the Library for a different architecture
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
These notes cover things specific to cross-compiling GLib; for general
|
|||
|
information about cross-compilation, see the [Meson
|
|||
|
documentation](http://mesonbuild.com/Cross-compilation.html).
|
|||
|
|
|||
|
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’.
|
|||
|
|
|||
|
As an example of using a cross file, to cross compile for the ‘MingW32’
|
|||
|
Win64 runtime environment on a Linux system, create a file `cross_file.txt`
|
|||
|
with the following contents:
|
|||
|
|
|||
|
```
|
|||
|
[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'
|
|||
|
```
|
|||
|
|
|||
|
Then execute the following commands:
|
|||
|
|
|||
|
meson setup --cross-file cross_file.txt builddir
|
|||
|
|
|||
|
The complete list of cross properties follows. Most of these won't need to
|
|||
|
be set in most cases.
|
|||
|
|
|||
|
## Cross properties
|
|||
|
|
|||
|
`have_[function]`
|
|||
|
: When meson checks if a function is supported, the test can be overridden by
|
|||
|
setting the `have_function` property to `true` or `false`. For example:
|
|||
|
|
|||
|
Checking for function "fsync" : YES
|
|||
|
|
|||
|
can be overridden by setting
|
|||
|
|
|||
|
have_fsync = false
|
|||
|
|
|||
|
`growing_stack=[true/false]`
|
|||
|
: Whether the stack grows up or down. Most places will want `false`. A few
|
|||
|
architectures, such as PA-RISC need `true`.
|
|||
|
|
|||
|
`have_strlcpy=[true/false]`
|
|||
|
: Whether you have `strlcpy()` that matches OpenBSD. Defaults to `false`,
|
|||
|
which is safe, since GLib uses a built-in version in that case.
|
|||
|
|
|||
|
`va_val_copy=[true/false]`
|
|||
|
: Whether `va_list` can be copied as a pointer. If set to `false`, then
|
|||
|
`memcopy()` will be used. Only matters if you don't have `va_copy()` or
|
|||
|
`__va_copy()`. (So, doesn't matter for GCC.) Defaults to `true` which is
|
|||
|
slightly more common than `false`.
|
|||
|
|
|||
|
`have_c99_vsnprintf=[true/false]`
|
|||
|
: Whether you have a `vsnprintf()` 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 `false`.
|
|||
|
|
|||
|
`have_c99_snprintf=[true/false]`
|
|||
|
: Whether you have a `snprintf()` 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 `false`.
|