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 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
From: Mike Furr <mfurr@debian.org>
Date: Mon, 17 Jul 2017 09:52:23 +0200
Subject: Handling non-native archs and proper handling of .so generation
---
Makefile | 72 +++++++++++++++++++++++++++++++++++++++-------------------------
1 file changed, 44 insertions(+), 28 deletions(-)
diff --git a/Makefile b/Makefile
index eca6ae8..d93bbd1 100644
--- a/Makefile
+++ b/Makefile
@@ -2,12 +2,14 @@
RANLIB= ranlib
OCAML_LIBDIR:= $(shell ocamlc -where)
-GMP_INCLUDES= -I/opt/gmp/include -I/users/absint2/local/include -I$(HOME)/packages/gmp/include
+GMP_INCLUDES=
-GMP_LIBDIR=/opt/gmp/lib
-DESTDIR= $(OCAML_LIBDIR)/gmp
+GMP_LIBDIR=
+PREFIX= $(OCAML_LIBDIR)
+PKGDIR= $(PREFIX)/gmp/
+STUBDIR= $(PREFIX)/stublibs/
-RLIBFLAGS= -cclib "-Wl,-rpath $(GMP_LIBDIR)" # Linux, FreeBSD
+#RLIBFLAGS= -cclib "-Wl,-rpath $(GMP_LIBDIR)" # Linux, FreeBSD
#RLIBFLAGS= -cclib "-Wl,-R $(GMP_LIBDIR)" # Solaris
# RLIBFLAGS= # MacOS X
@@ -15,33 +17,53 @@ LIBFLAGS= -cclib -L. -cclib -L$(GMP_LIBDIR) $(RLIBFLAGS) \
-cclib -lmpfr -cclib -lgmp -cclib -L$(DESTDIR)
CC= gcc
-CFLAGS_MISC= -Wall -Wno-unused -g -O3
+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)
-LIBS= libmlgmp.a gmp.a gmp.cma gmp.cmxa gmp.cmi
PROGRAMS= test_creal test_creal.opt essai essai.opt toplevel\
test_suite test_suite.opt
-TESTS= 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
- -mkdir $(DESTDIR)
- cp $(LIBS) gmp.mli $(DESTDIR)
+ 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) $(TESTS)
+tests: $(LIBS) $(BYTE_TESTS) $(OPT_TESTS)
./test_suite
- ./test_suite.opt
+ if [ -e ./test_suite.opt ]; then ./test_suite.opt; fi
%.i: %.c
$(CC) $(CFLAGS) -E $*.c > $*.i
@@ -63,15 +85,9 @@ tests: $(LIBS) $(TESTS)
$(CMODULES_O): conversions.c config.h
-libmlgmp.a: $(CMODULES_O)
- $(AR) -rc $@ $+
- $(RANLIB) $@
-
-gmp.cma: gmp.cmo libmlgmp.a
- $(OCAMLC) $(OCAMLFLAGS) -a gmp.cmo -cclib -lmlgmp $(LIBFLAGS) -o $@
-
-gmp.a gmp.cmxa: gmp.cmx libmlgmp.a
- $(OCAMLOPT) $(OCAMLFLAGS) -a gmp.cmx -cclib -lmlgmp $(LIBFLAGS) -o $@
+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
@@ -81,27 +97,27 @@ toplevel: gmp.cma creal.cmo pretty_gmp.cmo install_pp.cmo creal_pp.cmo install_c
essai: gmp.cma essai.cmo
$(OCAMLC) -custom $+ -o $@
-essai.opt: gmp.cmxa essai.cmx
+essai.opt: gmp.cmxa essai.cmx
$(OCAMLOPT) $+ -o $@
-test_creal: gmp.cma creal.cmo test_creal.cmo
- $(OCAMLC) -custom $+ -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 $@
+test_suite: gmp.cma test_suite.cmo
+ $(OCAMLC) -custom $+ -o $@ -cclib -L.
test_suite.opt: gmp.cmxa test_suite.cmx
- $(OCAMLOPT) $+ -o $@
+ $(OCAMLOPT) $+ -o $@ -cclib -L.
clean:
- rm -f *.o *.cm* $(PROGRAMS) *.a
+ -rm -f *.o *.cm* $(PROGRAMS) *.a *.so
depend:
ocamldep *.ml *.mli > depend
.PHONY: clean
-include depend
+-include depend
|