[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47119] branches/soc-2012-swiss_cheese: This is essentually enables Android build using cmake on linux

Alexander Kuznetsov kuzsasha at gmail.com
Mon May 28 18:09:45 CEST 2012


Revision: 47119
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47119
Author:   alexk
Date:     2012-05-28 16:09:44 +0000 (Mon, 28 May 2012)
Log Message:
-----------
This is essentually enables Android build using cmake on linux
Mac might be used too, but you need to modify CmakeList
Full instructions will be posted later
It still kinda complicated because it involves a lot of manual steps
WITH_ANDROID - to enable
Libs comming up

Modified Paths:
--------------
    branches/soc-2012-swiss_cheese/CMakeLists.txt
    branches/soc-2012-swiss_cheese/extern/CMakeLists.txt
    branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_DisplayManagerSDL.h
    branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_SystemSDL.h
    branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_WindowSDL.h
    branches/soc-2012-swiss_cheese/source/blender/blenlib/intern/path_util.c
    branches/soc-2012-swiss_cheese/source/blender/editors/include/BIF_gl.h
    branches/soc-2012-swiss_cheese/source/blender/editors/space_file/fsmenu.c
    branches/soc-2012-swiss_cheese/source/blender/makesdna/intern/CMakeLists.txt
    branches/soc-2012-swiss_cheese/source/blender/makesrna/intern/CMakeLists.txt
    branches/soc-2012-swiss_cheese/source/blender/makesrna/intern/makesrna.c
    branches/soc-2012-swiss_cheese/source/blenderplayer/CMakeLists.txt
    branches/soc-2012-swiss_cheese/source/creator/CMakeLists.txt
    branches/soc-2012-swiss_cheese/source/creator/creator.c
    branches/soc-2012-swiss_cheese/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
    branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_BlenderSceneConverter.cpp

Modified: branches/soc-2012-swiss_cheese/CMakeLists.txt
===================================================================
--- branches/soc-2012-swiss_cheese/CMakeLists.txt	2012-05-28 16:06:38 UTC (rev 47118)
+++ branches/soc-2012-swiss_cheese/CMakeLists.txt	2012-05-28 16:09:44 UTC (rev 47119)
@@ -259,6 +259,11 @@
 mark_as_advanced(WITH_ASSERT_ABORT)
 
 
+
+option(WITH_ANDROID "Compiles Blender for Android" OFF)
+mark_as_advanced(WITH_ANDROID)
+
+
 if(APPLE)
 	if(NOT CMAKE_OSX_ARCHITECTURES)
 		set(CMAKE_OSX_ARCHITECTURES x86_64 CACHE STRING
@@ -454,6 +459,18 @@
 #-----------------------------------------------------------------------------
 #Platform specifics
 
+
+
+if(WITH_ANDROID)
+add_definitions(-DWITH_ANDROID)
+add_definitions(-DNDEBUG)
+
+
+set(ANDROID_TARGET "armv7-a_9"  CACHE STRING "Processor Target")
+
+endif()
+
+
 if(UNIX AND NOT APPLE)
 
 	# needed for ubuntu 11.04
@@ -462,7 +479,10 @@
 	endif()
 
 	# set lib directory if it exists
-	if(CMAKE_SYSTEM_NAME MATCHES "Linux")
+	if(WITH_ANDROID)
+		set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/android/${ANDROID_TARGET})
+		set(ANDROID_PROJ ${LIBDIR}/aghosty-sdl CACHE STRING  "boo")
+	elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
 		if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
 			set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/linux64)
 		else()
@@ -474,12 +494,60 @@
 		endif()
 	endif()
 
-	find_package(JPEG REQUIRED)
-	find_package(PNG REQUIRED)
-	find_package(ZLIB REQUIRED)
-	find_package(Freetype REQUIRED)
 
-	if(WITH_PYTHON)
+	if(WITH_ANDROID)
+		
+		
+
+	set(JPEG "${LIBDIR}/jpeg")
+	set(JPEG_INCLUDE_DIR "${JPEG}/include")
+	set(JPEG_LIBPATH ${JPEG}/lib)
+	set(JPEG_LIBRARIES ${JPEG_LIBPATH}/libjpeg.so)
+
+		
+		set(PNG "${LIBDIR}/png")
+		set(PNG_INCLUDE_DIR "${PNG}/include")
+		set(PNG_LIBPATH ${PNG}/lib) 
+		set(PNG_LIBRARIES ${PNG_LIBPATH}/libpng15.so.15.9.0)
+
+		set(ZLIB_INCLUDE_DIRS ${LIBDIR}/zlib/include)
+
+		set(ZLIB_LIBRARIES ${LIBDIR}/zlib/lib/libz.so.1)
+
+		set(SDL_INCLUDE_DIR ${LIBDIR}/aghosty-sdl/jni/SDL/include/)
+		
+		set(SDLMAIN_LIBRARY ${LIBDIR}/aghosty-sdl/jni/SDL/src/main/android/libSDLmain.a)
+		set(SDL_LIBRARY "${SDLMAIN_LIBRARY};${LIBDIR}/aghosty-sdl/libs/armeabi/libSDL.so")
+		set(SDL_LIBPATH ${LIBDIR}/aghosty-sdl/libs/armeabi/)
+
+
+		set(FREETYPE ${LIBDIR}/freetype)
+		set(FREETYPE_INCLUDE_DIRS
+			${LIBDIR}/freetype/include
+			${LIBDIR}/freetype/include/freetype2
+		)
+		set(FREETYPE_LIBRARY ${LIBDIR}/freetype/lib/libfreetype.so.6)
+
+		if(WITH_PYTHON)
+			# normally cached but not since we include them with blender
+			set(PYTHON_VERSION 3.2) #  CACHE STRING)
+			set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}m")  # CACHE PATH)
+			set(PYTHON_LIBRARY "${LIBDIR}/python/lib/libpython3.2m.so.1.0")  # CACHE FILEPATH)
+
+			# uncached vars
+			set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
+			set(PYTHON_LIBRARIES  "${PYTHON_LIBRARY}")
+		endif()
+
+    
+	else()
+		find_package(JPEG REQUIRED)
+		find_package(PNG REQUIRED)
+		find_package(ZLIB REQUIRED)
+		find_package(Freetype REQUIRED)
+	endif()
+
+	if(WITH_PYTHON AND NOT WITH_ANDROID)
 		# No way to set py32. remove for now.
 		# find_package(PythonLibs)
 
@@ -518,7 +586,7 @@
 		endif()
 	endif()
 
-	if(WITH_SDL)
+	if(WITH_SDL AND NOT WITH_ANDROID)
 		find_package(SDL)
 		mark_as_advanced(
 			SDLMAIN_LIBRARY
@@ -664,7 +732,10 @@
 	endif()
 
 	# OpenSuse needs lutil, ArchLinux not, for now keep, can avoid by using --as-needed
-	set(PLATFORM_LINKLIBS "-lutil -lc -lm -lpthread -lstdc++")
+	set(PLATFORM_LINKLIBS "-lc -lm -lstdc++")
+	if(NOT WITH_ANDROID)
+		set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS} -lutil -lpthread")
+	endif()
 
 	if((NOT WITH_HEADLESS) AND (NOT WITH_GHOST_SDL))
 		find_package(X11 REQUIRED)
@@ -699,8 +770,14 @@
 		endif()
 	endif()
 
-	set(PLATFORM_LINKFLAGS "-pthread")
+	if(WITH_ANDROID)
+		set(PLATFORM_LINKFLAGS "-lGLESv1_CM")
+	else()
+		set(PLATFORM_LINKFLAGS "-pthread")
+	endif()
 
+
+
 	# lfs on glibc, all compilers should use
 	add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE)
 
@@ -1508,7 +1585,13 @@
 
 #-----------------------------------------------------------------------------
 # Configure OpenGL.
+if(WITH_ANDROID)
+set(OPENGL_INCLUDE_DIR ${LIBDIR}/fakeGL/)
+set(OPENGL_gl_LIBRARY ${OPENGL_INCLUDE_DIR}/libGLarm.so)
+set(OPENGL_glu_LIBRARY ${OPENGL_INCLUDE_DIR}/libGLUarm.so)
+else()
 find_package(OpenGL)
+endif()
 blender_include_dirs_sys("${OPENGL_INCLUDE_DIR}")
 # unset(OPENGL_LIBRARIES CACHE) # not compat with older cmake
 # unset(OPENGL_xmesa_INCLUDE_DIR CACHE) # not compat with older cmake
@@ -1539,7 +1622,11 @@
 
 if(WITH_BUILTIN_GLEW)
 	# set(GLEW_LIBRARY "")  # unused
-	set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew/include")
+	if(WITH_ANDROID)
+		set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew-android/include")
+	elseif()
+		set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew/include")
+	endif()
 else()
 	find_package(GLEW)
 

Modified: branches/soc-2012-swiss_cheese/extern/CMakeLists.txt
===================================================================
--- branches/soc-2012-swiss_cheese/extern/CMakeLists.txt	2012-05-28 16:06:38 UTC (rev 47118)
+++ branches/soc-2012-swiss_cheese/extern/CMakeLists.txt	2012-05-28 16:09:44 UTC (rev 47119)
@@ -42,8 +42,10 @@
 
 if(WITH_BUILTIN_GLEW)
 if(WITH_ANDROID)
+message(good)
 	add_subdirectory(glew-android)
 elseif()
+message(bad)
 	add_subdirectory(glew)
 endif()
 endif()

Modified: branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_DisplayManagerSDL.h
===================================================================
--- branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_DisplayManagerSDL.h	2012-05-28 16:06:38 UTC (rev 47118)
+++ branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_DisplayManagerSDL.h	2012-05-28 16:09:44 UTC (rev 47119)
@@ -34,7 +34,8 @@
 	#include "SDL.h"
 }
 
-#if !SDL_VERSION_ATLEAST(2, 0, 0)
+
+#if !SDL_VERSION_ATLEAST(2, 0, 0) && !defined(WITH_ANDROID)
 #  error "SDL 2.0 or newer is needed to build with Ghost"
 #endif
 

Modified: branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_SystemSDL.h
===================================================================
--- branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_SystemSDL.h	2012-05-28 16:06:38 UTC (rev 47118)
+++ branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_SystemSDL.h	2012-05-28 16:09:44 UTC (rev 47119)
@@ -39,7 +39,7 @@
 	#include "SDL.h"
 }
 
-#if !SDL_VERSION_ATLEAST(2, 0, 0)
+#if !SDL_VERSION_ATLEAST(2, 0, 0) && !defined(WITH_ANDROID)
 #  error "SDL 2.0 or newer is needed to build with Ghost"
 #endif
 

Modified: branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_WindowSDL.h
===================================================================
--- branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_WindowSDL.h	2012-05-28 16:06:38 UTC (rev 47118)
+++ branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_WindowSDL.h	2012-05-28 16:09:44 UTC (rev 47119)
@@ -36,7 +36,7 @@
 	#include "SDL.h"
 }
 
-#if !SDL_VERSION_ATLEAST(2, 0, 0)
+#if !SDL_VERSION_ATLEAST(2, 0, 0) && !defined(WITH_ANDROID)
 #  error "SDL 2.0 or newer is needed to build with Ghost"
 #endif
 

Modified: branches/soc-2012-swiss_cheese/source/blender/blenlib/intern/path_util.c
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/blenlib/intern/path_util.c	2012-05-28 16:06:38 UTC (rev 47118)
+++ branches/soc-2012-swiss_cheese/source/blender/blenlib/intern/path_util.c	2012-05-28 16:09:44 UTC (rev 47119)
@@ -1786,7 +1786,13 @@
 	const char *separator = ":";
 #endif
 
+#ifdef WITH_ANDROID
+/* probably we should use better method */
+    BLI_strncpy(fullname, "/data/data/org.blender.app/blender", maxlen);
+    return;
 	
+#endif
+	
 #ifdef WITH_BINRELOC
 	/* linux uses binreloc since argv[0] is not reliable, call br_init( NULL ) first */
 	path = br_find_exe(NULL);

Modified: branches/soc-2012-swiss_cheese/source/blender/editors/include/BIF_gl.h
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/editors/include/BIF_gl.h	2012-05-28 16:06:38 UTC (rev 47118)
+++ branches/soc-2012-swiss_cheese/source/blender/editors/include/BIF_gl.h	2012-05-28 16:09:44 UTC (rev 47119)
@@ -34,7 +34,6 @@
 #define __BIF_GL_H__
 
 #include "GL/glew.h"
-
 /*
  * these should be phased out. cpack should be replaced in
  * code with calls to glColor3ub. - zr
@@ -47,8 +46,13 @@
  * */
 #define cpack(x)    glColor3ub( ((x) & 0xFF), (((x) >> 8) & 0xFF), (((x) >> 16) & 0xFF) )
 
+#ifdef WITH_ANDROID
+#define glMultMatrixf(x)  fake_glMultMatrixf( (float *)(x))
+#define glLoadMatrixf(x)  fake_glLoadMatrixf( (float *)(x))
+#else
 #define glMultMatrixf(x)  glMultMatrixf( (float *)(x))
 #define glLoadMatrixf(x)  glLoadMatrixf( (float *)(x))
+#endif
 
 #endif /* #ifdef __BIF_GL_H__ */
 

Modified: branches/soc-2012-swiss_cheese/source/blender/editors/space_file/fsmenu.c
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/editors/space_file/fsmenu.c	2012-05-28 16:06:38 UTC (rev 47118)
+++ branches/soc-2012-swiss_cheese/source/blender/editors/space_file/fsmenu.c	2012-05-28 16:09:44 UTC (rev 47119)
@@ -486,7 +486,8 @@
 
 		{
 			int found = 0;
-#ifdef __linux__
+/* Doesn't yet work with Android */
+#if defined(__linux__) && !defined(WITH_ANDROID)
 			/* loop over mount points */
 			struct mntent *mnt;
 			int len;

Modified: branches/soc-2012-swiss_cheese/source/blender/makesdna/intern/CMakeLists.txt
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/makesdna/intern/CMakeLists.txt	2012-05-28 16:06:38 UTC (rev 47118)
+++ branches/soc-2012-swiss_cheese/source/blender/makesdna/intern/CMakeLists.txt	2012-05-28 16:09:44 UTC (rev 47119)
@@ -51,16 +51,28 @@
 
 # SRC_DNA_INC is defined in the parent dir
 
+if(WITH_ANDROID)
+add_library(makesdna SHARED ${SRC} ${SRC_DNA_INC})
+else()
 add_executable(makesdna ${SRC} ${SRC_DNA_INC})
+endif()
 
 # Output dna.c
+if(WITH_ANDROID)
 add_custom_command(
 	OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/dna.c
+	WORKING_DIRECTORY ${ANDROID_PROJ}
+	COMMAND ${ANDROID_PROJ}/makesdna.sh ${CMAKE_BINARY_DIR}/lib/libmakesdna.so ${CMAKE_CURRENT_BINARY_DIR}/dna.c  ${CMAKE_SOURCE_DIR}/source/blender/makesdna/
+	DEPENDS makesdna
+)
+else()
+add_custom_command(
+	OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/dna.c

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list