1#**************************************************************************
2#*                                                                        *
3#*                                 OCaml                                  *
4#*                                                                        *
5#*            Xavier Leroy, projet Cristal, INRIA Rocquencourt            *
6#*                                                                        *
7#*   Copyright 1999 Institut National de Recherche en Informatique et     *
8#*     en Automatique.                                                    *
9#*                                                                        *
10#*   All rights reserved.  This file is distributed under the terms of    *
11#*   the GNU Lesser General Public License version 2.1, with the          *
12#*   special exception on linking described in the file LICENSE.          *
13#*                                                                        *
14#**************************************************************************
15
16# Common Makefile for otherlibs
17
18ROOTDIR=../..
19include $(ROOTDIR)/config/Makefile
20CAMLRUN ?= $(ROOTDIR)/boot/ocamlrun
21CAMLYACC ?= $(ROOTDIR)/boot/ocamlyacc
22
23ifeq "$(wildcard $(ROOTDIR)/flexdll/Makefile)" ""
24export OCAML_FLEXLINK:=
25else
26export OCAML_FLEXLINK:=$(ROOTDIR)/boot/ocamlrun $(ROOTDIR)/flexdll/flexlink.exe
27endif
28
29CAMLC=$(CAMLRUN) $(ROOTDIR)/ocamlc -nostdlib -I $(ROOTDIR)/stdlib
30CAMLOPT=$(CAMLRUN) $(ROOTDIR)/ocamlopt -nostdlib \
31        -I $(ROOTDIR)/stdlib
32CFLAGS=-I$(ROOTDIR)/byterun $(SHAREDCCCOMPOPTS) $(EXTRACFLAGS)
33
34# Compilation options
35CC=$(BYTECC)
36COMPFLAGS=-absname -w +a-4-9-41-42-44-45-48 -warn-error A -bin-annot -g \
37          -safe-string -strict-sequence -strict-formats $(EXTRACAMLFLAGS)
38ifeq "$(FLAMBDA)" "true"
39OPTCOMPFLAGS=-O3
40else
41OPTCOMPFLAGS=
42endif
43MKLIB=$(CAMLRUN) $(ROOTDIR)/tools/ocamlmklib
44
45# Variables to be defined by individual libraries:
46#LIBNAME=
47#CLIBNAME=
48#CMIFILES=
49#CAMLOBJS=
50#COBJS=
51#EXTRACFLAGS=
52#EXTRACAMLFLAGS=
53#LINKOPTS=
54#LDOPTS=
55#HEADERS=
56
57CMIFILES ?= $(CAMLOBJS:.cmo=.cmi)
58CAMLOBJS_NAT ?= $(CAMLOBJS:.cmo=.cmx)
59CLIBNAME ?= $(LIBNAME)
60
61all: lib$(CLIBNAME).$(A) $(LIBNAME).cma $(CMIFILES)
62
63allopt: lib$(CLIBNAME).$(A) $(LIBNAME).cmxa $(LIBNAME).$(CMXS) $(CMIFILES)
64
65$(LIBNAME).cma: $(CAMLOBJS)
66	$(MKLIB) -o $(LIBNAME) -oc $(CLIBNAME) -ocamlc '$(CAMLC)' -linkall \
67	         $(CAMLOBJS) $(LINKOPTS)
68
69$(LIBNAME).cmxa: $(CAMLOBJS_NAT)
70	$(MKLIB) -o $(LIBNAME) -oc $(CLIBNAME) -ocamlopt '$(CAMLOPT)' -linkall \
71	         $(CAMLOBJS_NAT) $(LINKOPTS)
72
73$(LIBNAME).cmxs: $(LIBNAME).cmxa lib$(CLIBNAME).$(A)
74	$(CAMLOPT) -shared -o $(LIBNAME).cmxs -I . $(LIBNAME).cmxa
75
76lib$(CLIBNAME).$(A): $(COBJS)
77	$(MKLIB) -oc $(CLIBNAME) $(COBJS) $(LDOPTS)
78
79INSTALL_LIBDIR=$(DESTDIR)$(LIBDIR)
80INSTALL_STUBLIBDIR=$(DESTDIR)$(STUBLIBDIR)
81
82install::
83	if test -f dll$(CLIBNAME)$(EXT_DLL); then \
84	  cp dll$(CLIBNAME)$(EXT_DLL) "$(INSTALL_STUBLIBDIR)/"; fi
85	cp lib$(CLIBNAME).$(A) "$(INSTALL_LIBDIR)/"
86	cd "$(INSTALL_LIBDIR)"; $(RANLIB) lib$(CLIBNAME).$(A)
87	cp $(LIBNAME).cma $(CMIFILES) $(CMIFILES:.cmi=.mli) \
88          $(CMIFILES:.cmi=.cmti) "$(INSTALL_LIBDIR)/"
89	if test -n "$(HEADERS)"; then \
90	  cp $(HEADERS) "$(INSTALL_LIBDIR)/caml/"; fi
91
92installopt:
93	cp $(CAMLOBJS_NAT) $(LIBNAME).cmxa $(LIBNAME).$(A) "$(INSTALL_LIBDIR)/"
94	cd "$(INSTALL_LIBDIR)"; $(RANLIB) $(LIBNAME).a
95	if test -f $(LIBNAME).cmxs; then \
96	  cp $(LIBNAME).cmxs "$(INSTALL_LIBDIR)/"; fi
97
98partialclean:
99	rm -f *.cm*
100
101clean:: partialclean
102	rm -f *.dll *.so *.a *.lib *.o *.obj
103
104.SUFFIXES: .ml .mli .cmi .cmo .cmx .$(O)
105
106.mli.cmi:
107	$(CAMLC) -c $(COMPFLAGS) $<
108
109.ml.cmo:
110	$(CAMLC) -c $(COMPFLAGS) $<
111
112.ml.cmx:
113	$(CAMLOPT) -c $(COMPFLAGS) $(OPTCOMPFLAGS) $<
114
115.c.$(O):
116	$(BYTECC) $(BYTECCCOMPOPTS) $(CFLAGS) -c $<
117