mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-27 05:44:15 +08:00
6a6d3817af
Recent Darwin versions place contraints on the use of run paths specified in environment variables. This breaks some assumptions in the GCC build. This change allows the user to configure a Darwin build to use '@rpath/libraryname.dylib' in library names and then to add an embedded runpath to executables (and libraries with dependents). The embedded runpath is added by default unless the user adds '-nodefaultrpaths' to the link line. For an installed compiler, it means that any executable built with that compiler will reference the runtimes installed with the compiler (equivalent to hard-coding the library path into the name of the library). During build-time configurations any "-B" entries will be added to the runpath thus the newly-built libraries will be found by exes. Since the install name is set in libtool, that decision needs to be available here (but might also cause dependent ones in Makefiles, so we need to export a conditional). This facility is not available for Darwin 8 or earlier, however the existing environment variable runpath does work there. We default this on for systems where the external DYLD_LIBRARY_PATH does not work and off for Darwin 8 or earlier. For systems that can use either method, if the value is unset, we use the default (which is currently DYLD_LIBRARY_PATH). ChangeLog: * configure: Regenerate. * configure.ac: Do not add default runpaths to GCC exes when we are building -static-libstdc++/-static-libgcc (the default). * libtool.m4: Add 'enable-darwin-at-runpath'. Act on the enable flag to alter Darwin libraries to use @rpath names. gcc/ChangeLog: * aclocal.m4: Regenerate. * configure: Regenerate. * configure.ac: Handle Darwin rpaths. * config/darwin.h: Handle Darwin rpaths. * config/darwin.opt: Handle Darwin rpaths. * Makefile.in: Handle Darwin rpaths. gcc/ada/ChangeLog: * gcc-interface/Makefile.in: Handle Darwin rpaths. gcc/jit/ChangeLog: * Make-lang.in: Handle Darwin rpaths. libatomic/ChangeLog: * Makefile.am: Handle Darwin rpaths. * Makefile.in: Regenerate. * configure: Regenerate. * configure.ac: Handle Darwin rpaths. libbacktrace/ChangeLog: * configure: Regenerate. * configure.ac: Handle Darwin rpaths. libcc1/ChangeLog: * configure: Regenerate. libffi/ChangeLog: * Makefile.am: Handle Darwin rpaths. * Makefile.in: Regenerate. * configure: Regenerate. libgcc/ChangeLog: * config/t-slibgcc-darwin: Generate libgcc_s with an @rpath name. * config.host: Handle Darwin rpaths. libgfortran/ChangeLog: * Makefile.am: Handle Darwin rpaths. * Makefile.in: Regenerate. * configure: Regenerate. * configure.ac: Handle Darwin rpaths libgm2/ChangeLog: * Makefile.am: Handle Darwin rpaths. * Makefile.in: Regenerate. * aclocal.m4: Regenerate. * configure: Regenerate. * configure.ac: Handle Darwin rpaths. * libm2cor/Makefile.am: Handle Darwin rpaths. * libm2cor/Makefile.in: Regenerate. * libm2iso/Makefile.am: Handle Darwin rpaths. * libm2iso/Makefile.in: Regenerate. * libm2log/Makefile.am: Handle Darwin rpaths. * libm2log/Makefile.in: Regenerate. * libm2min/Makefile.am: Handle Darwin rpaths. * libm2min/Makefile.in: Regenerate. * libm2pim/Makefile.am: Handle Darwin rpaths. * libm2pim/Makefile.in: Regenerate. libgomp/ChangeLog: * Makefile.am: Handle Darwin rpaths. * Makefile.in: Regenerate. * configure: Regenerate. * configure.ac: Handle Darwin rpaths libitm/ChangeLog: * Makefile.am: Handle Darwin rpaths. * Makefile.in: Regenerate. * configure: Regenerate. * configure.ac: Handle Darwin rpaths. libobjc/ChangeLog: * configure: Regenerate. * configure.ac: Handle Darwin rpaths. libphobos/ChangeLog: * configure: Regenerate. * configure.ac: Handle Darwin rpaths. * libdruntime/Makefile.am: Handle Darwin rpaths. * libdruntime/Makefile.in: Regenerate. * src/Makefile.am: Handle Darwin rpaths. * src/Makefile.in: Regenerate. libquadmath/ChangeLog: * Makefile.am: Handle Darwin rpaths. * Makefile.in: Regenerate. * configure: Regenerate. * configure.ac: Handle Darwin rpaths. libsanitizer/ChangeLog: * asan/Makefile.am: Handle Darwin rpaths. * asan/Makefile.in: Regenerate. * configure: Regenerate. * hwasan/Makefile.am: Handle Darwin rpaths. * hwasan/Makefile.in: Regenerate. * lsan/Makefile.am: Handle Darwin rpaths. * lsan/Makefile.in: Regenerate. * tsan/Makefile.am: Handle Darwin rpaths. * tsan/Makefile.in: Regenerate. * ubsan/Makefile.am: Handle Darwin rpaths. * ubsan/Makefile.in: Regenerate. libssp/ChangeLog: * Makefile.am: Handle Darwin rpaths. * Makefile.in: Regenerate. * configure: Regenerate. * configure.ac: Handle Darwin rpaths. libstdc++-v3/ChangeLog: * configure: Regenerate. * configure.ac: Handle Darwin rpaths. * src/Makefile.am: Handle Darwin rpaths. * src/Makefile.in: Regenerate. libvtv/ChangeLog: * configure: Regenerate. * configure.ac: Handle Darwin rpaths. lto-plugin/ChangeLog: * configure: Regenerate. * configure.ac: Handle Darwin rpaths. zlib/ChangeLog: * configure: Regenerate. * configure.ac: Handle Darwin rpaths.
307 lines
9.6 KiB
Plaintext
307 lines
9.6 KiB
Plaintext
# Process this file with autoconf to produce a configure script.
|
|
# Copyright (C) 2006-2023 Free Software Foundation, Inc.
|
|
#
|
|
# GCC is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3, or (at your option)
|
|
# any later version.
|
|
#
|
|
# GCC is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with GCC; see the file COPYING3. If not see
|
|
# <http://www.gnu.org/licenses/>.
|
|
|
|
# This requires that you have your environment set-up to use explicit
|
|
# versions of automake and autoconf.
|
|
#
|
|
# export ACLOCAL=/usr/bin/aclocal-1.15
|
|
# export AUTOMAKE=/usr/bin/automake-1.15
|
|
# export AUTOM4TE=/usr/bin/autom4te2.69
|
|
# export AUTOCONF=/usr/bin/autoconf2.69
|
|
#
|
|
# autoreconf2.69
|
|
#
|
|
|
|
AC_INIT(package-unused, version-unused,, libphobos)
|
|
AC_CONFIG_SRCDIR(libdruntime/gcc/attribute.d)
|
|
AC_CONFIG_HEADERS(config.h)
|
|
|
|
AM_ENABLE_MULTILIB(, ..)
|
|
AC_CANONICAL_SYSTEM
|
|
AC_USE_SYSTEM_EXTENSIONS
|
|
|
|
target_alias=${target_alias-$target}
|
|
AC_SUBST(target_alias)
|
|
|
|
# 1.11.1: Require that version of automake.
|
|
# foreign: Don't require README, INSTALL, NEWS, etc.
|
|
# no-define: Don't define PACKAGE and VERSION.
|
|
# no-dependencies: Don't generate automatic dependencies.
|
|
# (because it breaks when using bootstrap-lean, since some of the
|
|
# headers are gone at "make install" time).
|
|
# subdir-objects: Build objects in sub-directories.
|
|
# -Wall: Issue all automake warnings.
|
|
# -Wno-portability: Don't warn about constructs supported by GNU make.
|
|
# (because GCC requires GNU make anyhow).
|
|
# -Wno-override: Overrides used in testsuite.
|
|
AM_INIT_AUTOMAKE([1.11.1 foreign no-dist no-define no-dependencies subdir-objects -Wall -Wno-portability -Wno-override])
|
|
|
|
m4_rename([_AC_ARG_VAR_PRECIOUS],[glibd_PRECIOUS])
|
|
m4_define([_AC_ARG_VAR_PRECIOUS],[])
|
|
AM_PROG_AS
|
|
AC_PROG_CC
|
|
AC_PROG_GDC
|
|
WITH_LOCAL_DRUNTIME([GDC_CHECK_COMPILE], [])
|
|
|
|
m4_rename_force([glibd_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
|
|
|
|
AC_SUBST(CFLAGS)
|
|
AM_MAINTAINER_MODE
|
|
AC_PROG_RANLIB
|
|
AC_PROG_INSTALL
|
|
AC_PROG_MAKE_SET
|
|
|
|
# Add CET specific flags if CET is enabled
|
|
GCC_CET_FLAGS(CET_FLAGS)
|
|
AC_SUBST(CET_FLAGS)
|
|
# To ensure that runtime code for CET is compiled in, add in D version flags.
|
|
AS_IF([test x$enable_cet = xyes], [
|
|
CET_DFLAGS="$CET_FLAGS -fversion=CET"
|
|
DCFG_ENABLE_CET=true
|
|
], [
|
|
CET_DFLAGS=
|
|
DCFG_ENABLE_CET=false
|
|
])
|
|
AC_SUBST(CET_DFLAGS)
|
|
AC_SUBST(DCFG_ENABLE_CET)
|
|
|
|
# This should be inherited in the recursive make, but ensure it is defined.
|
|
test "$AR" || AR=ar
|
|
AC_SUBST(AR)
|
|
|
|
CC_FOR_BUILD=${CC_FOR_BUILD:-gcc}
|
|
AC_SUBST(CC_FOR_BUILD)
|
|
AC_SUBST(CFLAGS_FOR_BUILD)
|
|
|
|
# Enable libtool
|
|
LT_INIT(dlopen)
|
|
AM_PROG_LIBTOOL
|
|
WITH_LOCAL_DRUNTIME([LT_LANG([D])], [])
|
|
AC_SUBST(enable_shared)
|
|
AC_SUBST(enable_static)
|
|
AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
|
|
|
|
# libtool variables for Phobos shared and position-independent compiles.
|
|
#
|
|
# Use phobos_lt_pic_flag to designate the automake variable
|
|
# used to encapsulate the default libtool approach to creating objects
|
|
# with position-independent code. Default: -prefer-pic.
|
|
#
|
|
# Use phobos_compiler_shared_flag to designate the compile-time flags for
|
|
# creating shared objects. Default: -fversion=Shared.
|
|
#
|
|
# Use phobos_compiler_pic_flag to designate the compile-time flags for
|
|
# creating position-independent objects. This varies with the target
|
|
# hardware and operating system, but is often: -fPIC.
|
|
#
|
|
# The distinction between pic and shared compilation flags is not present in
|
|
# libtool, and so we make it here. How it is handled is that in shared
|
|
# compilations the `lt_prog_compiler_pic_D' variable is used to instead
|
|
# ensure that conditional compilation of shared runtime code is compiled in.
|
|
if test "$enable_shared" = yes; then
|
|
phobos_lt_pic_flag="-prefer-pic"
|
|
phobos_compiler_pic_flag="$lt_prog_compiler_pic_D"
|
|
phobos_compiler_shared_flag="-fversion=Shared"
|
|
else
|
|
phobos_lt_pic_flag=
|
|
phobos_compiler_pic_flag=
|
|
phobos_compiler_shared_flag=
|
|
fi
|
|
AC_SUBST(phobos_lt_pic_flag)
|
|
AC_SUBST(phobos_compiler_pic_flag)
|
|
AC_SUBST(phobos_compiler_shared_flag)
|
|
|
|
# Override the libtool's pic_flag and pic_mode.
|
|
# Do this step after AM_PROG_LIBTOOL, but before AC_OUTPUT.
|
|
# NB: this impacts --with-pic and --without-pic.
|
|
lt_prog_compiler_pic_D="$phobos_compiler_pic_flag $phobos_compiler_shared_flag"
|
|
pic_mode='default'
|
|
|
|
# Determine what GCC version number to use in filesystem paths.
|
|
GCC_BASE_VER
|
|
|
|
# libphobos/libdruntime specific options and feature detection
|
|
DRUNTIME_CONFIGURE
|
|
DRUNTIME_MULTILIB
|
|
DRUNTIME_WERROR
|
|
DRUNTIME_SECTION_FLAGS
|
|
DRUNTIME_CPU_SOURCES
|
|
DRUNTIME_OS_SOURCES
|
|
DRUNTIME_OS_THREAD_MODEL
|
|
DRUNTIME_OS_ARM_EABI_UNWINDER
|
|
DRUNTIME_OS_MINFO_BRACKETING
|
|
DRUNTIME_OS_DLPI_TLS_MODID
|
|
DRUNTIME_OS_LINK_SPEC
|
|
DRUNTIME_LIBRARIES_CLIB
|
|
|
|
WITH_LOCAL_DRUNTIME([
|
|
AC_LANG_PUSH([D])
|
|
AC_SEARCH_LIBS([malloc], [c])
|
|
AC_SEARCH_LIBS([pthread_create], [pthread])
|
|
AC_SEARCH_LIBS([cosf], [m])
|
|
AC_SEARCH_LIBS([clock_gettime], [rt])
|
|
DRUNTIME_ENABLE_ATOMIC_BUILTINS
|
|
AC_LANG_POP([D])
|
|
], [-nophoboslib])
|
|
|
|
DRUNTIME_LIBRARIES_ATOMIC
|
|
DRUNTIME_LIBRARIES_BACKTRACE
|
|
DRUNTIME_LIBRARIES_DLOPEN
|
|
DRUNTIME_LIBRARIES_NET
|
|
DRUNTIME_LIBRARIES_UCONTEXT
|
|
DRUNTIME_LIBRARIES_ZLIB
|
|
DRUNTIME_INSTALL_DIRECTORIES
|
|
|
|
AC_MSG_CHECKING([for --enable-libphobos])
|
|
AC_ARG_ENABLE(libphobos,
|
|
[AS_HELP_STRING([--enable-libphobos], [Enable libphobos])])
|
|
AC_MSG_RESULT($enable_libphobos)
|
|
|
|
AC_MSG_CHECKING([for --with-libphobos-druntime-only])
|
|
AC_ARG_WITH(libphobos-druntime-only,
|
|
AS_HELP_STRING([--with-libphobos-druntime-only={yes,no,auto}],
|
|
[build only the druntime library (default: auto)]),,
|
|
[with_libphobos_druntime_only=auto])
|
|
AC_MSG_RESULT($with_libphobos_druntime_only)
|
|
|
|
case "$with_libphobos_druntime_only" in
|
|
yes|no|auto) ;;
|
|
*) AC_MSG_ERROR([Invalid argument for --with-libphobos-druntime-only]) ;;
|
|
esac
|
|
|
|
# See if supported.
|
|
unset LIBPHOBOS_SUPPORTED
|
|
unset LIBDRUNTIME_ONLY
|
|
AC_MSG_CHECKING([for host support for libphobos])
|
|
. ${srcdir}/configure.tgt
|
|
case ${host} in
|
|
x86_64-*-solaris2.* | i?86-*-solaris2.*)
|
|
# 64-bit D execution fails with Solaris ld without -z relax=transtls support.
|
|
if test "$druntime_ld_gld" = "no" && test "$druntime_ld_relax_transtls" = "no"; then
|
|
LIBPHOBOS_SUPPORTED=no
|
|
fi
|
|
;;
|
|
esac
|
|
AC_MSG_RESULT($LIBPHOBOS_SUPPORTED)
|
|
|
|
# Decide if it's usable.
|
|
case $LIBPHOBOS_SUPPORTED:$enable_libphobos in
|
|
*:no) use_libphobos=no ;;
|
|
*:yes) use_libphobos=yes ;;
|
|
yes:*) use_libphobos=yes ;;
|
|
*:*) use_libphobos=no ;;
|
|
esac
|
|
AM_CONDITIONAL(ENABLE_LIBPHOBOS, test x$use_libphobos = xyes)
|
|
|
|
# Decide if only libdruntime should be built.
|
|
case $LIBDRUNTIME_ONLY:$with_libphobos_druntime_only in
|
|
*:no) only_libdruntime=no ;;
|
|
*:yes) only_libdruntime=yes ;;
|
|
yes:*) only_libdruntime=yes ;;
|
|
*:*) only_libdruntime=no ;;
|
|
esac
|
|
AM_CONDITIONAL(ENABLE_LIBDRUNTIME_ONLY, test x$only_libdruntime = xyes)
|
|
|
|
# Enable expensive internal checks
|
|
AC_ARG_ENABLE(libphobos-checking,
|
|
[AS_HELP_STRING([[--enable-libphobos-checking[=LIST]]],
|
|
[enable expensive run-time checks. With LIST,
|
|
enable only specific categories of checks.
|
|
Categories are: yes,no,all,none,release.
|
|
Flags are: assert,valgrind or other strings])],
|
|
[ac_checking_flags="${enableval}"],[ac_checking_flags=release])
|
|
IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="$IFS,"
|
|
for check in release $ac_checking_flags
|
|
do
|
|
case $check in
|
|
# These set all the flags to specific states
|
|
yes|all) RELEASE_FLAG="-fno-release" ; ASSERT_FLAG= ;
|
|
VALGRIND_FLAG= ;;
|
|
no|none|release) RELEASE_FLAG="-frelease" ; ASSERT_FLAG= ;
|
|
VALGRIND_FLAG= ;;
|
|
# These enable particular checks
|
|
assert) ASSERT_FLAG="-fassert" ;;
|
|
valgrind) VALGRIND_FLAG="-fdebug=VALGRIND" ;;
|
|
# Accept
|
|
*) ;;
|
|
esac
|
|
done
|
|
IFS="$ac_save_IFS"
|
|
CHECKING_DFLAGS="$RELEASE_FLAG $ASSERT_FLAG $VALGRIND_FLAG"
|
|
AC_SUBST(CHECKING_DFLAGS)
|
|
|
|
|
|
# Add drtbegin.o/drtend.o to startfile/endfile specs in libgphobos.spec
|
|
if test "$DCFG_MINFO_BRACKETING" = "false"; then
|
|
DRTSTUFF_SPEC=$srcdir/src/drtstuff.spec
|
|
else
|
|
DRTSTUFF_SPEC=/dev/null
|
|
fi
|
|
AC_SUBST_FILE(DRTSTUFF_SPEC)
|
|
|
|
# Add dependencies for libgphobos.spec file
|
|
SPEC_PHOBOS_DEPS="$LIBS"
|
|
AC_SUBST(SPEC_PHOBOS_DEPS)
|
|
|
|
# Libdruntime / phobos soname version
|
|
libtool_VERSION=4:0:0
|
|
AC_SUBST(libtool_VERSION)
|
|
|
|
# Set default flags (after DRUNTIME_WERROR!)
|
|
if test -z "$GDCFLAGS"; then
|
|
GDCFLAGS="-g -O2"
|
|
fi
|
|
AC_SUBST(GDCFLAGS)
|
|
|
|
WARN_DFLAGS="-Wall $WERROR_FLAG"
|
|
AC_SUBST(WARN_DFLAGS)
|
|
|
|
# Sanity check for the cross-compilation case:
|
|
AC_CHECK_HEADER(stdio.h,:,
|
|
[AC_MSG_ERROR([cannot find stdio.h.])])
|
|
|
|
DRUNTIME_LIBRARIES_VALGRIND
|
|
|
|
AC_CONFIG_FILES(Makefile)
|
|
|
|
AC_CONFIG_FILES(libdruntime/gcc/config.d libdruntime/gcc/libbacktrace.d)
|
|
AC_CONFIG_FILES(src/libgphobos.spec)
|
|
AC_CONFIG_FILES([testsuite/testsuite_flags],[chmod +x testsuite/testsuite_flags])
|
|
|
|
# Multilibs need MULTISUBDIR defined correctly in certain makefiles so
|
|
# that multilib installs will end up installed in the correct place.
|
|
# The testsuite needs it for multilib-aware ABI baseline files.
|
|
# To work around this not being passed down from config-ml.in ->
|
|
# srcdir/Makefile.am -> srcdir/{src,libdruntime,...}/Makefile.am, manually
|
|
# append it here. Only modify Makefiles that have just been created.
|
|
#
|
|
# Also, get rid of this simulated-VPATH thing that automake does.
|
|
AC_CONFIG_FILES(AC_FOREACH([DIR], [libdruntime src testsuite], [DIR/Makefile ]),
|
|
[cat > vpsed$$ << \_EOF
|
|
s!`test -f '$<' || echo '$(srcdir)/'`!!
|
|
_EOF
|
|
sed -f vpsed$$ $ac_file > tmp$$
|
|
mv tmp$$ $ac_file
|
|
rm vpsed$$
|
|
echo 'MULTISUBDIR =' >> $ac_file
|
|
ml_norecursion=yes
|
|
. ${multi_basedir}/config-ml.in
|
|
AS_UNSET([ml_norecursion])
|
|
])
|
|
|
|
AC_OUTPUT
|