Commit 58c741a6 by Dave Korn Committed by Dave Korn

re PR target/40125 (libgcc_s DLL installed in wrong directory in cross toolchain)

gcc/ChangeLog:

	PR target/40125
	* config.gcc (i[34567]86-*-pe | i[34567]86-*-cygwin*): Select suitable
	t-dlldir{,-x} fragment for build and add it to tmake_file.
	(i[34567]86-*-mingw* | x86_64-*-mingw*): Likewise.
	* Makefile.in (libgcc.mvars): Also export SHLIB_DLLDIR to libgcc.
	* config/i386/t-dlldir: New file.
	(SHLIB_DLLDIR): Define.
	* config/i386/t-dlldir-x: New file.
	(SHLIB_DLLDIR): Define.
	* config/i386/t-cygming: Error out if SHLIB_DLLDIR is not set.
	(SHLIB_INSTALL): Use it.

libgcc/ChangeLog:

	PR target/40125
	* configure.ac: Call ACX_NONCANONICAL_TARGET.
	(toolexecdir): Calculate and AC_SUBST.
	(toolexeclibdir): Likewise.
	* Makefile.in (target_noncanonical): Import.
	(toolexecdir): Likewise.
	(toolexeclibdir): Likewise.
	* configure: Regenerate.

From-SVN: r169274
parent a7150b3d
2011-01-26 Dave Korn <dave.korn.cygwin@gmail.com>
PR target/40125
* config.gcc (i[34567]86-*-pe | i[34567]86-*-cygwin*): Select suitable
t-dlldir{,-x} fragment for build and add it to tmake_file.
(i[34567]86-*-mingw* | x86_64-*-mingw*): Likewise.
* Makefile.in (libgcc.mvars): Also export SHLIB_DLLDIR to libgcc.
* config/i386/t-dlldir: New file.
(SHLIB_DLLDIR): Define.
* config/i386/t-dlldir-x: New file.
(SHLIB_DLLDIR): Define.
* config/i386/t-cygming: Error out if SHLIB_DLLDIR is not set.
(SHLIB_INSTALL): Use it.
2011-01-26 Chung-Lin Tang <cltang@codesourcery.com>
PR target/47246
......
......@@ -1909,6 +1909,7 @@ libgcc.mvars: config.status Makefile $(LIB2ADD) $(LIB2ADD_ST) specs \
echo GCC_EXTRA_PARTS = '$(GCC_EXTRA_PARTS)' >> tmp-libgcc.mvars
echo SHLIB_LINK = '$(subst $(GCC_FOR_TARGET),$$(GCC_FOR_TARGET),$(SHLIB_LINK))' >> tmp-libgcc.mvars
echo SHLIB_INSTALL = '$(SHLIB_INSTALL)' >> tmp-libgcc.mvars
echo SHLIB_DLLDIR = '$(SHLIB_DLLDIR)' >> tmp-libgcc.mvars
echo SHLIB_EXT = '$(SHLIB_EXT)' >> tmp-libgcc.mvars
echo SHLIB_MKMAP = '$(call srcdirify,$(SHLIB_MKMAP))' >> tmp-libgcc.mvars
echo SHLIB_MKMAP_OPTS = '$(SHLIB_MKMAP_OPTS)' >> tmp-libgcc.mvars
......
......@@ -1424,7 +1424,13 @@ i[34567]86-*-pe | i[34567]86-*-cygwin*)
else
tmake_eh_file="i386/t-sjlj-eh"
fi
tmake_file="${tmake_file} ${tmake_eh_file} i386/t-cygming i386/t-cygwin"
# Shared libgcc DLL install dir depends on cross/native build.
if test x${host} = x${target} ; then
tmake_dlldir_file="i386/t-dlldir"
else
tmake_dlldir_file="i386/t-dlldir-x"
fi
tmake_file="${tmake_file} ${tmake_eh_file} ${tmake_dlldir_file} i386/t-cygming i386/t-cygwin"
target_gtfiles="\$(srcdir)/config/i386/winnt.c"
extra_options="${extra_options} i386/cygming.opt"
extra_objs="winnt.o winnt-stubs.o"
......@@ -1480,7 +1486,13 @@ i[34567]86-*-mingw* | x86_64-*-mingw*)
else
tmake_eh_file="i386/t-sjlj-eh"
fi
tmake_file="${tmake_file} ${tmake_eh_file} i386/t-cygming t-dfprules"
# Shared libgcc DLL install dir depends on cross/native build.
if test x${host} = x${target} ; then
tmake_dlldir_file="i386/t-dlldir"
else
tmake_dlldir_file="i386/t-dlldir-x"
fi
tmake_file="${tmake_file} ${tmake_eh_file} ${tmake_dlldir_file} i386/t-cygming t-dfprules"
case ${target} in
x86_64-w64-*)
tmake_file="${tmake_file} i386/t-mingw-w64"
......
......@@ -72,6 +72,11 @@ SHLIB_MAP = @shlib_map_file@
SHLIB_OBJS = @shlib_objs@
SHLIB_DIR = @multilib_dir@/shlib
SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
# SHLIB_DLLDIR is defined by including one of either t-dlldir or t-dlldir-x
# (native/cross build respectively) in the tmake_file list in gcc/config.gcc.
ifndef SHLIB_DLLDIR
$(error SHLIB_DLLDIR must be defined)
endif
SHLIB_LINK = $(LN_S) -f $(SHLIB_MAP) $(SHLIB_MAP).def && \
if [ ! -d $(SHLIB_DIR) ]; then \
......@@ -91,9 +96,10 @@ SHLIB_LINK = $(LN_S) -f $(SHLIB_MAP) $(SHLIB_MAP).def && \
# $(slibdir) double quoted to protect it from expansion while building
# libgcc.mk. We want this delayed until actual install time.
SHLIB_INSTALL = \
$$(mkinstalldirs) $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL); \
$$(mkinstalldirs) $$(DESTDIR)$$(SHLIB_DLLDIR) \
$$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL); \
$(INSTALL) $(SHLIB_DIR)/$(SHLIB_SONAME) \
$$(DESTDIR)$$(bindir)/$(SHLIB_SONAME); \
$$(DESTDIR)$$(SHLIB_DLLDIR)/$(SHLIB_SONAME); \
$(INSTALL_DATA) $(SHLIB_DIR)/$(SHLIB_IMPLIB) \
$$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_IMPLIB)
SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
......
# In a native build, target DLLs go in bindir, where they can be executed.
# Note double quoting to prevent variables from being evaluated until install
# time; we don't want to expand them during libgcc.mvars generation.
SHLIB_DLLDIR = $$(bindir)
# In a cross build, bindir contains host not target binaries, so target DLLs
# instead go in toolexeclibdir, alongside other target binaries and static libs.
# Note double quoting to prevent variables from being evaluated until install
# time; we don't want to expand them during libgcc.mvars generation, and in
# any case, $toolexeclibdir is not defined in the gcc/ subdirectory, only in
# target lib directories.
SHLIB_DLLDIR = $$(toolexeclibdir)
2011-01-26 Dave Korn <dave.korn.cygwin@gmail.com>
PR target/40125
* configure.ac: Call ACX_NONCANONICAL_TARGET.
(toolexecdir): Calculate and AC_SUBST.
(toolexeclibdir): Likewise.
* Makefile.in (target_noncanonical): Import.
(toolexecdir): Likewise.
(toolexeclibdir): Likewise.
* configure: Regenerate.
2010-12-13 Nathan Froyd <froydnj@codesourcery.com>
PR target/46040
......
......@@ -41,6 +41,7 @@ enable_decimal_float = @enable_decimal_float@
fixed_point = @fixed_point@
host_noncanonical = @host_noncanonical@
target_noncanonical = @target_noncanonical@
# List of extra object files that should be compiled for this target machine.
# The rules for compiling them should be in the t-* file for the machine.
......@@ -175,6 +176,9 @@ STRIP_FOR_TARGET = $(STRIP)
libsubdir = $(libdir)/gcc/$(host_noncanonical)/$(version)
# Used to install the shared libgcc.
slibdir = @slibdir@
# Maybe used for DLLs on Windows targets.
toolexecdir = @toolexecdir@
toolexeclibdir = @toolexeclibdir@
export AR_FOR_TARGET
export AR_CREATE_FOR_TARGET
......@@ -194,6 +198,8 @@ export STRIP_FOR_TARGET
export RANLIB_FOR_TARGET
export libsubdir
export slibdir
export toolexecdir
export toolexeclibdir
version := $(shell $(CC) -dumpversion)
......
......@@ -576,10 +576,13 @@ RANLIB
NM
LIPO
AR
toolexeclibdir
toolexecdir
target_subdir
host_subdir
build_subdir
build_libsubdir
target_noncanonical
host_noncanonical
host_os
host_vendor
......@@ -2174,6 +2177,8 @@ esac
esac
# post-stage1 host modules use a different CC_FOR_BUILD so, in order to
# have matching libraries, they should use host libraries: Makefile.tpl
# arranges to pass --with-build-libsubdir=$(HOST_SUBDIR).
......@@ -2204,6 +2209,36 @@ fi
target_subdir=${target_noncanonical}
# Calculate toolexeclibdir
# Also toolexecdir, though it's only used in toolexeclibdir
case ${version_specific_libs} in
yes)
# Need the gcc compiler version to know where to install libraries
# and header files if --enable-version-specific-runtime-libs option
# is selected.
toolexecdir='$(libdir)/gcc/$(target_noncanonical)'
toolexeclibdir='$(toolexecdir)/$(gcc_version)$(MULTISUBDIR)'
;;
no)
if test -n "$with_cross_host" &&
test x"$with_cross_host" != x"no"; then
# Install a library built with a cross compiler in tooldir, not libdir.
toolexecdir='$(exec_prefix)/$(target_noncanonical)'
toolexeclibdir='$(toolexecdir)/lib'
else
toolexecdir='$(libdir)/gcc-lib/$(target_noncanonical)'
toolexeclibdir='$(libdir)'
fi
multi_os_directory=`$CC -print-multi-os-directory`
case $multi_os_directory in
.) ;; # Avoid trailing /.
*) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
esac
;;
esac
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
set dummy ${ac_tool_prefix}ar; ac_word=$2
......
......@@ -104,8 +104,39 @@ esac
AC_CANONICAL_HOST
ACX_NONCANONICAL_HOST
ACX_NONCANONICAL_TARGET
GCC_TOPLEV_SUBDIRS
# Calculate toolexeclibdir
# Also toolexecdir, though it's only used in toolexeclibdir
case ${version_specific_libs} in
yes)
# Need the gcc compiler version to know where to install libraries
# and header files if --enable-version-specific-runtime-libs option
# is selected.
toolexecdir='$(libdir)/gcc/$(target_noncanonical)'
toolexeclibdir='$(toolexecdir)/$(gcc_version)$(MULTISUBDIR)'
;;
no)
if test -n "$with_cross_host" &&
test x"$with_cross_host" != x"no"; then
# Install a library built with a cross compiler in tooldir, not libdir.
toolexecdir='$(exec_prefix)/$(target_noncanonical)'
toolexeclibdir='$(toolexecdir)/lib'
else
toolexecdir='$(libdir)/gcc-lib/$(target_noncanonical)'
toolexeclibdir='$(libdir)'
fi
multi_os_directory=`$CC -print-multi-os-directory`
case $multi_os_directory in
.) ;; # Avoid trailing /.
*) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
esac
;;
esac
AC_SUBST(toolexecdir)
AC_SUBST(toolexeclibdir)
dnl These must be called before AM_PROG_LIBTOOL, because it may want
dnl to call AC_CHECK_PROG.
AC_CHECK_TOOL(AR, ar)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment