jeffmvr

jeffmvr

Cross compiling a release with Apple M1 and Docker

I am trying to cross-compile an Elixir release within a Docker container for amd64 on a M1 Macbook and I receive the following error when calling mix deps.compile:

The Docker image I am building from is elixir:latest with the --platform=amd64 flag set.

#0 3.446 Error while loading project :decimal at /app/deps/decimal                                                      
#0 3.480 ** (FunctionClauseError) no function clause matching in Keyword.merge/2                                        
#0 3.480                                                                                                                
#0 3.480     The following arguments were given to Keyword.merge/2:
#0 3.480     
#0 3.480         # 1
#0 3.480         [app: nil, aliases: [], build_embedded: false, build_per_environment: true, build_scm: Mix.SCM.Path, config_path: "config/config.exs", consolidate_protocols: true, default_task: "run", deps: [], deps_path: "deps", elixirc_paths: ["lib"], erlc_paths: ["src"], erlc_include_path: "include", erlc_options: [], lockfile: "mix.lock", preferred_cli_env: [], start_permanent: false]
#0 3.480     
#0 3.480         # 2
#0 3.480         Decimal.Mixfile
#0 3.480     
#0 3.480     Attempted function clauses (showing 3 out of 3):
#0 3.480     
#0 3.480         def merge(+keywords1+, -[]-) when +is_list(keywords1)+
#0 3.480         def merge(-[]-, +keywords2+) when -is_list(keywords2)-
#0 3.480         def merge(+keywords1+, +keywords2+) when +is_list(keywords1)+ and -is_list(keywords2)-
#0 3.480     
#0 3.480     (elixir 1.14.4) lib/keyword.ex:979: Keyword.merge/2
#0 3.480     (mix 1.14.4) lib/mix/project.ex:141: Mix.Project.push/3
#0 3.480     (stdlib 4.3.1) lists.erl:1350: :lists.foldl/3

Any suggestions on how to solve this? It builds fine when trying on the same arm64 Docker image so I assume I am missing something.

Most Liked

cschmatzler

cschmatzler

Cross-/multiplatform images of OTP languages is unsupported since the introduction of the JIT compiler in OTP24.
Docker uses QEMU for that under the hood, which doesn’t support some of the memory magic that happens for JIT, see: Erlang/OTP 25 JIT on AArch64 fails in user mode emulation (#1034) · Issues · QEMU / QEMU · GitLab

josevalim

josevalim

Creator of Elixir

For posterity: you can set ERL_AFLAGS=“+JMsingle true” and make the JIT more amenable to emulation. Or compile it on a matching machine.

As a last resort, you can try compiling the Erlang VM without JIT and using the emulator, but that’s not recommend (it is slower too).

Where Next?

Popular in Questions Top

shahryarjb
Hello, I get Persian date from my client and convert it to normal calendar like this: def jalali_string_to_miladi_english_number(persi...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
yawaramin
In the Dialyzer docs ( http://erlang.org/doc/man/dialyzer.html#requesting-or-suppressing-warnings-in-source-files ), there is a way to tu...
New
albydarned
Hello all! I am typing this post from my new MacBook Pro with the M1 chip. I’m loving it so far, and will probably use it as my daily dr...
New
logicmason
Hi there, I'm working through my first release with elixir/phoenix. I've built a release with distillery and found that it crashes when I...
New
nsuchy
Hi. I’ve noticed that Windows Powershell has it’s own IEX command and you cannot access Elixir’s IEX due to the conflict. This isn’t a cr...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
chensan
I have a User schema with a :from_id field set to type :string: defmodule TweetBot.Repo.Migrations.CreateUsers do use Ecto.Migration ...
New
shahryarjb
Hello, I have map which I want to convert it to string like this: the map: %{last_name: "tavakkoli", name: "shahryar"} the string I ne...
New

Other popular topics Top

chrismccord
Phoenix 1.4.0 released Phoenix 1.4 is out! This release ships with exciting new features, most notably with HTTP2 support, improved deve...
688 30048 115
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
fireproofsocks
I’m working on defining a simple Ecto schema for a table (in PostGres), but I don’t see where I can define a column as NOT NULL. Conside...
New
nsuchy
Hi. I’ve noticed that Windows Powershell has it’s own IEX command and you cannot access Elixir’s IEX due to the conflict. This isn’t a cr...
New
hariharasudhan94
I would like to know what is the best IDE for elixir development?
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list....
New
johnnyicon
Hi all, I've just started learning Elixir and Phoenix Framework, so please pardon my n00bness at this stage. I'm trying to use Postg...
New
belgoros
I’m not a pro in using Regex and can’t figure out why the following behaviour happens, especially if we take into account the difference ...
New
josevalim
Hi everyone, One of the features added to Elixir early on to help integration with Erlang code was the idea of overridable function defi...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New

We're in Beta

About us Mission Statement