Error when building concordium-client from GitHub source on MacBook m1

Hi,

I’m trying to build concordium-client from source on my Macbook m1. Followed all build prerequisites except installation of rust since I have it already (also, I did not default it to 1.53 as I thought it is not necessary). When running “stack build” I get the error:

concordium-base > Undefined symbols for architecture x86_64:
concordium-base > “_eddsa_public_from_bytes”, referenced from:
concordium-base > _Lc2UUu_info in libHSconcordium-base-0.1.0.0-B02pfwiIHMWLE1snp1s4EK.a(Ed25519Signature.o)
concordium-base > “_eddsa_sign_to_bytes”, referenced from:…
concordium-base > ld: symbol(s) not found for architecture x86_64
concordium-base > clang: error: linker command failed with exit code 1 (use -v to see invocation)
concordium-base > gcc' failed in phase Linker’. (Exit code: 1)
Progress 1/2…
– While building package concordium-base-0.1.0.0 (scroll up to its section to see the error) using:

Any hints as to what may be the cause and how to resolve? Thanks.

Can you show the longer log?

Are you compiling for the x86 target, or for the arm64 one?

Below is the error log. I have not set any target so I suppose whatever is the default (x86 in this case?). Am new to Haskell build, how can I set the target that works?

concordium-base > ld: warning: ignoring file /Users/***/concordium_tools/client_from_source/concordium-client/./deps/concordium-base/lib/libid.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
concordium-base > Undefined symbols for architecture x86_64:
concordium-base > “_eddsa_public_from_bytes”, referenced from:
concordium-base > _Lc2UUu_info in libHSconcordium-base-0.1.0.0-B02pfwiIHMWLE1snp1s4EK.a(Ed25519Signature.o)
concordium-base > “_eddsa_sign_to_bytes”, referenced from:
concordium-base > _Lc2UOY_info in libHSconcordium-base-0.1.0.0-B02pfwiIHMWLE1snp1s4EK.a(Ed25519Signature.o)
concordium-base > “_eddsa_sign_from_bytes”, referenced from:
concordium-base > _Lc2UOp_info in libHSconcordium-base-0.1.0.0-B02pfwiIHMWLE1snp1s4EK.a(Ed25519Signature.o)
concordium-base > “_eddsa_public_free”, referenced from:
concordium-base > _Lc2UAg_info in libHSconcordium-base-0.1.0.0-B02pfwiIHMWLE1snp1s4EK.a(Ed25519Signature.o)
concordium-base > _concordiumzmbasezm0zi1zi0zi0zmB02pfwiIHMWLE1snp1s4EK_ConcordiumziCryptoziEd25519Signature_freeVerifyKey_closure in libHSconcordium-base-0.1.0.0-B02pfwiIHMWLE1snp1s4EK.a(Ed25519Signature.o)
concordium-base > “_eddsa_pub_key”, referenced from:
concordium-base > _Lc2UAc_info in libHSconcordium-base-0.1.0.0-B02pfwiIHMWLE1snp1s4EK.a(Ed25519Signature.o)
concordium-base > “_eddsa_sign_free”, referenced from:
concordium-base > _Lc2UwU_info in libHSconcordium-base-0.1.0.0-B02pfwiIHMWLE1snp1s4EK.a(Ed25519Signature.o)
concordium-base > _concordiumzmbasezm0zi1zi0zi0zmB02pfwiIHMWLE1snp1s4EK_ConcordiumziCryptoziEd25519Signature_freeSignKey_closure in libHSconcordium-base-0.1.0.0-B02pfwiIHMWLE1snp1s4EK.a(Ed25519Signature.o)
concordium-base > “_free_array_len”, referenced from:
concordium-base > _LsrS8_info in libHSconcordium-base-0.1.0.0-B02pfwiIHMWLE1snp1s4EK.a(FFIHelpers.o)
concordium-base > “_eddsa_public_to_bytes”, referenced from:
concordium-base > _Lc2UV3_info in libHSconcordium-base-0.1.0.0-B02pfwiIHMWLE1snp1s4EK.a(Ed25519Signature.o)
concordium-base > “_eddsa_priv_key”, referenced from:
concordium-base > _concordiumzmbasezm0zi1zi0zi0zmB02pfwiIHMWLE1snp1s4EK_ConcordiumziCryptoziEd25519Signature_newKeyPair2_info in libHSconcordium-base-0.1.0.0-B02pfwiIHMWLE1snp1s4EK.a(Ed25519Signature.o)
concordium-base > ld: symbol(s) not found for architecture x86_64
concordium-base > clang: error: linker command failed with exit code 1 (use -v to see invocation)
concordium-base > gcc' failed in phase Linker’. (Exit code: 1)
Progress 1/2

– While building package concordium-base-0.1.0.0 (scroll up to its section to see the error) using:
/Users/***/concordium_tools/client_from_source/concordium-client/deps/concordium-base/.stack-work/dist/x86_64-osx/Cabal-3.4.1.0/setup/setup --builddir=.stack-work/dist/x86_64-osx/Cabal-3.4.1.0 build lib:concordium-base exe:generate-update-keys exe:genesis --ghc-options " -fdiagnostics-color=always"
Process exited with code: ExitFailure 1

Looks like you are trying to build the client for the x86 platform. How did you install stack and ghc?

how can I build it for arm or a target that works? I installed stack and ghc by following the instruction on the prerequisite section (install via ghcup). Basically I ran this:
curl --proto ‘=https’ --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh

Got it working now.

After re-checking what I’ve done, i found out that i ran the other Haskell download command instead of via GHCUp. The GHCup approach/way populated ./stacks/programs directory with ARM specific files instead of previous where they were all x86-related. Also, I installed LLVM version 11 via homebrew and finally ran: stack -v build --ghc-options=’-fllvm’

SHaring, should anyone face the same problem when building from source on a macos m1.

1 Like

Thanks for following up with what worked for you.