[cmake-developers] Patch: install universal iOS libraries

Ruslan Baratov ruslan_baratov at yahoo.com
Thu Sep 24 06:10:29 EDT 2015


Hi,

Patches help to install universal iOS (device + simulator) libraries by 
triggering some extra instructions (build + fuse) after "regular" 
library installation finished. This behavior controlled by CMake 
variable CMAKE_IOS_INSTALL_UNIVERSAL_LIBS.

= Example =

 > cat CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(Foo)

add_library(foo foo.cpp)

install(TARGETS foo DESTINATION lib)

 > cat toolchain.cmake
set(CMAKE_MACOSX_BUNDLE YES)
set(CMAKE_OSX_SYSROOT "iphoneos")
set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer")
set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.example")

 > rm -rf _builds _install
 > cmake -H. -B_builds -GXcode -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake 
-DCMAKE_INSTALL_PREFIX=_install ...

= Current functionality =

Device one arch (default):

 > cmake ...
 > cmake --build _builds --target install
 > lipo -info _install/lib/libfoo.a
Non-fat file: _install/lib/libfoo.a is architecture: armv7

Simulator one arch:

 > cmake ...
 > cmake --build _builds --target install -- -sdk iphonesimulator
 > lipo -info _install/lib/libfoo.a
Non-fat file: _install/lib/libfoo.a is architecture: x86_64

Device multi arch:

 > cmake ... -DCMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH=NO
 > cmake --build _builds --target install
 > lipo -info _install/lib/libfoo.a
Architectures in the fat file: _install/lib/libfoo.a are: armv7 arm64

Simulator multi arch:

 > cmake ... -DCMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH=NO
 > cmake --build _builds --target install -- -sdk iphonesimulator
 > lipo -info _install/lib/libfoo.a
Architectures in the fat file: _install/lib/libfoo.a are: i386 x86_64

= This upgrade =

Device + simulator one arch:

 > cmake ... -DCMAKE_IOS_INSTALL_UNIVERSAL_LIBS=YES
 > cmake --build _builds --target install
 > lipo -info _install/lib/libfoo.a
Architectures in the fat file: _install/lib/libfoo.a are: armv7 x86_64

Device + simulator multi arch:

 > cmake ... -DCMAKE_IOS_INSTALL_UNIVERSAL_LIBS=YES 
-DCMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH=NO
 > cmake --build _builds --target install
 > lipo -info _install/lib/libfoo.a
Architectures in the fat file: _install/lib/libfoo.a are: i386 armv7 
x86_64 arm64

Let me know if this looks acceptable, then I will add documentation part 
and tests.

Thanks, Ruslo
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Get-target-name-for-universal-iOS-library-install.patch
Type: text/x-patch
Size: 2268 bytes
Desc: not available
URL: <http://public.kitware.com/pipermail/cmake-developers/attachments/20150924/15042efa/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-CMake-module-for-universal-iOS-library-install.patch
Type: text/x-patch
Size: 9361 bytes
Desc: not available
URL: <http://public.kitware.com/pipermail/cmake-developers/attachments/20150924/15042efa/attachment-0001.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0003-Universal-iOS-library-install.patch
Type: text/x-patch
Size: 2834 bytes
Desc: not available
URL: <http://public.kitware.com/pipermail/cmake-developers/attachments/20150924/15042efa/attachment-0002.bin>


More information about the cmake-developers mailing list