WIP: Darwin iphone friendly cmake
This merge request is an attempt to improve CMake's handling of non-macOS SDKs. The goal is to provide an convenient way to a project for iOS, watchOS, ant tvOS. So far it just needs some tweaks of the
cmake -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_OSX_SYSROOT=iphoneos -GXcode .
optionally specify a development team with
Ideas behind the implementation
The first thing was chose a system name. Historically CMake uses
Darwin for macOS and iOS. The first attempt of those patched tried to use
Apple as the new system name which would have triggered the new behavior but I soon realized that I'd have to duplicate lots of functionality from the existing
Darwin scripts. So for now I sticked to
Darwin. We'll have to find a way to not accidentally trigger some backwards-incompatible behavior.
CMake by default defines some variables describing the target system. So in 80c5752e I do as well define
MACOS. In case a simulator build is happening
SIMULATOR is defined as well. Also
CMAKE_CROSSCOMPILING is enforced to be in effect for non-macOS builds to switch of some assumptions that are only true for native macOS builds.
Next thing in fcbded27 was to enforce App Bundle creation for non-macOS SDKs.
In 81622cbb I restrict
find_library() to only lookup headers and libraries in the SDKs. As a result for example zlib a must be found only on the SDK directory, not in
One problem we faced in the past was that you'll have to setup code signing keys to build for the embedded platforms. This was because
try_compile() attempted to build an executable or XCTest. Since a (to be exactly determined) Xcode version it is possible to build static libraries for all SDKs. So I'll changed both built target types to a static library in 673bfcad. This has the advantage that the configuration stage now does not depend on signing keys. If the user-provided targets require code signing and no keys have been set up, the error is now much more prominent and at the expected place.
In case the Xcode generator is used the default CPU architectures for the selected SDK are used. If the Ninja or GNU Makefile generator is used one has to explicitly specify the CPU architectures are usual with:
-DCMAKE_OSX_ARCHITECTURES="armv7;x86_64" or similar.
Darwinan acceptable system name? How could we prevent backwards incompatible behavior around the new variable names?
- Does using static libraries for
try_compile()have any downsides?