Skip to content

Commit 1e3bd1c

Browse files
committed
Install compiler internals (as libraries + compiled interfaces + start modules)
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@12469 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
1 parent 40e1c41 commit 1e3bd1c

File tree

6 files changed

+101
-69
lines changed

6 files changed

+101
-69
lines changed

Makefile

+96-65
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ UTILS=utils/misc.cmo utils/tbl.cmo utils/config.cmo \
4141
utils/clflags.cmo utils/terminfo.cmo utils/ccomp.cmo utils/warnings.cmo \
4242
utils/consistbl.cmo
4343

44-
OPTUTILS=$(UTILS)
45-
4644
PARSING=parsing/location.cmo parsing/longident.cmo \
4745
parsing/syntaxerr.cmo parsing/parser.cmo \
4846
parsing/lexer.cmo parsing/parse.cmo parsing/printast.cmo
@@ -64,12 +62,16 @@ COMP=bytecomp/lambda.cmo bytecomp/printlambda.cmo \
6462
bytecomp/typeopt.cmo bytecomp/switch.cmo bytecomp/matching.cmo \
6563
bytecomp/translobj.cmo bytecomp/translcore.cmo \
6664
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)
6869

6970
BYTECOMP=bytecomp/meta.cmo bytecomp/instruct.cmo bytecomp/bytegen.cmo \
7071
bytecomp/printinstr.cmo bytecomp/opcodes.cmo bytecomp/emitcode.cmo \
7172
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
7375

7476
ASMCOMP=asmcomp/arch.cmo asmcomp/debuginfo.cmo \
7577
asmcomp/cmm.cmo asmcomp/printcmm.cmo \
@@ -84,42 +86,22 @@ ASMCOMP=asmcomp/arch.cmo asmcomp/debuginfo.cmo \
8486
asmcomp/printlinear.cmo asmcomp/linearize.cmo \
8587
asmcomp/schedgen.cmo asmcomp/scheduling.cmo \
8688
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
9491

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 \
9793
toplevel/trace.cmo toplevel/topdirs.cmo toplevel/topmain.cmo
9894

99-
TOPLEVELLIB=toplevel/toplevellib.cma
100-
TOPLEVELSTART=toplevel/topstart.cmo
101-
102-
COMPOBJS=$(UTILS) $(PARSING) $(TYPING) $(COMP) $(BYTECOMP) $(DRIVER)
95+
BYTESTART=driver/main.cmo
10396

104-
TOPLIB=$(UTILS) $(PARSING) $(TYPING) $(COMP) $(BYTECOMP) $(TOPLEVEL)
97+
OPTSTART=driver/optmain.cmo
10598

106-
TOPOBJS=$(TOPLEVELLIB) $(TOPLEVELSTART)
99+
TOPLEVELSTART=toplevel/topstart.cmo
107100

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) \
111102
toplevel/genprintval.cmo toplevel/opttoploop.cmo toplevel/opttopdirs.cmo \
112103
toplevel/opttopmain.cmo toplevel/opttopstart.cmo
113104

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-
123105
PERVASIVES=$(STDLIB_MODULES) outcometree topdirs toploop
124106

125107
# For users who don't read the INSTALL file
@@ -276,10 +258,14 @@ base.opt: checkstack runtime core ocaml opt-core ocamlc.opt otherlibraries \
276258
otherlibrariesopt
277259

278260
# Installation
261+
262+
COMPLIBDIR=$(LIBDIR)/compiler-libs
263+
279264
install:
280265
if test -d $(BINDIR); then : ; else $(MKDIR) $(BINDIR); fi
281266
if test -d $(LIBDIR); then : ; else $(MKDIR) $(LIBDIR); fi
282267
if test -d $(STUBLIBDIR); then : ; else $(MKDIR) $(STUBLIBDIR); fi
268+
if test -d $(COMPLIBDIR); then : ; else $(MKDIR) $(COMPLIBDIR); fi
283269
if test -d $(MANDIR)/man$(MANEXT); then : ; \
284270
else $(MKDIR) $(MANDIR)/man$(MANEXT); fi
285271
cp VERSION $(LIBDIR)/
@@ -292,12 +278,9 @@ install:
292278
cd stdlib; $(MAKE) install
293279
cp lex/ocamllex $(BINDIR)/ocamllex$(EXE)
294280
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)
296283
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)
301284
cd tools; $(MAKE) install
302285
-cd man; $(MAKE) install
303286
for i in $(OTHERLIBRARIES); do \
@@ -316,33 +299,58 @@ installopt:
316299
cd asmrun; $(MAKE) install
317300
cp ocamlopt $(BINDIR)/ocamlopt$(EXE)
318301
cd stdlib; $(MAKE) installopt
302+
cp asmcomp/*.cmi $(COMPLIBDIR)
303+
cp compilerlibs/ocamloptcomp.cma $(OPTSTART) $(COMPLIBDIR)
319304
cd ocamldoc; $(MAKE) installopt
320305
for i in $(OTHERLIBRARIES); \
321306
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
328320

329321
clean:: partialclean
330322

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
332336

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)
335340
@sed -e 's|@compiler@|$$topdir/boot/ocamlrun $$topdir/ocamlc|' \
336341
driver/ocamlcomp.sh.in > ocamlcomp.sh
337342
@chmod +x ocamlcomp.sh
338343

339-
partialclean::
340-
rm -f ocamlc ocamlcomp.sh
341-
342344
# The native-code compiler
343345

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)
346354
@sed -e 's|@compiler@|$$topdir/boot/ocamlrun $$topdir/ocamlopt|' \
347355
driver/ocamlcomp.sh.in > ocamlcompopt.sh
348356
@chmod +x ocamlcompopt.sh
@@ -352,16 +360,20 @@ partialclean::
352360

353361
# The toplevel
354362

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)
357372
- $(CAMLRUN) ./expunge ocaml.tmp ocaml $(PERVASIVES)
358373
rm -f ocaml.tmp
359374

360-
toplevel/toplevellib.cma: $(TOPLIB)
361-
$(CAMLC) -a -o $@ $(TOPLIB)
362-
363375
partialclean::
364-
rm -f ocaml toplevel/toplevellib.cma
376+
rm -f ocaml
365377

366378
# The native toplevel
367379

@@ -430,13 +442,24 @@ partialclean::
430442

431443
beforedepend:: parsing/lexer.ml
432444

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+
433452
# The bytecode compiler compiled with the native-code compiler
434453

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)
437460
$(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)"
440463
@sed -e 's|@compiler@|$$topdir/ocamlc.opt|' \
441464
driver/ocamlcomp.sh.in > ocamlcomp.sh
442465
@chmod +x ocamlcomp.sh
@@ -446,16 +469,23 @@ partialclean::
446469

447470
# The native-code compiler compiled with itself
448471

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)
451481
@sed -e 's|@compiler@|$$topdir/ocamlopt.opt|' \
452482
driver/ocamlcomp.sh.in > ocamlcompopt.sh
453483
@chmod +x ocamlcompopt.sh
454484

455485
partialclean::
456486
rm -f ocamlopt.opt
457487

458-
$(OPTOBJS:.cmo=.cmx): ocamlopt
488+
$(COMMON:.cmo=.cmx) $(BYTECOMP:.cmo=.cmx) $(ASMCOMP:.cmo=.cmx): ocamlopt
459489

460490
# The numeric opcodes
461491

@@ -546,8 +576,9 @@ tools/cvt_emit: tools/cvt_emit.mll
546576

547577
# The "expunge" utility
548578

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
551582

552583
partialclean::
553584
rm -f expunge

_tags

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ true: -traverse
1717
# Traverse only these directories
1818
<{bytecomp,driver,stdlib,tools,asmcomp,camlp4,ocamlbuild,toplevel,ocamldoc,typing,otherlibs,utils,debugger,lex,parsing,byterun,asmrun}/**>: traverse
1919

20-
"boot" or "byterun" or "asmrun": not_hygienic
20+
"boot" or "byterun" or "asmrun" or "compilerlibs": not_hygienic
2121

2222
# These should not be required but it fails on *BSD and Windows...
2323
"yacc" or "win32caml": not_hygienic

asmrun/Makefile

+2-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ COBJS=startup.o main.o fail.o roots.o globroots.o signals.o signals_asm.o \
2626
misc.o freelist.o major_gc.o minor_gc.o memory.o alloc.o compare.o ints.o \
2727
floats.o str.o array.o io.o extern.o intern.o hash.o sys.o parsing.o \
2828
gc_ctrl.o terminfo.o md5.o obj.o lexing.o printexc.o callback.o weak.o \
29-
compact.o finalise.o custom.o unix.o backtrace.o natdynlink.o debugger.o
29+
compact.o finalise.o custom.o unix.o backtrace.o natdynlink.o debugger.o \
30+
meta.o dynlink.o
3031

3132
ASMOBJS=$(ARCH).o
3233

compilerlibs/.gitignore

Whitespace-only changes.

tools/ocamlmktop.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@
1414

1515
let _ =
1616
let args = Ccomp.quote_files (List.tl (Array.to_list Sys.argv)) in
17-
exit(Sys.command("ocamlc -linkall toplevellib.cma " ^ args ^ " topstart.cmo"))
17+
exit(Sys.command("ocamlc -I +compiler-libs -linkall ocamlcommon.cma ocamlbytecomp.cma ocamltoplevel.cma " ^ args ^ " topstart.cmo"))

tools/ocamlmktop.tpl

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@
1313

1414
# $Id$
1515

16-
exec %%BINDIR%%/ocamlc -linkall toplevellib.cma "$@" topstart.cmo
16+
exec %%BINDIR%%/ocamlc -I +compiler-libs -linkall ocamlcommon.cma ocamlbytecomp.cma ocamltoplevel.cma "$@" topstart.cmo

0 commit comments

Comments
 (0)