rust-lang / cmake-rs

Rust build dependency for running cmake
https://docs.rs/cmake
Apache License 2.0
300 stars 119 forks source link

Support for iOS cross compiling using cmake 3.14+ #87

Open kylefleming opened 4 years ago

kylefleming commented 4 years ago

As of version 3.14, cmake has added support for cross compiling iOS (see https://cmake.org/cmake/help/latest/release/3.14.html?highlight=cross#platforms).

This means that -miphone-version-min style parameters get added automatically. This also means that currently when using cmake-rs, these parameters are being added twice, and often with conflicting values.

I've found that in order the support the new system, the following CMAKE variables need to be set:

The target triplets for iOS are:

Additionally, I found that cmake-rs (via cc-rs) is setting the following compiler flags which are not added by cmake:

Note: cmake 3.14 also added support for tvOS and watchOS, but since I don't support them in my own app, I don't know what's required to support them.

alexcrichton commented 4 years ago

Seems reasonable to me to support! I don't do much ios development myself but I'm more than willing to review PRs!

davemilter commented 4 years ago

Did #93 fix this issue? I try this "hello world" project: https://github.com/davemilter/cmake_rs_hello_world

it builds without modification for Android, but for iOS:

-- Check for working C compiler: /usr/bin/cc - broken
clang: warning: using sysroot for 'MacOSX' but targeting 'iPhone' [-Wincompatible-sysroot]
 ld: warning: -headerpad_max_install_names is ignored when used with -bitcode_bundle (Xcode setting ENABLE_BITCODE=YES)
ld: dynamic main executables must link with libSystem.dylib for architecture arm64

On this system cmake crosscomping for iOS works, if I manually invoke cmake, but always pass properly crafted cmake toolchain file to cmake.

Should this work without toolchain file, or I have to pass it? cc @simlay

davemilter commented 4 years ago

Or, it is actually works. The problem in that crate on crates.io has no #93 . @alexcrichton, any plans for new release with iOS support fix?

alexcrichton commented 4 years ago

Oops sorry about that, published now!

kylefleming commented 3 years ago

@alexcrichton Could you reopen this issue on account of the fix having been reverted, as described in https://github.com/alexcrichton/cmake-rs/issues/96?

alexcrichton commented 3 years ago

Sure!

daxpedda commented 3 years ago

I have encountered this issue while cross-compiling between Intel and Apple Silicon MacOS, I fixed it by simply applying CMAKE_OSX_ARCHITECTURES.