File: cross-compiling.md

package info (click to toggle)
glib2.0 2.84.1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 66,144 kB
  • sloc: ansic: 538,877; python: 9,624; sh: 1,572; xml: 1,482; perl: 1,222; cpp: 535; makefile: 316; javascript: 11
file content (88 lines) | stat: -rw-r--r-- 3,049 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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`.