summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrikky <rikky@ffa7fe5e-494d-0410-b361-a75ebd5db220>2011-01-13 22:19:42 +0000
committerrikky <rikky@ffa7fe5e-494d-0410-b361-a75ebd5db220>2011-01-13 22:19:42 +0000
commit707a7731a0d69845d4699f9c63d1d3c0fe66e838 (patch)
tree3cdc1856be4b606ebc10663b2325f6df06841ba8
parenta877ecaa9f82f1b2b115366fa6f225812ef5e352 (diff)
downloadnavit-svn-707a7731a0d69845d4699f9c63d1d3c0fe66e838.tar.gz
Add:Build/cmake:Added Android build support
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@3915 ffa7fe5e-494d-0410-b361-a75ebd5db220
-rw-r--r--CMakeLists.txt57
-rw-r--r--Toolchain/arm-eabi.cmake31
-rw-r--r--cmake/copy_files.cmake15
-rw-r--r--cmake/navit_macros.cmake13
-rw-r--r--config.h.cmake1
-rw-r--r--navit/CMakeLists.txt28
-rw-r--r--navit/android/AndroidManifest.xml.cmake26
-rw-r--r--navit/android/CMakeLists.txt46
-rw-r--r--navit/graphics/android/CMakeLists.txt1
-rw-r--r--navit/speech/android/CMakeLists.txt1
-rw-r--r--navit/vehicle/android/CMakeLists.txt1
-rw-r--r--navit/xpm/CMakeLists.txt2
12 files changed, 192 insertions, 30 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 834d9fd5..d0b25c54 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -312,8 +312,48 @@ endif()
set(LOCALEDIR "${LOCALE_DIR}/locale")
-# Image conversion
+find_program(BZCAT NAMES bzcat)
+if (SAMPLE_MAP)
+ if(CMAKE_CROSSCOMPILING)
+ cfg_feature(SAMPLE_MAP "not supported for crosscompiling" FALSE)
+ elseif(NOT BZCAT)
+ cfg_feature(SAMPLE_MAP "bzcat missing" FALSE)
+ endif(CMAKE_CROSSCOMPILING)
+endif(SAMPLE_MAP)
+
+find_program(SAXON NAMES saxon saxon8 saxon-xslt)
+if(NOT SAXON)
+ cfg_feature(XSL_PROCESSING "Saxon missing" FALSE)
+endif()
+
+if(ANDROID)
+ find_program(ANDROID_LOCATION NAMES android android.bat)
+ find_program(ANT_LOCATION NAMES ant)
+ if (NOT ANT_LOCATION)
+ message_error("Could not find ant. Please install ant and add it to the search path.")
+ endif()
+ if (NOT ANDROID_LOCATION)
+ message_error( "Could not find 'Android SDK and AVD Manager'. Please install the android sdk and add the <android-sdk>/tools directory to the search path.")
+ endif()
+ if (NOT XSL_PROCESSING)
+ message(WARNING "XSLT processing disabled. You have to configure navit.xml yourself, or enable XSLT processing.")
+ endif()
+ set(XSLTS "android;${XSLTS}" CACHE STRING "define a semicolon seperated list of XSLTs to process")
+ list(APPEND NAVIT_LIBS log)
+ set(HAVE_API_ANDROID 1)
+ set_with_reason(graphics/android "Android detected" TRUE)
+ set_with_reason(speech/android "Android detected" TRUE)
+ set_with_reason(vehicle/android "Android detected" TRUE)
+ cfg_feature(SHARED_LIBNAVIT "Android detected" TRUE)
+
+ add_feature(XPM2PNG "Android detected" TRUE)
+ # todo: fixe undef. ref to timegm (->timegm64)
+ cfg_feature(BUILD_MAPTOOL "Android detected" FALSE)
+ set(NAVIT_COMPILE_FLAGS "${NAVIT_COMPILE_FLAGS} -fPIC")
+
+endif(ANDROID)
+# Image conversion
find_program(IMAGE_CONVERTER NAMES convert)
execute_process(COMMAND ${IMAGE_CONVERTER} -list format OUTPUT_VARIABLE CONVERT_FORMATS)
if(CONVERT_FORMATS MATCHES ".*SVGZ[ *][ ]*SVG[ ]*r[w-].*")
@@ -347,21 +387,6 @@ if (XPM2PNG)
endif(NOT IMAGE_CONVERTER_XPM)
endif(XPM2PNG)
-
-find_program(BZCAT NAMES bzcat)
-if (SAMPLE_MAP)
- if(CMAKE_CROSSCOMPILING)
- cfg_feature(SAMPLE_MAP "not supported for crosscompiling" FALSE)
- elseif(NOT BZCAT)
- cfg_feature(SAMPLE_MAP "bzcat missing" FALSE)
- endif(CMAKE_CROSSCOMPILING)
-endif(SAMPLE_MAP)
-
-find_program(SAXON NAMES saxon saxon8 saxon-xslt)
-if(NOT SAXON)
- cfg_feature(XSL_PROCESSING "Saxon missing" FALSE)
-endif()
-
foreach(PLUMO ${ALL_PLUGINS} ${ALL_MODULES} ${ALL_FEATURES})
set(OLDVALUE ${${PLUMO}})
OPTION(${PLUMO} "Enable/Disable module/plugin/support" ${${PLUMO}})
diff --git a/Toolchain/arm-eabi.cmake b/Toolchain/arm-eabi.cmake
new file mode 100644
index 00000000..5f3a6b04
--- /dev/null
+++ b/Toolchain/arm-eabi.cmake
@@ -0,0 +1,31 @@
+set(CMAKE_SYSTEM_NAME GNU)
+
+set(ANDROID TRUE)
+set(ANDROID_API_VERSION 4 CACHE STRING "Andriod API Version")
+
+find_program(CMAKE_C_COMPILER arm-eabi-gcc arm-eabi-gcc.exe)
+find_program(CMAKE_CXX_COMPILER arm-eabi-gcc arm-eabi-g++.exe)
+set(PKG_CONFIG_EXECUTABLE "arm-eabi-pkg-config")
+
+get_filename_component(COMPILER_PATH ${CMAKE_C_COMPILER} PATH)
+
+set(ANDROID_NDK "${COMPILER_PATH}/../../../../.." CACHE STRING "PATH to Andriod NDK")
+
+set(NDK_ARCH_DIR "${ANDROID_NDK}/platforms/android-${ANDROID_API_VERSION}/arch-arm")
+set(CMAKE_FIND_ROOT_PATH ${NDK_ARCH_DIR})
+
+set(CMAKE_REQUIRED_FLAGS "-nostdlib -lc -ldl -lgcc -L${NDK_ARCH_DIR}/usr/lib")
+set(CMAKE_REQUIRED_INCLUDES "${NDK_ARCH_DIR}/usr/include")
+
+set (NAVIT_COMPILE_FLAGS "-I${NDK_ARCH_DIR}/usr/include -g -D_GNU_SOURCE -DANDROID ${CMAKE_REQUIRED_FLAGS}")
+
+set(CMAKE_SHARED_LINKER_FLAGS_INIT "${CMAKE_REQUIRED_FLAGS} -Wl,--no-undefined -Wl,-rpath,/system/lib")
+set(CMAKE_EXE_LINKER_FLAGS_INIT "${CMAKE_REQUIRED_FLAGS} -Wl,--no-undefined")
+set(CMAKE_MODULE_LINKER_FLAGS_INIT "${CMAKE_REQUIRED_FLAGS} -Wl,-rpath,/data/data/org.navitproject.navit/lib")
+
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+
+
diff --git a/cmake/copy_files.cmake b/cmake/copy_files.cmake
new file mode 100644
index 00000000..c5dc8b56
--- /dev/null
+++ b/cmake/copy_files.cmake
@@ -0,0 +1,15 @@
+message("Copy '${GLOB_EXP}' to '${DST}'")
+
+file(GLOB SRC_FILES ${GLOB_EXP})
+
+if ( SRC_FILES )
+ if ( LOWER )
+ foreach (FILE ${SRC_FILES})
+ get_filename_component(FILEN_NAME ${FILE} NAME)
+ string(TOLOWER ${FILEN_NAME} FILEN_NAME_LOWER)
+ execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${FILE} ${DST}/${FILEN_NAME_LOWER})
+ endforeach()
+ else()
+ file(COPY ${SRC_FILES} DESTINATION ${DST})
+ endif( LOWER )
+endif()
diff --git a/cmake/navit_macros.cmake b/cmake/navit_macros.cmake
index 438b288d..5c40eaaa 100644
--- a/cmake/navit_macros.cmake
+++ b/cmake/navit_macros.cmake
@@ -34,14 +34,16 @@ macro(module_add_library MODULE_NAME )
add_library(${MODULE_NAME} ${MODULE_BUILD_TYPE} ${ARGN})
SET_TARGET_PROPERTIES(${MODULE_NAME} PROPERTIES COMPILE_DEFINITIONS "MODULE=${MODULE_NAME}")
TARGET_LINK_LIBRARIES(${MODULE_NAME} ${${MODULE_NAME}_LIBS})
+ SET_TARGET_PROPERTIES( ${MODULE_NAME} PROPERTIES COMPILE_FLAGS "${NAVIT_COMPILE_FLAGS}")
if (USE_PLUGINS)
- SET_TARGET_PROPERTIES( ${MODULE_NAME} PROPERTIES COMPILE_FLAGS ${NAVIT_COMPILE_FLAGS})
# workaround to be compatible with old paths
set_target_properties( ${MODULE_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/.libs")
-# TARGET_LINK_LIBRARIES(${MODULE_NAME} navit_core)
+ if (ANDROID)
+ TARGET_LINK_LIBRARIES(${MODULE_NAME} navit)
+ endif()
install(TARGETS ${MODULE_NAME}
DESTINATION ${LIB_DIR}/navit/${${MODULE_NAME}_TYPE}
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
@@ -50,8 +52,13 @@ endmacro(module_add_library)
macro(supportlib_add_library LIB_NAME )
add_library(${LIB_NAME} ${ARGN})
+ SET_TARGET_PROPERTIES( ${LIB_NAME} PROPERTIES COMPILE_FLAGS "${NAVIT_COMPILE_FLAGS}")
if (USE_PLUGINS)
- SET_TARGET_PROPERTIES( ${LIB_NAME} PROPERTIES COMPILE_FLAGS ${NAVIT_COMPILE_FLAGS})
TARGET_LINK_LIBRARIES(${MODULE_NAME} navit_core)
endif()
endmacro(supportlib_add_library)
+
+macro(message_error)
+ set(NAVIT_DEPENDENCY_ERROR 1)
+ message( SEND_ERROR ${ARGN})
+endmacro(message_error)
diff --git a/config.h.cmake b/config.h.cmake
index 3173f7bb..91d3cba9 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -2,6 +2,7 @@
#cmakedefine HAVE_MALLOC_H 1
#cmakedefine HAVE_SYS_MOUNT_H 1
#cmakedefine HAVE_STDINT_H 1
+#cmakedefine HAVE_API_ANDROID 1
#cmakedefine HAVE_API_WIN32_BASE 1
#cmakedefine HAVE_API_WIN32 1
#cmakedefine HAVE_API_WIN32_CE 1
diff --git a/navit/CMakeLists.txt b/navit/CMakeLists.txt
index 243c3fae..b1b778ba 100644
--- a/navit/CMakeLists.txt
+++ b/navit/CMakeLists.txt
@@ -57,15 +57,25 @@ if (${HAVE_GLIB})
list(APPEND NAVIT_SRC event_glib.c)
endif()
+if(ANDROID)
+ list(APPEND NAVIT_SRC android.c)
+ set(NAVIT_LIBNAME navit)
+else()
+ set(NAVIT_LIBNAME navit_core)
+ add_executable (navit start.c)
+ target_link_libraries (navit ${NAVIT_LIBNAME})
+ set_target_properties(navit PROPERTIES COMPILE_DEFINITIONS "MODULE=${MODULE_NAME}")
+endif()
+
if (SHARED_LIBNAVIT)
- add_library (navit_core SHARED ${NAVIT_SRC} )
+ add_library (${NAVIT_LIBNAME} SHARED ${NAVIT_SRC} )
else(SHARED_LIBNAVIT)
- add_library (navit_core STATIC ${NAVIT_SRC} )
+ add_library (${NAVIT_LIBNAME} STATIC ${NAVIT_SRC} )
endif(SHARED_LIBNAVIT)
-target_link_libraries(navit_core ${MODULES_NAME} ${NAVIT_SUPPORT_LIBS} fib ${NAVIT_LIBS} m) # support_glib support_zlib support_win32 support_libpng support_wordexp
-set_target_properties(navit_core PROPERTIES COMPILE_DEFINITIONS "MODULE=navit;LIBDIR=\"${CMAKE_INSTALL_PREFIX}/${LIB_DIR}\";PREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
+target_link_libraries(${NAVIT_LIBNAME} ${MODULES_NAME} ${NAVIT_SUPPORT_LIBS} fib ${NAVIT_LIBS} m)
+set_target_properties(${NAVIT_LIBNAME} PROPERTIES COMPILE_DEFINITIONS "MODULE=navit;LIBDIR=\"${CMAKE_INSTALL_PREFIX}/${LIB_DIR}\";PREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
if (DEFINED NAVIT_COMPILE_FLAGS)
- set_target_properties(navit_core PROPERTIES COMPILE_FLAGS ${NAVIT_COMPILE_FLAGS})
+ set_target_properties(${NAVIT_LIBNAME} PROPERTIES COMPILE_FLAGS "${NAVIT_COMPILE_FLAGS}")
endif()
# Subversion revision
@@ -97,20 +107,18 @@ ADD_CUSTOM_COMMAND(
${XSLT_COMMANDS}
)
+add_custom_target( navit_config_xml ALL DEPENDS navit.xml)
-#configure_file (${CMAKE_CURRENT_SOURCE_DIR}/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h)
-ADD_DEPENDENCIES(navit_core version)
+ADD_DEPENDENCIES(${NAVIT_LIBNAME} version)
if (ENABLE_NLS)
ADD_DEPENDENCIES(support_glib intl_cmake)
endif()
-add_executable (navit start.c navit.xml)
-target_link_libraries (navit navit_core)
-set_target_properties(navit PROPERTIES COMPILE_DEFINITIONS "MODULE=${MODULE_NAME}")
add_subdirectory (maptool)
add_subdirectory (xpm)
add_subdirectory (maps)
+add_subdirectory (android)
install(TARGETS navit
DESTINATION ${BIN_DIR}
diff --git a/navit/android/AndroidManifest.xml.cmake b/navit/android/AndroidManifest.xml.cmake
new file mode 100644
index 00000000..38b32b8b
--- /dev/null
+++ b/navit/android/AndroidManifest.xml.cmake
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="org.navitproject.navit"
+ android:sharedUserId="org.navitproject.navit"
+ android:versionCode="1"
+ android:versionName="1.0">
+ <uses-sdk android:minSdkVersion="@ANDROID_API_VERSION@" />
+ <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" />
+ @ANDROID_PERMISSIONS@
+ <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+ <uses-permission android:name="android.permission.WAKE_LOCK" />
+ <uses-permission android:name="android.permission.INTERNET" />-->
+ <application android:label="@string/app_name">
+ <activity android:name="Navit"
+ android:label="@string/app_name"
+ android:icon="@drawable/icon"
+ android:theme="@android:style/Theme.NoTitleBar"
+ android:configChanges="locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|fontScale">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/navit/android/CMakeLists.txt b/navit/android/CMakeLists.txt
new file mode 100644
index 00000000..d26a97ec
--- /dev/null
+++ b/navit/android/CMakeLists.txt
@@ -0,0 +1,46 @@
+if (ANDROID)
+
+ CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/AndroidManifest.xml.cmake ${CMAKE_CURRENT_BINARY_DIR}/AndroidManifest.xml)
+
+
+ add_custom_command (
+ OUTPUT build.xml
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/AndroidManifest.xml
+ COMMAND cmake -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}
+ COMMAND android update project -t android-${ANDROID_API_VERSION} -p ${CMAKE_CURRENT_BINARY_DIR}
+ COMMAND cmake -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/res/raw/
+ COMMAND cmake -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/libs/armeabi
+ COMMAND cmake -E copy ${PROJECT_BINARY_DIR}/navit/navit.xml ${CMAKE_CURRENT_BINARY_DIR}/res/raw/
+ COMMAND cmake -E copy ${PROJECT_BINARY_DIR}/navit/libnavit.so ${CMAKE_CURRENT_BINARY_DIR}/libs/armeabi/
+ COMMAND ${CMAKE_COMMAND}
+ -D GLOB_EXP="${PROJECT_BINARY_DIR}/navit/xpm/*.png"
+ -D DST=${CMAKE_CURRENT_BINARY_DIR}/res/drawable
+ -D LOWER=1
+ -P ${PROJECT_SOURCE_DIR}/cmake/copy_files.cmake
+ COMMAND ${CMAKE_COMMAND}
+ -D GLOB_EXP="${PROJECT_BINARY_DIR}/navit/*/*/.libs/*.so"
+ -D DST=${CMAKE_CURRENT_BINARY_DIR}/libs/armeabi
+ -P ${PROJECT_SOURCE_DIR}/cmake/copy_files.cmake
+ COMMAND ${CMAKE_COMMAND}
+ -D GLOB_EXP="${PROJECT_BINARY_DIR}/po/*.mo"
+ -D DST=${CMAKE_CURRENT_BINARY_DIR}/res/raw
+ -D LOWER=1
+ -P ${PROJECT_SOURCE_DIR}/cmake/copy_files.cmake
+ )
+
+ add_custom_command (
+ OUTPUT Navit-debug.apk
+ DEPENDS build.xml
+ COMMAND ant debug
+ )
+
+ add_custom_command (
+ OUTPUT Navit-unsigned.apk
+ DEPENDS build.xml
+ COMMAND ant release
+ )
+
+ add_custom_target(apkg DEPENDS Navit-debug.apk)
+ add_custom_target(apkg-release DEPENDS Navit-unsigned.apk)
+
+endif(ANDROID)
diff --git a/navit/graphics/android/CMakeLists.txt b/navit/graphics/android/CMakeLists.txt
new file mode 100644
index 00000000..87aa37f2
--- /dev/null
+++ b/navit/graphics/android/CMakeLists.txt
@@ -0,0 +1 @@
+module_add_library(graphics_android graphics_android.c)
diff --git a/navit/speech/android/CMakeLists.txt b/navit/speech/android/CMakeLists.txt
new file mode 100644
index 00000000..73c426a3
--- /dev/null
+++ b/navit/speech/android/CMakeLists.txt
@@ -0,0 +1 @@
+module_add_library(speech_android speech_android.c)
diff --git a/navit/vehicle/android/CMakeLists.txt b/navit/vehicle/android/CMakeLists.txt
new file mode 100644
index 00000000..e7b19ebb
--- /dev/null
+++ b/navit/vehicle/android/CMakeLists.txt
@@ -0,0 +1 @@
+module_add_library(vehicle_android vehicle_android.c)
diff --git a/navit/xpm/CMakeLists.txt b/navit/xpm/CMakeLists.txt
index 726fedb8..8bdf62c9 100644
--- a/navit/xpm/CMakeLists.txt
+++ b/navit/xpm/CMakeLists.txt
@@ -98,7 +98,7 @@ foreach (IMAGE_SRC ${FILES_TO_PNG})
endforeach()
-add_custom_target(images DEPENDS ${IMAGE_TARGETS})
+add_custom_target(images ALL DEPENDS ${IMAGE_TARGETS})
install(
FILES ${IMAGE_TARGETS}