Prompted by Jakub's recent work to enable a 32-bit biarch gcobol to compile 64-bit COBOL code, I tried to bootstrap with cobol included on Solaris/i386, Linux/i686, Darwin/i386, and Solaris/sparc.
While the builds mostly finished, all tests failed since the 64-bit libgcobol was missing. As it turns out, libgcobol currently lacks multilib support, which this patch adds. Unlike some runtime libs that can get away without setting AM_MAKEFLAGS and friends, libgcobol can not since it then tries to link the 64-bit libgcobol with 32-bit libstdc++. Bootstrapped on i386-pc-solaris2.11, amd64-pc-solaris2.11, i686-pc-linux-gnu, x86_64-pc-linux-gnu, x86_64-apple-darwin20.6.0, sparc-sun-solaris2.11, and sparcv9-sun-solaris2.11. A i386-apple-darwin15.6.0 bootstrap still fails due to PR cobol/119975 (unportable use of clock_gettime). On Solaris/x86 and Linux/x86, 64-bit cobol.dg test results were identical between 32-bit-default and 64-bit-default configurations, while on Solaris/SPARC the 32-bit-default build shows additions failures. However, given the sorry state of the cobol.dg testsuite on big-endian (and strict-alignment) targets in general, I won't worry about that now. Ok for trunk? Rainer -- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University 2025-05-12 Rainer Orth <r...@cebitec.uni-bielefeld.de> libgcobol: * Makefile.am: Only wrap toolexeclib_LTLIBRARIES, toolexeclib_DATA in BUILD_LIBGCOBOL. (MAKEOVERRIDES, AM_MAKEFLAGS, FLAGS_TO_PASS): New macros. ($(top_srcdir)/../multilib.am): Include. * Makefile.in: Regenerate.
# HG changeset patch # Parent cfa382c0315b5932a2b465bc1f4fa9ef7ef8fbdc libgcobol: Add multilib support diff --git a/libgcobol/Makefile.am b/libgcobol/Makefile.am --- a/libgcobol/Makefile.am +++ b/libgcobol/Makefile.am @@ -25,10 +25,10 @@ ACLOCAL_AMFLAGS = -I .. -I ../config # May be used by various substitution variables. gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) -# Skip the whole process if we are not building libgcobol. if BUILD_LIBGCOBOL toolexeclib_LTLIBRARIES = libgcobol.la toolexeclib_DATA = libgcobol.spec +endif ## ## 2.2.12 Automatic Dependency Tracking @@ -66,4 +66,46 @@ libgcobol_la_LDFLAGS = $(LTLDFLAGS) $(LI $(extra_ldflags_libgcobol) $(LIBS) $(version_arg) libgcobol_la_DEPENDENCIES = libgcobol.spec $(LIBQUADLIB_DEP) -endif BUILD_LIBGCOBOL +# Multilib support. +MAKEOVERRIDES= + +# Work around what appears to be a GNU make bug handling MAKEFLAGS +# values defined in terms of make variables, as is the case for CC and +# friends when we are called from the top level Makefile. +AM_MAKEFLAGS = \ + "AR_FLAGS=$(AR_FLAGS)" \ + "CC_FOR_BUILD=$(CC_FOR_BUILD)" \ + "CC_FOR_TARGET=$(CC_FOR_TARGET)" \ + "CFLAGS=$(CFLAGS)" \ + "CXXFLAGS=$(CXXFLAGS)" \ + "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \ + "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \ + "EXPECT=$(EXPECT)" \ + "INSTALL=$(INSTALL)" \ + "INSTALL_DATA=$(INSTALL_DATA)" \ + "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ + "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \ + "LDFLAGS=$(LDFLAGS)" \ + "MAKE=$(MAKE)" \ + "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \ + "SHELL=$(SHELL)" \ + "RUNTESTFLAGS=$(RUNTESTFLAGS)" \ + "exec_prefix=$(exec_prefix)" \ + "infodir=$(infodir)" \ + "libdir=$(libdir)" \ + "includedir=$(includedir)" \ + "prefix=$(prefix)" \ + "AR=$(AR)" \ + "AS=$(AS)" \ + "LD=$(LD)" \ + "RANLIB=$(RANLIB)" \ + "NM=$(NM)" \ + "NM_FOR_BUILD=$(NM_FOR_BUILD)" \ + "NM_FOR_TARGET=$(NM_FOR_TARGET)" \ + "DESTDIR=$(DESTDIR)" \ + "WERROR=$(WERROR)" + +# Subdir rules rely on $(FLAGS_TO_PASS) +FLAGS_TO_PASS = $(AM_MAKEFLAGS) + +include $(top_srcdir)/../multilib.am diff --git a/libgcobol/Makefile.in b/libgcobol/Makefile.in --- a/libgcobol/Makefile.in +++ b/libgcobol/Makefile.in @@ -113,8 +113,8 @@ host_triplet = @host@ target_triplet = @target@ # Handle embedded rpaths for Darwin. -@BUILD_LIBGCOBOL_TRUE@@ENABLE_DARWIN_AT_RPATH_TRUE@am__append_1 = -Wc,-nodefaultrpaths \ -@BUILD_LIBGCOBOL_TRUE@@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wl,-rpath,@loader_path +@ENABLE_DARWIN_AT_RPATH_TRUE@am__append_1 = -Wc,-nodefaultrpaths \ +@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wl,-rpath,@loader_path subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \ @@ -175,10 +175,8 @@ am__installdirs = "$(DESTDIR)$(toolexecl "$(DESTDIR)$(toolexeclibdir)" LTLIBRARIES = $(toolexeclib_LTLIBRARIES) libgcobol_la_LIBADD = -@BUILD_LIBGCOBOL_TRUE@am_libgcobol_la_OBJECTS = charmaps.lo \ -@BUILD_LIBGCOBOL_TRUE@ constants.lo gfileio.lo gmath.lo \ -@BUILD_LIBGCOBOL_TRUE@ intrinsic.lo io.lo libgcobol.lo \ -@BUILD_LIBGCOBOL_TRUE@ valconv.lo +am_libgcobol_la_OBJECTS = charmaps.lo constants.lo gfileio.lo gmath.lo \ + intrinsic.lo io.lo libgcobol.lo valconv.lo libgcobol_la_OBJECTS = $(am_libgcobol_la_OBJECTS) @BUILD_LIBGCOBOL_TRUE@am_libgcobol_la_rpath = -rpath $(toolexeclibdir) AM_V_P = $(am__v_P_@AM_V@) @@ -392,33 +390,80 @@ ACLOCAL_AMFLAGS = -I .. -I ../config # May be used by various substitution variables. gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) - -# Skip the whole process if we are not building libgcobol. @BUILD_LIBGCOBOL_TRUE@toolexeclib_LTLIBRARIES = libgcobol.la @BUILD_LIBGCOBOL_TRUE@toolexeclib_DATA = libgcobol.spec -@BUILD_LIBGCOBOL_TRUE@libgcobol_la_SOURCES = \ -@BUILD_LIBGCOBOL_TRUE@ charmaps.cc \ -@BUILD_LIBGCOBOL_TRUE@ constants.cc \ -@BUILD_LIBGCOBOL_TRUE@ gfileio.cc \ -@BUILD_LIBGCOBOL_TRUE@ gmath.cc \ -@BUILD_LIBGCOBOL_TRUE@ intrinsic.cc \ -@BUILD_LIBGCOBOL_TRUE@ io.cc \ -@BUILD_LIBGCOBOL_TRUE@ libgcobol.cc \ -@BUILD_LIBGCOBOL_TRUE@ valconv.cc +libgcobol_la_SOURCES = \ + charmaps.cc \ + constants.cc \ + gfileio.cc \ + gmath.cc \ + intrinsic.cc \ + io.cc \ + libgcobol.cc \ + valconv.cc -@BUILD_LIBGCOBOL_TRUE@WARN_CFLAGS = -W -Wall -Wwrite-strings -@BUILD_LIBGCOBOL_TRUE@AM_CPPFLAGS = -I. -I$(srcdir) $(LIBQUADINCLUDE) -@BUILD_LIBGCOBOL_TRUE@AM_CFLAGS = $(XCFLAGS) -@BUILD_LIBGCOBOL_TRUE@AM_CXXFLAGS = $(XCFLAGS) $(WARN_CFLAGS) \ -@BUILD_LIBGCOBOL_TRUE@ -DIN_TARGET_LIBS -fno-strict-aliasing +WARN_CFLAGS = -W -Wall -Wwrite-strings +AM_CPPFLAGS = -I. -I$(srcdir) $(LIBQUADINCLUDE) +AM_CFLAGS = $(XCFLAGS) +AM_CXXFLAGS = $(XCFLAGS) $(WARN_CFLAGS) -DIN_TARGET_LIBS \ + -fno-strict-aliasing # We want to link with the c++ runtime. -@BUILD_LIBGCOBOL_TRUE@libgcobol_la_LINK = $(CXXLINK) $(libgcobol_la_LDFLAGS) -@BUILD_LIBGCOBOL_TRUE@version_arg = -version-info $(LIBGCOBOL_VERSION) -@BUILD_LIBGCOBOL_TRUE@libgcobol_la_LDFLAGS = $(LTLDFLAGS) $(LIBQUADLIB) $(LTLIBICONV) \ -@BUILD_LIBGCOBOL_TRUE@ $(extra_ldflags_libgcobol) $(LIBS) $(version_arg) +libgcobol_la_LINK = $(CXXLINK) $(libgcobol_la_LDFLAGS) +version_arg = -version-info $(LIBGCOBOL_VERSION) +libgcobol_la_LDFLAGS = $(LTLDFLAGS) $(LIBQUADLIB) $(LTLIBICONV) \ + $(extra_ldflags_libgcobol) $(LIBS) $(version_arg) + +libgcobol_la_DEPENDENCIES = libgcobol.spec $(LIBQUADLIB_DEP) + +# Multilib support. +MAKEOVERRIDES = -@BUILD_LIBGCOBOL_TRUE@libgcobol_la_DEPENDENCIES = libgcobol.spec $(LIBQUADLIB_DEP) +# Work around what appears to be a GNU make bug handling MAKEFLAGS +# values defined in terms of make variables, as is the case for CC and +# friends when we are called from the top level Makefile. +AM_MAKEFLAGS = \ + "AR_FLAGS=$(AR_FLAGS)" \ + "CC_FOR_BUILD=$(CC_FOR_BUILD)" \ + "CC_FOR_TARGET=$(CC_FOR_TARGET)" \ + "CFLAGS=$(CFLAGS)" \ + "CXXFLAGS=$(CXXFLAGS)" \ + "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \ + "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \ + "EXPECT=$(EXPECT)" \ + "INSTALL=$(INSTALL)" \ + "INSTALL_DATA=$(INSTALL_DATA)" \ + "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ + "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \ + "LDFLAGS=$(LDFLAGS)" \ + "MAKE=$(MAKE)" \ + "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \ + "SHELL=$(SHELL)" \ + "RUNTESTFLAGS=$(RUNTESTFLAGS)" \ + "exec_prefix=$(exec_prefix)" \ + "infodir=$(infodir)" \ + "libdir=$(libdir)" \ + "includedir=$(includedir)" \ + "prefix=$(prefix)" \ + "AR=$(AR)" \ + "AS=$(AS)" \ + "LD=$(LD)" \ + "RANLIB=$(RANLIB)" \ + "NM=$(NM)" \ + "NM_FOR_BUILD=$(NM_FOR_BUILD)" \ + "NM_FOR_TARGET=$(NM_FOR_TARGET)" \ + "DESTDIR=$(DESTDIR)" \ + "WERROR=$(WERROR)" + + +# Subdir rules rely on $(FLAGS_TO_PASS) +FLAGS_TO_PASS = $(AM_MAKEFLAGS) +MULTISRCTOP = +MULTIBUILDTOP = +MULTIDIRS = +MULTISUBDIR = +MULTIDO = true +MULTICLEAN = true all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am @@ -426,7 +471,7 @@ all: config.h .SUFFIXES: .cc .lo .o .obj am--refresh: Makefile @: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/../multilib.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ @@ -448,6 +493,7 @@ Makefile: $(srcdir)/Makefile.in $(top_bu echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; +$(top_srcdir)/../multilib.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck @@ -639,7 +685,7 @@ distclean-tags: -rm -f cscope.out cscope.in.out cscope.po.out cscope.files check-am: all-am check: check-am -all-am: Makefile $(LTLIBRARIES) $(DATA) config.h +all-am: Makefile $(LTLIBRARIES) $(DATA) config.h all-local installdirs: for dir in "$(DESTDIR)$(toolexeclibdir)" "$(DESTDIR)$(toolexeclibdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ @@ -676,15 +722,15 @@ maintainer-clean-generic: @echo "it deletes files that may require special tools to rebuild." clean: clean-am -clean-am: clean-generic clean-libtool clean-toolexeclibLTLIBRARIES \ - mostlyclean-am +clean-am: clean-generic clean-libtool clean-local \ + clean-toolexeclibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags + distclean-hdr distclean-libtool distclean-local distclean-tags dvi: dvi-am @@ -704,7 +750,7 @@ install-dvi: install-dvi-am install-dvi-am: -install-exec-am: install-toolexeclibDATA \ +install-exec-am: install-exec-local install-toolexeclibDATA \ install-toolexeclibLTLIBRARIES install-html: install-html-am @@ -732,12 +778,13 @@ maintainer-clean: maintainer-clean-am -rm -rf $(top_srcdir)/autom4te.cache -rm -rf ./$(DEPDIR) -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic +maintainer-clean-am: distclean-am maintainer-clean-generic \ + maintainer-clean-local mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool + mostlyclean-libtool mostlyclean-local pdf: pdf-am @@ -752,26 +799,54 @@ uninstall-am: uninstall-toolexeclibDATA .MAKE: all install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-am clean \ - clean-cscope clean-generic clean-libtool \ - clean-toolexeclibLTLIBRARIES cscope cscopelist-am ctags \ - ctags-am distclean distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip install-toolexeclibDATA \ +.PHONY: CTAGS GTAGS TAGS all all-am all-local am--refresh check \ + check-am clean clean-cscope clean-generic clean-libtool \ + clean-local clean-toolexeclibLTLIBRARIES cscope cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-local distclean-tags \ + dvi dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-exec-local install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-toolexeclibDATA \ install-toolexeclibLTLIBRARIES installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am uninstall-toolexeclibDATA \ - uninstall-toolexeclibLTLIBRARIES + maintainer-clean-local mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \ + pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-toolexeclibDATA uninstall-toolexeclibLTLIBRARIES .PRECIOUS: Makefile +# GNU Make needs to see an explicit $(MAKE) variable in the command it +# runs to enable its job server during parallel builds. Hence the +# comments below. +all-multi: + $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do # $(MAKE) +install-multi: + $(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do # $(MAKE) +mostlyclean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean # $(MAKE) +clean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean # $(MAKE) +distclean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean # $(MAKE) +maintainer-clean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean # $(MAKE) + +.MAKE .PHONY: all-multi clean-multi distclean-multi install-am \ + install-multi maintainer-clean-multi mostlyclean-multi + +install-exec-local: install-multi + +all-local: all-multi +mostlyclean-local: mostlyclean-multi +clean-local: clean-multi +distclean-local: distclean-multi +maintainer-clean-local: maintainer-clean-multi + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: