fate of libxml2 in gcc
Matthias Klose
doko@debian.org
Mon Jan 19 04:46:48 GMT 2026
On 1/18/26 21:15, Jeffrey Law wrote:
>
>
> On 1/18/2026 1:00 PM, James K. Lowden wrote:
>> On Fri, 16 Jan 2026 16:44:37 -0700
>> Jeffrey Law <jeffreyalaw@gmail.com> wrote:
>>
>>> On 1/16/2026 1:00 PM, James K. Lowden wrote:
>>>> At present libgcobol requires the target to supply libxml2. That
>>>> complicates building cross compilers and mitigates against how
>>>> distributions are normally built. The remedy is to make libgcobol a
>>>> bootstrap library,
>>> So does libxml2 get linked into target code? Or libxml2 needed to
>>> build the compiler itself?
>> The gcobol compiler does not use libxml2. libgcobol mediates between
>> libxml2 and the compiled COBOL program. By that means, libxml2 is
>> linked into the target code.
>>
>> When libgcobol is built, it is linked to libxml2 because libgcobol
>> provides support for the XML PARSE statement in COBOL. The
>> compiled COBOL program is linked to libgcobol, which is linked to
>> libxml2, which is -- somehow -- provided by the target environment.
>>
>> As of now, libgcobol/configure.ac confirms that libxml2 is installed.
>> The build relies on the host to supply the header files and library.
> But is libgcobol target or not? Based on the above it sounds like it's
> target side.
unlike mpfr, gmp, isl, which are only needed for the host, libxml2 is
needed for the target. libgcobol is not needed for a bootstrap. We
have a similar relationship for libgo/libffi, libphobos and zlib (where
the latter is built in-tree for the target), or with libobjc, configured
for boehm-gc and bdw-gc which needs to be provided for the target.
> Ultimately the question that I'm looking to get answered is where does
> the libxml2 code run? Is it for the host, build or target machine?
>
> We don't include the C library with GCC, but we do include the C++
> runtime library with GCC. The decisions here aren't necessarily that
> clear cut.
problems are usually seen when building for multilib targets, and cross
compilers.
- for multilib builds, you need to provide the target lib for
each multilib build. libobjc has options --with-target-bdw-gc,
--with-target-bdw-gc-include and --with-target-bdw-gc-lib.
You may argue that multilibs aren't needed for libgcobol, because
it only targets 64bit. And I haven't tried building a 64bit libgcobol
for a ix86 host yet.
- for cross compilers, you need either build the target libxml2
before you start building the cross compiler, or you need to build
it in-tree during the build. For packaging a cross compilers,
that makes the cross build a two-stage step, first building a C/C++
cross compiler, then building libxml2, then rebuilding the
cross compiler including the cobol front-end.
Unless the objc frontend, where the bdw-gc is an optional thing,
libxml2 is required by libgcobol.
So what is needed, are configure options like the ones for bdw-gc to
point to a pre-built libxml2. It might not be necessary to provide these
suited for a multilib target.
It's optional to have a libgcobol.so dependency on libxml2, or to
include the PIC compiled objects explicitly, like libgo is including the
libffi object files as a convenience library. But for the latter, there
is no direct configury available like there is for the in-tree libffi.
Having libxml2 in-tree eases the build of the cross compilers and
probably eases the build of multilib builds. Having it provided
externally, complicates the cross build, including to get it built as a
convenience library. In any case, we need some configuration options
added to find it, and the requirements for a libxml2 build documented.
Matthias
More information about the Gcc
mailing list