ocaml/HACKING.adoc

98 lines
4.3 KiB
Plaintext
Raw Normal View History

2016-07-15 18:15:34 -07:00
This document is a work-in-progress attempt to provide useful
information for people willing to inspect or modify the compiler
distribution's codebase. Feel free to improve it by sending change
proposals for it.
== Contents
Changes:: what's new with each release
configure:: configure script
CONTRIBUTING.md:: how to contribute to OCaml
HACKING.adoc:: tips for people modifying the code
INSTALL.adoc:: instructions for installation
LICENSE:: license and copyright notice
Makefile:: main Makefile
Makefile.nt:: MS Windows Makefile
Makefile.shared:: common Makefile
Makefile.tools:: used by manual/ and testsuite/ Makefiles
README.adoc:: this file
README.win32.adoc:: info on the MS Windows ports of OCaml
VERSION:: version string
asmcomp/:: native-code compiler and linker
asmrun/:: native-code runtime library
boot/:: bootstrap compiler
bytecomp/:: bytecode compiler and linker
byterun/:: bytecode interpreter and runtime system
compilerlibs/:: the OCaml compiler as a library
config/:: autoconfiguration stuff
debugger/:: source-level replay debugger
driver/:: driver code for the compilers
emacs/:: editing mode and debugger interface for GNU Emacs
experimental/:: experiments not built by default
flexdll/:: empty (see README.win32.adoc)
lex/:: lexer generator
man/:: man pages
manual/:: system to generate the manual
middle_end/:: the flambda optimisation phase
ocamldoc/:: documentation generator
otherlibs/:: several external libraries
parsing/:: syntax analysis
stdlib/:: standard library
testsuite/:: tests
tools/:: various utilities
toplevel/:: interactive system
typing/:: typechecking
utils/:: utility libraries
yacc/:: parser generator
== Useful Makefile targets
Besides the targets listed in link:INSTALL.adoc for build and
installation, the following targets may be of use:
make runtop:: builds and runs the ocaml toplevel of the distribution
(optionally uses `rlwrap` for readline+history support)
make natruntop:: builds and runs the native ocaml toplevel (experimental)
== opam compiler script
The separately-distributed script
https://github.com/gasche/opam-compiler-conf[`opam-compiler-conf`] can
be used to easily build opam switches out of a git branch of the
compiler distribution. This lets you easily install and test opam
packages from an under-modification compiler version.
== INRIA's Continuous Integration (CI)
INRIA provides a Jenkins continuous integration service that OCaml
uses, see link:https://ci.inria.fr/ocaml/[]. It provides a wider
architecture support (MSVC and MingW, a zsystems s390x machine, and
various MacOS versions) than the Travis/AppVeyor testing on github,
but only runs on commits to the trunk or release branch, not on every
PR.
You do not need to be an INRIA employee to open account on this travis
service; anyone can create an account there to access build logs,
enable email notifications, and manually restart builds. If you would
like to do this but have trouble doing it, you may contact Damien
Doligez or Gabriel Scherer.
== Running INRIA's CI on a github Pull Request (PR)
If you have suspicions that a PR may fail on exotic architectures
(it touches the build system or the backend code generator,
for example) and would like to get wider testing than github's CI
provides, it is possible to manually start INRIA's CI on arbitrary git
branches by pushing to a `precheck` branch of the main repository.
This is done by pushing to a specific github repository that the CI
watches, namely
link:https://github.com/ocaml/precheck[ocaml/precheck]. You thus need
to have write/push/commit access to this repository to perform this operation.
Just checkout the commit/branch you want to test, then run
git push --force git@github.com:ocaml/precheck.git HEAD:trunk
(This is the syntax to push the current `HEAD` state into the `trunk`
reference on the specified remote.)