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