There are several modula-2 issues on Darwin, some blocking bootstrap on
one or more system versions.
This has been tested on powerpc/i688-darwin9 .. x86_64-darwin10,17,21 and
the prototype aarch64-darwin branch on darwin21.
OK for trunk?
thanks
Iain
P.S. I am slightly surprised that a target library configure set needs
to consider $host. If a target library is manually disabled (or does
not work) on a specific host - we usually disable it at the next level up
(see, for example, the libatomic, sanitizers etc. where there is a
'configure.tgt' that adapts the library flags etc. to specific targets -
or says that it is UNSUPPORTED).
--- 8< ---
The libm2 libraries are cross-linked, which means that we need to allow
symbols to be undefined at link time and then to be found at runtime.
This is implemented on Darwin by adding -undefined, dynamic_lookup to
the link command.
NOTE: It would probably be a better solution to rework the libraries
either to combine those that have inter-dependencies, or to reorder
the layering so the there is a fixed dependency tree.
Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
libgm2/ChangeLog:
* configure: Regenerate.
* configure.ac: Make a conditional for configurations targeting
Darwin.
* libm2cor/Makefile.am: Use -undefined,dynamic_lookup on Darwin.
* libm2iso/Makefile.am: Likewise.
* libm2log/Makefile.am: Likewise.
* libm2pim/Makefile.am: Likewise
* libm2min/Makefile.am: Likewise
* libm2cor/Makefile.in: Regenerate.
* libm2iso/Makefile.in: Regenerate.
* libm2log/Makefile.in: Regenerate.
* libm2min/Makefile.in: Regenerate.
* libm2pim/Makefile.in: Regenerate.
---
libgm2/configure | 33 ++++++++++++++++++++++++++++++---
libgm2/configure.ac | 16 +++++++++++++++-
libgm2/libm2cor/Makefile.am | 7 ++++++-
libgm2/libm2cor/Makefile.in | 4 +++-
libgm2/libm2iso/Makefile.am | 7 ++++++-
libgm2/libm2iso/Makefile.in | 4 +++-
libgm2/libm2log/Makefile.am | 7 ++++++-
libgm2/libm2log/Makefile.in | 4 +++-
libgm2/libm2min/Makefile.am | 7 ++++++-
libgm2/libm2min/Makefile.in | 4 +++-
libgm2/libm2pim/Makefile.am | 8 ++++++--
libgm2/libm2pim/Makefile.in | 4 +++-
12 files changed, 90 insertions(+), 15 deletions(-)
@@ -634,6 +634,8 @@ ac_subst_vars='am__EXEEXT_FALSE
am__EXEEXT_TRUE
LTLIBOBJS
LIBOBJS
+TARGET_DARWIN_FALSE
+TARGET_DARWIN_TRUE
BUILD_LOGLIB_FALSE
BUILD_LOGLIB_TRUE
BUILD_CORLIB_FALSE
@@ -12698,7 +12700,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12701 "configure"
+#line 12703 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12804,7 +12806,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12807 "configure"
+#line 12809 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -19508,7 +19510,7 @@ $as_echo "$as_me: libgm2 has finished checking target libc and libm contents." >
# All known M2_HOST_OS values. This is the union of all host operating systems
# supported by gm2.
-M2_SUPPORTED_HOST_OS="aix freebsd hurd linux netbsd openbsd solaris windows"
+M2_SUPPORTED_HOST_OS="aix freebsd hurd linux netbsd openbsd solaris windows darwin"
M2_HOST_OS=unknown
@@ -19523,6 +19525,19 @@ case ${host} in
*-*-gnu*) M2_HOST_OS=hurd ;;
esac
+M2_TARGET_OS=unknown
+
+case ${target} in
+ *-*-darwin*) M2_TARGET_OS=darwin ;;
+ *-*-freebsd*) M2_TARGET_OS=freebsd ;;
+ *-*-linux*) M2_TARGET_OS=linux ;;
+ *-*-netbsd*) M2_TARGET_OS=netbsd ;;
+ *-*-openbsd*) M2_TARGET_OS=openbsd ;;
+ *-*-solaris2*) M2_TARGET_OS=solaris ;;
+ *-*-aix*) M2_TARGET_OS=aix ;;
+ *-*-gnu*) M2_TARGET_OS=hurd ;;
+esac
+
# M2_HOST_OS=unknown
if test x${M2_HOST_OS} = xunknown; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: unsupported host, will build a minimal m2 library" >&5
@@ -19672,6 +19687,14 @@ else
BUILD_LOGLIB_FALSE=
fi
+ if test x$M2_TARGET_OS = xdarwin; then
+ TARGET_DARWIN_TRUE=
+ TARGET_DARWIN_FALSE='#'
+else
+ TARGET_DARWIN_TRUE='#'
+ TARGET_DARWIN_FALSE=
+fi
+
ac_config_files="$ac_config_files Makefile libm2min/Makefile libm2pim/Makefile libm2iso/Makefile libm2cor/Makefile libm2log/Makefile"
@@ -19841,6 +19864,10 @@ if test -z "${BUILD_LOGLIB_TRUE}" && test -z "${BUILD_LOGLIB_FALSE}"; then
as_fn_error $? "conditional \"BUILD_LOGLIB\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${TARGET_DARWIN_TRUE}" && test -z "${TARGET_DARWIN_FALSE}"; then
+ as_fn_error $? "conditional \"TARGET_DARWIN\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
: "${CONFIG_STATUS=./config.status}"
ac_write_fail=0
@@ -267,7 +267,7 @@ AC_MSG_NOTICE([libgm2 has finished checking target libc and libm contents.])
# All known M2_HOST_OS values. This is the union of all host operating systems
# supported by gm2.
-M2_SUPPORTED_HOST_OS="aix freebsd hurd linux netbsd openbsd solaris windows"
+M2_SUPPORTED_HOST_OS="aix freebsd hurd linux netbsd openbsd solaris windows darwin"
M2_HOST_OS=unknown
@@ -282,6 +282,19 @@ case ${host} in
*-*-gnu*) M2_HOST_OS=hurd ;;
esac
+M2_TARGET_OS=unknown
+
+case ${target} in
+ *-*-darwin*) M2_TARGET_OS=darwin ;;
+ *-*-freebsd*) M2_TARGET_OS=freebsd ;;
+ *-*-linux*) M2_TARGET_OS=linux ;;
+ *-*-netbsd*) M2_TARGET_OS=netbsd ;;
+ *-*-openbsd*) M2_TARGET_OS=openbsd ;;
+ *-*-solaris2*) M2_TARGET_OS=solaris ;;
+ *-*-aix*) M2_TARGET_OS=aix ;;
+ *-*-gnu*) M2_TARGET_OS=hurd ;;
+esac
+
# M2_HOST_OS=unknown
if test x${M2_HOST_OS} = xunknown; then
AC_MSG_NOTICE([unsupported host, will build a minimal m2 library])
@@ -366,6 +379,7 @@ AM_CONDITIONAL([BUILD_PIMLIB], [test x$BUILD_PIMLIB = xtrue])
AM_CONDITIONAL([BUILD_ISOLIB], [test x$BUILD_ISOLIB = xtrue])
AM_CONDITIONAL([BUILD_CORLIB], [test x$BUILD_CORLIB = xtrue])
AM_CONDITIONAL([BUILD_LOGLIB], [test x$BUILD_LOGLIB = xtrue])
+AM_CONDITIONAL([TARGET_DARWIN], [test x$M2_TARGET_OS = xdarwin])
AC_CONFIG_SRCDIR([Makefile.am])
AC_CONFIG_FILES([Makefile libm2min/Makefile libm2pim/Makefile libm2iso/Makefile
@@ -114,7 +114,12 @@ libm2cordir = libm2cor
libm2cor_la_DEPENDENCIES = SYSTEM.def $(addsuffix .lo, $(basename $(libm2cor_la_SOURCES)))
libm2cor_la_CFLAGS = -I. -I.. -I$(GM2_SRC)/gm2-libs -I$(GM2_SRC)/gm2-libs-iso -DBUILD_GM2_LIBS -I@srcdir@/../ -I@srcdir@/../libm2iso
libm2cor_la_M2FLAGS = -I. -I$(GM2_SRC)/gm2-libs-coroutines -I$(GM2_SRC)/gm2-libs -I$(GM2_SRC)/gm2-libs-iso -fm2-g -g
-libm2cor_la_LINK = $(LINK) -version-info $(libtool_VERSION)
+if TARGET_DARWIN
+libm2cor_la_link_flags = -Wl,-undefined,dynamic_lookup
+else
+libm2cor_la_link_flags =
+endif
+libm2cor_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2cor_la_link_flags)
BUILT_SOURCES = SYSTEM.def
CLEANFILES = SYSTEM.def
@@ -463,7 +463,9 @@ FLAGS_TO_PASS = $(AM_MAKEFLAGS)
@BUILD_CORLIB_TRUE@libm2cor_la_DEPENDENCIES = SYSTEM.def $(addsuffix .lo, $(basename $(libm2cor_la_SOURCES)))
@BUILD_CORLIB_TRUE@libm2cor_la_CFLAGS = -I. -I.. -I$(GM2_SRC)/gm2-libs -I$(GM2_SRC)/gm2-libs-iso -DBUILD_GM2_LIBS -I@srcdir@/../ -I@srcdir@/../libm2iso
@BUILD_CORLIB_TRUE@libm2cor_la_M2FLAGS = -I. -I$(GM2_SRC)/gm2-libs-coroutines -I$(GM2_SRC)/gm2-libs -I$(GM2_SRC)/gm2-libs-iso -fm2-g -g
-@BUILD_CORLIB_TRUE@libm2cor_la_LINK = $(LINK) -version-info $(libtool_VERSION)
+@BUILD_CORLIB_TRUE@@TARGET_DARWIN_FALSE@libm2cor_la_link_flags =
+@BUILD_CORLIB_TRUE@@TARGET_DARWIN_TRUE@libm2cor_la_link_flags = -Wl,-undefined,dynamic_lookup
+@BUILD_CORLIB_TRUE@libm2cor_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2cor_la_link_flags)
@BUILD_CORLIB_TRUE@BUILT_SOURCES = SYSTEM.def
@BUILD_CORLIB_TRUE@CLEANFILES = SYSTEM.def
@BUILD_CORLIB_TRUE@M2LIBDIR = /m2/m2cor/
@@ -187,7 +187,12 @@ libm2isodir = libm2iso
libm2iso_la_DEPENDENCIES = SYSTEM.def $(addsuffix .lo, $(basename $(libm2iso_la_SOURCES)))
libm2iso_la_CFLAGS = $(C_INCLUDES) -I. -I.. -I$(GM2_SRC)/gm2-libs-iso -I$(GM2_SRC)/gm2-libs -DBUILD_GM2_LIBS -I@srcdir@/../ -I../../../gcc -I$(GCC_DIR) -I$(GCC_DIR)/../include -I../../libgcc -I$(GCC_DIR)/../libgcc -I$(MULTIBUILDTOP)../../gcc/include
libm2iso_la_M2FLAGS = -I. -Ilibm2iso -I$(GM2_SRC)/gm2-libs-iso -I$(GM2_SRC)/gm2-libs -fiso -fextended-opaque -fm2-g -g
-libm2iso_la_LINK = $(LINK) -version-info $(libtool_VERSION)
+if TARGET_DARWIN
+libm2iso_la_link_flags = -Wl,-undefined,dynamic_lookup
+else
+libm2iso_la_link_flags =
+endif
+libm2iso_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2iso_la_link_flags)
CLEANFILES = SYSTEM.def
BUILT_SOURCES = SYSTEM.def
@@ -563,7 +563,9 @@ FLAGS_TO_PASS = $(AM_MAKEFLAGS)
@BUILD_ISOLIB_TRUE@libm2iso_la_DEPENDENCIES = SYSTEM.def $(addsuffix .lo, $(basename $(libm2iso_la_SOURCES)))
@BUILD_ISOLIB_TRUE@libm2iso_la_CFLAGS = $(C_INCLUDES) -I. -I.. -I$(GM2_SRC)/gm2-libs-iso -I$(GM2_SRC)/gm2-libs -DBUILD_GM2_LIBS -I@srcdir@/../ -I../../../gcc -I$(GCC_DIR) -I$(GCC_DIR)/../include -I../../libgcc -I$(GCC_DIR)/../libgcc -I$(MULTIBUILDTOP)../../gcc/include
@BUILD_ISOLIB_TRUE@libm2iso_la_M2FLAGS = -I. -Ilibm2iso -I$(GM2_SRC)/gm2-libs-iso -I$(GM2_SRC)/gm2-libs -fiso -fextended-opaque -fm2-g -g
-@BUILD_ISOLIB_TRUE@libm2iso_la_LINK = $(LINK) -version-info $(libtool_VERSION)
+@BUILD_ISOLIB_TRUE@@TARGET_DARWIN_FALSE@libm2iso_la_link_flags =
+@BUILD_ISOLIB_TRUE@@TARGET_DARWIN_TRUE@libm2iso_la_link_flags = -Wl,-undefined,dynamic_lookup
+@BUILD_ISOLIB_TRUE@libm2iso_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2iso_la_link_flags)
@BUILD_ISOLIB_TRUE@CLEANFILES = SYSTEM.def
@BUILD_ISOLIB_TRUE@BUILT_SOURCES = SYSTEM.def
@BUILD_ISOLIB_TRUE@M2LIBDIR = /m2/m2iso/
@@ -132,7 +132,12 @@ libm2log_la_SOURCES = $(M2MODS) Break.c
libm2log_la_DEPENDENCIES = ../libm2pim/SYSTEM.def $(addsuffix .lo, $(basename $(libm2log_la_SOURCES)))
libm2log_la_CFLAGS = -I. -DBUILD_GM2_LIBS -I@srcdir@/../
libm2log_la_M2FLAGS = -I../libm2pim -I$(GM2_SRC)/gm2-libs-pim -I$(GM2_SRC)/gm2-libs -I$(GM2_SRC)/gm2-libs-iso
-libm2log_la_LINK = $(LINK) -version-info $(libtool_VERSION)
+if TARGET_DARWIN
+libm2log_la_link_flags = -Wl,-undefined,dynamic_lookup
+else
+libm2log_la_link_flags =
+endif
+libm2log_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2log_la_link_flags)
BUILT_SOURCES = ../libm2pim/SYSTEM.def
M2LIBDIR = /m2/m2log/
@@ -471,7 +471,9 @@ FLAGS_TO_PASS = $(AM_MAKEFLAGS)
@BUILD_LOGLIB_TRUE@libm2log_la_DEPENDENCIES = ../libm2pim/SYSTEM.def $(addsuffix .lo, $(basename $(libm2log_la_SOURCES)))
@BUILD_LOGLIB_TRUE@libm2log_la_CFLAGS = -I. -DBUILD_GM2_LIBS -I@srcdir@/../
@BUILD_LOGLIB_TRUE@libm2log_la_M2FLAGS = -I../libm2pim -I$(GM2_SRC)/gm2-libs-pim -I$(GM2_SRC)/gm2-libs -I$(GM2_SRC)/gm2-libs-iso
-@BUILD_LOGLIB_TRUE@libm2log_la_LINK = $(LINK) -version-info $(libtool_VERSION)
+@BUILD_LOGLIB_TRUE@@TARGET_DARWIN_FALSE@libm2log_la_link_flags =
+@BUILD_LOGLIB_TRUE@@TARGET_DARWIN_TRUE@libm2log_la_link_flags = -Wl,-undefined,dynamic_lookup
+@BUILD_LOGLIB_TRUE@libm2log_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2log_la_link_flags)
@BUILD_LOGLIB_TRUE@BUILT_SOURCES = ../libm2pim/SYSTEM.def
@BUILD_LOGLIB_TRUE@M2LIBDIR = /m2/m2log/
all: $(BUILT_SOURCES)
@@ -106,7 +106,12 @@ libm2min_la_DEPENDENCIES = SYSTEM.def $(addsuffix .lo, $(basename $(libm2min_la_
libm2min_la_CFLAGS = -I. -I$(GM2_SRC)/gm2-libs-min -I$(GM2_SRC)/gm2-libs
libm2min_la_M2FLAGS = -I. -I$(GM2_SRC)/gm2-libs-min -I$(GM2_SRC)/gm2-libs -fno-exceptions \
-fno-m2-plugin -fno-scaffold-dynamic -fno-scaffold-main
-libm2min_la_LINK = $(LINK) -version-info $(libtool_VERSION)
+if TARGET_DARWIN
+libm2min_la_link_flags = -Wl,-undefined,dynamic_lookup
+else
+libm2min_la_link_flags =
+endif
+libm2min_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2min_la_link_flags)
BUILT_SOURCES = SYSTEM.def
CLEANFILES = SYSTEM.def
@@ -439,7 +439,9 @@ libm2min_la_CFLAGS = -I. -I$(GM2_SRC)/gm2-libs-min -I$(GM2_SRC)/gm2-libs
libm2min_la_M2FLAGS = -I. -I$(GM2_SRC)/gm2-libs-min -I$(GM2_SRC)/gm2-libs -fno-exceptions \
-fno-m2-plugin -fno-scaffold-dynamic -fno-scaffold-main
-libm2min_la_LINK = $(LINK) -version-info $(libtool_VERSION)
+@TARGET_DARWIN_FALSE@libm2min_la_link_flags =
+@TARGET_DARWIN_TRUE@libm2min_la_link_flags = -Wl,-undefined,dynamic_lookup
+libm2min_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2min_la_link_flags)
BUILT_SOURCES = SYSTEM.def
CLEANFILES = SYSTEM.def
M2LIBDIR = /m2/m2min/
@@ -33,7 +33,6 @@ slibdir = @slibdir@
toolexeclibdir=@toolexeclibdir@
toolexecdir=@toolexecdir@
-GM2_FOR_TARGET=@GM2_FOR_TARGET@
MULTIDIR := $(shell $(CC) $(CFLAGS) -print-multi-directory)
MULTIOSDIR := $(shell $(CC) $(CFLAGS) -print-multi-os-directory)
@@ -168,7 +167,12 @@ libm2pimdir = libm2pim
libm2pim_la_DEPENDENCIES = SYSTEM.def $(addsuffix .lo, $(basename $(libm2pim_la_SOURCES)))
libm2pim_la_CFLAGS = -I. -I.. -I$(GM2_SRC)/gm2-libs -I$(GM2_SRC)/gm2-libs-iso -DBUILD_GM2_LIBS -I@srcdir@/../ -I@srcdir@/../libm2iso
libm2pim_la_M2FLAGS = -I. -I$(GM2_SRC)/gm2-libs -I$(GM2_SRC)/gm2-libs-iso -fm2-g -g
-libm2pim_la_LINK = $(LINK) -version-info $(libtool_VERSION)
+if TARGET_DARWIN
+libm2pim_la_link_flags = -Wl,-undefined,dynamic_lookup
+else
+libm2pim_la_link_flags =
+endif
+libm2pim_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2pim_la_link_flags)
BUILT_SOURCES = SYSTEM.def
CLEANFILES = SYSTEM.def
@@ -534,7 +534,9 @@ FLAGS_TO_PASS = $(AM_MAKEFLAGS)
@BUILD_PIMLIB_TRUE@libm2pim_la_DEPENDENCIES = SYSTEM.def $(addsuffix .lo, $(basename $(libm2pim_la_SOURCES)))
@BUILD_PIMLIB_TRUE@libm2pim_la_CFLAGS = -I. -I.. -I$(GM2_SRC)/gm2-libs -I$(GM2_SRC)/gm2-libs-iso -DBUILD_GM2_LIBS -I@srcdir@/../ -I@srcdir@/../libm2iso
@BUILD_PIMLIB_TRUE@libm2pim_la_M2FLAGS = -I. -I$(GM2_SRC)/gm2-libs -I$(GM2_SRC)/gm2-libs-iso -fm2-g -g
-@BUILD_PIMLIB_TRUE@libm2pim_la_LINK = $(LINK) -version-info $(libtool_VERSION)
+@BUILD_PIMLIB_TRUE@@TARGET_DARWIN_FALSE@libm2pim_la_link_flags =
+@BUILD_PIMLIB_TRUE@@TARGET_DARWIN_TRUE@libm2pim_la_link_flags = -Wl,-undefined,dynamic_lookup
+@BUILD_PIMLIB_TRUE@libm2pim_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2pim_la_link_flags)
@BUILD_PIMLIB_TRUE@BUILT_SOURCES = SYSTEM.def
@BUILD_PIMLIB_TRUE@CLEANFILES = SYSTEM.def
@BUILD_PIMLIB_TRUE@M2LIBDIR = /m2/m2pim/