RustAudio / coreaudio-sys

Raw bindings to the OSX CoreAudio framework generated by bindgen (see coreaudio-rs for a more rust-esque wrapper).
MIT License
69 stars 38 forks source link

`coreaudio-sys` fails to build under macOS Sonoma (14.0) / Xcode 15.0 #85

Closed coreh closed 1 year ago

coreh commented 1 year ago

When using LLVM from the default Xcode toolchain in macOS Sonoma (14.0), the build fails with the following error:

error: failed to run custom build command for `coreaudio-sys v0.2.10`

Caused by:
  process didn't exit successfully: `/Users/coreh/Developer/bevy/target/debug/build/coreaudio-sys-7e0a7d7c97b2ec33/build-script-build` (exit status: 101)
  --- stdout
  cargo:rerun-if-env-changed=COREAUDIO_SDK_PATH
  cargo:rustc-link-lib=framework=AudioUnit
  cargo:rustc-link-lib=framework=CoreAudio
  cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS

  --- stderr
  thread 'main' panicked at '"enum_(unnamed_at_/Applications/Xcode_app/Contents/Developer/Platforms/MacOSX_platform/Developer/SDKs/MacOSX14_0_sdk/usr/include/MacTypes_h_382_1)" is not a valid Ident', /Users/coreh/.cargo/registry/src/index.crates.io-6f17d22bba15001f/proc-macro2-1.0.56/src/fallback.rs:811:9
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

This seems to be caused by this issue: https://github.com/rust-lang/rust-bindgen/issues/2312, which has been fixed in recent versions of bindgen. Interestingly, the issue mentions clang 16, however the clang in the default toolchain in XCode in macOS Sonoma is reported as 15, so it's likely that Apple backported some of the clang 16 changes to clang 15, including the one that's causing this.

Apple clang version 15.0.0 (clang-1500.0.40.1)
Target: arm64-apple-darwin23.0.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

See also:

I believe the solution is to update bindgen to a more recent version that has the fix for this issue.

Edit: Looks like (as reported below) this also affects 13.x after installing Xcode 15.0.


👉 For those finding this issue with the same problem, I was able to work around this by installing clang 15 via homebrew:

brew install llvm@15

Then adding it to my path by following the instructions provided by that command, and rebuilding.

mchitre commented 1 year ago

Seeing this on Ventura 13.6 too

dcvz commented 1 year ago

@simlay @MichaelHills @Emilio any chance we can update this to use the new bindgen and get this shipped?

simlay commented 1 year ago

Yes. I bet there's a dependabot PR with the bindgen fix. I'll merge it and bump the version later today.

simlay commented 1 year ago

I wasn't really able to reproduce this bug. I have validated that xcode 15 on macOS 13.6 the project builds over in #86.

simlay commented 1 year ago

@coreh A minor patch version has pushed to crates.io. Let me know if there's still an issue. Also, I should put the current maintainers in the readme so that people know to tag me or MichaelHills. I just hadn't seen the issue yet.

coreh commented 1 year ago

Thanks! No worries, you didn't take long at all, I opened the issue just a couple days ago.

rsalmei commented 1 year ago

I still can't compile a small project with ggez, even with clang 15... Is there anything I can do, please?

❯ cargo build
   Compiling coreaudio-sys v0.2.8
error: failed to run custom build command for `coreaudio-sys v0.2.8`

Caused by:
  process didn't exit successfully: `/Users/rogerio/Documents/projects/ballbounce/target/debug/build/coreaudio-sys-9b713dd0b6b60e55/build-script-build` (exit status: 101)
  --- stdout
  cargo:rerun-if-env-changed=COREAUDIO_SDK_PATH
  cargo:rustc-link-lib=framework=AudioToolbox
  cargo:rustc-link-lib=framework=CoreAudio
  cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS

  --- stderr
  thread 'main' panicked at '"enum_(unnamed_at_/Library/Developer/CommandLineTools/SDKs/MacOSX_sdk/usr/include/MacTypes_h_382_1)" is not a valid Ident', /Users/rogerio/.cargo/registry/src/index.crates.io-6f17d22bba15001f/proc-macro2-1.0.67/src/fallback.rs:774:9
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
❯ clang --version
Apple clang version 15.0.0 (clang-1500.0.40.1)
Target: arm64-apple-darwin22.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
simlay commented 1 year ago

I still can't compile a small project with ggez, even with clang 15... Is there anything I can do, please?

❯ cargo build
   Compiling coreaudio-sys v0.2.8
error: failed to run custom build command for `coreaudio-sys v0.2.8`

Looks like you're using coreaudio-sys 0.2.8 when you want 0.2.12. Does cargo update fix the build? It's possible that coreaudio-sys is pinned to 0.2.8 in your project. cargo tree is a useful tool for this type of thing.

rsalmei commented 1 year ago

I'm just using an older version of ggez for now. My dependencies are only these:

[dependencies]
rand = "0.8"
termion = "*"
ggez = "0.6"

I don't even have any sounds in this project. Does this mean I have to upgrade ggez to get it to compile?

EDIT: Wow, a cargo update did the trick! It have updated coreaudio-sys to 0.2.13, and it worked! Thanks @simlay!!