From Rafa Gaitan and Jorge Izquierdo, build support for Android NDK.
"- In order to build against GLES1 we execute: $ mkdir build_android_gles1 $ cd build_android_gles1 $ cmake .. -DOSG_BUILD_PLATFORM_ANDROID=ON -DDYNAMIC_OPENTHREADS=OFF -DDYNAMIC_OPENSCENEGRAPH=OFF -DANDROID_NDK=<path_to_android_ndk>/ -DOSG_GLES1_AVAILABLE=ON -DOSG_GL1_AVAILABLE=OFF -DOSG_GL2_AVAILABLE=OFF -DOSG_GL_DISPLAYLISTS_AVAILABLE=OFF -DJ=2 -DOSG_CPP_EXCEPTIONS_AVAILABLE=OFF $ make If all is correct you will have and static OSG inside: build_android_gles1/bin/ndk/local/armeabi. - GLES2 is not tested/proved, but I think it could be possible build it with the correct cmake flags. - The flag -DJ=2 is used to pass to the ndk-build the number of processors to speed up the building. - make install is not yet supported."
This commit is contained in:
45
CMakeModules/FindAndroidNDK.cmake
Normal file
45
CMakeModules/FindAndroidNDK.cmake
Normal file
@@ -0,0 +1,45 @@
|
||||
# Locate AndroidNDK
|
||||
# This module defines
|
||||
# ANDROID_NDK
|
||||
# ANDROID_FOUND, if false, do not try to use AndroidNDK
|
||||
#
|
||||
|
||||
FIND_PATH(ANDROID_NDK ndk-build
|
||||
${ANDROID_NDK}
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
IF(NOT ANDROID_NDK)
|
||||
FIND_PATH(ANDROID_NDK ndk-build
|
||||
$ENV{ANDROID_NDK}
|
||||
$ENV{ANDROID_ROOT}
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
ENDIF()
|
||||
|
||||
IF(NOT ANDROID_NDK)
|
||||
FIND_PATH(ANDROID_NDK ndk-build
|
||||
# search for r5b
|
||||
~/android-ndk-r5b
|
||||
~/android_develop/android-ndk-r5b
|
||||
~/ndk-r5b
|
||||
~/android_develop/ndk-r5b
|
||||
# search for r5
|
||||
~/android-ndk-r5
|
||||
~/android_develop/android-ndk-r5
|
||||
~/ndk-r5
|
||||
~/android_develop/ndk-r5
|
||||
# search for r4-crystax
|
||||
~/android-ndk-r4-crystax
|
||||
~/android_develop/android-ndk-r4-crystax
|
||||
~/ndk-r4
|
||||
~/android_develop/ndk-r4
|
||||
)
|
||||
ENDIF()
|
||||
|
||||
SET(ANDROID_FOUND "NO")
|
||||
IF(ANDROID_NDK)
|
||||
SET(ANDROID_FOUND "YES")
|
||||
MESSAGE(STATUS "Android NDK found in: ${ANDROID_NDK}")
|
||||
ENDIF(ANDROID_NDK)
|
||||
|
||||
55
CMakeModules/OsgAndroidMacroUtils.cmake
Normal file
55
CMakeModules/OsgAndroidMacroUtils.cmake
Normal file
@@ -0,0 +1,55 @@
|
||||
MACRO(SETUP_ANDROID_LIBRARY LIB_NAME)
|
||||
|
||||
foreach(arg ${TARGET_LIBRARIES})
|
||||
set(MODULE_LIBS "${MODULE_LIBS} -l${arg}")
|
||||
endforeach(arg ${TARGET_LIBRARIES})
|
||||
|
||||
foreach(arg ${TARGET_SRC})
|
||||
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" n_f ${arg})
|
||||
set(MODULE_SOURCES "${MODULE_SOURCES} ${n_f}")
|
||||
endforeach(arg ${TARGET_SRC})
|
||||
|
||||
#SET(MODULE_INCLUDES "${CMAKE_SOURCE_DIR}/include ${CMAKE_BINARY_DIR}/include")
|
||||
GET_DIRECTORY_PROPERTY(loc_includes INCLUDE_DIRECTORIES)
|
||||
foreach(arg ${loc_includes})
|
||||
IF(NOT "${arg}" MATCHES "/usr/include" AND NOT "${arg}" MATCHES "/usr/local/include")
|
||||
set(MODULE_INCLUDES "${MODULE_INCLUDES} ${arg}")
|
||||
ENDIF()
|
||||
endforeach(arg ${loc_includes})
|
||||
|
||||
GET_DIRECTORY_PROPERTY(loc_definitions COMPILE_DEFINITIONS)
|
||||
foreach(arg ${loc_definitions})
|
||||
set(DEFINITIONS "${DEFINITIONS} -D${arg}")
|
||||
endforeach(arg ${loc_definitions})
|
||||
|
||||
message(STATUS "##############Creating Android Makefile#################")
|
||||
message(STATUS "name: ${LIB_NAME}")
|
||||
|
||||
set(MODULE_NAME ${LIB_NAME})
|
||||
set(MODULE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
set(MODULE_FLAGS_C ${DEFINITIONS})
|
||||
set(MODULE_FLAGS_CPP ${DEFINITIONS})
|
||||
#TODO: determine if GLES2 or GLES
|
||||
IF(OSG_GLES1_AVAILABLE)
|
||||
SET(OPENGLES_LIBRARY -lGLESv1_CM)
|
||||
ELSEIF(OSG_GLES2_AVAILABLE)
|
||||
SET(OPENGLES_LIBRARY -lGLESv2)
|
||||
ENDIF()
|
||||
set(MODULE_LIBS "${MODULE_LIBS} ${OPENGLES_LIBRARY} -ldl")
|
||||
if(NOT CPP_EXTENSION)
|
||||
set(CPP_EXTENSION "cpp")
|
||||
endif()
|
||||
IF(NOT MODULE_USER_STATIC_OR_DYNAMIC)
|
||||
MESSAGE(FATAL_ERROR "Not defined MODULE_USER_STATIC_OR_DYNAMIC")
|
||||
ENDIF()
|
||||
IF("MODULE_USER_STATIC_OR_DYNAMIC" MATCHES "STATIC")
|
||||
SET(MODULE_BUILD_TYPE "\$\(BUILD_STATIC_LIBRARY\)")
|
||||
ELSE()
|
||||
SET(MODULE_BUILD_TYPE "\$\(BUILD_DYNAMIC_LIBRARY\)")
|
||||
ENDIF()
|
||||
set(ENV{AND_OSG_LIB_NAMES} "$ENV{AND_OSG_LIB_NAMES} ${LIB_NAME}")
|
||||
set(ENV{AND_OSG_LIB_PATHS} "$ENV{AND_OSG_LIB_PATHS}include ${CMAKE_CURRENT_BINARY_DIR}/Android.mk \n")
|
||||
|
||||
configure_file("${OSG_ANDROID_TEMPLATES}/Android.mk.modules.in" "${CMAKE_CURRENT_BINARY_DIR}/Android.mk")
|
||||
|
||||
ENDMACRO()
|
||||
@@ -210,36 +210,41 @@ ENDMACRO(SET_OUTPUT_DIR_PROPERTY_260 TARGET_TARGETNAME RELATIVE_OUTDIR)
|
||||
##########################################################################################################
|
||||
|
||||
MACRO(SETUP_LIBRARY LIB_NAME)
|
||||
IF(ANDROID)
|
||||
SETUP_ANDROID_LIBRARY(${LIB_NAME})
|
||||
ELSE()
|
||||
SET(TARGET_NAME ${LIB_NAME} )
|
||||
SET(TARGET_TARGETNAME ${LIB_NAME} )
|
||||
|
||||
SET(TARGET_NAME ${LIB_NAME} )
|
||||
SET(TARGET_TARGETNAME ${LIB_NAME} )
|
||||
|
||||
ADD_LIBRARY(${LIB_NAME}
|
||||
${OPENSCENEGRAPH_USER_DEFINED_DYNAMIC_OR_STATIC}
|
||||
${TARGET_H}
|
||||
${TARGET_SRC}
|
||||
)
|
||||
ADD_LIBRARY(${LIB_NAME}
|
||||
${OPENSCENEGRAPH_USER_DEFINED_DYNAMIC_OR_STATIC}
|
||||
${TARGET_H}
|
||||
${TARGET_SRC}
|
||||
)
|
||||
|
||||
IF(TARGET_LABEL)
|
||||
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PROJECT_LABEL "${TARGET_LABEL}")
|
||||
ENDIF(TARGET_LABEL)
|
||||
IF(TARGET_LABEL)
|
||||
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PROJECT_LABEL "${TARGET_LABEL}")
|
||||
ENDIF(TARGET_LABEL)
|
||||
|
||||
IF(TARGET_LIBRARIES)
|
||||
LINK_INTERNAL(${LIB_NAME} ${TARGET_LIBRARIES})
|
||||
IF(TARGET_LIBRARIES)
|
||||
LINK_INTERNAL(${LIB_NAME} ${TARGET_LIBRARIES})
|
||||
ENDIF()
|
||||
IF(TARGET_EXTERNAL_LIBRARIES)
|
||||
LINK_EXTERNAL(${LIB_NAME} ${TARGET_EXTERNAL_LIBRARIES})
|
||||
ENDIF()
|
||||
IF(TARGET_LIBRARIES_VARS)
|
||||
LINK_WITH_VARIABLES(${LIB_NAME} ${TARGET_LIBRARIES_VARS})
|
||||
ENDIF(TARGET_LIBRARIES_VARS)
|
||||
LINK_CORELIB_DEFAULT(${LIB_NAME})
|
||||
|
||||
INCLUDE(ModuleInstall OPTIONAL)
|
||||
ENDIF()
|
||||
IF(TARGET_EXTERNAL_LIBRARIES)
|
||||
LINK_EXTERNAL(${LIB_NAME} ${TARGET_EXTERNAL_LIBRARIES})
|
||||
ENDIF()
|
||||
IF(TARGET_LIBRARIES_VARS)
|
||||
LINK_WITH_VARIABLES(${LIB_NAME} ${TARGET_LIBRARIES_VARS})
|
||||
ENDIF(TARGET_LIBRARIES_VARS)
|
||||
LINK_CORELIB_DEFAULT(${LIB_NAME})
|
||||
|
||||
INCLUDE(ModuleInstall OPTIONAL)
|
||||
|
||||
ENDMACRO(SETUP_LIBRARY LIB_NAME)
|
||||
|
||||
MACRO(SETUP_PLUGIN PLUGIN_NAME)
|
||||
IF(ANDROID)
|
||||
SETUP_ANDROID_LIBRARY(${TARGET_DEFAULT_PREFIX}${PLUGIN_NAME})
|
||||
ELSE()
|
||||
|
||||
SET(TARGET_NAME ${PLUGIN_NAME} )
|
||||
|
||||
@@ -324,6 +329,7 @@ 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)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user