VOICEVOX / voicevox_core

無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXのコア
https://voicevox.hiroshiba.jp/
MIT License
873 stars 116 forks source link

Xcode 15 ß1の環境でaarch64-apple-ios-sim向けのビルドが失敗する #524

Open arasan01 opened 1 year ago

arasan01 commented 1 year ago

不具合の内容

Xcode15ß1の環境で導入されるclang++ 15.0.0で実行されるコマンドの一部が受け付けられなくなるためaarch64-apple-ios-sim向けビルドが失敗する

現象・ログ

$ RUSTFLAGS="-C panic=abort" ORT_USE_CUDA="false" cargo build -p voicevox_core_c_api  --features "" --target aarch64-apple-ios-sim --release
   Compiling num-traits v0.2.15
   Compiling log v0.4.17
   Compiling link-cplusplus v1.0.7
   Compiling tracing-core v0.1.30
   Compiling aho-corasick v0.7.19
   Compiling onnxruntime-sys v0.0.25 (https://github.com/VOICEVOX/onnxruntime-rs.git?rev=ebb9dcb9b26ee681889b52b6db3b4f642b04a250#ebb9dcb9)
   Compiling thiserror v1.0.37
   Compiling tokio v1.24.1
   Compiling matrixmultiply v0.3.2
   Compiling libc v0.2.134
   Compiling anyhow v1.0.65
   Compiling onnxruntime v0.1.0 (https://github.com/VOICEVOX/onnxruntime-rs.git?rev=ebb9dcb9b26ee681889b52b6db3b4f642b04a250#ebb9dcb9)
   Compiling serde_json v1.0.85
   Compiling serde v1.0.145
The following warnings were emitted during compilation:

warning: clang: error: unknown argument: '-arch arm64'

error: failed to run custom build command for `link-cplusplus v1.0.7`

Caused by:
  process didn't exit successfully: `/Users/arasan01/src/github.com/VOICEVOX/voicevox_core/target/release/build/link-cplusplus-47b044565f8c8c71/build-script-build` (exit status: 1)
  --- stdout
  TARGET = Some("aarch64-apple-ios-sim")
  OPT_LEVEL = Some("z")
  HOST = Some("aarch64-apple-darwin")
  CXX_aarch64-apple-ios-sim = None
  CXX_aarch64_apple_ios_sim = None
  TARGET_CXX = None
  CXX = None
  CXXFLAGS_aarch64-apple-ios-sim = None
  CXXFLAGS_aarch64_apple_ios_sim = None
  TARGET_CXXFLAGS = None
  CXXFLAGS = None
  CRATE_CC_NO_DEFAULTS = None
  DEBUG = Some("false")
  Detecting iOS SDK path for iphonesimulator
  running: "xcrun" "--show-sdk-path" "--sdk" "iphonesimulator"
  exit status: 0
  running: "clang++" "-Oz" "-fPIC" "--target=arm64-apple-ios7.0-simulator" "-arch arm64" "-mios-simulator-version-min=7.0" "-isysroot" "/Applications/Xcode-15.0.0-Beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator17.0.sdk" "-fembed-bitcode" "-Wall" "-Wextra" "-o" "/Users/arasan01/src/github.com/VOICEVOX/voicevox_core/target/aarch64-apple-ios-sim/release/build/link-cplusplus-5a16e5c993f1542c/out/dummy.o" "-c" "/Users/arasan01/src/github.com/VOICEVOX/voicevox_core/target/aarch64-apple-ios-sim/release/build/link-cplusplus-5a16e5c993f1542c/out/dummy.cc"
  cargo:warning=clang: error: unknown argument: '-arch arm64'
  exit status: 1

  --- stderr

  error occurred: Command "clang++" "-Oz" "-fPIC" "--target=arm64-apple-ios7.0-simulator" "-arch arm64" "-mios-simulator-version-min=7.0" "-isysroot" "/Applications/Xcode-15.0.0-Beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator17.0.sdk" "-fembed-bitcode" "-Wall" "-Wextra" "-o" "/Users/arasan01/src/github.com/VOICEVOX/voicevox_core/target/aarch64-apple-ios-sim/release/build/link-cplusplus-5a16e5c993f1542c/out/dummy.o" "-c" "/Users/arasan01/src/github.com/VOICEVOX/voicevox_core/target/aarch64-apple-ios-sim/release/build/link-cplusplus-5a16e5c993f1542c/out/dummy.cc" with args "clang++" did not execute successfully (status code exit status: 1).

再現手順

MacOS 14.0 Sonoma (beta) - 必須ではない。 Xcode 15.0 beta1 (15A5160n) - 事象の原因 main branch(確認したコミット: b8c1b316203a0963ce3d3aca787fd392cceba930)

$ RUSTFLAGS="-C panic=abort" ORT_USE_CUDA="false" cargo build -p voicevox_core_c_api -vv --features "" --target aarch64-apple-ios-sim --release

期待動作

clang++ 15.0.0でビルドができる

VOICEVOXのバージョン

0.?.0

OSの種類/ディストリ/バージョン

MacOS 14.0 Sonoma (beta) - 必須ではない。 Xcode 15.0 beta1 (15A5160n) - 事象の原因

この問題の回避方法

対応方法としてXcodeをダウングレード(今回は14.3.1: 14E300c)に落とすと利用されるclang++が下がりビルドが成功します。

$ clang++ --version
Apple clang version 14.0.3 (clang-1403.0.22.14.1)
arasan01 commented 1 year ago

問題の発見とワークアラウンドのみ分かっていて、実際にビルドツールチェインとして解決する方法は調査してます。なにか分かれば再度追記します。もしかするとclang++のバージョンが上がると修正される可能性もある && 回避方法が簡単なため、静観で良いと思いました。

Hiroshiba commented 1 year ago

issue作成ありがとうございます! 将来VOICEVOXのビルド環境を変えるときまでに修正されていると嬉しいですね。。

nekomimimi commented 11 months ago

"cc"のバージョンを1.0.79に上たらコンパイルが通りました。 Cargo.lockによれば現在"cc"は1.0.73ですが、

cargo update -p cc --precise 1.0.79

で手元では通りました。

追記:

コマンドは

$ RUSTFLAGS="-C panic=abort" ORT_USE_CUDA="false" cargo build -p voicevox_core_c_api -vv --features "" --target aarch64-apple-ios-sim --release

が error[E0463]: can't find crate for core となるので、

RUSTFLAGS="-C panic=abort" ORT_USE_CUDA="false" rustup run nightly cargo build -p voicevox_core_c_api --features "" --target aarch64-apple-ios-sim --release -Z build-std

として nightlyで-Z build-stdをつけて標準ライブラリをコンパイル(エラーは大量に出る)した後に -Z build-stdを外して

cargo clean
RUSTFLAGS="-C panic=abort" ORT_USE_CUDA="false" rustup run nightly cargo build -p voicevox_core_c_api --features "" --target aarch64-apple-ios-sim --release

で通りました。

clangの15.0.0では(?)、ccのバージョンと関係なくaarch64-apple-ios-simの標準のstdがおかしい問題がある気がします。

環境

Xcode: Version 15.1 clang++: Apple clang version 15.0.0 (clang-1500.1.0.2.5)