From Rafa Gaitan, "I finally had some time to change the build system for Android using a Toolchain, which, I think, will be easier to maintain and uses cmake standard system to build it.
My changes:
-------------------
- I changed the cmake files and added a toolchain for building OSG in Android. The toolchain is based on the one used at OpenCV. For building OSG for android you just need to do:
mkdir build_android_static_gles2 && cd build_android_static_gles2
cmake .. -DANDROID_NDK=<path-to-the-android-ndk>
-DCMAKE_TOOLCHAIN_FILE=../PlatformSpecifics/Android/android.toolchain.cmake
-DOPENGL_PROFILE="GLES2"
-DDYNAMIC_OPENTHREADS=OFF
-DDYNAMIC_OPENSCENEGRAPH=OFF
-DANDROID_NATIVE_API_LEVEL=15 # optional
-DANDROID_ABI=armeabim #optional
-DCMAKE_INSTALL_PREFIX=<path-to-the-install-path> #optional
make -j 8
make install
The OPENGL_PROFILE works as expected, changing it to "GLES1" it builds and links OSG using GLES1.
The DYNAMIC_OPENTHREADS/DYNAMIC_OPENSCENEGRAPH parameters also allows to build the dynamic libraries
- I also added some build fixes for android related to the texture formats and added some missing USE_OSG_SERIALIZER_WRAPPER in the osg serializer library to support loading osgb files in static."
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk@14514 16af8721-9629-0410-8352-f15c8da7e697
This commit is contained in:
109
CMakeLists.txt
109
CMakeLists.txt
@@ -80,85 +80,16 @@ SET(OpenThreads_SOURCE_DIR ${OpenSceneGraph_SOURCE_DIR})
|
||||
# Maybe this can be used override existing behavior if needed?
|
||||
SET(CMAKE_MODULE_PATH "${OpenSceneGraph_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}")
|
||||
|
||||
|
||||
# Change the default build type to Release
|
||||
IF(NOT CMAKE_BUILD_TYPE)
|
||||
SET(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE)
|
||||
ENDIF(NOT CMAKE_BUILD_TYPE)
|
||||
|
||||
|
||||
## Option to enable Android build using AndroidNDK
|
||||
OPTION(OSG_BUILD_PLATFORM_ANDROID OFF)
|
||||
IF(OSG_BUILD_PLATFORM_ANDROID)
|
||||
|
||||
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0 FATAL_ERROR)
|
||||
|
||||
IF(ANDROID)
|
||||
INCLUDE(OsgAndroidMacroUtils)
|
||||
SET(ANDROID TRUE)
|
||||
IF(NOT ANDROID_PLATFORM)
|
||||
MESSAGE("Warning Android Platform version NOT defined, Default selected version: 5")
|
||||
SET(ANDROID_PLATFORM 5)
|
||||
ENDIF()
|
||||
IF(NOT ANDROID_ABI)
|
||||
MESSAGE("Warning Android ABI version NOT defined, Default selection: armeabi armeabi-v7a")
|
||||
SET(ANDROID_ABI "armeabi armeabi-v7a")
|
||||
ENDIF()
|
||||
IF(NOT ANDROID_STL)
|
||||
MESSAGE("Warning Android STL NOT defined, Default selection: gnustl_static")
|
||||
SET(ANDROID_STL "gnustl_static")
|
||||
ENDIF()
|
||||
IF(ANDROID_DEBUG)
|
||||
MESSAGE("Warning Android Build is in debug mode")
|
||||
SET(ANDROID_RELEASE_OPTIM "debug")
|
||||
ELSE()
|
||||
MESSAGE("Warning Android Build is in release mode")
|
||||
SET(ANDROID_RELEASE_OPTIM "release")
|
||||
ENDIF()
|
||||
IF(ANDROID_NEON)
|
||||
MESSAGE("Warning Android NEON optimizations enabled, this will not be available on all armeabi-v7a devices ie. Tegra2")
|
||||
SET(ANDROID_OPTIM_NEON true)
|
||||
ELSE()
|
||||
SET(ANDROID_OPTIM_NEON false)
|
||||
ENDIF()
|
||||
IF(ANDROID_ARM32)
|
||||
MESSAGE("Warning ARM 32bit instruction set will be used")
|
||||
SET(ANDROID_OPTIM_ARM32 true)
|
||||
ELSE()
|
||||
SET(ANDROID_OPTIM_ARM32 false)
|
||||
ENDIF()
|
||||
|
||||
FIND_PACKAGE(AndroidNDK REQUIRED)
|
||||
|
||||
SET(OSG_ANDROID_TEMPLATES "${CMAKE_SOURCE_DIR}/PlatformSpecifics/Android")
|
||||
|
||||
SET(J "4" CACHE STRING "how many processes for make -j <J>")
|
||||
|
||||
ADD_CUSTOM_COMMAND(
|
||||
OUTPUT Android-OpenSceneGraph
|
||||
DEPENDS ${CMAKE_BINARY_DIR}/Android.mk
|
||||
COMMAND "${ANDROID_NDK}/ndk-build"
|
||||
ARGS --directory=${CMAKE_BINARY_DIR} NDK_APPLICATION_MK=Application.mk -j${J} NDK_LOG=1
|
||||
)
|
||||
|
||||
ADD_CUSTOM_TARGET(ndk ALL echo
|
||||
DEPENDS Android-OpenSceneGraph
|
||||
)
|
||||
install(DIRECTORY include/ DESTINATION include/
|
||||
PATTERN ".svn" EXCLUDE
|
||||
)
|
||||
install(DIRECTORY ${CMAKE_BINARY_DIR}/include/ DESTINATION include/
|
||||
)
|
||||
install(DIRECTORY ${CMAKE_BINARY_DIR}/obj/ DESTINATION obj/
|
||||
PATTERN ".svn" EXCLUDE
|
||||
PATTERN "objs" EXCLUDE
|
||||
)
|
||||
|
||||
ADD_DEFINITIONS(-DANDROID)
|
||||
|
||||
ENDIF()
|
||||
|
||||
|
||||
|
||||
# Okay, here's the problem: On some platforms, linking against OpenThreads
|
||||
# is not enough and explicit linking to the underlying thread library
|
||||
# is also required (e.g. FreeBSD). But OpenThreads may be built with different
|
||||
@@ -235,8 +166,7 @@ IF (OSG_MAINTAINER)
|
||||
|
||||
ENDIF(OSG_MAINTAINER)
|
||||
|
||||
IF(NOT ANDROID)
|
||||
IF(APPLE)
|
||||
IF(APPLE AND NOT ANDROID)
|
||||
# Determine the canonical name of the selected Platform SDK
|
||||
EXECUTE_PROCESS(COMMAND "/usr/bin/sw_vers" "-productVersion"
|
||||
OUTPUT_VARIABLE OSG_OSX_SDK_NAME
|
||||
@@ -288,14 +218,11 @@ IF(APPLE)
|
||||
OPTION(OSG_COMPILE_FRAMEWORKS "compile frameworks instead of dylibs (experimental)" OFF)
|
||||
SET(OSG_COMPILE_FRAMEWORKS_INSTALL_NAME_DIR "@executable_path/../Frameworks" CACHE STRING "install name dir for compiled frameworks")
|
||||
ELSE()
|
||||
# Non-Apple: Find OpenGL
|
||||
FIND_PACKAGE(OpenGL)
|
||||
IF(NOT ANDROID)
|
||||
# Non-Apple: Find OpenGL
|
||||
FIND_PACKAGE(OpenGL)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
IF(UNIX AND NOT ANDROID)
|
||||
# Not sure what this will do on Cygwin and Msys
|
||||
@@ -602,7 +529,23 @@ ELSE()
|
||||
SET(OSG_GLES2_FEATURES "false")
|
||||
ENDIF()
|
||||
|
||||
|
||||
IF(ANDROID)
|
||||
IF(OSG_GLES1_AVAILABLE)
|
||||
FIND_PATH(OPENGL_INCLUDE_DIR GLES/gl.h
|
||||
PATHS
|
||||
${ANDROID_SYSROOT}/usr/include)
|
||||
FIND_LIBRARY(OPENGL_gl_LIBRARY GLESv1_CM
|
||||
PATHS
|
||||
${ANDROID_SYSROOT}/usr/lib)
|
||||
ELSEIF(OSG_GLES2_AVAILABLE)
|
||||
FIND_PATH(OPENGL_INCLUDE_DIR GLES2/gl2.h
|
||||
PATHS
|
||||
${ANDROID_SYSROOT}/usr/include)
|
||||
FIND_LIBRARY(OPENGL_gl_LIBRARY GLESv2
|
||||
PATHS
|
||||
${ANDROID_SYSROOT}/usr/lib)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
|
||||
################################################################################
|
||||
@@ -1338,10 +1281,4 @@ ADD_CUSTOM_TARGET(uninstall
|
||||
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
|
||||
|
||||
#
|
||||
IF(ANDROID)
|
||||
message(STATUS "Creating Android Makefile Master files" )
|
||||
configure_file("${OSG_ANDROID_TEMPLATES}/Android.mk.master.in" "${CMAKE_BINARY_DIR}/Android.mk")
|
||||
configure_file("${OSG_ANDROID_TEMPLATES}/Application.mk.master.in" "${CMAKE_BINARY_DIR}/Application.mk")
|
||||
configure_file("${OSG_ANDROID_TEMPLATES}/AndroidManifest.xml.master.in" "${CMAKE_BINARY_DIR}/AndroidManifest.xml")
|
||||
ENDIF(ANDROID)
|
||||
|
||||
|
||||
@@ -25,14 +25,6 @@ IF(MSVC AND OSG_MSVC_VERSIONED_DLL)
|
||||
HANDLE_MSVC_DLL()
|
||||
ENDIF()
|
||||
|
||||
IF(ANDROID)
|
||||
INSTALL (
|
||||
FILES ${TARGET_H}
|
||||
DESTINATION ${INSTALL_INCDIR}/${LIB_NAME}
|
||||
COMPONENT libopenscenegraph-dev
|
||||
)
|
||||
ELSE(ANDROID)
|
||||
|
||||
INSTALL(
|
||||
TARGETS ${LIB_NAME}
|
||||
RUNTIME DESTINATION ${INSTALL_BINDIR} COMPONENT libopenscenegraph
|
||||
@@ -59,4 +51,3 @@ ELSE()
|
||||
# MESSAGE("${OSG_COMPILE_FRAMEWORKS_INSTALL_NAME_DIR}")
|
||||
ENDIF()
|
||||
|
||||
ENDIF(ANDROID)
|
||||
|
||||
@@ -216,9 +216,6 @@ MACRO(SETUP_LIBRARY LIB_NAME)
|
||||
INCLUDE_DIRECTORIES( ${GLCORE_INCLUDE_DIR} )
|
||||
ENDIF()
|
||||
|
||||
IF(ANDROID)
|
||||
SETUP_ANDROID_LIBRARY(${LIB_NAME})
|
||||
ELSE()
|
||||
SET(TARGET_NAME ${LIB_NAME} )
|
||||
SET(TARGET_TARGETNAME ${LIB_NAME} )
|
||||
ADD_LIBRARY(${LIB_NAME}
|
||||
@@ -246,7 +243,6 @@ MACRO(SETUP_LIBRARY LIB_NAME)
|
||||
ENDIF(TARGET_LIBRARIES_VARS)
|
||||
LINK_CORELIB_DEFAULT(${LIB_NAME})
|
||||
|
||||
ENDIF()
|
||||
INCLUDE(ModuleInstall OPTIONAL)
|
||||
ENDMACRO(SETUP_LIBRARY LIB_NAME)
|
||||
|
||||
@@ -255,10 +251,6 @@ MACRO(SETUP_PLUGIN PLUGIN_NAME)
|
||||
INCLUDE_DIRECTORIES( ${GLCORE_INCLUDE_DIR} )
|
||||
ENDIF()
|
||||
|
||||
IF(ANDROID)
|
||||
SETUP_ANDROID_LIBRARY(${TARGET_DEFAULT_PREFIX}${PLUGIN_NAME})
|
||||
ELSE()
|
||||
|
||||
SET(TARGET_NAME ${PLUGIN_NAME} )
|
||||
|
||||
#MESSAGE("in -->SETUP_PLUGIN<-- ${TARGET_NAME}-->${TARGET_SRC} <--> ${TARGET_H}<--")
|
||||
@@ -340,7 +332,6 @@ MACRO(SETUP_PLUGIN PLUGIN_NAME)
|
||||
ARCHIVE DESTINATION lib${LIB_POSTFIX}/${OSG_PLUGINS} COMPONENT libopenscenegraph-dev
|
||||
LIBRARY DESTINATION lib${LIB_POSTFIX}/${OSG_PLUGINS} COMPONENT ${PACKAGE_COMPONENT})
|
||||
ENDIF(WIN32)
|
||||
ENDIF()
|
||||
ENDMACRO(SETUP_PLUGIN)
|
||||
|
||||
|
||||
|
||||
1765
PlatformSpecifics/Android/android.toolchain.cmake
Normal file
1765
PlatformSpecifics/Android/android.toolchain.cmake
Normal file
File diff suppressed because it is too large
Load Diff
@@ -39,7 +39,4 @@ IF ((QT4_FOUND OR Qt5Widgets_FOUND) AND NOT ANDROID)
|
||||
ADD_SUBDIRECTORY(osgQt)
|
||||
ENDIF()
|
||||
|
||||
IF(ANDROID)
|
||||
configure_file("${OSG_ANDROID_TEMPLATES}/Android.mk.src.in" "${CMAKE_CURRENT_BINARY_DIR}/Android.mk")
|
||||
ENDIF()
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ IF(ANDROID)
|
||||
SET(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_GNU_SOURCE")
|
||||
SET(MODULE_USER_STATIC_OR_DYNAMIC ${OPENTHREADS_USER_DEFINED_DYNAMIC_OR_STATIC})
|
||||
#SET(CPP_EXTENSION "c++")
|
||||
SETUP_ANDROID_LIBRARY(${LIB_NAME})
|
||||
SETUP_LIBRARY(${LIB_NAME})
|
||||
ELSE()
|
||||
|
||||
# should check?
|
||||
|
||||
@@ -109,5 +109,55 @@ USE_SERIALIZER_WRAPPER(UserDataContainer)
|
||||
USE_SERIALIZER_WRAPPER(VertexProgram)
|
||||
USE_SERIALIZER_WRAPPER(Viewport)
|
||||
|
||||
// Arrays
|
||||
USE_SERIALIZER_WRAPPER(Array)
|
||||
USE_SERIALIZER_WRAPPER(FloatArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec2Array)
|
||||
USE_SERIALIZER_WRAPPER(Vec3Array)
|
||||
USE_SERIALIZER_WRAPPER(Vec4Array)
|
||||
|
||||
USE_SERIALIZER_WRAPPER(DoubleArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec2dArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec3dArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec4dArray)
|
||||
|
||||
USE_SERIALIZER_WRAPPER(ByteArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec2bArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec3bArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec4bArray)
|
||||
|
||||
USE_SERIALIZER_WRAPPER(UByteArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec2ubArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec3ubArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec4ubArray)
|
||||
|
||||
USE_SERIALIZER_WRAPPER(ShortArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec2sArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec3sArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec4sArray)
|
||||
|
||||
USE_SERIALIZER_WRAPPER(UShortArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec2usArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec3usArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec4usArray)
|
||||
|
||||
USE_SERIALIZER_WRAPPER(IntArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec2iArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec3iArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec4iArray)
|
||||
|
||||
USE_SERIALIZER_WRAPPER(UIntArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec2uiArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec3uiArray)
|
||||
USE_SERIALIZER_WRAPPER(Vec4uiArray)
|
||||
|
||||
// PrimitiveSets
|
||||
USE_SERIALIZER_WRAPPER(PrimitiveSet)
|
||||
USE_SERIALIZER_WRAPPER(DrawArrays)
|
||||
USE_SERIALIZER_WRAPPER(DrawArrayLengths)
|
||||
USE_SERIALIZER_WRAPPER(DrawElementsUByte)
|
||||
USE_SERIALIZER_WRAPPER(DrawElementsUShort)
|
||||
USE_SERIALIZER_WRAPPER(DrawElementsUInt)
|
||||
|
||||
extern "C" void wrapper_serializer_library_osg(void) {}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user