summaryrefslogtreecommitdiff
path: root/Makefile
blob: d93bbd1dcab9f0e77ea068c8e174fed288f16d89 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# Use GNU Make !
RANLIB= ranlib

OCAML_LIBDIR:= $(shell ocamlc -where)
GMP_INCLUDES=

GMP_LIBDIR=
PREFIX= $(OCAML_LIBDIR)
PKGDIR= $(PREFIX)/gmp/
STUBDIR= $(PREFIX)/stublibs/

#RLIBFLAGS= -cclib "-Wl,-rpath $(GMP_LIBDIR)" # Linux, FreeBSD
#RLIBFLAGS= -cclib "-Wl,-R $(GMP_LIBDIR)" # Solaris
# RLIBFLAGS= # MacOS X

LIBFLAGS= -cclib -L. -cclib -L$(GMP_LIBDIR) $(RLIBFLAGS) \
	-cclib -lmpfr -cclib -lgmp -cclib -L$(DESTDIR)

CC= gcc
CFLAGS_MISC= -Wall -Wno-unused -g -O2 -fPIC
#CFLAGS_MISC=
CFLAGS_INCLUDE= -I $(OCAML_LIBDIR) $(GMP_INCLUDES)
CFLAGS= $(CFLAGS_MISC) $(CFLAGS_INCLUDE)

OCAMLC= ocamlc -g
OCAMLOPT= ocamlopt
OCAMLMKLIB= ocamlmklib
OCAMLFLAGS=

CMODULES= mlgmp_z.c mlgmp_q.c mlgmp_f.c mlgmp_fr.c mlgmp_random.c mlgmp_misc.c
CMODULES_O= $(CMODULES:%.c=%.o)


PROGRAMS= test_creal test_creal.opt essai essai.opt toplevel\
	test_suite test_suite.opt

C_STATIC = libgmpstub.a
C_SHARED = dllgmpstub.so

HAS_OPT=
BYTE_LIBS=  gmp.cma gmp.cmi
BYTE_TESTS= test_suite

ifdef HAS_OPT
  OPT_LIBS= gmp.cmxa
  OPT_CMX= gmp.cmx
  OPT_TESTS= test_suite.opt
else
  OPT_LIBS=
  OPT_CMX=
  OPT_TESTS=
endif

LIBS = $(C_SHARED) $(BYTE_LIBS) $(OPT_LIBS)

all:	$(LIBS) tests

install: all
	install -d $(DESTDIR)$(PKGDIR)
	install -m 0644 -c $(BYTE_LIBS) $(OPT_LIBS) *.a gmp.mli $(DESTDIR)$(PKGDIR)
	install -d $(STUBDIR)
	install -m 0644 -c $(C_SHARED) $(STUBDIR)

tests:	$(LIBS) $(BYTE_TESTS) $(OPT_TESTS)
	./test_suite
	if [ -e ./test_suite.opt ]; then ./test_suite.opt; fi

%.i: %.c
	$(CC) $(CFLAGS) -E $*.c > $*.i

%.cmo: %.ml %.cmi
	$(OCAMLC) $(OCAMLFLAGS) -c $*.ml

%.cmx: %.ml %.cmi
	$(OCAMLOPT) $(OCAMLFLAGS) -c $*.ml

%.cmo: %.ml
	$(OCAMLC) $(OCAMLFLAGS) -c $*.ml

%.cmx: %.ml
	$(OCAMLOPT) $(OCAMLFLAGS) -c $*.ml

%.cmi: %.mli
	$(OCAMLC) $(OCAMLFLAGS) -c $*.mli

$(CMODULES_O): conversions.c config.h

dllgmpstub.so libgmpstub.a gmp.cma gmp.cmxa: gmp.cmo $(OPT_CMX) $(CMODULES_O)
	$(OCAMLMKLIB) $(OCAMLFLAGS) -o gmp -oc gmpstub  gmp.cmo \
	   $(OPT_CMX) $(CMODULES_O) -lgmp

pretty_gmp.cmo: pretty_gmp.cmi gmp.cmo

toplevel: gmp.cma creal.cmo pretty_gmp.cmo install_pp.cmo creal_pp.cmo install_creal_pp.cmo
	ocamlmktop -custom $+ -o $@

essai:	gmp.cma essai.cmo
	$(OCAMLC) -custom $+ -o $@

essai.opt: gmp.cmxa essai.cmx
	$(OCAMLOPT) $+ -o $@

test_creal: gmp.cma creal.cmo test_creal.cmo
	$(OCAMLC)  $+ -o $@

test_creal.opt:	gmp.cmxa creal.cmx test_creal.cmx
	$(OCAMLOPT) $+ -o $@

test_suite: gmp.cma test_suite.cmo
	$(OCAMLC) -custom $+ -o $@ -cclib -L.

test_suite.opt:	gmp.cmxa test_suite.cmx
	$(OCAMLOPT) $+ -o $@ -cclib -L.

clean:
	-rm -f *.o *.cm* $(PROGRAMS) *.a *.so

depend:
	ocamldep *.ml *.mli > depend

.PHONY: clean

-include depend