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# Makefile for the dynamic link library
17
18# FIXME reduce redundancy by including ../Makefile
19
20include ../../config/Makefile
21CAMLRUN ?= ../../boot/ocamlrun
22CAMLYACC ?= ../../boot/ocamlyacc
23
24ROOTDIR   = ../..
25OCAMLC    = $(CAMLRUN) $(ROOTDIR)/ocamlc -nostdlib -I $(ROOTDIR)/stdlib
26OCAMLOPT  = $(CAMLRUN) $(ROOTDIR)/ocamlopt -nostdlib -I $(ROOTDIR)/stdlib
27
28INCLUDES=-I ../../utils -I ../../typing -I ../../bytecomp -I ../../asmcomp
29COMPFLAGS=$(INCLUDES) -absname -w +a-4-9-41-42-44-45-48 -bin-annot -g \
30   -I ../../stdlib -warn-error A \
31   -safe-string -strict-sequence -strict-formats
32ifeq "$(FLAMBDA)" "true"
33OPTCOMPFLAGS=-O3
34else
35OPTCOMPFLAGS=
36endif
37
38OBJS=dynlinkaux.cmo dynlink.cmo
39
40COMPILEROBJS=\
41  ../../utils/misc.cmo ../../utils/config.cmo \
42  ../../utils/identifiable.cmo ../../utils/numbers.cmo \
43  ../../utils/arg_helper.cmo ../../utils/clflags.cmo \
44  ../../utils/tbl.cmo ../../utils/consistbl.cmo \
45  ../../utils/terminfo.cmo ../../utils/warnings.cmo \
46  ../../parsing/asttypes.cmi \
47  ../../parsing/location.cmo ../../parsing/longident.cmo \
48  ../../parsing/docstrings.cmo ../../parsing/syntaxerr.cmo \
49  ../../parsing/ast_helper.cmo \
50  ../../parsing/ast_mapper.cmo ../../parsing/ast_iterator.cmo \
51  ../../parsing/attr_helper.cmo \
52  ../../parsing/builtin_attributes.cmo \
53  ../../typing/ident.cmo ../../typing/path.cmo \
54  ../../typing/primitive.cmo ../../typing/types.cmo \
55  ../../typing/btype.cmo ../../typing/subst.cmo ../../typing/predef.cmo \
56  ../../typing/datarepr.cmo ../../typing/cmi_format.cmo ../../typing/env.cmo \
57  ../../bytecomp/lambda.cmo ../../bytecomp/instruct.cmo \
58  ../../bytecomp/cmo_format.cmi ../../bytecomp/opcodes.cmo \
59  ../../bytecomp/runtimedef.cmo ../../bytecomp/bytesections.cmo \
60  ../../bytecomp/dll.cmo ../../bytecomp/meta.cmo \
61  ../../bytecomp/symtable.cmo
62
63NATOBJS=dynlink.cmx
64
65all: dynlink.cma extract_crc
66
67allopt: dynlink.cmxa
68
69dynlink.cma: $(OBJS)
70	$(OCAMLC) $(COMPFLAGS) -ccopt "$(NATDYNLINKOPTS)" -a -o dynlink.cma \
71	         $(OBJS)
72
73dynlink.cmxa: $(NATOBJS)
74	$(OCAMLOPT) $(COMPFLAGS) -ccopt "$(NATDYNLINKOPTS)" -a -o dynlink.cmxa \
75	           $(NATOBJS)
76
77dynlinkaux.cmo: $(COMPILEROBJS)
78	$(OCAMLC) $(COMPFLAGS) -pack -o dynlinkaux.cmo $(COMPILEROBJS)
79
80dynlinkaux.cmi: dynlinkaux.cmo
81
82dynlink.cmx: dynlink.cmi natdynlink.ml
83	cp natdynlink.ml  dynlink.mlopt
84	$(OCAMLOPT) -c $(COMPFLAGS) -impl dynlink.mlopt
85	rm -f dynlink.mlopt
86
87extract_crc: dynlink.cma extract_crc.cmo
88	$(OCAMLC) -o extract_crc dynlink.cma extract_crc.cmo
89
90INSTALL_LIBDIR=$(DESTDIR)$(LIBDIR)
91
92install:
93	cp dynlink.cmi dynlink.cmti dynlink.cma dynlink.mli "$(INSTALL_LIBDIR)"
94	cp extract_crc "$(INSTALL_LIBDIR)/extract_crc$(EXE)"
95
96installopt:
97	if $(NATDYNLINK); then \
98	  cp $(NATOBJS) dynlink.cmxa dynlink.$(A) "$(INSTALL_LIBDIR)" && \
99	  cd "$(INSTALL_LIBDIR)" && $(RANLIB) dynlink.$(A); \
100	fi
101
102partialclean:
103	rm -f extract_crc *.cm[ioaxt] *.cmti *.cmxa
104
105clean: partialclean
106	rm -f *.$(A) *.$(O) *.so *.dll dynlink.mlopt
107
108.SUFFIXES: .ml .mli .cmo .cmi .cmx
109
110.mli.cmi:
111	$(OCAMLC) -c $(COMPFLAGS) $<
112
113.ml.cmo:
114	$(OCAMLC) -c $(COMPFLAGS) $<
115
116.ml.cmx:
117	$(OCAMLOPT) -c $(COMPFLAGS) $(OPTCOMPFLAGS) $<
118
119depend:
120
121dynlink.cmi: dynlinkaux.cmi
122dynlink.cmo: dynlink.cmi dynlinkaux.cmo
123extract_crc.cmo: dynlink.cmi
124