Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jin/rules_ocaml
OCaml build rules for Bazel
https://github.com/jin/rules_ocaml
bazel bazel-rules ocaml skylark
Last synced: about 1 month ago
JSON representation
OCaml build rules for Bazel
- Host: GitHub
- URL: https://github.com/jin/rules_ocaml
- Owner: jin
- License: apache-2.0
- Created: 2016-10-01T23:02:32.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2021-04-22T00:04:49.000Z (over 3 years ago)
- Last Synced: 2024-09-29T06:41:09.937Z (about 2 months ago)
- Topics: bazel, bazel-rules, ocaml, skylark
- Language: Starlark
- Homepage: https://bazel.build
- Size: 27.3 KB
- Stars: 37
- Watchers: 4
- Forks: 6
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# OCaml rules for Bazel
## Rules
* [ocaml_native_binary](#ocaml_native_binary/ocaml_bytecode_binary)
* [ocaml_bytecode_binary](#ocaml_native_binary/ocaml_bytecode_binary)
* [ocaml_interface](#ocaml_interface)## Overview
Build OCaml with Bazel. Very experimental.
## Setup
Add the following to your `WORKSPACE` file.
```bzl
git_repository(
name = "io_bazel_rules_ocaml",
remote = "https://github.com/jin/rules_ocaml.git",
commit = "7a0a6e5226af5f09eb6e3379b901d8f2ffdb8bbf",
)load("@io_bazel_rules_ocaml//ocaml:repo.bzl", "ocaml_repositories")
ocaml_repositories(
opam_packages = {
# Put your OPAM dependencies here
"lwt": "3.1.0",
"yojson": "1.4.0",
},
)
```and this to your BUILD files.
```bzl
load("@io_bazel_rules_ocaml//ocaml:ocaml.bzl", "ocaml_native_binary", "ocaml_bytecode_binary", "ocaml_interface")
````ocaml_repositories()` will download and compile the OCaml toolchain, including `ocamlbuild`, `ocamlfind` and `OPAM` itself, as the [official source](https://caml.inria.fr/download.en.html) doesn't release binaries directly and requires the use of OPAM for installations.
The initial load time of toolchain compilation will take a few minutes and will not happen again for the same project.
## Rules
### ocaml_native_binary/ocaml_bytecode_binary
Generates a native binary using `ocamlopt` or bytecode binary using `ocamlc`.
```bzl
ocaml_native_library(name, srcs, src_root, opam_packages)
ocaml_bytecode_library(name, srcs, src_root, opam_packages)
```#### Example
```bzl
ocaml_native_binary(
name = "hello_world",
srcs = glob(["examples/*.ml"]),
src_root = "examples/hello_world.ml",
opam_packages = ["yojson", "lwt"],
)ocaml_bytecode_binary(
name = "other_binary",
srcs = [
"examples/foo.ml",
"examples/bar.ml",
"examples/entry.ml",
],
src_root = "examples/entry.ml",
opam_packages = ["pkg_foo", "pkg_bar"],
)
```
Attributes
name
Name, required
A unique name for this target
srcs
List of labels, required
List of OCaml
.ml
source files used to build the
library
src_root
Label, optional
The OCaml
.ml
source file used for the binary's entry point.
Defaults to
main.ml
if not specified.
opam_packages
List of strings, optional
The name of the OPAM package dependencies required by this binary.
The packages (and their versions) must already be defined in your WORKSPACE file's
ocaml_repositories()
.
### ocaml_interface
Generates a `.mli` file of the source file.
```bzl
ocaml_interface(name, src)
```
Attributes
name
Name, required
A unique name for this target
src
Label
The OCaml
.ml
source file used for generating the interface file
#### Example
```bzl
ocaml_interface(
name = "hello_world_interface",
src = "examples/hello_world.ml",
)
```## Projects using rules_ocaml
- [https://github.com/jin/scheme.ml](https://github.com/jin/scheme.ml)