Я решил это и построил Bullet Physics для iOS.
Решение
Вот набор инструментов , который я использовал.
INCLUDE(CMakeForceCompiler)
SET (CMAKE_CROSSCOMPILING TRUE)
SET (CMAKE_SYSTEM_NAME "Darwin")
SET (CMAKE_SYSTEM_PROCESSOR "arm")
SET (SDKVER "4.3")
SET (DEVROOT "/Developer/Platforms/iPhoneOS.platform/Developer")
SET (SDKROOT "/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVER}.sdk")
SET (CC "${DEVROOT}/usr/bin/clang")
SET (CXX "${DEVROOT}/usr/bin/clang++")
CMAKE_FORCE_C_COMPILER (${CC} CLang)
CMAKE_FORCE_CXX_COMPILER (${CXX} CLang)
SET (CMAKE_FIND_ROOT_PATH "${SDKROOT}" "${DEVROOT}")
SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
ИСценарий сборки. Это важно!
PKG_NAME=bullet-2.78
BUILD_DIR=build
rm -rf ${PKG_NAME} ${BUILD_DIR}
tar -x -f ${PKG_NAME}-r2387.tar
mkdir build
cd build
DEVROOT=/Developer/Platforms/iPhoneOS.platform/Developer
SYSROOT=$DEVROOT/SDKs/iPhoneOS4.3.sdk
CC=$DEVROOT/usr/bin/clang
CXX=$DEVROOT/usr/bin/clang++
CFLAGS="-arch armv6 -arch armv7 -isysroot $SYSROOT -miphoneos-version-min=4.0"
CXXFLAGS=$CFLAGS
LDFLAGS=$CFLAGS
export CC=$CC
export CXX=$CXX
export CFLAGS=$CFLAGS
export CXXFLAGS=$CXXFLAGS
export LDFLAGS=$LDFLAGS
cmake ../$PKG_NAME -DCMAKE_TOOLCHAIN_FILE=../CMAKE_IPHONEOS_TOOLCHAIN.cmake
make
lipo -info src/LinearMath/libLinearMath.a
Это очень минимальная конфигурация.Однако у вас есть идея.
Описание
Во-первых, конфигурация toolchain - это всего лишь этап, позволяющий определить функции, доступные на целевой машине.Но для кросс-компиляции в iOS требуются некоторые специальные флаги компилятора, и это исключительная ситуация, описанная в Cmake wiki .
Так что я просто включил определенный компилятор, и Cmake пропустит этап проверки компилятора.
Во-вторых, все флаги компилятора, необходимые для кросс-компиляции, предлагаются через экспорт переменных оболочки в скрипте сборки.Это очень грубые варианты, однако важно, чтобы мы проходили через переменные оболочки.Не для конфигурации toolchain .
Однако некоторая конфигурация toolchain влияет на сгенерированную Makefile
.Нужно указать правильные CMAKE_SYSTEM_NAME
(Darwin
) и CMAKE_SYSTEM_PROCESSOR
(arm
).
Обновление
Есть еще испытания.В любом случае, они больше не работают для меня.
Вот еще один.Это выглядит многообещающе.
Обновление 2
Теперь Bullet включает скрипт сборки для платформ iOS.В любом случае это неудобно, потому что он не обрабатывает особые потребности для материалов симулятора, и я написал еще один скрипт сборки, который делает далекую библиотеку для режима отладки / выпуска.
https://github.com/Eonil/Bullet-PhysicsEngine-BuildScript