@@ -41,8 +41,6 @@ UTILS=utils/misc.cmo utils/tbl.cmo utils/config.cmo \
41
41
utils/clflags.cmo utils/terminfo.cmo utils/ccomp.cmo utils/warnings.cmo \
42
42
utils/consistbl.cmo
43
43
44
- OPTUTILS =$(UTILS )
45
-
46
44
PARSING =parsing/location.cmo parsing/longident.cmo \
47
45
parsing/syntaxerr.cmo parsing/parser.cmo \
48
46
parsing/lexer.cmo parsing/parse.cmo parsing/printast.cmo
@@ -64,12 +62,16 @@ COMP=bytecomp/lambda.cmo bytecomp/printlambda.cmo \
64
62
bytecomp/typeopt.cmo bytecomp/switch.cmo bytecomp/matching.cmo \
65
63
bytecomp/translobj.cmo bytecomp/translcore.cmo \
66
64
bytecomp/translclass.cmo bytecomp/translmod.cmo \
67
- bytecomp/simplif.cmo bytecomp/runtimedef.cmo
65
+ bytecomp/simplif.cmo bytecomp/runtimedef.cmo \
66
+ driver/pparse.cmo driver/main_args.cmo
67
+
68
+ COMMON =$(UTILS ) $(PARSING ) $(TYPING ) $(COMP )
68
69
69
70
BYTECOMP =bytecomp/meta.cmo bytecomp/instruct.cmo bytecomp/bytegen.cmo \
70
71
bytecomp/printinstr.cmo bytecomp/opcodes.cmo bytecomp/emitcode.cmo \
71
72
bytecomp/bytesections.cmo bytecomp/dll.cmo bytecomp/symtable.cmo \
72
- bytecomp/bytelink.cmo bytecomp/bytelibrarian.cmo bytecomp/bytepackager.cmo
73
+ bytecomp/bytelink.cmo bytecomp/bytelibrarian.cmo bytecomp/bytepackager.cmo \
74
+ driver/errors.cmo driver/compile.cmo
73
75
74
76
ASMCOMP =asmcomp/arch.cmo asmcomp/debuginfo.cmo \
75
77
asmcomp/cmm.cmo asmcomp/printcmm.cmo \
@@ -84,42 +86,22 @@ ASMCOMP=asmcomp/arch.cmo asmcomp/debuginfo.cmo \
84
86
asmcomp/printlinear.cmo asmcomp/linearize.cmo \
85
87
asmcomp/schedgen.cmo asmcomp/scheduling.cmo \
86
88
asmcomp/emitaux.cmo asmcomp/emit.cmo asmcomp/asmgen.cmo \
87
- asmcomp/asmlink.cmo asmcomp/asmlibrarian.cmo asmcomp/asmpackager.cmo
88
-
89
- DRIVER =driver/pparse.cmo driver/errors.cmo driver/compile.cmo \
90
- driver/main_args.cmo driver/main.cmo
91
-
92
- OPTDRIVER = driver/pparse.cmo driver/opterrors.cmo driver/optcompile.cmo \
93
- driver/main_args.cmo driver/optmain.cmo
89
+ asmcomp/asmlink.cmo asmcomp/asmlibrarian.cmo asmcomp/asmpackager.cmo \
90
+ driver/opterrors.cmo driver/optcompile.cmo
94
91
95
- TOPLEVEL =driver/pparse.cmo driver/errors.cmo driver/compile.cmo \
96
- driver/main_args.cmo toplevel/genprintval.cmo toplevel/toploop.cmo \
92
+ TOPLEVEL =toplevel/genprintval.cmo toplevel/toploop.cmo \
97
93
toplevel/trace.cmo toplevel/topdirs.cmo toplevel/topmain.cmo
98
94
99
- TOPLEVELLIB =toplevel/toplevellib.cma
100
- TOPLEVELSTART =toplevel/topstart.cmo
101
-
102
- COMPOBJS =$(UTILS ) $(PARSING ) $(TYPING ) $(COMP ) $(BYTECOMP ) $(DRIVER )
95
+ BYTESTART =driver/main.cmo
103
96
104
- TOPLIB = $( UTILS ) $( PARSING ) $( TYPING ) $( COMP ) $( BYTECOMP ) $( TOPLEVEL )
97
+ OPTSTART =driver/optmain.cmo
105
98
106
- TOPOBJS = $( TOPLEVELLIB ) $( TOPLEVELSTART )
99
+ TOPLEVELSTART =toplevel/topstart.cmo
107
100
108
- NATTOPOBJS =$(OPTUTILS ) $(PARSING ) $(TYPING ) $(COMP ) $(ASMCOMP ) \
109
- driver/pparse.cmo driver/opterrors.cmo driver/optcompile.cmo \
110
- driver/main_args.cmo \
101
+ NATTOPOBJS =$(UTILS ) $(PARSING ) $(TYPING ) $(COMP ) $(ASMCOMP ) \
111
102
toplevel/genprintval.cmo toplevel/opttoploop.cmo toplevel/opttopdirs.cmo \
112
103
toplevel/opttopmain.cmo toplevel/opttopstart.cmo
113
104
114
- OPTOBJS =$(OPTUTILS ) $(PARSING ) $(TYPING ) $(COMP ) $(ASMCOMP ) $(OPTDRIVER )
115
-
116
- EXPUNGEOBJS =utils/misc.cmo utils/tbl.cmo \
117
- utils/config.cmo utils/clflags.cmo \
118
- typing/ident.cmo typing/path.cmo typing/types.cmo typing/btype.cmo \
119
- utils/warnings.cmo parsing/location.cmo \
120
- typing/predef.cmo bytecomp/runtimedef.cmo bytecomp/bytesections.cmo \
121
- bytecomp/dll.cmo bytecomp/meta.cmo bytecomp/symtable.cmo toplevel/expunge.cmo
122
-
123
105
PERVASIVES =$(STDLIB_MODULES ) outcometree topdirs toploop
124
106
125
107
# For users who don't read the INSTALL file
@@ -276,10 +258,14 @@ base.opt: checkstack runtime core ocaml opt-core ocamlc.opt otherlibraries \
276
258
otherlibrariesopt
277
259
278
260
# Installation
261
+
262
+ COMPLIBDIR =$(LIBDIR ) /compiler-libs
263
+
279
264
install :
280
265
if test -d $( BINDIR) ; then : ; else $( MKDIR) $( BINDIR) ; fi
281
266
if test -d $( LIBDIR) ; then : ; else $( MKDIR) $( LIBDIR) ; fi
282
267
if test -d $( STUBLIBDIR) ; then : ; else $( MKDIR) $( STUBLIBDIR) ; fi
268
+ if test -d $( COMPLIBDIR) ; then : ; else $( MKDIR) $( COMPLIBDIR) ; fi
283
269
if test -d $( MANDIR) /man$( MANEXT) ; then : ; \
284
270
else $(MKDIR ) $(MANDIR ) /man$(MANEXT ) ; fi
285
271
cp VERSION $(LIBDIR ) /
@@ -292,12 +278,9 @@ install:
292
278
cd stdlib; $(MAKE ) install
293
279
cp lex/ocamllex $(BINDIR ) /ocamllex$(EXE )
294
280
cp yacc/ocamlyacc$(EXE ) $(BINDIR ) /ocamlyacc$(EXE )
295
- cp toplevel/toplevellib.cma $(LIBDIR ) /toplevellib.cma
281
+ cp utils/* .cmi parsing/* .cmi typing/* .cmi bytecomp/* .cmi driver/* .cmi toplevel/* .cmi $(COMPLIBDIR )
282
+ cp compilerlibs/ocamlcommon.cma compilerlibs/ocamlbytecomp.cma compilerlibs/ocamltoplevel.cma $(BYTESTART ) $(TOPLEVELSTART ) $(COMPLIBDIR )
296
283
cp expunge $(LIBDIR ) /expunge$(EXE )
297
- cp typing/outcometree.cmi typing/outcometree.mli $(LIBDIR )
298
- cp toplevel/topstart.cmo $(LIBDIR )
299
- cp toplevel/toploop.cmi toplevel/topdirs.cmi toplevel/topmain.cmi \
300
- $(LIBDIR )
301
284
cd tools; $(MAKE ) install
302
285
-cd man; $(MAKE ) install
303
286
for i in $( OTHERLIBRARIES) ; do \
@@ -316,33 +299,58 @@ installopt:
316
299
cd asmrun; $(MAKE ) install
317
300
cp ocamlopt $(BINDIR ) /ocamlopt$(EXE )
318
301
cd stdlib; $(MAKE ) installopt
302
+ cp asmcomp/* .cmi $(COMPLIBDIR )
303
+ cp compilerlibs/ocamloptcomp.cma $(OPTSTART ) $(COMPLIBDIR )
319
304
cd ocamldoc; $(MAKE ) installopt
320
305
for i in $( OTHERLIBRARIES) ; \
321
306
do (cd otherlibs/$$ i; $( MAKE) installopt) || exit $$? ; done
322
- if test -f ocamlc.opt; \
323
- then cp ocamlc.opt $(BINDIR ) /ocamlc.opt$(EXE ) ; else : ; fi
324
- if test -f ocamlopt.opt; \
325
- then cp ocamlopt.opt $(BINDIR ) /ocamlopt.opt$(EXE ) ; else : ; fi
326
- if test -f lex/ocamllex.opt; \
327
- then cp lex/ocamllex.opt $(BINDIR ) /ocamllex.opt$(EXE ) ; else : ; fi
307
+ if test -f ocamlopt.opt ; then $( MAKE) installoptopt; fi
308
+
309
+ installoptopt :
310
+ cp ocamlc.opt $(BINDIR ) /ocamlc.opt$(EXE )
311
+ cp ocamlopt.opt $(BINDIR ) /ocamlopt.opt$(EXE )
312
+ cp lex/ocamllex.opt $(BINDIR ) /ocamllex.opt$(EXE )
313
+ cp compilerlibs/ocamlcommon.cmxa compilerlibs/ocamlcommon.a \
314
+ compilerlibs/ocamlbytecomp.cmxa compilerlibs/ocamlbytecomp.a \
315
+ compilerlibs/ocamloptcomp.cma compilerlibs/ocamloptcomp.a \
316
+ $(BYTESTART:.cmo =.cmx) $(BYTESTART:.cmo=.o ) \
317
+ $(OPTSTART:.cmo=.cmx ) $(OPTSTART:.cmo=.o ) \
318
+ $(COMPLIBDIR )
319
+ cd $(COMPLIBDIR) && $(RANLIB) ocamlcommon.a ocamlbytecomp.a ocamloptcomp.a
328
320
329
321
clean :: partialclean
330
322
331
- # The compiler
323
+ # Shared parts of the system
324
+
325
+ compilerlibs/ocamlcommon.cma : $(COMMON )
326
+ $(CAMLC ) -a -o $@ $(COMMON )
327
+ partialclean ::
328
+ rm -f compilerlibs/ocamlcommon.cma
329
+
330
+ # The bytecode compiler
331
+
332
+ compilerlibs/ocamlbytecomp.cma : $(BYTECOMP )
333
+ $(CAMLC ) -a -o $@ $(BYTECOMP )
334
+ partialclean ::
335
+ rm -f compilerlibs/ocamlbytecomp.cma
332
336
333
- ocamlc : $(COMPOBJS )
334
- $(CAMLC ) $(LINKFLAGS ) -o ocamlc $(COMPOBJS )
337
+ ocamlc : compilerlibs/ocamlcommon.cma compilerlibs/ocamlbytecomp.cma $(BYTESTART )
338
+ $(CAMLC ) $(LINKFLAGS ) -o ocamlc \
339
+ compilerlibs/ocamlcommon.cma compilerlibs/ocamlbytecomp.cma $(BYTESTART)
335
340
@sed -e 's|@compiler@|$$topdir/boot/ocamlrun $$topdir/ocamlc|' \
336
341
driver/ocamlcomp.sh.in > ocamlcomp.sh
337
342
@chmod +x ocamlcomp.sh
338
343
339
- partialclean ::
340
- rm -f ocamlc ocamlcomp.sh
341
-
342
344
# The native-code compiler
343
345
344
- ocamlopt : $(OPTOBJS )
345
- $(CAMLC ) $(LINKFLAGS ) -o ocamlopt $(OPTOBJS )
346
+ compilerlibs/ocamloptcomp.cma : $(ASMCOMP )
347
+ $(CAMLC ) -a -o $@ $(ASMCOMP )
348
+ partialclean ::
349
+ rm -f compilerlibs/ocamloptcomp.cma
350
+
351
+ ocamlopt : compilerlibs/ocamlcommon.cma compilerlibs/ocamloptcomp.cma $(OPTSTART )
352
+ $(CAMLC ) $(LINKFLAGS ) -o ocamlopt \
353
+ compilerlibs/ocamlcommon.cma compilerlibs/ocamloptcomp.cma $(OPTSTART)
346
354
@sed -e 's|@compiler@|$$topdir/boot/ocamlrun $$topdir/ocamlopt|' \
347
355
driver/ocamlcomp.sh.in > ocamlcompopt.sh
348
356
@chmod +x ocamlcompopt.sh
@@ -352,16 +360,20 @@ partialclean::
352
360
353
361
# The toplevel
354
362
355
- ocaml : $(TOPOBJS ) expunge
356
- $(CAMLC ) $(LINKFLAGS ) -linkall -o ocaml.tmp $(TOPOBJS )
363
+ compilerlibs/ocamltoplevel.cma : $(TOPLEVEL )
364
+ $(CAMLC ) -a -o $@ $(TOPLEVEL )
365
+ partialclean ::
366
+ rm -f compilerlibs/ocamltoplevel.cma
367
+
368
+ ocaml : compilerlibs/ocamlcommon.cma compilerlibs/ocamlbytecomp.cma compilerlibs/ocamltoplevel.cma $(TOPLEVELSTART ) expunge
369
+ $(CAMLC ) $(LINKFLAGS ) -linkall -o ocaml.tmp \
370
+ compilerlibs/ocamlcommon.cma compilerlibs/ocamlbytecomp.cma \
371
+ compilerlibs/ocamltoplevel.cma $(TOPLEVELSTART)
357
372
- $(CAMLRUN) ./expunge ocaml.tmp ocaml $(PERVASIVES)
358
373
rm -f ocaml.tmp
359
374
360
- toplevel/toplevellib.cma : $(TOPLIB )
361
- $(CAMLC ) -a -o $@ $(TOPLIB )
362
-
363
375
partialclean ::
364
- rm -f ocaml toplevel/toplevellib.cma
376
+ rm -f ocaml
365
377
366
378
# The native toplevel
367
379
@@ -430,13 +442,24 @@ partialclean::
430
442
431
443
beforedepend :: parsing/lexer.ml
432
444
445
+ # Shared parts of the system compiled with the native-code compiler
446
+
447
+ compilerlibs/ocamlcommon.cmxa : $(COMMON:.cmo=.cmx )
448
+ $(CAMLOPT ) -a -o $@ $(COMMON:.cmo=.cmx )
449
+ partialclean ::
450
+ rm -f compilerlibs/ocamlcommon.cmxa compilerlibs/ocamlcommon.a
451
+
433
452
# The bytecode compiler compiled with the native-code compiler
434
453
435
- ocamlc.opt : $(COMPOBJS:.cmo=.cmx )
436
- cd asmrun; $(MAKE ) meta.o dynlink.o
454
+ compilerlibs/ocamlbytecomp.cmxa : $(BYTECOMP:.cmo=.cmx )
455
+ $(CAMLOPT ) -a -o $@ $(BYTECOMP:.cmo=.cmx )
456
+ partialclean ::
457
+ rm -f compilerlibs/ocamlbytecomp.cmxa compilerlibs/ocamlbytecomp.a
458
+
459
+ ocamlc.opt : compilerlibs/ocamlcommon.cmxa compilerlibs/ocamlbytecomp.cmxa $(BYTESTART:.cmo=.cmx )
437
460
$(CAMLOPT ) $(LINKFLAGS ) -ccopt " $( BYTECCLINKOPTS) " -o ocamlc.opt \
438
- $( COMPOBJS:.cmo=.cmx ) \
439
- asmrun/meta.o asmrun/dynlink.o -cclib " $( BYTECCLIBS) "
461
+ compilerlibs/ocamlcommon.cmxa compilerlibs/ocamlbytecomp.cmxa \
462
+ $(BYTESTART:.cmo =.cmx) -cclib "$(BYTECCLIBS ) "
440
463
@sed -e 's|@compiler@|$$topdir/ocamlc.opt|' \
441
464
driver/ocamlcomp.sh.in > ocamlcomp.sh
442
465
@chmod +x ocamlcomp.sh
@@ -446,16 +469,23 @@ partialclean::
446
469
447
470
# The native-code compiler compiled with itself
448
471
449
- ocamlopt.opt : $(OPTOBJS:.cmo=.cmx )
450
- $(CAMLOPT ) $(LINKFLAGS ) -o ocamlopt.opt $(OPTOBJS:.cmo=.cmx )
472
+ compilerlibs/ocamloptcomp.cmxa : $(ASMCOMP:.cmo=.cmx )
473
+ $(CAMLOPT ) -a -o $@ $(ASMCOMP:.cmo=.cmx )
474
+ partialclean ::
475
+ rm -f compilerlibs/ocamloptcomp.cmxa compilerlibs/ocamloptcomp.a
476
+
477
+ ocamlopt.opt : compilerlibs/ocamlcommon.cmxa compilerlibs/ocamloptcomp.cmxa $(OPTSTART:.cmo=.cmx )
478
+ $(CAMLOPT ) $(LINKFLAGS ) -o ocamlopt.opt \
479
+ compilerlibs/ocamlcommon.cmxa compilerlibs/ocamloptcomp.cmxa \
480
+ $(OPTSTART:.cmo =.cmx)
451
481
@sed -e 's|@compiler@|$$topdir/ocamlopt.opt|' \
452
482
driver/ocamlcomp.sh.in > ocamlcompopt.sh
453
483
@chmod +x ocamlcompopt.sh
454
484
455
485
partialclean ::
456
486
rm -f ocamlopt.opt
457
487
458
- $(OPTOBJS :.cmo =.cmx): ocamlopt
488
+ $(COMMON:.cmo =.cmx) $( BYTECOMP:.cmo=.cmx ) $( ASMCOMP :.cmo=.cmx ) : ocamlopt
459
489
460
490
# The numeric opcodes
461
491
@@ -546,8 +576,9 @@ tools/cvt_emit: tools/cvt_emit.mll
546
576
547
577
# The "expunge" utility
548
578
549
- expunge : $(EXPUNGEOBJS )
550
- $(CAMLC ) $(LINKFLAGS ) -o expunge $(EXPUNGEOBJS )
579
+ expunge : compilerlibs/ocamlcommon.cma compilerlibs/ocamlbytecomp.cma toplevel/expunge.cmo
580
+ $(CAMLC ) $(LINKFLAGS ) -o expunge \
581
+ compilerlibs/ocamlcommon.cma compilerlibs/ocamlbytecomp.cma toplevel/expunge.cmo
551
582
552
583
partialclean ::
553
584
rm -f expunge
0 commit comments