[Ves] Crosscompile for iOS 7 including arm64
Benedikt Huss
benedikt.huss at gmail.com
Fri Feb 7 02:33:12 EST 2014
Hi,
I'm trying to compile VES for iOS including arm64 with iOS 7.0 SDK on OS X
10.9.1, CMake 2.8-12 - but it always fails.
I've changed the toolchains-files like this:
diff --git a/CMake/toolchains/toolchain-ios-device.cmake
b/CMake/toolchains/toolchain-ios-device.cmake
index af6aedf..c11069f 100644
--- a/CMake/toolchains/toolchain-ios-device.cmake
+++ b/CMake/toolchains/toolchain-ios-device.cmake
@@ -1,24 +1,19 @@
set(CMAKE_SYSTEM_NAME Darwin)
-exec_program(/usr/bin/xcode-select ARGS -print-path OUTPUT_VARIABLE
XCODE_DEVELOPER_DIR)
+# Force the compilers to gcc for iOS
+INCLUDE (CMakeForceCompiler)
+CMAKE_FORCE_C_COMPILER (gcc gcc)
+CMAKE_FORCE_CXX_COMPILER (g++ g++)
-find_program(CMAKE_C_COMPILER NAME gcc
- PATHS
- "${XCODE_DEVELOPER_DIR}/Platforms/iPhoneOS.platform/Developer/usr/bin/"
-
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
- /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
- NO_DEFAULT_PATH)
+# Skip the platform compiler checks for cross compiling
+set (CMAKE_CXX_COMPILER_WORKS TRUE)
+set (CMAKE_C_COMPILER_WORKS TRUE)
-find_program(CMAKE_CXX_COMPILER NAME g++
- PATHS
- "${XCODE_DEVELOPER_DIR}/Platforms/iPhoneOS.platform/Developer/usr/bin/"
-
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
- /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
- NO_DEFAULT_PATH)
+exec_program(/usr/bin/xcode-select ARGS -print-path OUTPUT_VARIABLE
XCODE_DEVELOPER_DIR)
-set(CMAKE_OSX_ARCHITECTURES "armv7;armv7s")
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -miphoneos-version-min=5.0
-fvisibility=hidden -fvisibility-inlines-hidden")
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -miphoneos-version-min=5.0
-fvisibility=hidden -fvisibility-inlines-hidden")
+set(CMAKE_OSX_ARCHITECTURES "armv7" "armv7s" "arm64")
+#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -miphoneos-version-min=6.0
-fvisibility=hidden -fvisibility-inlines-hidden")
+#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -miphoneos-version-min=6.0
-fvisibility=hidden -fvisibility-inlines-hidden")
# Set the CMAKE_OSX_SYSROOT to the latest SDK found
set(CMAKE_OSX_SYSROOT)
@@ -28,7 +23,7 @@ set(possible_sdk_roots
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs
)
foreach(sdk_root ${possible_sdk_roots})
- foreach(sdk iPhoneOS4.3.sdk iPhoneOS5.0.sdk iPhoneOS5.1.sdk
iPhoneOS6.0.sdk iPhoneOS6.1.sdk iPhoneOS7.0.sdk)
+ foreach(sdk iPhoneOS6.0.sdk iPhoneOS6.1.sdk iPhoneOS7.0.sdk)
if (EXISTS ${sdk_root}/${sdk} AND IS_DIRECTORY ${sdk_root}/${sdk})
set(CMAKE_OSX_SYSROOT ${sdk_root}/${sdk})
endif()
@@ -39,11 +34,13 @@ if (NOT CMAKE_OSX_SYSROOT)
endif()
message(STATUS "-- Using iOS SDK: ${CMAKE_OSX_SYSROOT}")
+SET (CMAKE_C_FLAGS "-arch armv7 -arch armv7s -arch arm64 -isysroot
${CMAKE_OSX_SYSROOT} -std=c99 -x objective-c -DNDEBUG=1")
+SET (CMAKE_CXX_FLAGS "-arch armv7 -arch armv7s -arch arm64 -isysroot
${CMAKE_OSX_SYSROOT} -x objective-c++ -DNDEBUG=1")
+
+SET (CMAKE_EXE_LINKER_FLAGS "-miphoneos-version-min=6.0")
+SET (CMAKE_SHARED_LINKER_FLAGS "-miphoneos-version-min=6.0")
+SET (CMAKE_MODULE_LINKER_FLAGS "-miphoneos-version-min=6.0")
-set(CMAKE_OSX_ARCHITECTURES "${CMAKE_OSX_ARCHITECTURES}" CACHE STRING "osx
architectures")
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags")
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags")
-set(CMAKE_OSX_SYSROOT "${CMAKE_OSX_SYSROOT}" CACHE PATH "osx sysroot")
set(MACOSX_BUNDLE_GUI_IDENTIFIER CACHE STRING
"com.kitware.\${PRODUCT_NAME:identifier}")
diff --git a/CMake/toolchains/toolchain-ios-simulator.cmake
b/CMake/toolchains/toolchain-ios-simulator.cmake
index 2ab3e7d..ef4baa2 100644
--- a/CMake/toolchains/toolchain-ios-simulator.cmake
+++ b/CMake/toolchains/toolchain-ios-simulator.cmake
@@ -1,34 +1,29 @@
set(CMAKE_SYSTEM_NAME Darwin)
-exec_program(/usr/bin/xcode-select ARGS -print-path OUTPUT_VARIABLE
XCODE_DEVELOPER_DIR)
+# Force the compilers to gcc for iOS
+INCLUDE (CMakeForceCompiler)
+CMAKE_FORCE_C_COMPILER (gcc gcc)
+CMAKE_FORCE_CXX_COMPILER (g++ g++)
-find_program(CMAKE_C_COMPILER NAME gcc
- PATHS
-
"${XCODE_DEVELOPER_DIR}/Platforms/iPhoneSimulator.platform/Developer/usr/bin/"
-
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/
- /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/
- NO_DEFAULT_PATH)
+# Skip the platform compiler checks for cross compiling
+set (CMAKE_CXX_COMPILER_WORKS TRUE)
+set (CMAKE_C_COMPILER_WORKS TRUE)
-find_program(CMAKE_CXX_COMPILER NAME g++
- PATHS
-
"{XCODE_DEVELOPER_DIR}/Platforms/iPhoneSimulator.platform/Developer/usr/bin/"
-
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/
- /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/
- NO_DEFAULT_PATH)
+exec_program(/usr/bin/xcode-select ARGS -print-path OUTPUT_VARIABLE
XCODE_DEVELOPER_DIR)
-set(CMAKE_OSX_ARCHITECTURES i386)
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden
-fvisibility-inlines-hidden")
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden
-fvisibility-inlines-hidden")
+set(CMAKE_OSX_ARCHITECTURES "i386" "x86_64")
+#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -miphoneos-version-min=6.0
-fvisibility=hidden -fvisibility-inlines-hidden")
+#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -miphoneos-version-min=6.0
-fvisibility=hidden -fvisibility-inlines-hidden")
# Set the CMAKE_OSX_SYSROOT to the latest SDK found
set(CMAKE_OSX_SYSROOT)
set(possible_sdk_roots
-
"${XCODE_DEVELOPER_DIR}/Platforms/iPhoneSimulator.platform/Developer/SDKs"
-
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs
- /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs
+ "${XCODE_DEVELOPER_DIR}/Platforms/iPhoneOS.platform/Developer/SDKs"
+
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs
+ /Developer/Platforms/iPhoneOS.platform/Developer/SDKs
)
foreach(sdk_root ${possible_sdk_roots})
- foreach(sdk iPhoneSimulator4.3.sdk iPhoneSimulator5.0.sdk
iPhoneSimulator5.1.sdk iPhoneSimulator6.0.sdk iPhoneSimulator6.1.sdk
iPhoneSimulator7.0.sdk)
+ foreach(sdk iPhoneOS6.0.sdk iPhoneOS6.1.sdk iPhoneOS7.0.sdk)
if (EXISTS ${sdk_root}/${sdk} AND IS_DIRECTORY ${sdk_root}/${sdk})
set(CMAKE_OSX_SYSROOT ${sdk_root}/${sdk})
endif()
@@ -39,21 +34,14 @@ if (NOT CMAKE_OSX_SYSROOT)
endif()
message(STATUS "-- Using iOS SDK: ${CMAKE_OSX_SYSROOT}")
-# If the we are on 7.0 or higher SDK we should add simulator version min
to get
-# things to compile. This is probably more properly handled with a
compiler version
-# check but this works for now.
-if(CMAKE_OSX_SYSROOT MATCHES iPhoneSimulator7.0.sdk)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mios-simulator-version-min=5.0")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mios-simulator-version-min=5.0")
-else()
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}
-D__IPHONE_OS_VERSION_MIN_REQUIRED=50000")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}
-D__PHONE_OS_VERSION_MIN_REQIORED=50000")
-endif()
+SET (CMAKE_C_FLAGS "-arch i386 -arch x86_64 -isysroot
${CMAKE_OSX_SYSROOT} -std=c99 -x objective-c -DNDEBUG=1")
+SET (CMAKE_CXX_FLAGS "-arch i386 -arch x86_64 -isysroot
${CMAKE_OSX_SYSROOT} -x objective-c++ -DNDEBUG=1")
+
+SET (CMAKE_EXE_LINKER_FLAGS "-miphoneos-version-min=6.0")
+SET (CMAKE_SHARED_LINKER_FLAGS "-miphoneos-version-min=6.0")
+SET (CMAKE_MODULE_LINKER_FLAGS "-miphoneos-version-min=6.0")
-set(CMAKE_OSX_ARCHITECTURES "${CMAKE_OSX_ARCHITECTURES}" CACHE STRING "osx
architectures")
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags")
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags")
-set(CMAKE_OSX_SYSROOT "${CMAKE_OSX_SYSROOT}" CACHE PATH "osx sysroot")
+set(MACOSX_BUNDLE_GUI_IDENTIFIER CACHE STRING
"com.kitware.\${PRODUCT_NAME:identifier}")
set(CMAKE_FIND_ROOT_PATH ${CMAKE_OSX_SYSROOT})
When I configure a superbuild and run make, the following errors occur:
[ 13%] Performing build step for 'curl-ios-device'
Scanning dependencies of target libcurl
[ 1%] Building C object lib/CMakeFiles/libcurl.dir/file.c.o
[ 2%] Building C object lib/CMakeFiles/libcurl.dir/timeval.c.o
[ 3%] Building C object lib/CMakeFiles/libcurl.dir/base64.c.o
[ 4%] Building C object lib/CMakeFiles/libcurl.dir/hostip.c.o
[ 5%] Building C object lib/CMakeFiles/libcurl.dir/progress.c.o
[ 6%] Building C object lib/CMakeFiles/libcurl.dir/formdata.c.o
In file included from
/Volumes/iOS/KiwiGit/build/CMakeExternals/Source/curl/lib/formdata.c:39:
/Volumes/iOS/KiwiGit/build/CMakeExternals/Source/curl/lib/strequal.h:33:8:
error:
expected parameter declarator
size_t strlcat(char *dst, const char *src, size_t siz);
^
/usr/include/secure/_string.h:111:44: note: expanded from macro 'strlcat'
__builtin___strlcat_chk (dest, src, len, __darwin_obsz (dest))
^
/usr/include/secure/_common.h:39:62: note: expanded from macro
'__darwin_obsz'
#define __darwin_obsz(object) __builtin_object_size (object, _USE_FORTIF...
^
/usr/include/secure/_common.h:30:32: note: expanded from macro
'_USE_FORTIFY_LEVEL'
# define _USE_FORTIFY_LEVEL 2
^
In file included from
/Volumes/iOS/KiwiGit/build/CMakeExternals/Source/curl/lib/formdata.c:39:
/Volumes/iOS/KiwiGit/build/CMakeExternals/Source/curl/lib/strequal.h:33:8:
error:
expected ')'
/usr/include/secure/_string.h:111:44: note: expanded from macro 'strlcat'
__builtin___strlcat_chk (dest, src, len, __darwin_obsz (dest))
^
/usr/include/secure/_common.h:39:62: note: expanded from macro
'__darwin_obsz'
#define __darwin_obsz(object) __builtin_object_size (object, _USE_FORTIF...
^
/usr/include/secure/_common.h:30:32: note: expanded from macro
'_USE_FORTIFY_LEVEL'
# define _USE_FORTIFY_LEVEL 2
^
/Volumes/iOS/KiwiGit/build/CMakeExternals/Source/curl/lib/strequal.h:33:8:
note:
to match this '('
/usr/include/secure/_string.h:111:44: note: expanded from macro 'strlcat'
__builtin___strlcat_chk (dest, src, len, __darwin_obsz (dest))
^
/usr/include/secure/_common.h:39:53: note: expanded from macro
'__darwin_obsz'
#define __darwin_obsz(object) __builtin_object_size (object, _USE_FORTIF...
^
In file included from
/Volumes/iOS/KiwiGit/build/CMakeExternals/Source/curl/lib/formdata.c:39:
/Volumes/iOS/KiwiGit/build/CMakeExternals/Source/curl/lib/strequal.h:33:8:
warning:
type specifier missing, defaults to 'int' [-Wimplicit-int]
size_t strlcat(char *dst, const char *src, size_t siz);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/secure/_string.h:111:44: note: expanded from macro 'strlcat'
__builtin___strlcat_chk (dest, src, len, __darwin_obsz (dest))
^~~~~~~~~~~~~~~~~~~~
/usr/include/secure/_common.h:39:31: note: expanded from macro
'__darwin_obsz'
#define __darwin_obsz(object) __builtin_object_size (object, _USE_FORTIF...
^~~~~~~~~~~~~~~~~~~~~
In file included from
/Volumes/iOS/KiwiGit/build/CMakeExternals/Source/curl/lib/formdata.c:39:
/Volumes/iOS/KiwiGit/build/CMakeExternals/Source/curl/lib/strequal.h:33:8:
error:
conflicting types for '__builtin___strlcat_chk'
/usr/include/secure/_string.h:111:3: note: expanded from macro 'strlcat'
__builtin___strlcat_chk (dest, src, len, __darwin_obsz (dest))
^
/Volumes/iOS/KiwiGit/build/CMakeExternals/Source/curl/lib/strequal.h:33:8:
note:
'__builtin___strlcat_chk' is a builtin with type 'unsigned long (char
*,
const char *, unsigned long, unsigned long)'
/usr/include/secure/_string.h:111:3: note: expanded from macro 'strlcat'
__builtin___strlcat_chk (dest, src, len, __darwin_obsz (dest))
^
1 warning and 3 errors generated.
make[5]: *** [lib/CMakeFiles/libcurl.dir/formdata.c.o] Error 1
make[4]: *** [lib/CMakeFiles/libcurl.dir/all] Error 2
make[3]: *** [all] Error 2
make[2]: *** [CMakeExternals/Stamp/curl-ios-device/curl-ios-device-build]
Error 2
make[1]: *** [CMakeFiles/curl-ios-device.dir/all] Error 2
make: *** [all] Error 2
Best regards,
Benedikt
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/ves/attachments/20140207/da9d2fea/attachment-0002.html>
More information about the Ves
mailing list