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 <[email protected]> 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