1# ------------------------------------------------------------------------------ 2# BlackBerry CMake toolchain file, for use with the BlackBerry 10 NDK 3# Requires cmake 2.6.3 or newer (2.8.3 or newer is recommended). 4# 5# Usage Linux: 6# $ source /absolute/path/to/the/bbndk/bbndk-env.sh 7# $ mkdir build 8# $ cd build 9# $ cmake .. -DCMAKE_TOOLCHAIN_FILE="../CMake/toolchain/blackberry.toolchain.cmake" -DTargetPlatform="BlackBerry" -DBLACKBERRY_ARCHITECTURE=arm -DOGRE_DEPENDENCIES_DIR="../BlackBerryDependencies" -DOGRE_BUILD_RENDERSYSTEM_GLES2=TRUE -DOGRE_STATIC=TRUE -DOGRE_BUILD_COMPONENT_PAGING=TRUE -DOGRE_BUILD_COMPONENT_TERRAIN=TRUE -DOGRE_BUILD_COMPONENT_RTSHADERSYSTEM=TRUE -DOGRE_BUILD_PLUGIN_BSP=FALSE -DOGRE_BUILD_PLUGIN_PCZ=FALSE -DOGRE_BUILD_RENDERSYSTEM_GLES=FALSE -DOGRE_BUILD_TESTS=FALSE -DOGRE_BUILD_TOOLS=FALSE -DCMAKE_VERBOSE_MAKEFILE=TRUE -G "Eclipse CDT4 - Unix Makefiles" 10# $ make -j8 11# 12# Usage Mac: 13# Same as the steps on Linux 14# 15# Usage Windows: 16# > /absolute/path/to/the/bbndk/bbndk-env.bat 17# > mkdir build 18# > cd build 19# > cmake .. -DCMAKE_TOOLCHAIN_FILE="../CMake/toolchain/blackberry.toolchain.cmake" -DTargetPlatform="BlackBerry" -DBLACKBERRY_ARCHITECTURE=arm -DOGRE_DEPENDENCIES_DIR="../BlackBerryDependencies" -DOGRE_BUILD_RENDERSYSTEM_GLES2=TRUE -DOGRE_STATIC=TRUE -DOGRE_BUILD_COMPONENT_PAGING=TRUE -DOGRE_BUILD_COMPONENT_TERRAIN=TRUE -DOGRE_BUILD_COMPONENT_RTSHADERSYSTEM=TRUE -DOGRE_BUILD_PLUGIN_BSP=FALSE -DOGRE_BUILD_PLUGIN_PCZ=FALSE -DOGRE_BUILD_RENDERSYSTEM_GLES=FALSE -DOGRE_BUILD_TESTS=FALSE -DOGRE_BUILD_TOOLS=FALSE -DCMAKE_VERBOSE_MAKEFILE=TRUE -G "Eclipse CDT4 - Unix Makefiles" 20# > make -j8 21# 22 23cmake_minimum_required( VERSION 2.6.3 ) 24 25if( DEFINED CMAKE_CROSSCOMPILING ) 26 # Subsequent toolchain loading is not really needed 27 return() 28endif() 29 30set( BLACKBERRY_TOOLCHAIN_ROOT "$ENV{QNX_HOST}" ) 31set( BLACKBERRY_TARGET_ROOT "$ENV{QNX_TARGET}" ) 32set( CMAKE_SYSTEM_NAME Linux ) 33set( CMAKE_SYSTEM_VERSION 1 ) 34 35# STL version: by default gnustl_static will be used 36set( BLACKBERRY_USE_STLPORT FALSE CACHE BOOL "Experimental: use stlport_static instead of gnustl_static") 37mark_as_advanced( BLACKBERRY_USE_STLPORT ) 38 39# Detect host platform 40set( TOOL_OS_SUFFIX "" ) 41if( CMAKE_HOST_APPLE ) 42 set( BLACKBERRY_NDK_HOST_SYSTEM_NAME "darwin-x86" ) 43elseif( CMAKE_HOST_WIN32 ) 44 set( BLACKBERRY_NDK_HOST_SYSTEM_NAME "windows" ) 45 set( TOOL_OS_SUFFIX ".exe" ) 46elseif( CMAKE_HOST_UNIX ) 47 set(BLACKBERRY_NDK_HOST_SYSTEM_NAME "linux-x86" ) 48else() 49 message( FATAL_ERROR "Cross-compilation on your platform is not supported by this cmake toolchain" ) 50endif() 51 52# Specify the cross compiler 53set( CMAKE_C_COMPILER "$ENV{QNX_HOST}/usr/bin/qcc${TOOL_OS_SUFFIX}" CACHE PATH "gcc" ) 54set( CMAKE_CXX_COMPILER "$ENV{QNX_HOST}/usr/bin/qcc${TOOL_OS_SUFFIX}" CACHE PATH "g++" ) 55set( CMAKE_ASM_COMPILER "$ENV{QNX_HOST}/usr/bin/qcc${TOOL_OS_SUFFIX}" CACHE PATH "Assembler" ) 56if( CMAKE_VERSION VERSION_LESS 2.8.5 ) 57 set( CMAKE_ASM_COMPILER_ARG1 "-c" ) 58endif() 59 60# There may be a way to make cmake reduce these TODO 61if( BLACKBERRY_ARCHITECTURE STREQUAL "arm" ) 62 set( NEUTRINO_ARCH "v7" ) 63else() 64 set( NEUTRINO_ARCH "" ) 65endif() 66set( CMAKE_STRIP "$ENV{QNX_HOST}/usr/bin/nto${BLACKBERRY_ARCHITECTURE}-strip${TOOL_OS_SUFFIX}" CACHE PATH "strip" ) 67set( CMAKE_AR "$ENV{QNX_HOST}/usr/bin/nto${BLACKBERRY_ARCHITECTURE}-ar${TOOL_OS_SUFFIX}" CACHE PATH "archive" ) 68set( CMAKE_LINKER "$ENV{QNX_HOST}/usr/bin/nto${BLACKBERRY_ARCHITECTURE}${NEUTRINO_ARCH}-ld${TOOL_OS_SUFFIX}" CACHE PATH "linker" ) 69set( CMAKE_NM "$ENV{QNX_HOST}/usr/bin/nto${BLACKBERRY_ARCHITECTURE}${NEUTRINO_ARCH}-nm${TOOL_OS_SUFFIX}" CACHE PATH "nm" ) 70set( CMAKE_OBJCOPY "$ENV{QNX_HOST}/usr/bin/nto${BLACKBERRY_ARCHITECTURE}${NEUTRINO_ARCH}-objcopy${TOOL_OS_SUFFIX}" CACHE PATH "objcopy" ) 71set( CMAKE_OBJDUMP "$ENV{QNX_HOST}/usr/bin/nto${BLACKBERRY_ARCHITECTURE}${NEUTRINO_ARCH}-objdump${TOOL_OS_SUFFIX}" CACHE PATH "objdump" ) 72set( CMAKE_RANLIB "$ENV{QNX_HOST}/usr/bin/nto${BLACKBERRY_ARCHITECTURE}-ranlib${TOOL_OS_SUFFIX}" CACHE PATH "ranlib" ) 73 74# Installer 75#if( APPLE ) 76# find_program( CMAKE_INSTALL_NAME_TOOL NAMES install_name_tool ) 77# if( NOT CMAKE_INSTALL_NAME_TOOL ) 78# message( FATAL_ERROR "Could not find install_name_tool, please check your #installation." ) 79# endif() 80# mark_as_advanced( CMAKE_INSTALL_NAME_TOOL ) 81# endif() 82 83# Setup output directories 84set( LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_SOURCE_DIR} CACHE PATH "root for library output, set this to change where android libs are installed to" ) 85set( CMAKE_INSTALL_PREFIX "${BLACKBERRY_TOOLCHAIN_ROOT}/user" CACHE STRING "path for installing" ) 86 87if( EXISTS "${CMAKE_SOURCE_DIR}/jni/CMakeLists.txt" ) 88 set( EXECUTABLE_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/bin/${ANDROID_NDK_ABI_NAME}" CACHE PATH "Output directory for applications" ) 89else() 90 set( EXECUTABLE_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/bin" CACHE PATH "Output directory for applications" ) 91endif() 92 93# Includes 94list( APPEND BLACKBERRY_SYSTEM_INCLUDE_DIRS "${BLACKBERRY_TARGET_ROOT}/qnx6/usr/include" ) 95 96# Flags and preprocessor definitions 97if( BLACKBERRY_ARCHITECTURE STREQUAL "arm" ) 98 set( BLACKBERRY_CC_FLAGS " -V4.6.3,gcc_ntoarmv7le -D__QNX__" ) 99 set( BLACKBERRY_CXX_FLAGS " -V4.6.3,gcc_ntoarmv7le -Y_gpp -D__QNX__" ) 100else() 101 set( BLACKBERRY_CC_FLAGS " -V4.6.3,gcc_ntox86 -D__QNX__" ) 102 set( BLACKBERRY_CXX_FLAGS " -V4.6.3,gcc_ntox86 -Y_gpp -D__QNX__" ) 103endif() 104set( BLACKBERRY 1 ) 105 106# NDK flags 107set( CMAKE_CXX_FLAGS "${BLACKBERRY_CXX_FLAGS}" ) 108set( CMAKE_C_FLAGS "${BLACKBERRY_CC_FLAGS}" ) 109set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions" ) 110set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fexceptions" ) 111 112# Release and Debug flags 113if( BLACKBERRY_ARCHITECTURE STREQUAL "arm" ) 114 set( CMAKE_CXX_FLAGS_RELEASE "-mthumb -O3" ) 115 set( CMAKE_C_FLAGS_RELEASE "-mthumb -O3" ) 116 set( CMAKE_CXX_FLAGS_DEBUG "-g -marm -Os -finline-limit=64" ) 117 set( CMAKE_C_FLAGS_DEBUG "-g -marm -Os -finline-limit=64" ) 118else() 119 set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=i486" ) 120 set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=i486" ) 121endif() 122 123# Cache flags 124set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags" ) 125set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags" ) 126set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}" CACHE STRING "c++ Release flags" ) 127set( CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}" CACHE STRING "c Release flags" ) 128set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}" CACHE STRING "c++ Debug flags" ) 129set( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}" CACHE STRING "c Debug flags" ) 130set( CMAKE_SHARED_LINKER_FLAGS "" CACHE STRING "linker flags" ) 131SET( CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "" CACHE STRING "linker flags") 132SET( CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "" CACHE STRING "linker flags") 133set( CMAKE_MODULE_LINKER_FLAGS "" CACHE STRING "linker flags" ) 134set( CMAKE_EXE_LINKER_FLAGS "-lstdc++ -lm -lEGL -lGLESv2 -lbps -lscreen" CACHE STRING "linker flags" ) 135 136# Finish flags 137set( BLACKBERRY_CXX_FLAGS "${BLACKBERRY_CXX_FLAGS}" CACHE INTERNAL "Extra BlackBerry compiler flags") 138set( BLACKBERRY_LINKER_FLAGS "${BLACKBERRY_LINKER_FLAGS}" CACHE INTERNAL "Extra BlackBerry linker flags") 139set( CMAKE_CXX_FLAGS "${BLACKBERRY_CXX_FLAGS} ${CMAKE_CXX_FLAGS}" ) 140set( CMAKE_C_FLAGS "${BLACKBERRY_CXX_FLAGS} ${CMAKE_C_FLAGS}" ) 141 142# Global flags for cmake client scripts to change behavior 143set( BLACKBERRY True ) 144# Find the Target environment 145set( CMAKE_FIND_ROOT_PATH "${CMAKE_SOURCE_DIR}" "${BLACKBERRY_TARGET_ROOT}" "${CMAKE_INSTALL_PREFIX}" "${CMAKE_INSTALL_PREFIX}/share" ) 146# Search for libraries and includes in the ndk toolchain 147set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) 148set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) 149set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) 150 151# Macro to find packages on the host OS 152macro( find_host_package ) 153 set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ) 154 set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER ) 155 set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER ) 156 if( CMAKE_HOST_WIN32 ) 157 SET( WIN32 1 ) 158 SET( UNIX ) 159 elseif( CMAKE_HOST_APPLE ) 160 SET( APPLE 1 ) 161 SET( UNIX ) 162 endif() 163 find_package( ${ARGN} ) 164 SET( WIN32 ) 165 SET( APPLE ) 166 SET( UNIX 1 ) 167 set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) 168 set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) 169 set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) 170endmacro() 171 172# Macro to find programs on the host OS 173macro( find_host_program ) 174 set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ) 175 set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER ) 176 set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER ) 177 if( CMAKE_HOST_WIN32 ) 178 SET( WIN32 1 ) 179 SET( UNIX ) 180 elseif( CMAKE_HOST_APPLE ) 181 SET( APPLE 1 ) 182 SET( UNIX ) 183 endif() 184 find_program( ${ARGN} ) 185 SET( WIN32 ) 186 SET( APPLE ) 187 SET( UNIX 1 ) 188 set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) 189 set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) 190 set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) 191endmacro() 192 193# We are doing cross compiling, reset the OS information of the Building system 194UNSET( APPLE ) 195UNSET( WIN32 ) 196UNSET( UNIX ) 197