Android build: Difference between revisions

From OpenMW Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
(20 intermediate revisions by 2 users not shown)
Line 3: Line 3:
Before you start building OpenMW on Android you have to do few steps of preparation:
Before you start building OpenMW on Android you have to do few steps of preparation:
# Download  [https://www.crystax.net/ Crystax NDK]
# Download  [https://www.crystax.net/ Crystax NDK]
# Download and install [http://developer.android.com/sdk/index.html Google Android SDK]
Openmw building without errors only on crystax ndk 10.1.0 version.
# Download [https://github.com/taka-no-me/android-cmake Cmake for Android] (it will be used for OpenMW and its dependencies compilation)
# Download [https://github.com/taka-no-me/android-cmake Cmake for Android] (it will be used for OpenMW and its dependencies compilation)
# Download [http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html java ]
# Download [http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html java ]
Line 15: Line 15:
#*  [https://github.com/MyGUI/mygui mygui]
#*  [https://github.com/MyGUI/mygui mygui]
#* zlib integrated in android
#* zlib integrated in android
Prebuilt openmw dependencies for armv7 arch
https://drive.google.com/file/d/0B5mOME9qjLFuckRrSWd6ZTMtZGM/view?usp=sharing
Prebuilt openmw dependencies for armv8 arch
https://drive.google.com/file/d/0B5mOME9qjLFuVkpRc2FWb3h1SW8/view?usp=sharing


=== Compilation of OpenMW dependencies ===
=== Compilation of OpenMW dependencies ===
Line 20: Line 26:
Then you should add PATH for crystax ndk and google sdk.
Then you should add PATH for crystax ndk and google sdk.


==== Building Ogre3D ====
==== Building OSG ====
Next you must build ogre from source. I build ogre 1.9 with this tutorial .
Next you must build OSG from source. I build osg with this tutorials .  
http://www.ogre3d.org/tikiwiki/tiki-index.php?page=CMake+Quick+Start+Guide&tikiversion=Android
You must add it
<syntaxhighlight lang="cpp">
if((opt = miscParams->find("externalSurface")) != end)
{
  mSurface = (EGLSurface*)(Ogre::StringConverter::parseInt(opt->second));
}
</syntaxhighlight>
and it
<syntaxhighlight lang="cpp">
if (!mEglConfig)
{
  _createInternalResources(mWindow, config);
  mHwGamma = false;
}
       
mEglDisplay = mGLSupport->getGLDisplay();
</syntaxhighlight>
to
/sinbad-ogre-7c776867621e/RenderSystems/GLES2/src/EGL/Android/OgreAndroidEGLWindow.cpp
ogre otherwise not be able to work with sdl2 ,because android can have only one active window .
Also in Ogre 1.9 forgot to add this line to  cmake file
<syntaxhighlight lang="cmake">
if(ANDROID)
  set(CMAKE_FIND_ROOT_PATH ${OGRE_DEPENDENCIES_DIR} "${CMAKE_FIND_ROOT_PATH}")
endif()
</syntaxhighlight>


==== Building MyGUI ====
http://www.openscenegraph.org/index.php/documentation/platform-specifics/android/43-building-openscenegraph-for-android-3-0-2
Then you must build mygui for ogre
http://mygui.info/
And you should remove this line from cmake file
<syntaxhighlight lang="cmake">
add_definitions(-msse)
</syntaxhighlight>


==== Building Bullet ====
http://www.openscenegraph.org/index.php/documentation/platform-specifics/android/178-building-openscenegraph-for-android-3-4
Then you should build bullet. You can use cmake or ndk-build
https://github.com/bulletphysics/bullet3
Android.mk
<syntaxhighlight lang="cmake">
LOCAL_PATH:= $(call my-dir)


include $(CLEAR_VARS)
You must build osg with osgdb_dds osgdb_bmp, osgdb_tga ,osgdb_gif ,osgdb_jpeg, osgdb_png plugins and GLES1 profile !


LOCAL_MODULE := bullet
==== Building MyGUI ====
LOCAL_C_INCLUDES := \
Then you must build mygui with 1 rendering system
  $(LOCAL_PATH)/ \
  $(LOCAL_PATH)/BulletCollision/BroadphaseCollision \
  $(LOCAL_PATH)/BulletCollision/CollisionDispatch \
  $(LOCAL_PATH)/BulletCollision/CollisionShapes \
  $(LOCAL_PATH)/BulletCollision/NarrowPhaseCollision \
  $(LOCAL_PATH)/BulletDynamics/ConstraintSolver \
  $(LOCAL_PATH)/BulletDynamics/Dynamics \
  $(LOCAL_PATH)/BulletDynamics/Vehicle \
  $(LOCAL_PATH)/LinearMath \
  $(LOCAL_PATH)/../libzip/ \
  $(LOCAL_PATH)/../libpng/ \


 
==== Building Bullet ====
LOCAL_ARM_MODE := arm
Then you should build bullet2. You can use cmake android toolchain for it
LOCAL_STATIC_LIBRARIES := libzip libpng 
LOCAL_CFLAGS := $(LOCAL_C_INCLUDES:%=-I%) -O3 -DANDROID_NDK
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -ldl -llog -lGLESv1_CM -lGLESv2 -lz
 
 
LOCAL_SRC_FILES := \
  BulletMultiThreaded/SpuCollisionObjectWrapper.cpp \
BulletMultiThreaded/SpuSampleTask/SpuSampleTask.cpp \
BulletMultiThreaded/SpuLibspe2Support.cpp \
BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuContactResult.cpp \
BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.cpp \
BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuMinkowskiPenetrationDepthSolver.cpp \
BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuCollisionShapes.cpp \
BulletMultiThreaded/btThreadSupportInterface.cpp \
BulletMultiThreaded/SequentialThreadSupport.cpp \
BulletMultiThreaded/SpuGatheringCollisionDispatcher.cpp \
BulletMultiThreaded/Win32ThreadSupport.cpp \
BulletMultiThreaded/SpuFakeDma.cpp \
BulletMultiThreaded/PosixThreadSupport.cpp \
BulletMultiThreaded/SpuCollisionTaskProcess.cpp \
BulletMultiThreaded/SpuContactManifoldCollisionAlgorithm.cpp \
BulletMultiThreaded/SpuSampleTaskProcess.cpp \
BulletMultiThreaded/SpuSampleTask/SpuSampleTask.h \
BulletMultiThreaded/PpuAddressSpace.h \
BulletMultiThreaded/SpuSampleTaskProcess.h \
BulletMultiThreaded/SequentialThreadSupport.h \
BulletMultiThreaded/PlatformDefinitions.h \
BulletMultiThreaded/Win32ThreadSupport.h \
BulletMultiThreaded/SpuContactManifoldCollisionAlgorithm.h \
BulletMultiThreaded/btThreadSupportInterface.h \
BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.h \
BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuConvexPenetrationDepthSolver.h \
BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuPreferredPenetrationDirections.h \
BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuCollisionShapes.h \
BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuLocalSupport.h \
BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuMinkowskiPenetrationDepthSolver.h \
BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuContactResult.h \
BulletMultiThreaded/SpuGatheringCollisionDispatcher.h \
BulletMultiThreaded/SpuFakeDma.h \
BulletMultiThreaded/SpuSync.h \
BulletMultiThreaded/SpuCollisionObjectWrapper.h \
BulletMultiThreaded/SpuDoubleBuffer.h \
BulletMultiThreaded/SpuCollisionTaskProcess.h \
BulletMultiThreaded/PosixThreadSupport.h \
BulletMultiThreaded/SpuLibspe2Support.h \
BulletMultiThreaded/SpuNarrowPhaseCollisionTask/boxBoxDistance.cpp \
BulletMultiThreaded/SpuNarrowPhaseCollisionTask/boxBoxDistance.h \
BulletMultiThreaded/SpuNarrowPhaseCollisionTask/Box.h\
LinearMath/btQuickprof.cpp \
LinearMath/btGeometryUtil.cpp \
LinearMath/btAlignedAllocator.cpp \
LinearMath/btSerializer.cpp \
LinearMath/btConvexHull.cpp \
LinearMath/btPolarDecomposition.cpp \
LinearMath/btVector3.cpp \
LinearMath/btConvexHullComputer.cpp \
LinearMath/btHashMap.h \
LinearMath/btConvexHull.h \
LinearMath/btAabbUtil2.h \
LinearMath/btGeometryUtil.h \
LinearMath/btQuadWord.h \
LinearMath/btPoolAllocator.h \
LinearMath/btPolarDecomposition.h \
LinearMath/btScalar.h \
LinearMath/btMinMax.h \
LinearMath/btVector3.h \
LinearMath/btList.h \
LinearMath/btStackAlloc.h \
LinearMath/btMatrix3x3.h \
LinearMath/btMotionState.h \
LinearMath/btAlignedAllocator.h \
LinearMath/btQuaternion.h \
LinearMath/btAlignedObjectArray.h \
LinearMath/btQuickprof.h \
LinearMath/btSerializer.h \
LinearMath/btTransformUtil.h \
LinearMath/btTransform.h \
LinearMath/btDefaultMotionState.h \
LinearMath/btIDebugDraw.h \
LinearMath/btRandom.h \
BulletCollision/NarrowPhaseCollision/btRaycastCallback.cpp \
BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.cpp \
BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.cpp \
BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.cpp \
BulletCollision/NarrowPhaseCollision/btGjkConvexCast.cpp \
BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp \
BulletCollision/NarrowPhaseCollision/btConvexCast.cpp \
BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.cpp \
BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.cpp \
BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp \
BulletCollision/NarrowPhaseCollision/btGjkEpa2.cpp \
BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.cpp \
BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.cpp \
BulletCollision/CollisionDispatch/btCollisionObject.cpp \
BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.cpp \
BulletCollision/CollisionDispatch/btGhostObject.cpp \
BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.cpp \
BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.cpp \
BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp \
BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.cpp \
BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp \
BulletCollision/CollisionDispatch/btBoxBoxDetector.cpp \
BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.cpp \
BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.cpp \
BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.cpp \
BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp \
BulletCollision/CollisionDispatch/SphereTriangleDetector.cpp \
BulletCollision/CollisionDispatch/btInternalEdgeUtility.cpp \
BulletCollision/CollisionDispatch/btManifoldResult.cpp \
BulletCollision/CollisionDispatch/btCollisionWorld.cpp \
BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.cpp \
BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.cpp \
BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.cpp \
BulletCollision/CollisionDispatch/btUnionFind.cpp \
BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.cpp \
BulletCollision/CollisionDispatch/btHashedSimplePairCache.cpp \
BulletCollision/CollisionDispatch/btCompoundCompoundCollisionAlgorithm.cpp \
BulletCollision/CollisionShapes/btTetrahedronShape.cpp \
BulletCollision/CollisionShapes/btShapeHull.cpp \
BulletCollision/CollisionShapes/btMinkowskiSumShape.cpp \
BulletCollision/CollisionShapes/btCompoundShape.cpp \
BulletCollision/CollisionShapes/btConeShape.cpp \
BulletCollision/CollisionShapes/btConvexPolyhedron.cpp \
BulletCollision/CollisionShapes/btMultiSphereShape.cpp \
BulletCollision/CollisionShapes/btUniformScalingShape.cpp \
BulletCollision/CollisionShapes/btSphereShape.cpp \
BulletCollision/CollisionShapes/btTriangleIndexVertexArray.cpp \
BulletCollision/CollisionShapes/btBvhTriangleMeshShape.cpp \
BulletCollision/CollisionShapes/btTriangleMeshShape.cpp \
BulletCollision/CollisionShapes/btTriangleBuffer.cpp \
BulletCollision/CollisionShapes/btStaticPlaneShape.cpp \
BulletCollision/CollisionShapes/btPolyhedralConvexShape.cpp \
BulletCollision/CollisionShapes/btEmptyShape.cpp \
BulletCollision/CollisionShapes/btCollisionShape.cpp \
BulletCollision/CollisionShapes/btConvexShape.cpp \
BulletCollision/CollisionShapes/btConvex2dShape.cpp \
BulletCollision/CollisionShapes/btConvexInternalShape.cpp \
BulletCollision/CollisionShapes/btConvexHullShape.cpp \
BulletCollision/CollisionShapes/btTriangleCallback.cpp \
BulletCollision/CollisionShapes/btCapsuleShape.cpp \
BulletCollision/CollisionShapes/btConvexTriangleMeshShape.cpp \
BulletCollision/CollisionShapes/btConcaveShape.cpp \
BulletCollision/CollisionShapes/btConvexPointCloudShape.cpp \
BulletCollision/CollisionShapes/btBoxShape.cpp \
BulletCollision/CollisionShapes/btBox2dShape.cpp \
BulletCollision/CollisionShapes/btOptimizedBvh.cpp \
BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp \
BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.cpp \
BulletCollision/CollisionShapes/btCylinderShape.cpp \
BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp \
BulletCollision/CollisionShapes/btStridingMeshInterface.cpp \
BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.cpp \
BulletCollision/CollisionShapes/btTriangleMesh.cpp \
BulletCollision/BroadphaseCollision/btAxisSweep3.cpp \
BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp \
BulletCollision/BroadphaseCollision/btDbvtBroadphase.cpp \
BulletCollision/BroadphaseCollision/btMultiSapBroadphase.cpp \
BulletCollision/BroadphaseCollision/btDispatcher.cpp \
BulletCollision/BroadphaseCollision/btBroadphaseProxy.cpp \
BulletCollision/BroadphaseCollision/btQuantizedBvh.cpp \
BulletCollision/BroadphaseCollision/btCollisionAlgorithm.cpp \
BulletCollision/BroadphaseCollision/btDbvt.cpp \
BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp \
BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h \
BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h \
BulletCollision/NarrowPhaseCollision/btConvexCast.h \
BulletCollision/NarrowPhaseCollision/btGjkEpa2.h \
BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h \
BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.h \
BulletCollision/NarrowPhaseCollision/btPointCollector.h \
BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.h \
BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.h \
BulletCollision/NarrowPhaseCollision/btRaycastCallback.h \
BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.h \
BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h \
BulletCollision/NarrowPhaseCollision/btPersistentManifold.h \
BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h \
BulletCollision/NarrowPhaseCollision/btManifoldPoint.h \
BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h \
BulletCollision/CollisionDispatch/btCollisionObject.h \
BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h \
BulletCollision/CollisionDispatch/btGhostObject.h \
BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.h \
BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.h \
BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.h \
BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.h \
BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.h \
BulletCollision/CollisionDispatch/btCollisionCreateFunc.h \
BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.h \
BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.h \
BulletCollision/CollisionDispatch/btBoxBoxDetector.h \
BulletCollision/CollisionDispatch/btCollisionDispatcher.h \
BulletCollision/CollisionDispatch/SphereTriangleDetector.h \
BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h \
BulletCollision/CollisionDispatch/btUnionFind.h \
BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.h \
BulletCollision/CollisionDispatch/btHashedSimplePairCache.h \
BulletCollision/CollisionDispatch/btCompoundCompoundCollisionAlgorithm.h \
BulletCollision/CollisionDispatch/btSimulationIslandManager.h \
BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h \
BulletCollision/CollisionDispatch/btCollisionWorld.h \
BulletCollision/CollisionDispatch/btInternalEdgeUtility.h \
BulletCollision/CollisionDispatch/btManifoldResult.h \
BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h \
BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.h \
BulletCollision/CollisionDispatch/btCollisionConfiguration.h \
BulletCollision/CollisionShapes/btConvexShape.h \
BulletCollision/CollisionShapes/btConvex2dShape.h \
BulletCollision/CollisionShapes/btTriangleCallback.h \
BulletCollision/CollisionShapes/btPolyhedralConvexShape.h \
BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.h \
BulletCollision/CollisionShapes/btCompoundShape.h \
BulletCollision/CollisionShapes/btBoxShape.h \
BulletCollision/CollisionShapes/btBox2dShape.h \
BulletCollision/CollisionShapes/btMultiSphereShape.h \
BulletCollision/CollisionShapes/btCollisionMargin.h \
BulletCollision/CollisionShapes/btConcaveShape.h \
BulletCollision/CollisionShapes/btConvexTriangleMeshShape.h \
BulletCollision/CollisionShapes/btEmptyShape.h \
BulletCollision/CollisionShapes/btUniformScalingShape.h \
BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h \
BulletCollision/CollisionShapes/btMaterial.h \
BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h \
BulletCollision/CollisionShapes/btTriangleInfoMap.h \
BulletCollision/CollisionShapes/btSphereShape.h \
BulletCollision/CollisionShapes/btConvexPointCloudShape.h \
BulletCollision/CollisionShapes/btCapsuleShape.h \
BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h \
BulletCollision/CollisionShapes/btCollisionShape.h \
BulletCollision/CollisionShapes/btStaticPlaneShape.h \
BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h \
BulletCollision/CollisionShapes/btTriangleMeshShape.h \
BulletCollision/CollisionShapes/btStridingMeshInterface.h \
BulletCollision/CollisionShapes/btTriangleMesh.h \
BulletCollision/CollisionShapes/btTriangleBuffer.h \
BulletCollision/CollisionShapes/btShapeHull.h \
BulletCollision/CollisionShapes/btMinkowskiSumShape.h \
BulletCollision/CollisionShapes/btOptimizedBvh.h \
BulletCollision/CollisionShapes/btTriangleShape.h \
BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.h \
BulletCollision/CollisionShapes/btCylinderShape.h \
        BulletCollision/CollisionShapes/btTetrahedronShape.h \
        BulletCollision/CollisionShapes/btConvexInternalShape.h \
BulletCollision/CollisionShapes/btConeShape.h \
BulletCollision/CollisionShapes/btConvexHullShape.h \
BulletCollision/BroadphaseCollision/btAxisSweep3.h \
BulletCollision/BroadphaseCollision/btDbvtBroadphase.h \
BulletCollision/BroadphaseCollision/btSimpleBroadphase.h \
BulletCollision/BroadphaseCollision/btMultiSapBroadphase.h \
BulletCollision/BroadphaseCollision/btDbvt.h \
BulletCollision/BroadphaseCollision/btOverlappingPairCallback.h \
BulletCollision/BroadphaseCollision/btDispatcher.h \
BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h \
BulletCollision/BroadphaseCollision/btBroadphaseProxy.h \
BulletCollision/BroadphaseCollision/btOverlappingPairCache.h \
BulletCollision/BroadphaseCollision/btBroadphaseInterface.h \
        BulletCollision/BroadphaseCollision/btQuantizedBvh.h \
        BulletCollision/Gimpact/btGImpactBvh.cpp\
                BulletCollision/Gimpact/btGImpactQuantizedBvh.cpp\
                BulletCollision/Gimpact/btTriangleShapeEx.cpp\
                BulletCollision/Gimpact/btGImpactCollisionAlgorithm.cpp\
                BulletCollision/Gimpact/btGImpactShape.cpp\
                BulletCollision/Gimpact/gim_box_set.cpp\
                BulletCollision/Gimpact/gim_contact.cpp\
                BulletCollision/Gimpact/gim_memory.cpp\
                BulletCollision/Gimpact/gim_tri_collision.cpp \
        BulletDynamics/Dynamics/btRigidBody.cpp \
        BulletDynamics/Dynamics/btSimpleDynamicsWorld.cpp \
        BulletDynamics/Dynamics/Bullet-C-API.cpp \
        BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp \
        BulletDynamics/ConstraintSolver/btFixedConstraint.cpp \
        BulletDynamics/ConstraintSolver/btGearConstraint.cpp \
        BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp \
        BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.cpp \
        BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.cpp \
        BulletDynamics/ConstraintSolver/btPoint2PointConstraint.cpp \
        BulletDynamics/ConstraintSolver/btTypedConstraint.cpp \
        BulletDynamics/ConstraintSolver/btContactConstraint.cpp \
        BulletDynamics/ConstraintSolver/btSliderConstraint.cpp \
        BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp \
        BulletDynamics/ConstraintSolver/btHingeConstraint.cpp \
        BulletDynamics/ConstraintSolver/btHinge2Constraint.cpp \
        BulletDynamics/ConstraintSolver/btUniversalConstraint.cpp \
        BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp \
        BulletDynamics/Vehicle/btWheelInfo.cpp \
        BulletDynamics/Vehicle/btRaycastVehicle.cpp \
        BulletDynamics/Character/btKinematicCharacterController.cpp \
        BulletDynamics/Character/btKinematicCharacterController.h \
        BulletDynamics/Character/btCharacterControllerInterface.h \
        BulletDynamics/Dynamics/btActionInterface.h \
        BulletDynamics/Dynamics/btSimpleDynamicsWorld.h \
BulletDynamics/Dynamics/btRigidBody.h \
        BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h \
BulletDynamics/Dynamics/btDynamicsWorld.h \
BulletDynamics/ConstraintSolver/btSolverBody.h \
BulletDynamics/ConstraintSolver/btConstraintSolver.h \
BulletDynamics/ConstraintSolver/btConeTwistConstraint.h \
BulletDynamics/ConstraintSolver/btTypedConstraint.h \
BulletDynamics/ConstraintSolver/btContactSolverInfo.h \
BulletDynamics/ConstraintSolver/btContactConstraint.h \
BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h \
BulletDynamics/ConstraintSolver/btJacobianEntry.h \
BulletDynamics/ConstraintSolver/btSolverConstraint.h \
BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h \
BulletDynamics/ConstraintSolver/btGearConstraint.h \
BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h \
BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.h \
BulletDynamics/ConstraintSolver/btSliderConstraint.h \
BulletDynamics/ConstraintSolver/btHingeConstraint.h \
BulletDynamics/ConstraintSolver/btHinge2Constraint.h \
BulletDynamics/ConstraintSolver/btUniversalConstraint.h \
BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.h \
BulletDynamics/Vehicle/btVehicleRaycaster.h \
BulletDynamics/Vehicle/btRaycastVehicle.h \
BulletDynamics/Vehicle/btWheelInfo.h \
BulletDynamics/Featherstone/btMultiBody.cpp \
        BulletDynamics/Featherstone/btMultiBodyConstraintSolver.cpp \
BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp \
BulletDynamics/Featherstone/btMultiBodyJointMotor.cpp \
BulletDynamics/Featherstone/btMultiBodyJointLimitConstraint.cpp \
BulletDynamics/Featherstone/btMultiBodyJointMotor.h \
                BulletDynamics/Featherstone/btMultiBodyJointLimitConstraint.h \
BulletDynamics/Featherstone/btMultiBody.h \
BulletDynamics/Featherstone/btMultiBodyConstraintSolver.h \
BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.h \
BulletDynamics/Featherstone/btMultiBodyLink.h \
BulletDynamics/Featherstone/btMultiBodyLinkCollider.h \
BulletDynamics/Featherstone/btMultiBodySolverConstraint.h \
BulletDynamics/Featherstone/btMultiBodyConstraint.h \
BulletDynamics/Featherstone/btMultiBodyPoint2Point.h \
BulletDynamics/Featherstone/btMultiBodyConstraint.cpp \
BulletDynamics/Featherstone/btMultiBodyPoint2Point.cpp \
BulletDynamics/MLCPSolvers/btDantzigLCP.cpp \
                BulletDynamics/MLCPSolvers/btMLCPSolver.cpp \
BulletDynamics/MLCPSolvers/btDantzigLCP.h \
        BulletDynamics/MLCPSolvers/btDantzigSolver.h \
        BulletDynamics/MLCPSolvers/btMLCPSolver.h \
        BulletDynamics/MLCPSolvers/btMLCPSolverInterface.h \
        BulletDynamics/MLCPSolvers/btPATHSolver.h \
        BulletDynamics/MLCPSolvers/btSolveProjectedGaussSeidel.h \
        BulletSoftBody/btDefaultSoftBodySolver.cpp \
BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.cpp \
BulletSoftBody/btSoftBody.cpp \
BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp \
BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp \
BulletSoftBody/btSoftRigidDynamicsWorld.cpp \
BulletSoftBody/btSoftBodyHelpers.cpp \
BulletSoftBody/btSoftSoftCollisionAlgorithm.cpp \
BulletSoftBody/btSparseSDF.h \
BulletSoftBody/btSoftRigidCollisionAlgorithm.h \
BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.h \
BulletSoftBody/btSoftBody.h \
BulletSoftBody/btSoftSoftCollisionAlgorithm.h \
BulletSoftBody/btSoftBodyInternals.h \
BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.h \
BulletSoftBody/btSoftRigidDynamicsWorld.h \
BulletSoftBody/btSoftBodyHelpers.h
 
include $(BUILD_SHARED_LIBRARY)
</syntaxhighlight>


==== Building OpenAL ====
==== Building OpenAL ====
Line 461: Line 58:
./configure \
./configure \
     --prefix=$(pwd)/android/$CPU  \
     --prefix=$(pwd)/android/$CPU  \
     --enable-shared \
     --enable-static \
    --disable-static \
     --disable-doc \
     --disable-doc \
     --disable-ffmpeg \
     --disable-ffmpeg \
Line 485: Line 81:


=== Building OpenMW ===
=== Building OpenMW ===
then I started to build OpenMW. At first you must remove all lines associated with x server in FindOGRE.cmake
Then I started to build OpenMW.  
and add GLES2 instead GLES .
I copied all  libraries  in one folder . For example AndroidDependencies, and build openmw like this
For example
<syntaxhighlight lang="cmake">
ogre_find_plugin(RenderSystem_GLES2 OgreGLES2RenderSystem.h RenderSystems/GLES2/include)
</syntaxhighlight>
next I add this to main cmake file:
<syntaxhighlight lang="cmake">
set(CMAKE_FIND_ROOT_PATH ${OPENMW_DEPENDENCIES_DIR} "${CMAKE_FIND_ROOT_PATH}")
</syntaxhighlight>


And now I can build OpenMW with it
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
cmake /home/sylar/openmw -DCMAKE_TOOLCHAIN_FILE=/home/sylar/android-cmake-master/android.toolchain.cmake -DOPENMW_DEPENDENCIES_DIR=/home/sylar/AndroidDependencies -DANDROID_NATIVE_API_LEVEL=14
cmake /home/sandstranger/Android/openmw -DCMAKE_TOOLCHAIN_FILE=/home/sandstranger/Android/android-cmake-master/android.toolchain.cmake -DANDROID_TOOLCHAIN_NAME=aarch64-linux-android-4.9 -DANDROID_NATIVE_API_LEVEL=android-21 -DANDROID_NDK=/home/sandstranger/Android/crystax-ndk-10.1.0/ -DANDROID_ABI=arm64-v8a -DOPENMW_DEPENDENCIES_DIR=/home/sandstranger/Android/AndroidDependenciesARMV8 -DOSG_PLUGINS_DIR=/home/sandstranger/Android/AndroidDependenciesARMV8/lib/osgPlugins-3.5.1 -DBUILD_BSATOOL=OFF -DBUILD_ESMTOOL=OFF -DBUILD_LAUNCHER=OFF -DBUILD_MWINIIMPORTER=OFF -DBUILD_ESSIMPORTER=OFF -DBUILD_OPENCS=OFF -DBUILD_WIZARD=OFF -DBUILD_MYGUI_PLUGIN=OFF -DMYGUI_STATIC=ON -DBOOST_STATIC=ON
</syntaxhighlight>
</syntaxhighlight>
next I remove line from main cmake file:
<syntaxhighlight lang="cmake">
add_static_ogre_plugin(RenderSystem_GL)
</syntaxhighlight>
and add it
<syntaxhighlight lang="cmake">
add_static_ogre_plugin(RenderSystem_GLES2)
</syntaxhighlight>
Next I add I remove line
<syntaxhighlight lang="cmake">
add_library(openmw executable
    ${OPENMW_LIBS} ${OPENMW_LIBS_HEADER}
    ${OPENMW_FILES}
    ${GAME} ${GAME_HEADER}
    ${APPLE_BUNDLE_RESOURCES}
)
</syntaxhighlight>
in /openmw/apps/openmw/Cmakelists.txt
and add it
<syntaxhighlight lang="cmake">
add_library(main SHARED
    ${OPENMW_LIBS} ${OPENMW_LIBS_HEADER}
    ${OPENMW_FILES}
    ${GAME} ${GAME_HEADER}
    ${APPLE_BUNDLE_RESOURCES}
)
</syntaxhighlight>
also I add it
<syntaxhighlight lang="cmake">
set(GAME
    main.cpp
    SDL_android_main.c
    engine.cpp
)
#//if(NOT WIN32)
# //  set(GAME ${GAME} crashcatcher.cpp)
#endif()
# Main executable
set(BOOST_COMPONENTS system filesystem program_options thread wave atomic)
target_link_libraries(main
${OGRE_STATIC_PLUGINS}
#RenderSystem_GLES2Static
#//Plugin_OctreeSceneManagerStatic
#//Plugin_ParticleFXStatic
#  ${OGRE_Plugin_OctreeSceneManager_LIBRARY_REL} 
# ${OGRE_Plugin_ParticleFX_LIBRARY_REL}   
#${OGRE_RenderSystem_GLES2_LIBRARY_REL} 
)
target_link_libraries(main
EGL
android
log
dl
#  ${OGRE_Plugin_OctreeSceneManager_LIBRARY_REL} 
# ${OGRE_Plugin_ParticleFX_LIBRARY_REL}   
#${OGRE_RenderSystem_GLES2_LIBRARY_REL} 
)
target_link_libraries(main
boost_atomic
boost_chrono
boost_date_time
boost_filesystem
boost_program_options
boost_system
boost_thread
boost_wave
#  ${OGRE_Plugin_OctreeSceneManager_LIBRARY_REL} 
# ${OGRE_Plugin_ParticleFX_LIBRARY_REL}   
#${OGRE_RenderSystem_GLES2_LIBRARY_REL} 
)
target_link_libraries(main
FreeImage
freetype
#  ${OGRE_Plugin_OctreeSceneManager_LIBRARY_REL} 
# ${OGRE_Plugin_ParticleFX_LIBRARY_REL}   
#${OGRE_RenderSystem_GLES2_LIBRARY_REL} 
)
target_link_libraries(main
OgreMainStatic
#  ${OGRE_Plugin_OctreeSceneManager_LIBRARY_REL} 
# ${OGRE_Plugin_ParticleFX_LIBRARY_REL}   
#${OGRE_RenderSystem_GLES2_LIBRARY_REL} 
)


target_link_libraries(main
-O2 or -Os optimal optimizations flags for building . Without this flags fps will be very low
MyGUI.OgrePlatform
MyGUIEngineStatic
Plugin_StrangeButtonStatic
cpufeatures
#  ${OGRE_Plugin_OctreeSceneManager_LIBRARY_REL} 
# ${OGRE_Plugin_ParticleFX_LIBRARY_REL}   
#${OGRE_RenderSystem_GLES2_LIBRARY_REL} 
)
</syntaxhighlight>
Next I changed paths in: /openmw/components/files/linuxpath.cpp
for example
<syntaxhighlight lang="cpp">
return getEnv("XDG_DATA_HOME", "/sdcard/morrowind/share") / mName;
</syntaxhighlight>
Next I add patch in ogreinit.cpp and ogreinit.hpp
I comment it
<syntaxhighlight lang="cpp">
// Set up logging first
  //    new Ogre::LogManager;
    //  Ogre::Log *log = Ogre::LogManager::getSingleton().createLog(logPath);


  // #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
After builing openmw library, you must copy all the libraries to libs folder in the java project folder
        // Use custom listener only on Windows
      // log->addListener(new LogListener(logPath));
  //  #endif


        // Disable logging to cout/cerr
For example :  /eclipse-project/app/src/main/jniLibs/armeabi-v7a
      // log->setDebugOutputEnabled(false);
</syntaxhighlight>
and change plugin gl on gles2
<syntaxhighlight lang="cpp">
#ifdef ENABLE_PLUGIN_GLES2
# include "OgreGLES2Plugin.h"
#endif


#ifdef ENABLE_PLUGIN_GLES2
Then you must import this [https://github.com/OpenMW/eclipse-project java project] in android-studio , which included with the android sdk.
        Ogre::GLES2Plugin* mGLES2Plugin;
#endif
</syntaxhighlight>
Next you must add it to
<syntaxhighlight lang="cpp">
opt["externalWindowHandle"] = Ogre::StringConverter::toString((int) wmInfo.info.android.window );
opt["externalSurface"] = Ogre::StringConverter::toString((int) wmInfo.info.android.surface );
</syntaxhighlight>
  /openmw/extern/sdl4ogre/sdlwindowhelper.cpp
Next I add this file to OpenMW
SDL_android_main.c
With it, I calle native c code from java wtih help jni .
I rename main function in main.cpp to SDL_main .


Now you can build openmw lib
Also you need to import the configuration files from desktop openmw version.


Next for eclipse project I use android-project example from SDL
=== Building Gotchas ===
and use README-android.txt tutorial from sdl


==== Disable mipmaps ====
<pre>
CMake Error at /home/bcurtis/workspace/OpenMW/android/android-cmake/android.toolchain.cmake:429 (math):
  math cannot parse the expression: "+0": syntax error, unexpected exp_PLUS,
  expecting exp_OPENPARENT or exp_NUMBER (1)
Call Stack (most recent call first):
  /home/bcurtis/workspace/OpenMW/android/build/CMakeFiles/3.2.2/CMakeSystem.cmake:6 (include)
  CMakeLists.txt:1 (project)
</pre>


Add this line to all textures_units
Don't panic, this can be worked around with the removal (or comment '#') of the non-critical line in the file android-cmake/android.toolchain.cmake on line 429.
<syntaxhighlight lang="cpp">
filtering linear linear none
</syntaxhighlight>

Latest revision as of 11:12, 30 December 2015

Android build OpenMW

Preparation of building environment

Before you start building OpenMW on Android you have to do few steps of preparation:

  1. Download Crystax NDK

Openmw building without errors only on crystax ndk 10.1.0 version.

  1. Download Cmake for Android (it will be used for OpenMW and its dependencies compilation)
  2. Download java
  3. Download all OpenMW dependencies, ie:

Prebuilt openmw dependencies for armv7 arch https://drive.google.com/file/d/0B5mOME9qjLFuckRrSWd6ZTMtZGM/view?usp=sharing

Prebuilt openmw dependencies for armv8 arch https://drive.google.com/file/d/0B5mOME9qjLFuVkpRc2FWb3h1SW8/view?usp=sharing

Compilation of OpenMW dependencies

Then you should add PATH for crystax ndk and google sdk.

Building OSG

Next you must build OSG from source. I build osg with this tutorials .

http://www.openscenegraph.org/index.php/documentation/platform-specifics/android/43-building-openscenegraph-for-android-3-0-2

http://www.openscenegraph.org/index.php/documentation/platform-specifics/android/178-building-openscenegraph-for-android-3-4

You must build osg with osgdb_dds osgdb_bmp, osgdb_tga ,osgdb_gif ,osgdb_jpeg, osgdb_png plugins and GLES1 profile !

Building MyGUI

Then you must build mygui with 1 rendering system

Building Bullet

Then you should build bullet2. You can use cmake android toolchain for it

Building OpenAL

Then you must build openal . http://repo.or.cz/w/openal-soft/android.git

Building Qt (optional)

Note: Qt is only used by the launcher and OpenMW-CS, and can be skipped. To build Qt 4.8 for android: http://necessitas.kde.org/ I used this tutorial for building: https://community.kde.org/Necessitas/CompileQtFramework

Building FFmpeg

Then you must build ffmpeg . Important! You must use ffmpeg 1.26: http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/

my script for build

./configure \
    --prefix=$(pwd)/android/$CPU  \
    --enable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-doc \
    --disable-symver \
    --cross-prefix=/home/sylar/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/arm-linux-androideabi- \
    --target-os=linux \
    --arch=arm \
    --enable-asm \
    --enable-cross-compile \
    --sysroot=/home/sylar/android-ndk-r9d/platforms/android-19/arch-arm \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS"

Building SDL2

Then you must build SDL2: https://www.libsdl.org/hg.php I used SDL2 mercurial latest source.

Building OpenMW

Then I started to build OpenMW. I copied all libraries in one folder . For example AndroidDependencies, and build openmw like this

cmake /home/sandstranger/Android/openmw -DCMAKE_TOOLCHAIN_FILE=/home/sandstranger/Android/android-cmake-master/android.toolchain.cmake -DANDROID_TOOLCHAIN_NAME=aarch64-linux-android-4.9 -DANDROID_NATIVE_API_LEVEL=android-21 -DANDROID_NDK=/home/sandstranger/Android/crystax-ndk-10.1.0/ -DANDROID_ABI=arm64-v8a -DOPENMW_DEPENDENCIES_DIR=/home/sandstranger/Android/AndroidDependenciesARMV8 -DOSG_PLUGINS_DIR=/home/sandstranger/Android/AndroidDependenciesARMV8/lib/osgPlugins-3.5.1 -DBUILD_BSATOOL=OFF -DBUILD_ESMTOOL=OFF -DBUILD_LAUNCHER=OFF -DBUILD_MWINIIMPORTER=OFF -DBUILD_ESSIMPORTER=OFF -DBUILD_OPENCS=OFF -DBUILD_WIZARD=OFF -DBUILD_MYGUI_PLUGIN=OFF -DMYGUI_STATIC=ON -DBOOST_STATIC=ON

-O2 or -Os optimal optimizations flags for building . Without this flags fps will be very low

After builing openmw library, you must copy all the libraries to libs folder in the java project folder

For example : /eclipse-project/app/src/main/jniLibs/armeabi-v7a

Then you must import this java project in android-studio , which included with the android sdk.

Also you need to import the configuration files from desktop openmw version.

Building Gotchas

CMake Error at /home/bcurtis/workspace/OpenMW/android/android-cmake/android.toolchain.cmake:429 (math):
  math cannot parse the expression: "+0": syntax error, unexpected exp_PLUS,
  expecting exp_OPENPARENT or exp_NUMBER (1)
Call Stack (most recent call first):
  /home/bcurtis/workspace/OpenMW/android/build/CMakeFiles/3.2.2/CMakeSystem.cmake:6 (include)
  CMakeLists.txt:1 (project)

Don't panic, this can be worked around with the removal (or comment '#') of the non-critical line in the file android-cmake/android.toolchain.cmake on line 429.