AbstractMachinesLab/mix_caramel

Unable to compile external module (erlang wrapper) with mix compile

Simerax opened this issue · 0 comments

first of quick reminder: im very new to caramel and have only very limited experience with ocaml so maybe this problem is on my part

Bug Description

When trying to build a project, which contains multiple ml files I get errors that there are unbound modules. When building the files standalone with caramel compile everything works.

Project Layout

I have the standard layout provided by mix new
Additionally a new folder "src" in which I have put my .ml files

λ ~/code/local/caramel_external/ tree -L 2
.
├── _build
│   ├── caramel
│   └── dev
├── deps
│   └── mix_caramel
├── lib
│   └── caramel_external.ex
├── mix.exs
├── mix.lock
├── README.md
├── src
│   ├── rand.ml
│   └── user.ml
└── test
    ├── caramel_external_test.exs
    └── test_helper.exs

8 directories, 8 files

mix.exs

defmodule CaramelExternal.MixProject do
  use Mix.Project

  def project do
    [
      app: :caramel_external,
      version: "0.1.0",
      elixir: "~> 1.11",
      start_permanent: Mix.env() == :prod,
      deps: deps(),

      compilers: [:caramel] ++ Mix.compilers(),
      caramel_paths: ["src"],
      caramel_release: "v0.1.1"
    ]
  end

  # Run "mix help compile.app" to learn about applications.
  def application do
    [
      extra_applications: [:logger]
    ]
  end

  # Run "mix help deps" to learn about dependencies.
  defp deps do
    [
      {:mix_caramel, github: "AbstractMachinesLab/mix_caramel", branch: :main}
    ]
  end
end

user.ml

let do_rand () =
    Rand.uniform()

rand.ml

external uniform : unit -> float = ""

running mix compile:

λ ~/code/local/caramel_external/ mix compile
🍬 Using Caramel v0.1.1
Unbound module Rand

if I howerver compile the files directly the compilation succeeds

λ ~/code/local/caramel_external/src/ caramel compile user.ml rand.ml
Compiling user.erl	OK

after running caramel compile im also able to use the external function:
Yes I know it tries to recompile and fails but when failing it actually does not overwrite the previously created file...

λ ~/code/local/caramel_external/src/ caramel compile rand.ml user.ml
Compiling user.erl	OK
λ ~/code/local/caramel_external/src/ cd ..
λ ~/code/local/caramel_external/ iex -S mix
Erlang/OTP 23 [erts-11.2.1] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]

🍬 Using Caramel v0.1.1
Unbound module Rand

Compiling 1 file (.erl)
Compiling 1 file (.ex)
Interactive Elixir (1.11.3) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> :user.do_rand
0.7062713648102463
iex(2)>