JohnnyCurran

JohnnyCurran

Hi,

I am trying to build a new nerves / scenic project but I cannot get scenic_driver_local to compile.

It appears to be some sort of architecture mis-match and I can’t pin down a solution.

Terminal is not running rosetta:

johnny@omega:$ arch
arm64

Elixir / Erlang versions:

elixir 1.17.1-otp-27
erlang 27.0

scenic_driver_local version: 0.11.0 (from mix.lock)

Here’s the full debug output:

johnny@omega:$ mix deps.compile scenic_driver_local
==> scenic_driver_local
Compiling 8 files (.ex)
    warning: single-quoted strings represent charlists. Use ~c"" if you indeed want a charlist or use "" instead
    │
 70 │   @port '/scenic_driver_local'
    │         ~
    │
    └─ lib/driver.ex:70:9

    warning: use Bitwise is deprecated. import Bitwise instead
    │
  9 │   use Bitwise
    │   ~~~~~~~~~~~
    │
    └─ lib/to_port.ex:9: Scenic.Driver.Local.ToPort (module)

     warning: Logger.warn/1 is deprecated. Use Logger.warning/2 instead
     │
 145 │     Logger.warn("scenic_driver_local: #{inspect(msg)}")
     │            ~
     │
     └─ lib/from_port.ex:145:12: Scenic.Driver.Local.FromPort.handle_port_message/2

Generated scenic_driver_local app
SCENIC_LOCAL_TARGET: glfw
mkdir -p /Users/johnny/src/nerves/omega/_build/dev/lib/scenic_driver_local/priv
cc -O3 -std=c99 `pkg-config --static --cflags glfw3 glew` -fPIC -o /Users/johnny/src/nerves/omega/_build/dev/lib/scenic_driver_local/priv/scenic_driver_local c_src/device/glfw.c c_src/main.c c_src/nanovg/nanovg.c c_src/comms.c c_src/unix_comms.c c_src/utils.c c_src/script.c c_src/image.c c_src/font.c c_src/tommyds/src/tommyhashlin.c c_src/tommyds/src/tommyhash.c `pkg-config --static --libs glfw3 glew` -framework Cocoa -framework OpenGL -Wno-deprecated
c_src/utils.c:18:20: warning: using the result of an assignment as a condition without parentheses [-Wparentheses]
   18 |   while( p_err_str = device_gl_error() ) {
      |          ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
c_src/utils.c:18:20: note: place parentheses around the assignment to silence this warning
   18 |   while( p_err_str = device_gl_error() ) {
      |                    ^
      |          (                            )
c_src/utils.c:18:20: note: use '==' to turn this assignment into an equality comparison
   18 |   while( p_err_str = device_gl_error() ) {
      |                    ^
      |                    ==
1 warning generated.
c_src/script.c:178:14: warning: expression result unused [-Wunused-value]
  178 |     default: size;
      |              ^~~~
c_src/script.c:180:1: warning: non-void function does not return a value in all control paths [-Wreturn-type]
  180 | }
      | ^
2 warnings generated.
ld: warning: ignoring file '/opt/homebrew/Cellar/glew/2.2.0_1/lib/libGLEW.2.2.0.dylib': found architecture 'arm64', required architecture 'x86_64'
ld: warning: ignoring file '/opt/homebrew/Cellar/glfw/3.4/lib/libglfw.3.4.dylib': found architecture 'arm64', required architecture 'x86_64'
Undefined symbols for architecture x86_64:
  "___glewActiveTexture", referenced from:
      _glnvg__renderFlush in glfw-dbdf0f.o
  "___glewAttachShader", referenced from:
      _glnvg__createShader in glfw-dbdf0f.o
  "___glewBindAttribLocation", referenced from:
      _glnvg__createShader in glfw-dbdf0f.o
  "___glewBindBuffer", referenced from:
      _glnvg__renderFlush in glfw-dbdf0f.o
      _glnvg__renderFlush in glfw-dbdf0f.o
  "___glewBlendFuncSeparate", referenced from:
      _glnvg__renderFlush in glfw-dbdf0f.o
  "___glewBufferData", referenced from:
      _glnvg__renderFlush in glfw-dbdf0f.o
  "___glewCompileShader", referenced from:
      _glnvg__createShader in glfw-dbdf0f.o
  "___glewCreateProgram", referenced from:
      _glnvg__createShader in glfw-dbdf0f.o
  "___glewCreateShader", referenced from:
      _glnvg__createShader in glfw-dbdf0f.o
  "___glewDeleteBuffers", referenced from:
      _glnvg__renderDelete in glfw-dbdf0f.o
  "___glewDeleteProgram", referenced from:
      _glnvg__renderDelete in glfw-dbdf0f.o
  "___glewDeleteShader", referenced from:
      _glnvg__renderDelete in glfw-dbdf0f.o
      _glnvg__renderDelete in glfw-dbdf0f.o
  "___glewDisableVertexAttribArray", referenced from:
      _glnvg__renderFlush in glfw-dbdf0f.o
  "___glewEnableVertexAttribArray", referenced from:
      _glnvg__renderFlush in glfw-dbdf0f.o
  "___glewGenBuffers", referenced from:
      _glnvg__renderCreate in glfw-dbdf0f.o
  "___glewGetProgramInfoLog", referenced from:
      _glnvg__createShader in glfw-dbdf0f.o
  "___glewGetProgramiv", referenced from:
      _glnvg__createShader in glfw-dbdf0f.o
  "___glewGetShaderInfoLog", referenced from:
      _glnvg__createShader in glfw-dbdf0f.o
      _glnvg__createShader in glfw-dbdf0f.o
  "___glewGetShaderiv", referenced from:
      _glnvg__createShader in glfw-dbdf0f.o
  "___glewGetUniformLocation", referenced from:
      _glnvg__renderCreate in glfw-dbdf0f.o
  "___glewLinkProgram", referenced from:
      _glnvg__createShader in glfw-dbdf0f.o
  "___glewShaderSource", referenced from:
      _glnvg__createShader in glfw-dbdf0f.o
  "___glewStencilOpSeparate", referenced from:
      _glnvg__renderFlush in glfw-dbdf0f.o
  "___glewUniform1i", referenced from:
      _glnvg__renderFlush in glfw-dbdf0f.o
  "___glewUniform2fv", referenced from:
      _glnvg__renderFlush in glfw-dbdf0f.o
  "___glewUniform4fv", referenced from:
      _glnvg__renderFlush in glfw-dbdf0f.o
      _glnvg__setUniforms in glfw-dbdf0f.o
  "___glewUseProgram", referenced from:
      _glnvg__renderFlush in glfw-dbdf0f.o
      _glnvg__renderFlush in glfw-dbdf0f.o
  "___glewVertexAttribPointer", referenced from:
      _glnvg__renderFlush in glfw-dbdf0f.o
  "_glewInit", referenced from:
      _setup_window in glfw-dbdf0f.o
  "_glfwCreateWindow", referenced from:
      _device_init in glfw-dbdf0f.o
  "_glfwGetCursorPos", referenced from:
      _mouse_button_callback in glfw-dbdf0f.o
      _scroll_callback in glfw-dbdf0f.o
      _cursor_enter_callback in glfw-dbdf0f.o
  "_glfwGetFramebufferSize", referenced from:
      _reshape_window in glfw-dbdf0f.o
      _setup_window in glfw-dbdf0f.o
  "_glfwGetWindowSize", referenced from:
      _setup_window in glfw-dbdf0f.o
      _device_init in glfw-dbdf0f.o
  "_glfwInit", referenced from:
      _device_init in glfw-dbdf0f.o
  "_glfwMakeContextCurrent", referenced from:
      _setup_window in glfw-dbdf0f.o
  "_glfwPollEvents", referenced from:
      _device_init in glfw-dbdf0f.o
      _device_poll in glfw-dbdf0f.o
  "_glfwSetCharModsCallback", referenced from:
      _setup_window in glfw-dbdf0f.o
  "_glfwSetCursorEnterCallback", referenced from:
      _setup_window in glfw-dbdf0f.o
  "_glfwSetCursorPosCallback", referenced from:
      _setup_window in glfw-dbdf0f.o
  "_glfwSetErrorCallback", referenced from:
      _device_init in glfw-dbdf0f.o
  "_glfwSetFramebufferSizeCallback", referenced from:
      _setup_window in glfw-dbdf0f.o
  "_glfwSetKeyCallback", referenced from:
      _setup_window in glfw-dbdf0f.o
  "_glfwSetMouseButtonCallback", referenced from:
      _setup_window in glfw-dbdf0f.o
  "_glfwSetScrollCallback", referenced from:
      _setup_window in glfw-dbdf0f.o
  "_glfwSetWindowCloseCallback", referenced from:
      _setup_window in glfw-dbdf0f.o
  "_glfwSetWindowShouldClose", referenced from:
      _window_close_callback in glfw-dbdf0f.o
  "_glfwSetWindowSize", referenced from:
      _device_init in glfw-dbdf0f.o
      _device_init in glfw-dbdf0f.o
  "_glfwSetWindowSizeCallback", referenced from:
      _setup_window in glfw-dbdf0f.o
  "_glfwSwapBuffers", referenced from:
      _device_end_render in glfw-dbdf0f.o
  "_glfwTerminate", referenced from:
      _device_init in glfw-dbdf0f.o
  "_glfwWindowHint", referenced from:
      _set_window_hints in glfw-dbdf0f.o
      _set_window_hints in glfw-dbdf0f.o
      _set_window_hints in glfw-dbdf0f.o
      _set_window_hints in glfw-dbdf0f.o
      _device_init in glfw-dbdf0f.o
      _device_init in glfw-dbdf0f.o
      _device_init in glfw-dbdf0f.o
      _device_init in glfw-dbdf0f.o
      ...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [/Users/johnny/src/nerves/omega/_build/dev/lib/scenic_driver_local/priv/scenic_driver_local] Error 1
could not compile dependency :scenic_driver_local, "mix compile" failed. Errors may have been logged above. You can recompile this dependency with "mix deps.compile scenic_driver_local --force", update it with "mix deps.update scenic_driver_local" or clean it with "mix deps.clean scenic_driver_local"
==> omega
** (Mix) Could not compile with "make" (exit status: 2).
You need to have gcc and make installed. Try running the
commands "gcc --version" and / or "make --version". If these programs
are not installed, you will be prompted to install them.

Yes, make and gcc are installed:

johnny@omega:$ gcc --version
Apple clang version 16.0.0 (clang-1600.0.26.4)
Target: arm64-apple-darwin24.1.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
johnny@omega:$ make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i386-apple-darwin11.3.0

Homebrew is not running under Rosetta 2:

johnny@omega:$ brew config
HOMEBREW_VERSION: 4.4.4
ORIGIN: https://github.com/Homebrew/brew
HEAD: 824efa8836dc226aa92dbbf7404c1b4a66707cca
Last commit: 6 days ago
Core tap JSON: 10 Nov 16:58 UTC
Core cask tap JSON: 10 Nov 16:58 UTC
HOMEBREW_PREFIX: /opt/homebrew
HOMEBREW_CASK_OPTS: []
HOMEBREW_MAKE_JOBS: 10
Homebrew Ruby: 3.3.5 => /opt/homebrew/Library/Homebrew/vendor/portable-ruby/3.3.5/bin/ruby
CPU: 10-core 64-bit dunno
Clang: 16.0.0 build 1600
Git: 2.39.5 => /Applications/Xcode.app/Contents/Developer/usr/bin/git
Curl: 8.7.1 => /usr/bin/curl
macOS: 15.1-arm64
CLT: 15.0.1.0.2.5
Xcode: 16.1
Rosetta 2: false

I uninstalled all of the dependencies and re-installed but I keep hitting this road block.

Any help is greatly appreciated, thank you

Showing Posts 1 to 1

JohnnyCurran

JohnnyCurran OP

The problem was with one or both of the CFLAGS or LDFLAGS env vars. I explicitly set them to:

export CFLAGS="-arch arm64 `pkg-config --static --cflags glfw3 glew`"
export LDFLAGS="-arch arm64 `pkg-config --static --libs glfw3 glew`"

and now it runs!

:slight_smile:

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Dmk
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews