diff mbox

PATCH [5/5] Vector math functions infrastructure

Message ID CAMXFM3v=W1ar2=qp5mXrmqR_1re79f2BAkNRjn7nX2FKGiEDBg@mail.gmail.com
State New
Headers show

Commit Message

Andrew Senkevich April 27, 2015, 1:38 p.m. UTC
This is infrastructure update for configure, build and install of
vector math library. Installation of libm.so as linker script (only in
case of libmvec.so build).
End of old discussion is
https://sourceware.org/ml/libc-alpha/2014-12/msg00406.html

Ok for trunk?

2015-04-27  Andrew Senkevich  <andrew.senkevich@intel.com>

        * Makeconfig (rpath-dirs, all-subdirs): Added mathvec folder.
        (libmvec): New variable.
        * configure.ac: Added option for mathvec build.
        * configure: Regenerated.
        * mathvec/Depend: New file.
        * mathvec/Makefile: New file.
        * shlib-versions: Added libmvec.
        * math/Makefile: Added rule for libm.so installation.

From 8b6775678c4b816e34fa12df63a83b6745a638ad Mon Sep 17 00:00:00 2001
From: Andrew Senkevich <andrew.senkevich@intel.com>
Date: Mon, 27 Apr 2015 15:38:37 +0300
Subject: [PATCH 5/5]

This is infrastructure update for configure, build and install of vector
math library. Installation of libm.so as linker script only in case of
libmvec.so build.

2014-12-02  Andrew Senkevich  <andrew.n.senkevich@gmail.com>

    * Makeconfig (rpath-dirs, all-subdirs): Added mathvec folder.
    (libmvec): New variable.
    * configure.ac: Added option for mathvec build.
    * configure: Regenerated.
    * mathvec/Depend: New file.
    * mathvec/Makefile: New file.
    * shlib-versions: Added libmvec.
    * math/Makefile: Added rule for libm.so installation.
---
 Makeconfig       |  6 ++++--
 configure        | 17 +++++++++++++++++
 configure.ac     | 11 +++++++++++
 math/Makefile    | 16 ++++++++++++++++
 mathvec/Depend   |  1 +
 mathvec/Makefile | 35 +++++++++++++++++++++++++++++++++++
 shlib-versions   |  3 +++
 7 files changed, 87 insertions(+), 2 deletions(-)
 create mode 100644 mathvec/Depend
 create mode 100644 mathvec/Makefile
diff mbox

Patch

diff --git a/Makeconfig b/Makeconfig
index dc7f208..a4e2c16 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -498,7 +498,7 @@  link-libc = $(link-libc-rpath-link)
$(link-libc-before-gnulib) $(gnulib)
 link-libc-tests = $(link-libc-tests-rpath-link) \
   $(link-libc-before-gnulib) $(gnulib-tests)
 # This is how to find at build-time things that will be installed there.
-rpath-dirs = math elf dlfcn nss nis rt resolv crypt
+rpath-dirs = math elf dlfcn nss nis rt resolv crypt mathvec
 rpath-link = \
 $(common-objdir):$(subst $(empty) ,:,$(patsubst
../$(subdir),.,$(rpath-dirs:%=$(common-objpfx)%)))
 else
@@ -1074,8 +1074,10 @@  endif

 ifeq ($(build-shared),yes)
 libm = $(common-objpfx)math/libm.so$(libm.so-version)
+libmvec = $(common-objpfx)mathvec/libmvec.so$(libmvec.so-version)
 else
 libm = $(common-objpfx)math/libm.a
+libmvec = $(common-objpfx)mathvec/libmvec.a
 endif

 # These are the subdirectories containing the library source.  The order
@@ -1085,7 +1087,7 @@  all-subdirs = csu assert ctype locale intl
catgets math setjmp signal    \
       stdlib stdio-common libio malloc string wcsmbs time dirent    \
       grp pwd posix io termios resource misc socket sysvipc gmon    \
       gnulib iconv iconvdata wctype manual shadow gshadow po argp   \
-      crypt localedata timezone rt conform debug    \
+      crypt localedata timezone rt conform debug mathvec    \
       $(add-on-subdirs) dlfcn elf

 ifndef avoid-generated
diff --git a/configure b/configure
index 97e549e..1e4138b 100755
--- a/configure
+++ b/configure
@@ -777,6 +777,7 @@  enable_systemtap
 enable_build_nscd
 enable_nscd
 enable_pt_chown
+enable_mathvec
 with_cpu
 '
       ac_precious_vars='build_alias
@@ -1441,6 +1442,8 @@  Optional Features:
   --disable-build-nscd    disable building and installing the nscd daemon
   --disable-nscd          library functions will not contact the nscd daemon
   --enable-pt_chown       Enable building and installing pt_chown
+  --enable-mathvec        Enable building and installing mathvec [default
+                          depends on architecture]

 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -3845,6 +3848,14 @@  gnu*)
   ;;
 esac

+# Check whether --enable-mathvec was given.
+if test "${enable_mathvec+set}" = set; then :
+  enableval=$enable_mathvec; build_mathvec=$enableval
+else
+  build_mathvec=notset
+fi
+
+
 # We keep the original values in `$config_*' and never modify them, so we
 # can write them unchanged into config.make.  Everything else uses
 # $machine, $vendor, and $os, and changes them whenever convenient.
@@ -7215,6 +7226,12 @@  $as_echo "running configure fragment for $dir" >&6; }
   fi
 done

+if test x"$build_mathvec" = xnotset; then
+  build_mathvec=no
+fi
+config_vars="$config_vars
+build-mathvec = $build_mathvec"
+



diff --git a/configure.ac b/configure.ac
index def655a..ff66b87 100644
--- a/configure.ac
+++ b/configure.ac
@@ -381,6 +381,12 @@  gnu*)
   ;;
 esac

+AC_ARG_ENABLE([mathvec],
+      [AS_HELP_STRING([--enable-mathvec],
+      [Enable building and installing mathvec @<:@default depends on
architecture@:>@])],
+      [build_mathvec=$enableval],
+      [build_mathvec=notset])
+
 # We keep the original values in `$config_*' and never modify them, so we
 # can write them unchanged into config.make.  Everything else uses
 # $machine, $vendor, and $os, and changes them whenever convenient.
@@ -1994,6 +2000,11 @@  for dir in $sysnames; do
   fi
 done

+if test x"$build_mathvec" = xnotset; then
+  build_mathvec=no
+fi
+LIBC_CONFIG_VAR([build-mathvec], [$build_mathvec])
+
 AC_SUBST(libc_extra_cflags)
 AC_SUBST(libc_extra_cppflags)

diff --git a/math/Makefile b/math/Makefile
index 127aa9b..33b6116 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -86,6 +86,22 @@  generated += $(foreach s,.c .S l.c l.S f.c
f.S,$(calls:s_%=m_%$s))
 routines = $(calls) $(calls:=f) $(long-c-$(long-double-fcts))
 long-c-yes = $(calls:=l)

+ifeq ($(build-mathvec),yes)
+# We need to install libm.so as linker script
+# for more comfortable use of vector math library.
+install-lib-ldscripts := libm.so
+install_subdir: $(inst_libdir)/libm.so
+$(inst_libdir)/libm.so: $(common-objpfx)format.lds \
+ $(libm) \
+ $(libmvec) \
+ $(+force)
+ (echo '/* GNU ld script'; echo '*/';\
+ cat $<; \
+ echo 'GROUP ( $(slibdir)/libm.so$(libm.so-version) ' \
+      'AS_NEEDED ( $(slibdir)/libmvec.so$(libmvec.so-version) ) )' \
+ ) > $@
+endif
+
 # Rules for the test suite.
 tests = test-matherr test-fenv atest-exp atest-sincos atest-exp2 basic-test \
  test-misc test-fpucw test-fpucw-ieee tst-definitions test-tgmath \
diff --git a/mathvec/Depend b/mathvec/Depend
new file mode 100644
index 0000000..ede10ab
--- /dev/null
+++ b/mathvec/Depend
@@ -0,0 +1 @@ 
+math
diff --git a/mathvec/Makefile b/mathvec/Makefile
new file mode 100644
index 0000000..3b670e9
--- /dev/null
+++ b/mathvec/Makefile
@@ -0,0 +1,35 @@ 
+# Copyright (C) 2015 Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+
+# The GNU C Library 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
+# Lesser General Public License for more details.
+
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; if not, see
+# <http://www.gnu.org/licenses/>.
+
+# Makefile for the vector math library.
+
+subdir := mathvec
+
+include ../Makeconfig
+
+ifeq ($(build-mathvec),yes)
+extra-libs := libmvec
+extra-libs-others = $(extra-libs)
+
+libmvec-routines = $(strip $(libmvec-support))
+
+$(objpfx)libmvec.so: $(libm)
+endif
+
+# Rules for the test suite are in math directory.
+
+include ../Rules
diff --git a/shlib-versions b/shlib-versions
index e05b248..fa3cf1d 100644
--- a/shlib-versions
+++ b/shlib-versions
@@ -71,3 +71,6 @@  libanl=1
 # This defines the libgcc soname version this glibc is to load for
 # asynchronous cancellation to work correctly.
 libgcc_s=1
+
+# The vector math library
+libmvec=1