Provide a way to build the bytecode compiler using Dune (#2093)

master
Thomas Refis 2018-10-10 16:16:00 +01:00 committed by GitHub
parent 8e801959e8
commit d68e0e2077
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 953 additions and 131 deletions

2
.gitignore vendored
View File

@ -34,6 +34,8 @@
_ocamltest
_ocamltestd
*.odoc
.merlin
_build
# local to root directory

59
.merlin
View File

@ -1,59 +0,0 @@
S ./asmcomp
B ./asmcomp
S ./asmcomp/debug
B ./asmcomp/debug
S ./middle_end
B ./middle_end
S ./middle_end/base_types
B ./middle_end/base_types
S ./bytecomp
B ./bytecomp
S ./driver
B ./driver
S ./lex
B ./lex
S ./otherlibs/bigarray
B ./otherlibs/bigarray
S ./otherlibs/dynlink
B ./otherlibs/dynlink
S ./otherlibs/graph
B ./otherlibs/graph
S ./otherlibs/str
B ./otherlibs/str
S ./otherlibs/systhreads
B ./otherlibs/systhreads
S ./otherlibs/threads
B ./otherlibs/threads
S ./otherlibs/unix
B ./otherlibs/unix
S ./parsing
B ./parsing
STDLIB ./stdlib
FLG -open Stdlib -nopervasives
S ./toplevel
B ./toplevel
S ./typing
B ./typing
S ./utils
B ./utils
S ./ocamltest
B ./ocamltest

View File

@ -298,68 +298,8 @@ endif
# The configuration file
# SUBST generates the sed substitution for the variable *named* in $1
# SUBST_QUOTE does the same, adding double-quotes around non-empty strings
# (see FLEXDLL_DIR which must empty if FLEXDLL_DIR is empty but an OCaml
# string otherwise)
SUBST_ESCAPE=$(subst ",\\",$(subst \,\\,$(if $2,$2,$($1))))
SUBST=-e 's|%%$1%%|$(call SUBST_ESCAPE,$1,$2)|'
SUBST_QUOTE2=-e 's|%%$1%%|$(if $2,"$2")|'
SUBST_QUOTE=$(call SUBST_QUOTE2,$1,$(call SUBST_ESCAPE,$1,$2))
FLEXLINK_LDFLAGS=$(if $(OC_LDFLAGS), -link "$(OC_LDFLAGS)")
utils/config.ml: utils/config.mlp Makefile.config Makefile
sed $(call SUBST,AFL_INSTRUMENT) \
$(call SUBST,ARCH) \
$(call SUBST,ARCMD) \
$(call SUBST,ASM) \
$(call SUBST,ASM_CFI_SUPPORTED) \
$(call SUBST,BYTECCLIBS) \
$(call SUBST,CC) \
$(call SUBST,CCOMPTYPE) \
$(call SUBST,CC_PROFILE) \
$(call SUBST,OUTPUTOBJ) \
$(call SUBST,EXT_ASM) \
$(call SUBST,EXT_DLL) \
$(call SUBST,EXE) \
$(call SUBST,EXT_LIB) \
$(call SUBST,EXT_OBJ) \
$(call SUBST,FLAMBDA) \
$(call SUBST,WITH_FLAMBDA_INVARIANTS) \
$(call SUBST,FLEXLINK_FLAGS) \
$(call SUBST_QUOTE,FLEXDLL_DIR) \
$(call SUBST,HOST) \
$(call SUBST,LIBDIR) \
$(call SUBST,LIBUNWIND_AVAILABLE) \
$(call SUBST,LIBUNWIND_LINK_FLAGS) \
$(call SUBST,MKDLL) \
$(call SUBST,MKEXE) \
$(call SUBST,FLEXLINK_LDFLAGS) \
$(call SUBST,MKMAINDLL) \
$(call SUBST,MODEL) \
$(call SUBST,NATIVECCLIBS) \
$(call SUBST,OCAMLC_CFLAGS) \
$(call SUBST,OCAMLC_CPPFLAGS) \
$(call SUBST,OCAMLOPT_CFLAGS) \
$(call SUBST,OCAMLOPT_CPPFLAGS) \
$(call SUBST,PACKLD) \
$(call SUBST,PROFILING) \
$(call SUBST,PROFINFO_WIDTH) \
$(call SUBST,RANLIBCMD) \
$(call SUBST,FORCE_SAFE_STRING) \
$(call SUBST,DEFAULT_SAFE_STRING) \
$(call SUBST,WINDOWS_UNICODE) \
$(call SUBST,SUPPORTS_SHARED_LIBRARIES) \
$(call SUBST,SYSTEM) \
$(call SUBST,SYSTHREAD_SUPPORT) \
$(call SUBST,TARGET) \
$(call SUBST,WITH_FRAME_POINTERS) \
$(call SUBST,WITH_PROFINFO) \
$(call SUBST,WITH_SPACETIME) \
$(call SUBST,ENABLE_CALL_COUNTS) \
$(call SUBST,FLAT_FLOAT_ARRAY) \
$(call SUBST,CC_HAS_DEBUG_PREFIX_MAP) \
$(call SUBST,AS_HAS_DEBUG_PREFIX_MAP) \
$< > $@
utils/config.ml:
$(MAKE) -C utils config.ml
ifeq "$(UNIX_OR_WIN32)" "unix"
.PHONY: reconfigure
@ -908,14 +848,9 @@ $(COMMON:.cmo=.cmx) $(BYTECOMP:.cmo=.cmx) $(OPTCOMP:.cmo=.cmx): ocamlopt
runtime/primitives:
$(MAKE) -C runtime primitives
bytecomp/runtimedef.ml: runtime/primitives runtime/caml/fail.h
(echo 'let builtin_exceptions = [|'; \
cat runtime/caml/fail.h | tr -d '\r' | \
sed -n -e 's|.*/\* \("[A-Za-z_]*"\) \*/$$| \1;|p'; \
echo '|]'; \
echo 'let builtin_primitives = [|'; \
sed -e 's/.*/ "&";/' runtime/primitives; \
echo '|]') > $@
bytecomp/runtimedef.ml: bytecomp/generate_runtimedef.sh runtime/caml/fail.h \
runtime/primitives
$^ > $@
partialclean::
rm -f bytecomp/runtimedef.ml

44
asmcomp/dune Normal file
View File

@ -0,0 +1,44 @@
;**************************************************************************
;* *
;* OCaml *
;* *
;* Thomas Refis, Jane Street Europe *
;* *
;* Copyright 2018 Jane Street Group LLC *
;* *
;* All rights reserved. This file is distributed under the terms of *
;* the GNU Lesser General Public License version 2.1, with the *
;* special exception on linking described in the file LICENSE. *
;* *
;**************************************************************************
(rule
(targets arch.ml CSE.ml proc.ml reload.ml scheduling.ml selection.ml)
(mode fallback)
(deps (:conf ../Makefile.config)
(glob_files amd64/*.ml)
(glob_files arm/*.ml)
(glob_files arm64/*.ml)
(glob_files i386/*.ml)
(glob_files power/*.ml)
(glob_files s390x/*.ml))
(action (bash "cp `grep 'ARCH=' %{conf} | cut -d'=' -f2`/*.ml .")))
(rule
(targets emit.ml)
(mode fallback)
(deps (:conf ../Makefile.config)
amd64/emit.mlp
arm/emit.mlp
arm64/emit.mlp
i386/emit.mlp
power/emit.mlp
s390x/emit.mlp)
(action
(progn
(with-stdout-to contains-input-name
(bash "echo `grep 'ARCH=' %{conf} | cut -d'=' -f2`/emit.mlp"))
(with-stdout-to %{targets}
(progn
(bash "echo \\# 1 \\\"`cat contains-input-name`\\\"")
(bash "%{dep:../tools/cvt_emit.exe} < `cat contains-input-name`"))))))

28
bytecomp/dune Normal file
View File

@ -0,0 +1,28 @@
;**************************************************************************
;* *
;* OCaml *
;* *
;* Thomas Refis, Jane Street Europe *
;* *
;* Copyright 2018 Jane Street Group LLC *
;* *
;* All rights reserved. This file is distributed under the terms of *
;* the GNU Lesser General Public License version 2.1, with the *
;* special exception on linking described in the file LICENSE. *
;* *
;**************************************************************************
(rule
(targets opcodes.ml)
(mode fallback)
(deps (:instr (file ../runtime/caml/instruct.h)))
(action
(bash "%{dep:../tools/make_opcodes.exe} -opcodes < %{instr} > %{targets}")))
(rule
(targets runtimedef.ml)
(mode fallback)
(deps (:fail (file ../runtime/caml/fail.h))
(:prim (file ../runtime/primitives)))
(action (with-stdout-to %{targets}
(run ./generate_runtimedef.sh %{fail} %{prim}))))

25
bytecomp/generate_runtimedef.sh Executable file
View File

@ -0,0 +1,25 @@
#!/bin/bash
#**************************************************************************
#* *
#* OCaml *
#* *
#* Xavier Leroy, projet Cristal, INRIA Rocquencourt *
#* *
#* Copyright 1999 Institut National de Recherche en Informatique et *
#* en Automatique. *
#* *
#* All rights reserved. This file is distributed under the terms of *
#* the GNU Lesser General Public License version 2.1, with the *
#* special exception on linking described in the file LICENSE. *
#* *
#**************************************************************************
echo 'let builtin_exceptions = [|'
cat "$1" | tr -d '\r' | \
sed -n -e 's|.*/\* \("[A-Za-z_]*"\) \*/$| \1;|p'
echo '|]'
echo 'let builtin_primitives = [|'
sed -e 's/.*/ "&";/' "$2"
echo '|]'

25
debugger/dune Normal file
View File

@ -0,0 +1,25 @@
;**************************************************************************
;* *
;* OCaml *
;* *
;* Thomas Refis, Jane Street Europe *
;* *
;* Copyright 2018 Jane Street Group LLC *
;* *
;* All rights reserved. This file is distributed under the terms of *
;* the GNU Lesser General Public License version 2.1, with the *
;* special exception on linking described in the file LICENSE. *
;* *
;**************************************************************************
(ocamllex lexer)
(ocamlyacc parser)
(executable
(name main)
(modes byte)
(flags (:standard -w -9))
(modules_without_implementation parser_aux)
(libraries ocamlcommon ocamltoplevel runtime stdlib unix))
(rule (copy main.exe ocamldebug.byte))

6
driver/dune Normal file
View File

@ -0,0 +1,6 @@
(rule
(targets compdynlink.ml)
(deps (:ml (file ../otherlibs/dynlink/dynlink.ml)))
(action
(with-stdout-to %{targets}
(bash "grep -v 'REMOVE_ME for ../../debugger/dynlink.ml' %{ml}"))))

175
dune Normal file
View File

@ -0,0 +1,175 @@
;**************************************************************************
;* *
;* OCaml *
;* *
;* Thomas Refis, Jane Street Europe *
;* *
;* Copyright 2018 Jane Street Group LLC *
;* *
;* All rights reserved. This file is distributed under the terms of *
;* the GNU Lesser General Public License version 2.1, with the *
;* special exception on linking described in the file LICENSE. *
;* *
;**************************************************************************
(env
(dev (flags (:standard -w +a-4-9-41-42-44-45-48)))
(release (flags (:standard -w +a-4-9-41-42-44-45-48))))
;; Too annoying to get to work. Use (copy_files# ...) instead
; (include_subdirs unqualified)
; (ignored_subdirs (lex yacc testsuite ocamldoc ocamltest toplevel otherlibs))
(copy_files# utils/*.ml{,i})
(copy_files# parsing/*.ml{,i})
(copy_files# typing/*.ml{,i})
(copy_files# bytecomp/*.ml{,i})
(copy_files# driver/*.ml{,i})
(copy_files# asmcomp/*.ml{,i})
(copy_files# asmcomp/debug/*.ml{,i})
(copy_files# middle_end/*.ml{,i})
(copy_files# middle_end/base_types/*.ml{,i})
(library
(name ocamlcommon)
(wrapped false)
(flags (:standard -principal -nostdlib))
(libraries stdlib)
(modules_without_implementation
annot asttypes cmo_format outcometree parsetree)
(modules
;; UTILS
config build_path_prefix_map misc identifiable numbers arg_helper clflags
profile terminfo ccomp warnings consistbl strongly_connected_components
targetint
;; PARSING
location longident docstrings syntaxerr ast_helper camlinternalMenhirLib
parser lexer parse printast pprintast ast_mapper ast_iterator attr_helper
builtin_attributes ast_invariants depend
; manual update: mli only files
asttypes parsetree
;; TYPING
ident path primitive types btype oprint subst predef datarepr cmi_format env
typedtree printtyped ctype printtyp includeclass mtype envaux includecore
typedtreeIter typedtreeMap tast_mapper cmt_format untypeast includemod
typetexp printpat parmatch stypes typedecl typeopt rec_check typecore
typeclass typemod
; manual update: mli only files
annot outcometree
;; COMP
lambda printlambda semantics_of_primitives switch matching translobj
translattribute translprim translcore translclass translmod simplif
runtimedef meta opcodes bytesections dll symtable pparse main_args compenv
compmisc compdynlink compplugin makedepend compile_common
; manual update: mli only files
cmo_format
; manual update: this is required.
instruct
))
(library
(name ocamlbytecomp)
(wrapped false)
(flags (:standard -principal -nostdlib))
(libraries stdlib ocamlcommon)
(modules
bytegen printinstr emitcode bytelink bytelibrarian bytepackager errors
compile))
(library
(name ocamloptcomp)
(wrapped false)
(flags (:standard -principal -nostdlib))
(libraries stdlib ocamlcommon)
(modules_without_implementation
cmx_format x86_ast backend_intf inlining_decision_intf
simplify_boxed_integer_ops_intf)
(modules
;; ASMCOMP
arch backend_var cmm printcmm reg reg_with_debug_info reg_availability_set
mach proc clambda printclambda export_info export_info_for_pack compilenv
closure traverse_for_exported_symbols build_export_info closure_offsets
flambda_to_clambda import_approx un_anf afl_instrument strmatch cmmgen
interval printmach selectgen spacetime_profiling selection comballoc CSEgen
CSE liveness spill split interf coloring linscan reloadgen reload deadcode
printlinear linearize available_regs schedgen scheduling
branch_relaxation_intf branch_relaxation emitaux emit asmgen asmlink
asmlibrarian asmpackager opterrors optcompile
; manual update: mli only files
cmx_format
; arch specific files: we always include them even though depending on the
; target architecture they might not be used.
x86_ast
x86_proc
x86_dsl
x86_gas
x86_masm
;; MIDDLE_END
int_replace_polymorphic_compare debuginfo tag linkage_name compilation_unit
internal_variable_names variable mutable_variable id_types set_of_closures_id
set_of_closures_origin closure_element closure_id closure_origin
var_within_closure static_exception export_id symbol pass_wrapper
allocated_const parameter projection flambda flambda_iterators flambda_utils
inlining_cost effect_analysis freshening simple_value_approx lift_code
closure_conversion_aux closure_conversion initialize_symbol_to_let_symbol
lift_let_to_initialize_symbol find_recursive_functions invariant_params
inconstant_idents alias_analysis lift_constants share_constants
simplify_common remove_unused_arguments remove_unused_closure_vars
remove_unused_program_constructs simplify_boxed_integer_ops
simplify_primitives inlining_stats_types inlining_stats
inline_and_simplify_aux remove_free_vars_equal_to_args extract_projections
augment_specialised_args unbox_free_vars_of_closures unbox_specialised_args
unbox_closures inlining_transforms inlining_decision inline_and_simplify
ref_to_variables flambda_invariants middle_end
; manual update: mli only files
backend_intf inlining_decision_intf simplify_boxed_integer_ops_intf
)
)
;;;;;;;;;;;;;;
;;; ocamlc ;;;
;;;;;;;;;;;;;;
(executable
(name main)
(modes byte)
(flags (:standard -principal -nostdlib))
(libraries ocamlbytecomp ocamlcommon runtime stdlib)
(modules main))
(rule
(copy main.exe ocamlc.byte))
;;;;;;;;;;;;;;;;
;;; ocamlopt ;;;
;;;;;;;;;;;;;;;;
(executable
(name optmain)
(modes byte)
(flags (:standard -principal -nostdlib))
(libraries ocamloptcomp ocamlcommon runtime stdlib)
(modules optmain))
(rule
(copy optmain.exe ocamlopt.byte))
;;;;;;;;;;;;;;;
;;; aliases ;;;
;;;;;;;;;;;;;;;
(alias
(name world)
(deps ocamlc.byte
ocamlopt.byte
debugger/ocamldebug.byte
ocamldoc/ocamldoc.byte
ocamltest/ocamltest.byte
toplevel/ocaml.byte
toplevel/expunge.exe
))

2
dune-project Normal file
View File

@ -0,0 +1,2 @@
(lang dune 1.3)
(using experimental_building_ocaml_compiler_with_dune 0.1)

25
ocamldoc/dune Normal file
View File

@ -0,0 +1,25 @@
;**************************************************************************
;* *
;* OCaml *
;* *
;* Thomas Refis, Jane Street Europe *
;* *
;* Copyright 2018 Jane Street Group LLC *
;* *
;* All rights reserved. This file is distributed under the terms of *
;* the GNU Lesser General Public License version 2.1, with the *
;* special exception on linking described in the file LICENSE. *
;* *
;**************************************************************************
(ocamllex odoc_lexer odoc_ocamlhtml odoc_see_lexer odoc_text_lexer)
(ocamlyacc odoc_parser odoc_text_parser)
(executable
(name odoc)
(modes byte)
(flags (:standard -nostdlib -w -9-32))
(libraries dynlink ocamlcommon stdlib runtime str unix))
(rule
(copy odoc.exe ocamldoc.byte))

52
ocamltest/dune Normal file
View File

@ -0,0 +1,52 @@
;**************************************************************************
;* *
;* OCaml *
;* *
;* Thomas Refis, Jane Street Europe *
;* *
;* Copyright 2018 Jane Street Group LLC *
;* *
;* All rights reserved. This file is distributed under the terms of *
;* the GNU Lesser General Public License version 2.1, with the *
;* special exception on linking described in the file LICENSE. *
;* *
;**************************************************************************
(ocamllex
(modules tsl_lexer)
(mode fallback))
(ocamlyacc
(modules tsl_parser)
(mode fallback))
(rule
(targets ocamltest_config.ml)
(deps ../Makefile.config ../Makefile.common Makefile
./ocamltest_config.ml.in ./getocamloptdefaultflags)
(action (run make %{targets})))
;; FIXME: handle UNIX_OR_WIN32 or something similar
(library
(name ocamltest_core_and_plugin)
(modes byte)
(wrapped false)
(flags (:standard -nostdlib))
(libraries ocamlcommon stdlib)
(modules (:standard \ options main))
(c_flags (-DCAML_INTERNALS -I%{project_root}/runtime)) ; fixme
(c_names run_unix run_stubs ocamltest_stdlib_stubs))
(rule
(targets empty.ml)
(deps (source_tree %{project_root}/runtime/caml))
(action (write-file %{targets} "(* hack *)")))
(executable
(name main)
(modes byte)
(flags (:standard -nostdlib))
(modules options main)
(libraries ocamltest_core_and_plugin runtime stdlib))
(rule (copy main.exe ocamltest.byte))

26
otherlibs/dynlink/dune Normal file
View File

@ -0,0 +1,26 @@
;**************************************************************************
;* *
;* OCaml *
;* *
;* Thomas Refis, Jane Street Europe *
;* *
;* Copyright 2018 Jane Street Group LLC *
;* *
;* All rights reserved. This file is distributed under the terms of *
;* the GNU Lesser General Public License version 2.1, with the *
;* special exception on linking described in the file LICENSE. *
;* *
;**************************************************************************
(library
(name dynlink)
(wrapped false)
(modules dynlink dynlinkaux)
; the -33 is specific to the hackery done with dune.
(flags (:standard -nostdlib -w -33))
(libraries ocamlcommon stdlib))
(rule
(targets dynlinkaux.ml)
(action (write-file %{targets}
"(* empty because we are linking with ocamlcommon *)")))

20
otherlibs/str/dune Normal file
View File

@ -0,0 +1,20 @@
;**************************************************************************
;* *
;* OCaml *
;* *
;* Thomas Refis, Jane Street Europe *
;* *
;* Copyright 2018 Jane Street Group LLC *
;* *
;* All rights reserved. This file is distributed under the terms of *
;* the GNU Lesser General Public License version 2.1, with the *
;* special exception on linking described in the file LICENSE. *
;* *
;**************************************************************************
(library
(name str)
(modes byte)
(flags (:standard -nostdlib))
(libraries stdlib)
(c_names strstubs))

33
otherlibs/unix/dune Normal file
View File

@ -0,0 +1,33 @@
;**************************************************************************
;* *
;* OCaml *
;* *
;* Thomas Refis, Jane Street Europe *
;* *
;* Copyright 2018 Jane Street Group LLC *
;* *
;* All rights reserved. This file is distributed under the terms of *
;* the GNU Lesser General Public License version 2.1, with the *
;* special exception on linking described in the file LICENSE. *
;* *
;**************************************************************************
(library
(name unix)
(wrapped false)
(modes byte)
(flags (:standard -nostdlib -nolabels))
(c_flags (-I %{project_root}/runtime))
(libraries stdlib)
(c_names
accept access addrofstr alarm bind channels chdir chmod chown chroot close
fsync closedir connect cst2constr cstringv dup dup2 envir errmsg execv execve
execvp exit fchmod fchown fcntl fork ftruncate getaddrinfo getcwd getegid
geteuid getgid getgr getgroups gethost gethostname getlogin getnameinfo
getpeername getpid getppid getproto getpw gettimeofday getserv getsockname
getuid gmtime initgroups isatty itimer kill link listen lockf lseek mkdir
mkfifo mmap mmap_ba nice open opendir pipe putenv read readdir readlink
rename rewinddir rmdir select sendrecv setgid setgroups setsid setuid
shutdown signals sleep socket socketaddr socketpair sockopt stat strofaddr
symlink termios time times truncate umask unixsupport unlink utimes wait
write))

48
parsing/dune Normal file
View File

@ -0,0 +1,48 @@
;**************************************************************************
;* *
;* OCaml *
;* *
;* Thomas Refis, Jane Street Europe *
;* *
;* Copyright 2018 Jane Street Group LLC *
;* *
;* All rights reserved. This file is distributed under the terms of *
;* the GNU Lesser General Public License version 2.1, with the *
;* special exception on linking described in the file LICENSE. *
;* *
;**************************************************************************
;; We're just reusing the stuff from boot/ here.
;; One could add a dune file in boot/menhir/ with the appropriate rules if we
;; want to regenerate the parser while building with dune, but it doesn't seem
;; essential right now.
(rule
(targets camlinternalMenhirLib.ml)
(mode fallback)
(action (copy# ../boot/menhir/menhirLib.ml %{targets})))
(rule
(targets camlinternalMenhirLib.mli)
(mode fallback)
(action (copy# ../boot/menhir/menhirLib.mli %{targets})))
(rule
(targets parser.ml)
(mode fallback)
(deps (:dep ../boot/menhir/parser.ml))
(action
(with-stdout-to %{targets}
(bash "cat %{dep} | sed 's/MenhirLib/CamlinternalMenhirLib/g'"))))
(rule
(targets parser.mli)
(mode fallback)
(deps (:dep ../boot/menhir/parser.mli))
(action
(with-stdout-to %{targets}
(bash "cat %{dep} | sed 's/MenhirLib/CamlinternalMenhirLib/g'"))))
(ocamllex
(modules lexer)
(mode fallback))

29
runtime/caml/dune Normal file
View File

@ -0,0 +1,29 @@
;**************************************************************************
;* *
;* OCaml *
;* *
;* Thomas Refis, Jane Street Europe *
;* *
;* Copyright 2018 Jane Street Group LLC *
;* *
;* All rights reserved. This file is distributed under the terms of *
;* the GNU Lesser General Public License version 2.1, with the *
;* special exception on linking described in the file LICENSE. *
;* *
;**************************************************************************
(rule
(targets jumptbl.h)
(mode fallback)
(deps (:h instruct.h))
(action
(with-stdout-to %{targets}
(bash "cat %{h} | tr -d '\\r' | \
sed -n -e '/^ /s/ \\([A-Z]\\)/ \\&\\&lbl_\\1/gp' -e '/^}/q'"))))
(rule
(targets version.h)
(mode fallback)
(action
(with-stdout-to %{targets}
(run %{dep:../../tools/make-version-header.sh} %{dep:../../VERSION}))))

58
runtime/dune Normal file
View File

@ -0,0 +1,58 @@
;**************************************************************************
;* *
;* OCaml *
;* *
;* Thomas Refis, Jane Street Europe *
;* *
;* Copyright 2018 Jane Street Group LLC *
;* *
;* All rights reserved. This file is distributed under the terms of *
;* the GNU Lesser General Public License version 2.1, with the *
;* special exception on linking described in the file LICENSE. *
;* *
;**************************************************************************
(rule
(targets primitives)
(mode fallback)
(deps alloc.c array.c compare.c extern.c floats.c gc_ctrl.c hash.c intern.c
interp.c ints.c io.c lexing.c md5.c meta.c obj.c parsing.c signals.c
str.c sys.c callback.c weak.c finalise.c stacks.c dynlink.c
backtrace_byt.c backtrace.c spacetime_byt.c afl.c bigarray.c)
(action (with-stdout-to %{targets} (run %{dep:gen_primitives.sh}))))
(rule
(targets libcamlrun.a)
(mode fallback)
(deps ../Makefile.config ../Makefile.common Makefile
(glob_files caml/*.h)
interp.c misc.c stacks.c fix_code.c startup_aux.c startup_byt.c
freelist.c major_gc.c minor_gc.c memory.c alloc.c roots_byt.c
globroots.c fail_byt.c signals.c signals_byt.c printexc.c
backtrace_byt.c backtrace.c compare.c ints.c floats.c str.c array.c
io.c extern.c intern.c hash.c sys.c meta.c parsing.c gc_ctrl.c md5.c
obj.c lexing.c callback.c debugger.c weak.c compact.c finalise.c
custom.c dynlink.c spacetime_byt.c afl.c unix.c win32.c bigarray.c
main.c)
(action
(progn
(bash "touch .depend") ; hack.
(run make %{targets})
(bash "rm .depend"))))
;; HACK
(library
(name runtime)
(modes byte)
(wrapped false)
(modules runtime)
(flags (-nostdlib -nopervasives))
(self_build_stubs_archive (runtime)))
(rule
(targets libruntime_stubs.a)
(action (copy libcamlrun.a %{targets})))
(rule
(targets runtime.ml)
(action (write-file %{targets} "let linkme = ()")))

28
runtime/gen_primitives.sh Executable file
View File

@ -0,0 +1,28 @@
#!/bin/bash
#**************************************************************************
#* *
#* OCaml *
#* *
#* Xavier Leroy, projet Cristal, INRIA Rocquencourt *
#* *
#* Copyright 1999 Institut National de Recherche en Informatique et *
#* en Automatique. *
#* *
#* All rights reserved. This file is distributed under the terms of *
#* the GNU Lesser General Public License version 2.1, with the *
#* special exception on linking described in the file LICENSE. *
#* *
#**************************************************************************
# duplicated from $(ROOTDIR)/runtime/Makefile
(
for prim in \
alloc array compare extern floats gc_ctrl hash intern interp ints io \
lexing md5 meta obj parsing signals str sys callback weak finalise \
stacks dynlink backtrace_byt backtrace spacetime_byt afl bigarray
do
sed -n -e "s/CAMLprim value \([a-z0-9_][a-z0-9_]*\).*/\1/p" "$prim.c"
done
) | LC_ALL=C sort | uniq

91
stdlib/dune Normal file
View File

@ -0,0 +1,91 @@
;**************************************************************************
;* *
;* OCaml *
;* *
;* Thomas Refis, Jane Street Europe *
;* *
;* Copyright 2018 Jane Street Group LLC *
;* *
;* All rights reserved. This file is distributed under the terms of *
;* the GNU Lesser General Public License version 2.1, with the *
;* special exception on linking described in the file LICENSE. *
;* *
;**************************************************************************
(library
(name stdlib)
(stdlib
(exit_module std_exit)
(internal_modules Camlinternal*)
(modules_before_stdlib
camlinternalFormatBasics))
(flags (:standard -w -9))
;; We're listing the modules here to avoid building the Labels ones.
(modules
spacetime
arg
array
bigarray
buffer
bytes
callback
camlinternalFormat
camlinternalFormatBasics
camlinternalLazy
camlinternalMod
camlinternalOO
char
complex
digest
ephemeron
filename
float
format
gc
genlex
hashtbl
int32
int64
lazy
lexing
list
map
marshal
nativeint
obj
oo
option
parsing
pervasives
printexc
printf
queue
random
result
scanf
seq
set
stack
stdlib
stream
string
sys
uchar
weak
;; booh
std_exit
)
(preprocess
(per_module
((action
(run awk -v dune_wrapped=true
-f %{dep:expand_module_aliases.awk} %{input-file}))
stdlib))))
(rule
(targets sys.ml)
(deps (:version ../VERSION) (:p sys.mlp))
(action
(with-stdout-to %{targets}
(bash
"sed -e \"s|%%VERSION%%|`sed -e 1q %{version} | tr -d '\r'`|\" %{p}"))))

View File

@ -23,8 +23,10 @@ NR == 1 { printf ("# 1 \"%s\"\n", FILENAME) }
state=2;
else if ($1 == "module")
{ if (ocamldoc!="true") printf("\n(** @canonical %s *)", $2);
printf("\nmodule %s = Stdlib__%s%s\n", $2,
tolower(substr($4,1,1)), substr($4,2));
first_letter=substr($4,1,1);
if (dune_wrapped!="true")
first_letter=tolower(first_letter);
printf("\nmodule %s = Stdlib__%s%s\n", $2, first_letter, substr($4,2));
}
else
print

25
tools/dune Normal file
View File

@ -0,0 +1,25 @@
;**************************************************************************
;* *
;* OCaml *
;* *
;* Thomas Refis, Jane Street Europe *
;* *
;* Copyright 2018 Jane Street Group LLC *
;* *
;* All rights reserved. This file is distributed under the terms of *
;* the GNU Lesser General Public License version 2.1, with the *
;* special exception on linking described in the file LICENSE. *
;* *
;**************************************************************************
(executables
(names make_opcodes cvt_emit)
(modules make_opcodes cvt_emit))
(ocamllex
(modules make_opcodes)
(mode fallback))
(ocamllex
(modules cvt_emit)
(mode fallback))

98
toplevel/dune Normal file
View File

@ -0,0 +1,98 @@
;**************************************************************************
;* *
;* OCaml *
;* *
;* Thomas Refis, Jane Street Europe *
;* *
;* Copyright 2018 Jane Street Group LLC *
;* *
;* All rights reserved. This file is distributed under the terms of *
;* the GNU Lesser General Public License version 2.1, with the *
;* special exception on linking described in the file LICENSE. *
;* *
;**************************************************************************
(library
(name ocamltoplevel)
(wrapped false)
(flags (:standard -principal -nostdlib))
(libraries stdlib ocamlcommon ocamlbytecomp)
(modules genprintval toploop trace topdirs topmain))
(executable
(name topstart)
(modes byte)
(flags (:standard -principal -nostdlib))
(libraries ocamlbytecomp ocamlcommon ocamltoplevel runtime stdlib)
(modules topstart))
(executable
(name expunge)
(modes byte)
(flags (:standard -principal -nostdlib))
(libraries ocamlbytecomp ocamlcommon runtime stdlib)
(modules expunge))
(rule
(targets ocaml.byte)
(action (run %{ocaml_where}/expunge %{dep:topstart.exe} %{targets}
; FIXME: inlined $(STDLIB_MODULES) ... minus Labels ones ...
stdlib__Spacetime
stdlib__Arg
stdlib__Array
; stdlib__ArrayLabels
stdlib__Bigarray
stdlib__Buffer
stdlib__Bytes
; stdlib__BytesLabels
stdlib__Callback
camlinternalFormat
camlinternalFormatBasics
camlinternalLazy
camlinternalMod
camlinternalOO
stdlib__Char
stdlib__Complex
stdlib__Digest
stdlib__Ephemeron
stdlib__Filename
stdlib__Float
stdlib__Format
stdlib__Gc
stdlib__Genlex
stdlib__Hashtbl
stdlib__Int32
stdlib__Int64
stdlib__Lazy
stdlib__Lexing
stdlib__List
; stdlib__ListLabels
stdlib__Map
stdlib__Marshal
; stdlib__MoreLabels
stdlib__Nativeint
stdlib__Obj
stdlib__Oo
stdlib__Option
stdlib__Parsing
stdlib__Pervasives
stdlib__Printexc
stdlib__Printf
stdlib__Queue
stdlib__Random
stdlib__Result
stdlib__Scanf
stdlib__Seq
stdlib__Set
stdlib__Stack
; stdlib__StdLabels
stdlib
stdlib__Stream
stdlib__String
; stdlib__StringLabels
stdlib__Sys
stdlib__Uchar
stdlib__Weak
; the rest
outcometree topdirs toploop
)))

83
utils/Makefile Normal file
View File

@ -0,0 +1,83 @@
#**************************************************************************
#* *
#* OCaml *
#* *
#* Xavier Leroy, projet Cristal, INRIA Rocquencourt *
#* *
#* Copyright 1999 Institut National de Recherche en Informatique et *
#* en Automatique. *
#* *
#* All rights reserved. This file is distributed under the terms of *
#* the GNU Lesser General Public License version 2.1, with the *
#* special exception on linking described in the file LICENSE. *
#* *
#**************************************************************************
# The Makefile for generating the configuration file
ROOTDIR = ..
include $(ROOTDIR)/Makefile.config
# SUBST generates the sed substitution for the variable *named* in $1
# SUBST_QUOTE does the same, adding double-quotes around non-empty strings
# (see FLEXDLL_DIR which must empty if FLEXDLL_DIR is empty but an OCaml
# string otherwise)
SUBST_ESCAPE=$(subst ",\\",$(subst \,\\,$(if $2,$2,$($1))))
SUBST=-e 's|%%$1%%|$(call SUBST_ESCAPE,$1,$2)|'
SUBST_QUOTE2=-e 's|%%$1%%|$(if $2,"$2")|'
SUBST_QUOTE=$(call SUBST_QUOTE2,$1,$(call SUBST_ESCAPE,$1,$2))
FLEXLINK_LDFLAGS=$(if $(OC_LDFLAGS), -link "$(OC_LDFLAGS)")
config.ml: config.mlp $(ROOTDIR)/Makefile.config
sed $(call SUBST,AFL_INSTRUMENT) \
$(call SUBST,ARCH) \
$(call SUBST,ARCMD) \
$(call SUBST,ASM) \
$(call SUBST,ASM_CFI_SUPPORTED) \
$(call SUBST,BYTECCLIBS) \
$(call SUBST,CC) \
$(call SUBST,CCOMPTYPE) \
$(call SUBST,CC_PROFILE) \
$(call SUBST,OUTPUTOBJ) \
$(call SUBST,EXT_ASM) \
$(call SUBST,EXT_DLL) \
$(call SUBST,EXE) \
$(call SUBST,EXT_LIB) \
$(call SUBST,EXT_OBJ) \
$(call SUBST,FLAMBDA) \
$(call SUBST,WITH_FLAMBDA_INVARIANTS) \
$(call SUBST,FLEXLINK_FLAGS) \
$(call SUBST_QUOTE,FLEXDLL_DIR) \
$(call SUBST,HOST) \
$(call SUBST,LIBDIR) \
$(call SUBST,LIBUNWIND_AVAILABLE) \
$(call SUBST,LIBUNWIND_LINK_FLAGS) \
$(call SUBST,MKDLL) \
$(call SUBST,MKEXE) \
$(call SUBST,FLEXLINK_LDFLAGS) \
$(call SUBST,MKMAINDLL) \
$(call SUBST,MODEL) \
$(call SUBST,NATIVECCLIBS) \
$(call SUBST,OCAMLC_CFLAGS) \
$(call SUBST,OCAMLC_CPPFLAGS) \
$(call SUBST,OCAMLOPT_CFLAGS) \
$(call SUBST,OCAMLOPT_CPPFLAGS) \
$(call SUBST,PACKLD) \
$(call SUBST,PROFILING) \
$(call SUBST,PROFINFO_WIDTH) \
$(call SUBST,RANLIBCMD) \
$(call SUBST,FORCE_SAFE_STRING) \
$(call SUBST,DEFAULT_SAFE_STRING) \
$(call SUBST,WINDOWS_UNICODE) \
$(call SUBST,SUPPORTS_SHARED_LIBRARIES) \
$(call SUBST,SYSTEM) \
$(call SUBST,SYSTHREAD_SUPPORT) \
$(call SUBST,TARGET) \
$(call SUBST,WITH_FRAME_POINTERS) \
$(call SUBST,WITH_PROFINFO) \
$(call SUBST,WITH_SPACETIME) \
$(call SUBST,ENABLE_CALL_COUNTS) \
$(call SUBST,FLAT_FLOAT_ARRAY) \
$(call SUBST,CC_HAS_DEBUG_PREFIX_MAP) \
$(call SUBST,AS_HAS_DEBUG_PREFIX_MAP) \
$< > $@

21
utils/dune Normal file
View File

@ -0,0 +1,21 @@
;**************************************************************************
;* *
;* OCaml *
;* *
;* Thomas Refis, Jane Street Europe *
;* *
;* Copyright 2018 Jane Street Group LLC *
;* *
;* All rights reserved. This file is distributed under the terms of *
;* the GNU Lesser General Public License version 2.1, with the *
;* special exception on linking described in the file LICENSE. *
;* *
;**************************************************************************
(rule
(targets config.ml)
(mode fallback)
(deps (:mk Makefile)
../Makefile.config
config.mlp)
(action (system "make -f %{mk} %{targets}")))