Cross-compiling the GLib package
3
GLib Library
Cross-compiling the GLib Package
How to cross-compile GLib
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
autoconf info pages.
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 the configure script via a "cache file"
or by setting the cache variables in your environment.
As an example of using a cache file, to cross compile for
the "MingW32" Win32 runtime environment on a Linux system,
create a file 'win32.cache' with the following contents:
glib_cv_long_long_format=I64
glib_cv_stack_grows=no
Then execute the following commands:
PATH=/path/to/mingw32-compiler/bin:$PATH
chmod a-w win32.cache # prevent configure from changing it
./configure --cache-file=win32.cache --host=mingw32
The complete list of cache file variables follows. Most
of these won't need to be set in most cases.
Cache file variables
glib_cv_long_long_format=[ll/q/I64]
Format used by printf() and
scanf() for 64 bit integers. "ll" is
the C99 standard, and what is used by the 'trio' library
that GLib builds if your printf() is
insufficiently capable.
Doesn't need to be set if you are compiling using trio.
glib_cv_stack_grows=[yes/no]
Whether the stack grows up or down. Most places will want "no",
A few architectures, such as PA-RISC need "yes".
glib_cv_working_bcopy=[yes/no]
Whether your bcopy() can handle overlapping
copies. Only needs to be set if you don't have
memmove(). (Very unlikely)
glib_cv_sane_realloc=[yes/no]
Whether your realloc() conforms to ANSI C
and can handle NULL as the first argument.
Defaults to "yes" and probably doesn't need to be set.
glib_cv_have_strlcpy=[yes/no]
Whether you have strlcpy() that matches
OpenBSD. Defaults to "no", which is safe, since GLib uses a
built-in version in that case.
glib_cv_have_qsort_r=[yes/no]
Whether you have qsort_r() that matches
BSD. Defaults to "no", which is safe, since GLib uses a
built-in version in that case.
glib_cv_va_val_copy=[yes/no]
Whether va_list can be copied as a pointer. If set
to "no", 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 "yes" which is slightly more common than "no".
glib_cv_rtldglobal_broken=[yes/no]
Whether you have a bug found in OSF/1 v5.0. Defaults to "no".
glib_cv_uscore=[yes/no]
Whether an underscore needs to be prepended to symbols when
looking them up via dlsym(). Only needs to
be set if your system uses
dlopen()/dlsym().
ac_cv_func_posix_getpwuid_r=[yes/no]
Whether you have a getpwuid_r function (in your C library,
not your thread library) that conforms to the POSIX spec.
(Takes a 'struct passwd **' as the final argument)
ac_cv_func_nonposix_getpwuid_r=[yes/no]
Whether you have some variant of getpwuid_r()
that doesn't conform to to the POSIX spec, but GLib might be able
to use (or might segfault.) Only needs to be set if
ac_cv_func_posix_getpwuid_r is not set. It's
safest to set this to "no".
ac_cv_func_posix_getgrgid_r=[yes/no]
Whether you have a getgrgid_r function that conforms to
the POSIX spec.
glib_cv_use_pid_surrogate=[yes/no]
Whether to use a setpriority() on the PID of
the thread as a method for setting the priority of threads. This
only needs to be set when using POSIX threads.
ac_cv_func_printf_unix98=[yes/no]
Whether your printf() family supports Unix98
style %N$ positional parameters. Defaults to
"no".
ac_cv_func_vsnprintf_c99=[yes/no]
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 "no".