[project @ 1998-11-26 09:17:22 by sof]
[ghc-hetmet.git] / ghc / runtime / gmp / Makefile
1 #-----------------------------------------------------------------------------
2 # $Id: Makefile,v 1.4 1997/03/19 20:44:55 simonpj Exp $
3
4 TOP=../..
5 include $(TOP)/mk/boilerplate.mk
6 # There's only one `way' for gmp, empty WAYS variable right away.
7 WAYS=
8
9 GMP_OBJS = $(MPZ_OBJS) $(MPQ_OBJS) $(MPN_OBJS) $(IMPL_OBJS) mp_bases.o
10
11 IMPL_SRCS = memory.c mp_set_fns.c _mpz_set_str.c _mpz_get_str.c \
12   mpz_realloc.c mp_clz_tab.c alloca.c
13 IMPL_OBJS = memory.o mp_set_fns.o _mpz_set_str.o _mpz_get_str.o \
14   mpz_realloc.o mp_clz_tab.o alloca.o
15
16 MPZ_SRCS = mpz_init.c mpz_set.c mpz_set_ui.c mpz_set_si.c mpz_set_str.c \
17   mpz_iset.c mpz_iset_ui.c mpz_iset_si.c mpz_iset_str.c mpz_clear.c \
18   mpz_get_ui.c mpz_get_si.c mpz_get_str.c mpz_size.c mpz_sizeinb.c \
19   mpz_add.c mpz_add_ui.c mpz_sub.c mpz_sub_ui.c mpz_mul.c mpz_mul_ui.c \
20   mpz_div.c mpz_div_ui.c mpz_mod.c mpz_mod_ui.c mpz_dm.c mpz_dm_ui.c \
21   mpz_mdiv.c mpz_mmod.c mpz_mdm.c mpz_mdiv_ui.c mpz_mmod_ui.c mpz_mdm_ui.c \
22   mpz_gcd.c mpz_gcdext.c mpz_sqrt.c mpz_sqrtrem.c mpz_powm.c mpz_powm_ui.c \
23   mpz_cmp.c mpz_cmp_ui.c mpz_cmp_si.c mpz_mul_2exp.c mpz_div_2exp.c \
24   mpz_mod_2exp.c mpz_abs.c mpz_neg.c mpz_com.c mpz_and.c mpz_ior.c \
25   mpz_inp_raw.c mpz_inp_str.c mpz_out_raw.c mpz_out_str.c \
26   mpz_perfsqr.c mpz_random.c mpz_random2.c mpz_pow_ui.c \
27   mpz_clrbit.c mpz_fac_ui.c mpz_pprime_p.c
28 MPZ_OBJS = mpz_init.o mpz_set.o mpz_set_ui.o mpz_set_si.o mpz_set_str.o \
29   mpz_iset.o mpz_iset_ui.o mpz_iset_si.o mpz_iset_str.o mpz_clear.o \
30   mpz_get_ui.o mpz_get_si.o mpz_get_str.o mpz_size.o mpz_sizeinb.o \
31   mpz_add.o mpz_add_ui.o mpz_sub.o mpz_sub_ui.o mpz_mul.o mpz_mul_ui.o \
32   mpz_div.o mpz_div_ui.o mpz_mod.o mpz_mod_ui.o mpz_dm.o mpz_dm_ui.o \
33   mpz_mdiv.o mpz_mmod.o mpz_mdm.o mpz_mdiv_ui.o mpz_mmod_ui.o mpz_mdm_ui.o \
34   mpz_gcd.o mpz_gcdext.o mpz_sqrt.o mpz_sqrtrem.o mpz_powm.o mpz_powm_ui.o \
35   mpz_cmp.o mpz_cmp_ui.o mpz_cmp_si.o mpz_mul_2exp.o mpz_div_2exp.o \
36   mpz_mod_2exp.o mpz_abs.o mpz_neg.o mpz_com.o mpz_and.o mpz_ior.o \
37   mpz_inp_raw.o mpz_inp_str.o mpz_out_raw.o mpz_out_str.o \
38   mpz_perfsqr.o mpz_random.o mpz_random2.o mpz_pow_ui.o \
39   mpz_clrbit.o mpz_fac_ui.o mpz_pprime_p.o
40
41 MPQ_SRCS = mpq_init.c mpq_set.c mpq_set_ui.c mpq_set_si.c \
42   mpq_set_num.c mpq_set_den.c mpq_get_num.c mpq_get_den.c \
43   mpq_add.c mpq_sub.c mpq_mul.c mpq_div.c \
44   mpq_clear.c mpq_cmp.c mpq_inv.c mpq_neg.c
45 MPQ_OBJS = mpq_init.o mpq_set.o mpq_set_ui.o mpq_set_si.o \
46   mpq_set_num.o mpq_set_den.o mpq_get_num.o mpq_get_den.o \
47   mpq_add.o mpq_sub.o mpq_mul.o mpq_div.o \
48   mpq_clear.o mpq_cmp.o mpq_inv.o mpq_neg.o
49
50 MPN_SRCS = mpn_add.c mpn_sub.c mpn_cmp.c mpn_mul.c mpn_div.c mpn_dm_1.c \
51   mpn_mod_1.c mpn_lshift.c mpn_rshift.c mpn_rshiftci.c mpn_sqrt.c
52 MPN_OBJS = mpn_add.o mpn_sub.o mpn_cmp.o mpn_mul.o mpn_div.o mpn_dm_1.o \
53   mpn_mod_1.o mpn_lshift.o mpn_rshift.o mpn_rshiftci.o mpn_sqrt.o
54
55 #
56 # Compiling gmp with gcc-2.7.2 *without* -O tripped up a bug in the
57 # code that sets up and stores the regs around an __asm__ (mpn_mul.c : add_ssaaaa).
58 # Enabling -O flushed out the problem, so dropping the -O is not advised.
59 #
60 SRC_CC_OPTS += -I. -O
61
62 all depend :: gmp-mparam.h
63 libgmp.a :: stamp-stddefh
64
65 LIBRARY = libgmp.a
66 LIBOBJS = $(GMP_OBJS)
67 DESTDIR = $(INSTLIBDIR_GHC)
68 C_SRCS  = $(IMPL_SRCS) $(MPZ_SRCS) $(MPQ_SRCS) $(MPN_SRCS)
69
70 #
71 # Install gmp
72
73 INSTALL_LIBS += $(LIBRARY)
74
75 CLEAN_FILES += test-with-stddefh.c stamp-stddefh cre-mparam gmp-mparam.h mp_bases.c cre-conv-tab
76
77 SRC_H_FILES+=$(wildcard *.h) COPYING ChangeLog INSTALL Makefile.original README TODO VERSION gmp.texi mpn_mul_classic.c-EXTRA
78 # ToDo: something to make the doc
79
80 # from here on, it is magic from the original Makefile
81
82 # If you cross compile on a machine with the same sizes of the integral
83 # types ("int", "long int", "short int", and "char") define this as the
84 # local compiler.  Otherwise, you need look for the uses of LOCAL_CC below,
85 # and handle those cases manually.
86
87 LOCAL_CC = $(CC)
88
89 stamp-stddefh:
90         rm -f stddef.h
91         rm -f test-stddefh.c
92         (       echo '#include <stddef.h>'                              ;\
93                 echo 'main(){size_t foo=sizeof(size_t);exit(0);}'       ;\
94         ) > test-stddefh.c
95         @if $(LOCAL_CC) $(CFLAGS) test-stddefh.c -c 2> /dev/null        ;\
96         then true                                                       ;\
97         else                                                            \
98           echo 'This machine has no "stddef.h".  Creating a minimal in ./';\
99           $(LOCAL_CC) $(CFLAGS) cre-stddefh.c -o cre-stddefh            ;\
100           ./cre-stddefh > stddef.h                                      ;\
101         fi
102         rm -f test-stddefh.o
103         touch stamp-stddefh
104
105 mp_bases.c: cre-conv-tab
106         ./cre-conv-tab > tmp-$@
107         mv tmp-$@ $@
108 cre-conv-tab: cre-conv-tab.c gmp.h gmp-impl.h gmp-mparam.h longlong.h
109         $(LOCAL_CC) $(CFLAGS) `if [ x$(firstword $^) = x ];     \
110                                then echo cre-conv-tab.c;        \
111                                else echo $(firstword $^); fi` -o $@ -lm
112
113 gmp-mparam.h: cre-mparam
114         ./cre-mparam > tmp-$@
115         mv tmp-$@ $@
116 cre-mparam: cre-mparam.c stamp-stddefh gmp.h
117         $(LOCAL_CC) $(CFLAGS) cre-mparam.c -o $@
118
119 include $(TOP)/mk/target.mk