Skip to content

Fix build.sh to use Homebrew Clang on mac#527

Open
PLAZMAMA wants to merge 5 commits into
PufferAI:4.0from
PLAZMAMA:root-cause-macos-clang-fix
Open

Fix build.sh to use Homebrew Clang on mac#527
PLAZMAMA wants to merge 5 commits into
PufferAI:4.0from
PLAZMAMA:root-cause-macos-clang-fix

Conversation

@PLAZMAMA
Copy link
Copy Markdown
Contributor

@PLAZMAMA PLAZMAMA commented Apr 13, 2026

Original issue

Commit ab75881 addresses the -lomp5 compilation error on mac, however this doesn't fix the root cause.

Root Cause

The root cause is that mac's non-standard clang(Apple Clang) links differently than normal clang. For example, the -fopenmp flag isn't supported in apple clang so it creates a compilation error even after the "-lomp5 fix".

This means that this issue will happen with other libs in the future and will have to be fixed and maintained constantly.

The Fix

This PR addresses the original issue and root cause by forcing the user to use "real" clang in a clear way which makes compilation identical on Linux and Mac.

Additional Notes

  • Installing real clang on mac is really easy, its just brew install llvm. So this shouldn't make mac user's life that much harder.
  • Additionally, its worth noting that I became aware of the -lomp5 and -fopenmp issues from this PR PufferLib 4.0 macOS installation fixes #507 first

Working Build Commands on Mac

  • ./build.sh breakout --local
  • ./build.sh breakout --cpu

@PLAZMAMA PLAZMAMA changed the title Fix build.sh to use Homebrew LLVM paths on mac Fix build.sh to use Homebrew Clang on mac Apr 13, 2026
@wasaysir
Copy link
Copy Markdown

wasaysir commented May 9, 2026

I wasn't able to get this working out of the box. I tried running ./build.sh breakout --local and ./build.sh breakout --cpu and neither worked out of the box, pointing to issues with clang.

Before trying his fix, I ran brew install llvm. Here's the results of trying each command:
./build.sh breakout --local:

Compiling breakout...
./build.sh: line 154: /usr/local/opt/llvm/bin/clang: No such file or directory

./build.sh breakout --cpu:

Compiling static library for breakout...
./build.sh: line 225: /usr/local/opt/llvm/bin/clang: No such file or directory

I'm running on an M2 Macbook Air.

Here's the result of my clang --version:

Homebrew clang version 22.1.4
Target: arm64-apple-darwin24.6.0
Thread model: posix
InstalledDir: /opt/homebrew/Cellar/llvm/22.1.4/bin
Configuration file: /opt/homebrew/Cellar/llvm/22.1.4/etc/clang/arm64-apple-darwin24.cfg

Should it work out of the box, or do I have a misconfiguration before I can get this working?

@PLAZMAMA
Copy link
Copy Markdown
Contributor Author

PLAZMAMA commented May 9, 2026

yes, it should technically work out of the box.
Can you try running brew --prefix llvm and let show me the output?
Btw, great comment reply!
You went into more detail than 90% of error reports I see on this site.

@wasaysir
Copy link
Copy Markdown

wasaysir commented May 9, 2026

Here's the result for brew --prefix llvm:

/opt/homebrew/opt/llvm

Also I opened a new terminal session and I think things are looking better now. I'm not sure what I might have screwed up in the previous session, but running ./build.sh breakout --cpu I get this:

./build.sh breakout --cpu
Compiling static library for breakout...
clang: warning: argument unused during compilation: '-fno-semantic-interposition' [-Wunused-command-line-argument]
Compiling CPU training backend...
Built: pufferlib/_C.cpython-312-darwin.so

However when running ./build.sh breakout --local I get the following:

`./build.sh breakout --local` output
Compiling breakout...
ld: warning: can't parse dwarf compilation unit info in /var/folders/pt/5rc8_4vx4fxgfsq0kq0cq63h0000gn/T/breakout-3c3a0b.o
Undefined symbols for architecture arm64:
  "_objc_msgSend$IBeamCursor", referenced from:
      __glfwCreateStandardCursorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$UTF8String", referenced from:
      __glfwPollMonitorsCocoa in libraylib.a(rglfw.o)
      __glfwGetClipboardStringCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$activateIgnoringOtherApps:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
      __glfwFocusWindowCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$addItem:", referenced from:
      -[GLFWApplicationDelegate applicationWillFinishLaunching:] in libraylib.a(rglfw.o)
  "_objc_msgSend$addItemWithTitle:action:keyEquivalent:", referenced from:
      -[GLFWApplicationDelegate applicationWillFinishLaunching:] in libraylib.a(rglfw.o)
  "_objc_msgSend$addLocalMonitorForEventsMatchingMask:handler:", referenced from:
      __glfwInitCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$addObserver:selector:name:object:", referenced from:
      __glfwInitCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$addRepresentation:", referenced from:
      __glfwCreateCursorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$addTrackingArea:", referenced from:
      -[GLFWContentView updateTrackingAreas] in libraylib.a(rglfw.o)
  "_objc_msgSend$alphaValue", referenced from:
      __glfwGetWindowOpacityCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$array", referenced from:
      -[GLFWContentView validAttributesForMarkedText] in libraylib.a(rglfw.o)
  "_objc_msgSend$arrayWithObjects:count:", referenced from:
      __glfwSetClipboardStringCocoa in libraylib.a(rglfw.o)
      -[GLFWContentView initWithGlfwWindow:] in libraylib.a(rglfw.o)
      -[GLFWContentView keyDown:] in libraylib.a(rglfw.o)
      -[GLFWContentView performDragOperation:] in libraylib.a(rglfw.o)
  "_objc_msgSend$arrowCursor", referenced from:
      __glfwSetCursorPosCocoa in libraylib.a(rglfw.o)
      __glfwCreateStandardCursorCocoa in libraylib.a(rglfw.o)
      __glfwSetCursorCocoa in libraylib.a(rglfw.o)
      _updateCursorMode in libraylib.a(rglfw.o)
      -[GLFWContentView cursorUpdate:] in libraylib.a(rglfw.o)
  "_objc_msgSend$backingScaleFactor", referenced from:
      __glfwCreateWindowSurfaceCocoa in libraylib.a(rglfw.o)
      -[GLFWContentView viewDidChangeBackingProperties] in libraylib.a(rglfw.o)
  "_objc_msgSend$bitmapData", referenced from:
      __glfwCreateCursorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$bounds", referenced from:
      -[GLFWContentView updateTrackingAreas] in libraylib.a(rglfw.o)
  "_objc_msgSend$bundleWithPath:", referenced from:
      __glfwCreateWindowSurfaceCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$buttonNumber", referenced from:
      -[GLFWContentView otherMouseDown:] in libraylib.a(rglfw.o)
      -[GLFWContentView otherMouseUp:] in libraylib.a(rglfw.o)
  "_objc_msgSend$bytes", referenced from:
      __glfwGetScancodeNameCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$cascadeTopLeftFromPoint:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$center", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$classNamed:", referenced from:
      __glfwCreateWindowSurfaceCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$clearColor", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$clearCurrentContext", referenced from:
      _makeContextCurrentNSGL in libraylib.a(rglfw.o)
  "_objc_msgSend$close", referenced from:
      __glfwDestroyWindowCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$closedHandCursor", referenced from:
      __glfwCreateStandardCursorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$containsObject:", referenced from:
      __glfwGetClipboardStringCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$contentRectForFrameRect:", referenced from:
      __glfwGetWindowPosCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowSizeCocoa in libraylib.a(rglfw.o)
      -[GLFWWindowDelegate windowDidMove:] in libraylib.a(rglfw.o)
  "_objc_msgSend$convertRectToBacking:", referenced from:
      __glfwGetMonitorContentScaleCocoa in libraylib.a(rglfw.o)
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
      __glfwGetFramebufferSizeCocoa in libraylib.a(rglfw.o)
      __glfwGetWindowContentScaleCocoa in libraylib.a(rglfw.o)
      -[GLFWWindowDelegate windowDidResize:] in libraylib.a(rglfw.o)
      -[GLFWContentView viewDidChangeBackingProperties] in libraylib.a(rglfw.o)
  "_objc_msgSend$convertRectToScreen:", referenced from:
      __glfwSetCursorPosCocoa in libraylib.a(rglfw.o)
      __glfwWindowHoveredCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$count", referenced from:
      -[GLFWContentView performDragOperation:] in libraylib.a(rglfw.o)
  "_objc_msgSend$countByEnumeratingWithState:objects:count:", referenced from:
      __glfwPollMonitorsCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$crosshairCursor", referenced from:
      __glfwCreateStandardCursorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$currentApplication", referenced from:
      __glfwInitCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$currentEvent", referenced from:
      -[GLFWContentView insertText:replacementRange:] in libraylib.a(rglfw.o)
  "_objc_msgSend$dateWithTimeIntervalSinceNow:", referenced from:
      __glfwWaitEventsTimeoutCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$declareTypes:owner:", referenced from:
      __glfwSetClipboardStringCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$defaultCenter", referenced from:
      __glfwInitCocoa in libraylib.a(rglfw.o)
      __glfwTerminateCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$deltaX", referenced from:
      -[GLFWContentView mouseMoved:] in libraylib.a(rglfw.o)
  "_objc_msgSend$deltaY", referenced from:
      -[GLFWContentView mouseMoved:] in libraylib.a(rglfw.o)
  "_objc_msgSend$deminiaturize:", referenced from:
      __glfwRestoreWindowCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$detachNewThreadSelector:toTarget:withObject:", referenced from:
      __glfwInitCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$deviceDescription", referenced from:
      __glfwPollMonitorsCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$dictionaryWithObjects:forKeys:count:", referenced from:
      -[GLFWContentView performDragOperation:] in libraylib.a(rglfw.o)
  "_objc_msgSend$distantFuture", referenced from:
      __glfwWaitEventsCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$distantPast", referenced from:
      __glfwDestroyWindowCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowMonitorCocoa in libraylib.a(rglfw.o)
      __glfwPollEventsCocoa in libraylib.a(rglfw.o)
      __glfwWaitEventsCocoa in libraylib.a(rglfw.o)
      __glfwWaitEventsTimeoutCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$draggingLocation", referenced from:
      -[GLFWContentView performDragOperation:] in libraylib.a(rglfw.o)
  "_objc_msgSend$draggingPasteboard", referenced from:
      -[GLFWContentView performDragOperation:] in libraylib.a(rglfw.o)
  "_objc_msgSend$fileSystemRepresentation", referenced from:
      -[GLFWContentView performDragOperation:] in libraylib.a(rglfw.o)
  "_objc_msgSend$flushBuffer", referenced from:
      _swapBuffersNSGL in libraylib.a(rglfw.o)
  "_objc_msgSend$frame", referenced from:
      __glfwGetCursorPosCocoa in libraylib.a(rglfw.o)
      __glfwSetCursorPosCocoa in libraylib.a(rglfw.o)
      __glfwSetCursorCocoa in libraylib.a(rglfw.o)
      __glfwGetMonitorContentScaleCocoa in libraylib.a(rglfw.o)
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
      __glfwGetWindowPosCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowPosCocoa in libraylib.a(rglfw.o)
      ...
  "_objc_msgSend$frameRectForContentRect:", referenced from:
      __glfwSetWindowPosCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowSizeCocoa in libraylib.a(rglfw.o)
      __glfwGetWindowFrameSizeCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$frameRectForContentRect:styleMask:", referenced from:
      __glfwSetWindowMonitorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$generalPasteboard", referenced from:
      __glfwSetClipboardStringCocoa in libraylib.a(rglfw.o)
      __glfwGetClipboardStringCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$getBytes:maxLength:usedLength:encoding:options:range:remainingRange:", referenced from:
      -[GLFWContentView insertText:replacementRange:] in libraylib.a(rglfw.o)
  "_objc_msgSend$getValues:forParameter:", referenced from:
      _swapBuffersNSGL in libraylib.a(rglfw.o)
  "_objc_msgSend$hasPreciseScrollingDeltas", referenced from:
      -[GLFWContentView scrollWheel:] in libraylib.a(rglfw.o)
  "_objc_msgSend$hide", referenced from:
      __glfwSetCursorPosCocoa in libraylib.a(rglfw.o)
      __glfwSetCursorCocoa in libraylib.a(rglfw.o)
      _updateCursorMode in libraylib.a(rglfw.o)
      -[GLFWContentView cursorUpdate:] in libraylib.a(rglfw.o)
      -[GLFWContentView mouseEntered:] in libraylib.a(rglfw.o)
  "_objc_msgSend$infoDictionary", referenced from:
      -[GLFWApplicationDelegate applicationWillFinishLaunching:] in libraylib.a(rglfw.o)
  "_objc_msgSend$initWithAttributedString:", referenced from:
      -[GLFWContentView setMarkedText:selectedRange:replacementRange:] in libraylib.a(rglfw.o)
  "_objc_msgSend$initWithAttributes:", referenced from:
      __glfwCreateContextNSGL in libraylib.a(rglfw.o)
  "_objc_msgSend$initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bitmapFormat:bytesPerRow:bitsPerPixel:", referenced from:
      __glfwCreateCursorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$initWithContentRect:styleMask:backing:defer:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$initWithFormat:shareContext:", referenced from:
      __glfwCreateContextNSGL in libraylib.a(rglfw.o)
  "_objc_msgSend$initWithGlfwWindow:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$initWithImage:hotSpot:", referenced from:
      __glfwCreateCursorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$initWithRect:options:owner:userInfo:", referenced from:
      -[GLFWContentView updateTrackingAreas] in libraylib.a(rglfw.o)
  "_objc_msgSend$initWithSize:", referenced from:
      __glfwCreateCursorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$initWithString:", referenced from:
      -[GLFWContentView setMarkedText:selectedRange:replacementRange:] in libraylib.a(rglfw.o)
  "_objc_msgSend$initWithTitle:", referenced from:
      -[GLFWApplicationDelegate applicationWillFinishLaunching:] in libraylib.a(rglfw.o)
  "_objc_msgSend$interpretKeyEvents:", referenced from:
      -[GLFWContentView keyDown:] in libraylib.a(rglfw.o)
  "_objc_msgSend$isEqualToString:", referenced from:
      -[GLFWApplicationDelegate applicationWillFinishLaunching:] in libraylib.a(rglfw.o)
  "_objc_msgSend$isFinishedLaunching", referenced from:
      __glfwInitCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$isKeyWindow", referenced from:
      __glfwSetCursorModeCocoa in libraylib.a(rglfw.o)
      __glfwWindowFocusedCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$isMiniaturized", referenced from:
      __glfwRestoreWindowCocoa in libraylib.a(rglfw.o)
      __glfwWindowIconifiedCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$isOpaque", referenced from:
      __glfwFramebufferTransparentCocoa in libraylib.a(rglfw.o)
      -[GLFWContentView isOpaque] in libraylib.a(rglfw.o)
  "_objc_msgSend$isVisible", referenced from:
      __glfwWindowVisibleCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$isZoomed", referenced from:
      __glfwRestoreWindowCocoa in libraylib.a(rglfw.o)
      __glfwMaximizeWindowCocoa in libraylib.a(rglfw.o)
      __glfwWindowMaximizedCocoa in libraylib.a(rglfw.o)
      -[GLFWWindowDelegate windowDidResize:] in libraylib.a(rglfw.o)
  "_objc_msgSend$keyCode", referenced from:
      -[GLFWContentView keyDown:] in libraylib.a(rglfw.o)
      -[GLFWContentView flagsChanged:] in libraylib.a(rglfw.o)
      -[GLFWContentView keyUp:] in libraylib.a(rglfw.o)
  "_objc_msgSend$keyWindow", referenced from:
      ____glfwInitCocoa_block_invoke in libraylib.a(rglfw.o)
  "_objc_msgSend$layer", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
      __glfwCreateWindowSurfaceCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$length", referenced from:
      -[GLFWContentView hasMarkedText] in libraylib.a(rglfw.o)
      -[GLFWContentView markedRange] in libraylib.a(rglfw.o)
      -[GLFWContentView insertText:replacementRange:] in libraylib.a(rglfw.o)
  "_objc_msgSend$loadNibNamed:owner:topLevelObjects:", referenced from:
      -[GLFWApplicationDelegate applicationWillFinishLaunching:] in libraylib.a(rglfw.o)
  "_objc_msgSend$locationInWindow", referenced from:
      -[GLFWContentView mouseMoved:] in libraylib.a(rglfw.o)
  "_objc_msgSend$mainBundle", referenced from:
      -[GLFWApplicationDelegate applicationWillFinishLaunching:] in libraylib.a(rglfw.o)
  "_objc_msgSend$makeCurrentContext", referenced from:
      _makeContextCurrentNSGL in libraylib.a(rglfw.o)
  "_objc_msgSend$makeFirstResponder:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowMonitorCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowDecoratedCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$makeKeyAndOrderFront:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
      __glfwFocusWindowCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$miniaturize:", referenced from:
      __glfwIconifyWindowCocoa in libraylib.a(rglfw.o)
      -[GLFWWindowDelegate windowDidResignKey:] in libraylib.a(rglfw.o)
  "_objc_msgSend$miniwindowTitle", referenced from:
      __glfwSetWindowMonitorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$modifierFlags", referenced from:
      ____glfwInitCocoa_block_invoke in libraylib.a(rglfw.o)
      -[GLFWContentView mouseDown:] in libraylib.a(rglfw.o)
      -[GLFWContentView mouseUp:] in libraylib.a(rglfw.o)
      -[GLFWContentView rightMouseDown:] in libraylib.a(rglfw.o)
      -[GLFWContentView rightMouseUp:] in libraylib.a(rglfw.o)
      -[GLFWContentView otherMouseDown:] in libraylib.a(rglfw.o)
      -[GLFWContentView otherMouseUp:] in libraylib.a(rglfw.o)
      ...
  "_objc_msgSend$mouse:inRect:", referenced from:
      __glfwSetCursorCocoa in libraylib.a(rglfw.o)
      _updateCursorMode in libraylib.a(rglfw.o)
  "_objc_msgSend$mouseLocation", referenced from:
      __glfwWindowHoveredCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$mouseLocationOutsideOfEventStream", referenced from:
      __glfwGetCursorPosCocoa in libraylib.a(rglfw.o)
      __glfwSetCursorPosCocoa in libraylib.a(rglfw.o)
      __glfwSetCursorCocoa in libraylib.a(rglfw.o)
      _updateCursorMode in libraylib.a(rglfw.o)
  "_objc_msgSend$mouseMoved:", referenced from:
      -[GLFWContentView mouseDragged:] in libraylib.a(rglfw.o)
      -[GLFWContentView rightMouseDragged:] in libraylib.a(rglfw.o)
      -[GLFWContentView otherMouseDragged:] in libraylib.a(rglfw.o)
  "_objc_msgSend$mutableString", referenced from:
      -[GLFWContentView unmarkText] in libraylib.a(rglfw.o)
  "_objc_msgSend$nextEventMatchingMask:untilDate:inMode:dequeue:", referenced from:
      __glfwDestroyWindowCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowMonitorCocoa in libraylib.a(rglfw.o)
      __glfwPollEventsCocoa in libraylib.a(rglfw.o)
      __glfwWaitEventsCocoa in libraylib.a(rglfw.o)
      __glfwWaitEventsTimeoutCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$objectAtIndexedSubscript:", referenced from:
      -[GLFWContentView performDragOperation:] in libraylib.a(rglfw.o)
  "_objc_msgSend$objectForKeyedSubscript:", referenced from:
      __glfwPollMonitorsCocoa in libraylib.a(rglfw.o)
      -[GLFWApplicationDelegate applicationWillFinishLaunching:] in libraylib.a(rglfw.o)
  "_objc_msgSend$occlusionState", referenced from:
      -[GLFWWindowDelegate windowDidChangeOcclusionState:] in libraylib.a(rglfw.o)
  "_objc_msgSend$operationNotAllowedCursor", referenced from:
      __glfwCreateStandardCursorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$orderFront:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
      __glfwShowWindowCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$orderOut:", referenced from:
      __glfwDestroyWindowCocoa in libraylib.a(rglfw.o)
      __glfwHideWindowCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$otherEventWithType:location:modifierFlags:timestamp:windowNumber:context:subtype:data1:data2:", referenced from:
      -[GLFWApplicationDelegate applicationDidFinishLaunching:] in libraylib.a(rglfw.o)
      __glfwPostEmptyEventCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$pathForResource:ofType:", referenced from:
      -[GLFWApplicationDelegate applicationWillFinishLaunching:] in libraylib.a(rglfw.o)
  "_objc_msgSend$performSelector:", referenced from:
      __glfwCreateStandardCursorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$performSelector:withObject:", referenced from:
      -[GLFWApplicationDelegate applicationWillFinishLaunching:] in libraylib.a(rglfw.o)
  "_objc_msgSend$pointingHandCursor", referenced from:
      __glfwCreateStandardCursorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$postEvent:atStart:", referenced from:
      -[GLFWApplicationDelegate applicationDidFinishLaunching:] in libraylib.a(rglfw.o)
      __glfwPostEmptyEventCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$readObjectsForClasses:options:", referenced from:
      -[GLFWContentView performDragOperation:] in libraylib.a(rglfw.o)
  "_objc_msgSend$registerDefaults:", referenced from:
      __glfwInitCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$registerForDraggedTypes:", referenced from:
      -[GLFWContentView initWithGlfwWindow:] in libraylib.a(rglfw.o)
  "_objc_msgSend$removeMonitor:", referenced from:
      __glfwTerminateCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$removeObserver:", referenced from:
      __glfwTerminateCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$removeObserver:name:object:", referenced from:
      __glfwTerminateCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$removeTrackingArea:", referenced from:
      -[GLFWContentView updateTrackingAreas] in libraylib.a(rglfw.o)
  "_objc_msgSend$requestUserAttention:", referenced from:
      __glfwRequestWindowAttentionCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$resizeLeftRightCursor", referenced from:
      __glfwCreateStandardCursorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$resizeUpDownCursor", referenced from:
      __glfwCreateStandardCursorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$run", referenced from:
      __glfwInitCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$screens", referenced from:
      __glfwPollMonitorsCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$scrollingDeltaX", referenced from:
      -[GLFWContentView scrollWheel:] in libraylib.a(rglfw.o)
  "_objc_msgSend$scrollingDeltaY", referenced from:
      -[GLFWContentView scrollWheel:] in libraylib.a(rglfw.o)
  "_objc_msgSend$sendEvent:", referenced from:
      __glfwDestroyWindowCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowMonitorCocoa in libraylib.a(rglfw.o)
      __glfwPollEventsCocoa in libraylib.a(rglfw.o)
      __glfwWaitEventsCocoa in libraylib.a(rglfw.o)
      __glfwWaitEventsTimeoutCocoa in libraylib.a(rglfw.o)
      ____glfwInitCocoa_block_invoke in libraylib.a(rglfw.o)
  "_objc_msgSend$separatorItem", referenced from:
      -[GLFWApplicationDelegate applicationWillFinishLaunching:] in libraylib.a(rglfw.o)
  "_objc_msgSend$set", referenced from:
      __glfwSetCursorPosCocoa in libraylib.a(rglfw.o)
      __glfwSetCursorCocoa in libraylib.a(rglfw.o)
      _updateCursorMode in libraylib.a(rglfw.o)
      -[GLFWContentView cursorUpdate:] in libraylib.a(rglfw.o)
  "_objc_msgSend$setAcceptsMouseMovedEvents:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setActivationPolicy:", referenced from:
      __glfwInitCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setAlphaValue:", referenced from:
      __glfwSetWindowOpacityCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setBackgroundColor:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setCollectionBehavior:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowMonitorCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowResizableCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setContentAspectRatio:", referenced from:
      __glfwSetWindowAspectRatioCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowMonitorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setContentMaxSize:", referenced from:
      __glfwSetWindowSizeLimitsCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowMonitorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setContentMinSize:", referenced from:
      __glfwSetWindowSizeLimitsCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowMonitorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setContentView:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setContentsScale:", referenced from:
      __glfwCreateWindowSurfaceCocoa in libraylib.a(rglfw.o)
      -[GLFWContentView viewDidChangeBackingProperties] in libraylib.a(rglfw.o)
  "_objc_msgSend$setDelegate:", referenced from:
      __glfwInitCocoa in libraylib.a(rglfw.o)
      __glfwTerminateCocoa in libraylib.a(rglfw.o)
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
      __glfwDestroyWindowCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setFrame:display:", referenced from:
      __glfwSetWindowSizeCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowMonitorCocoa in libraylib.a(rglfw.o)
      _acquireMonitorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setFrameAutosaveName:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setFrameOrigin:", referenced from:
      __glfwSetWindowPosCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setHasShadow:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowMonitorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setIgnoresMouseEvents:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowMousePassthroughCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setKeyEquivalentModifierMask:", referenced from:
      -[GLFWApplicationDelegate applicationWillFinishLaunching:] in libraylib.a(rglfw.o)
  "_objc_msgSend$setLayer:", referenced from:
      __glfwCreateWindowSurfaceCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setLevel:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowMonitorCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowFloatingCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setMainMenu:", referenced from:
      -[GLFWApplicationDelegate applicationWillFinishLaunching:] in libraylib.a(rglfw.o)
  "_objc_msgSend$setMiniwindowTitle:", referenced from:
      __glfwSetWindowTitleCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setOpaque:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setResizeIncrements:", referenced from:
      __glfwSetWindowAspectRatioCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setRestorable:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setServicesMenu:", referenced from:
      -[GLFWApplicationDelegate applicationWillFinishLaunching:] in libraylib.a(rglfw.o)
  "_objc_msgSend$setString:", referenced from:
      -[GLFWContentView unmarkText] in libraylib.a(rglfw.o)
  "_objc_msgSend$setString:forType:", referenced from:
      __glfwSetClipboardStringCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setStyleMask:", referenced from:
      __glfwSetWindowMonitorCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowResizableCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowDecoratedCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setSubmenu:", referenced from:
      -[GLFWApplicationDelegate applicationWillFinishLaunching:] in libraylib.a(rglfw.o)
  "_objc_msgSend$setTabbingMode:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setTitle:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowTitleCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowMonitorCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setValues:forParameter:", referenced from:
      __glfwCreateContextNSGL in libraylib.a(rglfw.o)
      _swapIntervalNSGL in libraylib.a(rglfw.o)
  "_objc_msgSend$setView:", referenced from:
      __glfwCreateContextNSGL in libraylib.a(rglfw.o)
  "_objc_msgSend$setWantsBestResolutionOpenGLSurface:", referenced from:
      __glfwCreateContextNSGL in libraylib.a(rglfw.o)
  "_objc_msgSend$setWantsLayer:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
      __glfwCreateWindowSurfaceCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$setWindowsMenu:", referenced from:
      -[GLFWApplicationDelegate applicationWillFinishLaunching:] in libraylib.a(rglfw.o)
  "_objc_msgSend$sharedApplication", referenced from:
      __glfwInitCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$standardUserDefaults", referenced from:
      __glfwInitCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$stop:", referenced from:
      -[GLFWApplicationDelegate applicationDidFinishLaunching:] in libraylib.a(rglfw.o)
  "_objc_msgSend$string", referenced from:
      -[GLFWContentView insertText:replacementRange:] in libraylib.a(rglfw.o)
  "_objc_msgSend$stringForType:", referenced from:
      __glfwGetClipboardStringCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$stringWithFormat:", referenced from:
      -[GLFWApplicationDelegate applicationWillFinishLaunching:] in libraylib.a(rglfw.o)
  "_objc_msgSend$stringWithUTF8String:", referenced from:
      -[GLFWApplicationDelegate applicationWillFinishLaunching:] in libraylib.a(rglfw.o)
      __glfwSetClipboardStringCocoa in libraylib.a(rglfw.o)
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowTitleCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$styleMask", referenced from:
      __glfwSetWindowMonitorCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowResizableCocoa in libraylib.a(rglfw.o)
      __glfwSetWindowDecoratedCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$types", referenced from:
      __glfwGetClipboardStringCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$unhide", referenced from:
      __glfwSetCursorPosCocoa in libraylib.a(rglfw.o)
      __glfwSetCursorCocoa in libraylib.a(rglfw.o)
      _updateCursorMode in libraylib.a(rglfw.o)
      -[GLFWContentView cursorUpdate:] in libraylib.a(rglfw.o)
      -[GLFWContentView mouseExited:] in libraylib.a(rglfw.o)
  "_objc_msgSend$unsignedIntValue", referenced from:
      __glfwPollMonitorsCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$update", referenced from:
      -[GLFWApplicationDelegate applicationDidChangeScreenParameters:] in libraylib.a(rglfw.o)
      -[GLFWWindowDelegate windowDidResize:] in libraylib.a(rglfw.o)
      -[GLFWWindowDelegate windowDidMove:] in libraylib.a(rglfw.o)
      -[GLFWContentView updateLayer] in libraylib.a(rglfw.o)
  "_objc_msgSend$updateTrackingAreas", referenced from:
      -[GLFWContentView initWithGlfwWindow:] in libraylib.a(rglfw.o)
  "_objc_msgSend$valueForKey:", referenced from:
      __glfwPollMonitorsCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$visibleFrame", referenced from:
      __glfwGetMonitorWorkareaCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$windowNumber", referenced from:
      __glfwWindowHoveredCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$windowNumberAtPoint:belowWindowWithWindowNumber:", referenced from:
      __glfwWindowHoveredCocoa in libraylib.a(rglfw.o)
  "_objc_msgSend$zoom:", referenced from:
      __glfwCreateWindowCocoa in libraylib.a(rglfw.o)
      __glfwRestoreWindowCocoa in libraylib.a(rglfw.o)
      __glfwMaximizeWindowCocoa in libraylib.a(rglfw.o)
ld: symbol(s) not found for architecture arm64

@wasaysir
Copy link
Copy Markdown

wasaysir commented May 9, 2026

After running the command as bash -x build.sh breakout --local I was able to retrieve the exact command used:

/opt/homebrew/opt/llvm/bin/clang -g -O0 -Wall -ferror-limit=3 -Werror=incompatible-pointer-types -Werror=return-type -Wno-error=incompatible-pointer-types-discards-qualifiers -Wno-incompatible-pointer-types-discards-qualifiers -Wno-error=array-parameter -I/opt/homebrew/opt/llvm/include -I./raylib-5.5_macos/include -I./src -I./vendor ocean/breakout/breakout.c -o breakout raylib-5.5_macos/lib/libraylib.a -framework Cocoa -framework IOKit -framework CoreVideo -framework OpenGL -L/opt/homebrew/opt/llvm/lib -lm -lpthread -fopenmp -DPLATFORM_DESKTOP

@wasaysir
Copy link
Copy Markdown

wasaysir commented May 9, 2026

I think I figured it out. I installed anaconda a while ago, and it looks like anaconda overrode the default MacOS linker with its own. This created a conflict when interacting with the llvm clang since they were on separate DWARF versions. Resetting to the default linker made it work perfectly.

I can confirm that your PR works on my machine. 😄

@PLAZMAMA
Copy link
Copy Markdown
Contributor Author

PLAZMAMA commented May 9, 2026

Great! FYI, when I stopped working in this PR only local and cpu worked. This experience is nowhere near what Pufferlib can actually offer!

Please use Linux machine with an Nvidia GPU if you want to actually see an environment train at the true puffer speed.
Even on my Mac I just ssh into a Linux box.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants