Browse Source

Now it's compiling on Android

Panagiotis Christopoulos Charitos 12 years ago
parent
commit
e3e45fe9fc
5 changed files with 57 additions and 28 deletions
  1. 8 3
      CMakeLists.txt
  2. 8 6
      src/CMakeLists.txt
  3. 8 5
      src/core/App.cpp
  4. 2 1
      src/core/NativeWindowAndroid.cpp
  5. 31 13
      src/util/FilePosix.cpp

+ 8 - 3
CMakeLists.txt

@@ -66,6 +66,7 @@ OPTION(ANKI_VALGRIND_HAPPY "Make valgrind happy" OFF)
 # Options that affect anki and extern
 #
 
+SET(CXX_FLAGS "")
 SET(COMPILER_FLAGS "")
 SET(LINKER_FLAGS "")
 
@@ -121,9 +122,9 @@ INCLUDE_DIRECTORIES(${ANKI_EXTRA_INCLUDE_DIRS})
 LINK_DIRECTORIES(${ANKI_EXTRA_LIB_DIRS})
 
 # Set the flags to cmake now
-SET(CMAKE_CXX_FLAGS "${CXX_FLAGS} ${COMPILER_FLAGS}")
-SET(CMAKE_C_FLAGS "${C_FLAGS} ${COMPILER_FLAGS}")
-SET(CMAKE_EXE_LINKER_FLAGS "${LINKER_FLAGS}")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_FLAGS} ${COMPILER_FLAGS}")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMPILER_FLAGS}")
+SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LINKER_FLAGS}")
 
 #
 # Install
@@ -189,6 +190,10 @@ ELSE()
 	#INCLUDE_DIRECTORIES("extern/GLES3/include")
 ENDIF()
 
+IF(${ANKI_WINDOW_BACKEND} STREQUAL "ANDROID")
+	INCLUDE_DIRECTORIES("${ANDROID_NDK}/sources/android/native_app_glue")
+ENDIF()
+
 #
 # AnKi specific compiler flags
 #

+ 8 - 6
src/CMakeLists.txt

@@ -11,22 +11,24 @@ FOREACH(TMP ${ANKI_SUB_DIRS})
 ENDFOREACH()
 
 # Set the platform libraries
-IF(ANKI_WINDOW_BACKEND STREQUAL "GLXX11")
+IF(${ANKI_WINDOW_BACKEND} STREQUAL "GLXX11")
 	SET(_SYS GL ankiglew)
-ELSEIF(ANKI_WINDOW_BACKEND STREQUAL "MACOS")
+ELSEIF(${ANKI_WINDOW_BACKEND} STREQUAL "MACOS")
 	FIND_PACKAGE(OpenGL REQUIRED)
 	SET(_SYS ${OPENGL_LIBRARIES} ankiglew)
-ELSEIF(ANKI_WINDOW_BACKEND STREQUAL "ANDROID")
-	SET(_SYS GLESv2 EGL log android)
+ELSEIF(${ANKI_WINDOW_BACKEND} STREQUAL "ANDROID")
+	SET(_SYS GLESv3 EGL log android)
 	INCLUDE_DIRECTORIES("${ANDROID_NDK}/sources/android/native_app_glue")
 	SET(_SYS_SRC "${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c")
-ELSE()
+ELSEIF(${ANKI_WINDOW_BACKEND} STREQUAL "EGLFBDEV")
 	SET(_SYS GLESv2 EGL mali)
+ELSE()
+	MESSAGE(FATAL_ERROR "Unrecognized ANKI_WINDOW_BACKEND: ${ANKI_WINDOW_BACKEND}")
 ENDIF()
 
 ADD_LIBRARY(anki Dummy.cpp "${_SYS_SRC}")
 
-TARGET_LINK_LIBRARIES(anki ${ANKI_LIBS} ankitinyxml2 ankilua ankibullet ankiz ankipng ${ANKI_GPERFTOOLS_LIBS} pthread ${_SYS})
+TARGET_LINK_LIBRARIES(anki ${ANKI_LIBS} ankitinyxml2 ankilua ankibullet ankiz ankipng ${ANKI_GPERFTOOLS_LIBS} ${_SYS})
 
 SET_TARGET_PROPERTIES(anki PROPERTIES LINKER_LANGUAGE CXX)
 

+ 8 - 5
src/core/App.cpp

@@ -13,14 +13,17 @@
 #include <sstream>
 #include <iostream>
 #include <iomanip>
-#include <execinfo.h>
+//#include <execinfo.h> XXX
 #include <signal.h>
+#if ANKI_OS == ANKI_OS_ANDROID
+#	include <android_native_app_glue.h>
+#endif
 
 namespace anki {
 
 //==============================================================================
 /// Bad things signal handler
-static void handler(int sig)
+/*static void handler(int sig)
 {
 	void *array[10];
 	size_t size;
@@ -32,15 +35,15 @@ static void handler(int sig)
 	fprintf(stderr, "Error: signal %d:\n", sig);
 	backtrace_symbols_fd(array, size, 2);
 	exit(1);
-}
+}*/
 
 //==============================================================================
 void App::init(void* systemSpecificData)
 {
 	// Install signal handlers
-	signal(SIGSEGV, handler);
+	/*signal(SIGSEGV, handler);
 	signal(SIGBUS, handler);
-	signal(SIGFPE, handler);
+	signal(SIGFPE, handler);*/
 
 	printAppInfo();
 	initDirs(systemSpecificData);

+ 2 - 1
src/core/NativeWindowAndroid.cpp

@@ -16,6 +16,7 @@ void NativeWindowImpl::create(NativeWindowInitializer& init)
 	U attr = 0;
 	EGLint configsCount;
 	EGLint format;
+	EGLConfig config;
 
 	ANKI_ASSERT(init.systemData != nullptr);
 	andApp = (android_app*)init.systemData;
@@ -126,7 +127,7 @@ void NativeWindowImpl::destroy()
 			eglDestroyContext(display, context);
 		}
 
-		if(engine->surface != EGL_NO_SURFACE) 
+		if(surface != EGL_NO_SURFACE) 
 		{
 			eglDestroySurface(display, surface);
 		}

+ 31 - 13
src/util/FilePosix.cpp

@@ -5,7 +5,7 @@
 #include <cstring>
 #include <sys/stat.h>
 #include <sys/types.h>
-//#include <ftw.h>
+#include <dirent.h>
 #include <cerrno>
 
 namespace anki {
@@ -48,26 +48,44 @@ Bool directoryExists(const char* filename)
 	}
 }
 
-//==============================================================================
-static int rmDirCallback(const char* fpath, const struct stat* /*sb*/, 
-	int /*typeflag*/, struct FTW* /*ftwbuf*/)
+void removeDirectory(const char* dirname)
 {
-	int rv = remove(fpath);
+	DIR* dir;
+	struct dirent* entry;
+	char path[PATH_MAX];
 
-	if(rv)
+	if(path == NULL) 
 	{
-		throw ANKI_EXCEPTION(strerror(errno) + ": " + fpath);
+		fprintf(stderr, "Out of memory error\n");
+		throw ANKI_EXCEPTION("Out of memory error");
 	}
 
-	return rv;
-}
+	dir = opendir(dirname);
+	if(dir == NULL) 
+	{
+		throw ANKI_EXCEPTION("opendir() failed");
+	}
 
-void removeDirectory(const char* dir)
-{
-	if(nftw(dir, rmDirCallback, 64, FTW_DEPTH | FTW_PHYS))
+	entry = readdir(dir);
+	while(entry != NULL) 
 	{
-		throw ANKI_EXCEPTION(strerror(errno) + ": " + dir);
+		if(strcmp(entry->d_name, ".") && strcmp(entry->d_name, "..")) 
+		{
+			snprintf(path, (size_t)PATH_MAX, "%s/%s", dirname, entry->d_name);
+			if(entry->d_type == DT_DIR) 
+			{
+				removeDirectory(path);
+			}
+			else
+			{
+				remove(path);
+			}
+		}
+
 	}
+
+	closedir(dir);
+	remove(dirname);
 }
 
 //==============================================================================