## Process this file with automake to generate Makefile.in
# Copyright (C) 2000 Free Software Foundation, Inc.
#
# This file is part of the GNU MP Library.
#
# The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB. If not, write to
# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
# MA 02111-1307, USA.
AUTOMAKE_OPTIONS = gnu no-dependencies $(top_builddir)/ansi2knr
INCLUDES = -I$(top_srcdir)
EXTRA_DIST = alpha.asm pentium.asm sparcv9.asm hppa.asm hppa2.asm
noinst_HEADERS = speed.h
# No dependency on libgmp, so can use libgmptune instead for tune program
EXTRA_LTLIBRARIES = libspeed.la
libspeed_la_SOURCES = common.c time.c noop.c
libspeed_la_DEPENDENCIES = $(SPEED_CYCLECOUNTER_OBJS)
libspeed_la_LIBADD = $(libspeed_la_DEPENDENCIES)
# Both libspeed and the programs are built static-only since static is
# fastest and will be preferred by users who care about maximizing speed.
#
# Actually libtool doesn't seem to pass -static through to gcc, it only
# chooses the ".a" versions of libtool libraries. Rerun the gcc link
# invocation with -static if you want a static link of libc and libm.
#
LDFLAGS = -static
LDADD = libspeed.la $(top_builddir)/libgmp.la -lm
EXTRA_PROGRAMS = speed speed-ext tuneup
tuneup_SOURCES = tuneup.c
tuneup_DEPENDENCIES = libspeed.la libgmptune.a
tuneup_LDADD = $(tuneup_DEPENDENCIES) -lm
# Don't know how to get tuneup$U.lo to depend on sqr_basecase.h, so just do
# an explicit make. A plain "make tuneup" will fail if used directly.
tune:
$(MAKE) $(AM_MAKEFLAGS) sqr_basecase.h tuneup$(EXEEXT)
./tuneup
allprogs: sqr_basecase.h $(EXTRA_PROGRAMS)
speed_SOURCES = speed.c
SQR_CLEANFILES = sqr_basecase.c sqr_basecase.h sqr_basecase.asm
CLEANFILES = $(EXTRA_PROGRAMS) $(EXTRA_LTLIBRARIES) \
$(SQR_CLEANFILES) libgmptune.a libgmptmp.a \
stg.gnuplot stg.data \
mtg.gnuplot mtg.data \
fibg.gnuplot fibg.data \
graph.gnuplot graph.data
# This bit like mpn/Makefile.am
# COMPILE minus CC. FIXME: Really pass *_CFLAGS to CPP?
COMPILE_FLAGS = \
$(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
SUFFIXES = .asm
.asm.o:
$(M4) $(M4FLAGS) -DOPERATION_$* $< >tmp-$*.s
$(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@
rm -f tmp-$*.s
.asm.obj:
$(M4) $(M4FLAGS) -DOPERATION_$* `cygpath -w $<` >tmp-$*.s
$(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@
rm -f tmp-$*.s
.asm.lo:
echo "$(COMPILE_FLAGS)"
$(M4) $(M4FLAGS) -DPIC -DOPERATION_$* $< >tmp-$*.s
$(LIBTOOL) --mode=compile $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@
$(M4) $(M4FLAGS) -DOPERATION_$* $< >tmp-$*.s
$(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $*.o
rm -f tmp-$*.s
# Recompiled versions of $(LIBGMPTUNE_OBJS) are always used. sqr_basecase.o
# is replaced if it's mpn/generic/sqr_basecase.c (due to the fixed size
# temporary array), or sqr_basecase.asm with a KARATSUBA_SQR_THRESHOLD_MAX
# (because that says it normally works only up to KARATSUBA_SQR_THRESHOLD).
SQR_GENERIC_MAX = 200
LIBGMPTUNE_OBJS = \
mul_n.o mul_fft.o mul.o \
bz_divrem_n.o tdiv_qr.o fib_ui.o powm.o gcd.o gcdext.o
sqr_basecase.h: libgmptune.a
# "cp -f" is not portable (eg. it fails on SunOS)
# "ar r" is going to be a bit fragile because there's more than one mul.o in
# libgmp.a.
libgmptune.a: $(top_builddir)/libgmp.la $(LIBGMPTUNE_OBJS)
rm -f libgmptmp.a
eval `$(LIBTOOL) --config | grep '^objdir='` ; \
cp $(top_builddir)/$$objdir/libgmp.a libgmptmp.a
$(AR) r libgmptmp.a $(LIBGMPTUNE_OBJS)
rm -f $(SQR_CLEANFILES)
echo "" >sqr_basecase.h
if test -f $(top_builddir)/mpn/sqr_basecase.c; then \
$(MAKE) $(AM_MAKEFLAGS) sqr-basecase-generic; \
else \
if grep KARATSUBA_SQR_THRESHOLD_MAX \
$(top_builddir)/mpn/sqr_basecase.asm >/dev/null; then \
$(MAKE) $(AM_MAKEFLAGS) sqr-basecase-asm; \
fi \
fi
$(RANLIB) libgmptmp.a
rm -f libgmptune.a
mv libgmptmp.a libgmptune.a
sqr-basecase-generic:
cp $(top_builddir)/mpn/sqr_basecase.c .
$(MAKE) $(AM_MAKEFLAGS) \
CFLAGS='$(CFLAGS) -DKARATSUBA_SQR_THRESHOLD=$(SQR_GENERIC_MAX)' \
sqr_basecase.o
$(AR) r libgmptmp.a sqr_basecase.o
echo '#define KARATSUBA_SQR_MAX $(SQR_GENERIC_MAX)' >sqr_basecase.h
sqr-basecase-asm:
cp $(top_builddir)/mpn/sqr_basecase.asm .
$(MAKE) $(AM_MAKEFLAGS) \
M4FLAGS='$(M4FLAGS) -DKARATSUBA_SQR_THRESHOLD_OVERRIDE=KARATSUBA_SQR_THRESHOLD_MAX' \
sqr_basecase.o
ar r libgmptmp.a sqr_basecase.o
echo "#define KARATSUBA_SQR_MAX `sed -n 's/def...(KARATSUBA_SQR_THRESHOLD_MAX, *\([0-9]*\))/\1/p' sqr_basecase.asm`" >sqr_basecase.h
mul_n.o: $(top_builddir)/mpn/mul_n.c
$(COMPILE) -DTUNE_PROGRAM_BUILD=1 -c $(top_builddir)/mpn/mul_n.c
mul_fft.o: $(top_builddir)/mpn/mul_fft.c
$(COMPILE) -DTUNE_PROGRAM_BUILD=1 -c $(top_builddir)/mpn/mul_fft.c
mul.o: $(top_builddir)/mpn/mul.c
$(COMPILE) -DTUNE_PROGRAM_BUILD=1 -c $(top_builddir)/mpn/mul.c
bz_divrem_n.o: $(top_builddir)/mpn/bz_divrem_n.c
$(COMPILE) -DTUNE_PROGRAM_BUILD=1 -c $(top_builddir)/mpn/bz_divrem_n.c
tdiv_qr.o: $(top_builddir)/mpn/tdiv_qr.c
$(COMPILE) -DTUNE_PROGRAM_BUILD=1 -c $(top_builddir)/mpn/tdiv_qr.c
fib_ui.o: $(top_srcdir)/mpz/fib_ui.c
$(COMPILE) -DTUNE_PROGRAM_BUILD=1 -c $(top_srcdir)/mpz/fib_ui.c
powm.o: $(top_srcdir)/mpz/powm.c
$(COMPILE) -DTUNE_PROGRAM_BUILD=1 -c $(top_srcdir)/mpz/powm.c
gcd.o: $(top_builddir)/mpn/gcd.c
$(COMPILE) -DTUNE_PROGRAM_BUILD=1 -c $(top_builddir)/mpn/gcd.c
gcdext.o: $(top_builddir)/mpn/gcdext.c
$(COMPILE) -DTUNE_PROGRAM_BUILD=1 -c $(top_builddir)/mpn/gcdext.c
# "mk" is multiplication in the karatsuba range
# "st" is squaring in the toom-cook range, etc
# "g" forms produce graphs
mk:
./speed -s 5-40 -c mpn_mul_basecase mpn_kara_mul_n
MTS = -s 50-150 -c
mt:
./speed $(MTS) mpn_kara_mul_n mpn_toom3_mul_n | less
mtg:
./speed $(MTS) -P mtg mpn_kara_mul_n mpn_toom3_mul_n
sk:
./speed -s 5-40 -c mpn_sqr_basecase mpn_kara_sqr_n
STS = -s 50-150 -c
st:
./speed $(STS) mpn_kara_sqr_n mpn_toom3_sqr_n | less
stg:
./speed $(STS) -P stg mpn_kara_sqr_n mpn_toom3_sqr_n
bz:
./speed -s 5-40 -c mpn_bz_divrem_sb mpn_bz_divrem_n mpn_bz_tdiv_qr
fib:
./speed -s 80-120 -c mpz_fib_ui
fibg:
./speed -s 10-300 -P fibg mpz_fib_ui
gcd:
./speed -s 1-20 -c mpn_gcd
graph:
./speed -s 1-5000 -f 1.02 -P graph mpn_mul_n mpn_sqr
gnuplot graph.gnuplot