From patchwork Tue Nov 13 23:27:10 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: PR other/55291: Add support for GCC multilib run-time libraries to libsanitizer From: "H.J. Lu" X-Patchwork-Id: 198798 Message-Id: To: Paolo Bonzini Cc: Jakub Jelinek , Alexandre Oliva , Dodji Seketeli , DJ Delorie , Ralf Wildenhues , gcc-patches@gcc.gnu.org Date: Tue, 13 Nov 2012 15:27:10 -0800 On Tue, Nov 13, 2012 at 3:19 PM, Paolo Bonzini wrote: > Il 14/11/2012 00:16, H.J. Lu ha scritto: >>> > What has to be fixed about it? Anything except AC_PREREQ/AC_CONFIG_AUX_DIR? >>> > >>> > I really would prefer to do it in the order I mentioned above. >> We also need >> >> [hjl@gnu-tools-1 libsanitizer]$ cat acinclude.m4 >> dnl ---------------------------------------------------------------------- >> dnl This whole bit snagged from libgfortran. >> >> sinclude(../libtool.m4) >> dnl The lines below arrange for aclocal not to bring an installed >> dnl libtool.m4 into aclocal.m4, while still arranging for automake to >> dnl add a definition of LIBTOOL to Makefile.in. >> ifelse(,,,[AC_SUBST(LIBTOOL) >> AC_DEFUN([AM_PROG_LIBTOOL]) >> ]) >> [hjl@gnu-tools-1 libsanitizer]$ >> >> Otherwise, autoconf won't work. > > Sure, that's fine to include too. > We need all changes in: * acinclude.m4: New file. * Makefile.am (ACLOCAL_AMFLAGS): New. * configure.ac (AC_PREREQ): Set to 2.64. (AC_CONFIG_AUX_DIR): Set to "..". (--enable-version-specific-runtime-libs): New option. (AC_CANONICAL_SYSTEM): New. (AM_ENABLE_MULTILIB): Moved right after AM_INIT_AUTOMAKE. (toolexecdir): Support multilib. (toolexeclibdir): Likewise. Missing one will cause a problem. diff --git a/libsanitizer/Makefile.am b/libsanitizer/Makefile.am index b28eb32..91e3434 100644 --- a/libsanitizer/Makefile.am +++ b/libsanitizer/Makefile.am @@ -1,3 +1,5 @@ +ACLOCAL_AMFLAGS = -I .. -I ../config + SUBDIRS = interception sanitizer_common asan # Work around what appears to be a GNU make bug handling MAKEFLAGS diff --git a/libsanitizer/acinclude.m4 b/libsanitizer/acinclude.m4 new file mode 100644 index 0000000..8e606e7 --- /dev/null +++ b/libsanitizer/acinclude.m4 @@ -0,0 +1,10 @@ +dnl ---------------------------------------------------------------------- +dnl This whole bit snagged from libgfortran. + +sinclude(../libtool.m4) +dnl The lines below arrange for aclocal not to bring an installed +dnl libtool.m4 into aclocal.m4, while still arranging for automake to +dnl add a definition of LIBTOOL to Makefile.in. +ifelse(,,,[AC_SUBST(LIBTOOL) +AC_DEFUN([AM_PROG_LIBTOOL]) +]) diff --git a/libsanitizer/configure.ac b/libsanitizer/configure.ac index 3f186c2..47a44d3 100644 --- a/libsanitizer/configure.ac +++ b/libsanitizer/configure.ac @@ -1,11 +1,60 @@ # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. -AC_PREREQ([2.68]) +AC_PREREQ([2.64]) AC_INIT(package-unused, version-unused, libsanitizer) AC_CONFIG_SRCDIR([include/sanitizer/common_interface_defs.h]) -AC_CONFIG_AUX_DIR(.) +AC_CONFIG_AUX_DIR(..) + +AC_MSG_CHECKING([for --enable-version-specific-runtime-libs]) +AC_ARG_ENABLE(version-specific-runtime-libs, +[ --enable-version-specific-runtime-libs Specify that runtime libraries sho uld be installed in a compiler-specific directory ], +[case "$enableval" in + yes) version_specific_libs=yes ;; + no) version_specific_libs=no ;; + *) AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]); ; + esac], +[version_specific_libs=no]) +AC_MSG_RESULT($version_specific_libs) + +# Do not delete or change the following two lines. For why, see +# http://gcc.gnu.org/ml/libstdc++/2003-07/msg00451.html +AC_CANONICAL_SYSTEM +target_alias=${target_alias-$host_alias} +AC_SUBST(target_alias) + AM_INIT_AUTOMAKE(foreign) +AM_ENABLE_MULTILIB(, ..) + +# 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_alias)' + 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_alias)' + toolexeclibdir='$(toolexecdir)/lib' + else + toolexecdir='$(libdir)/gcc-lib/$(target_alias)' + 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)