diff options
-rw-r--r-- | CMakeLists.txt | 57 | ||||
-rw-r--r-- | Toolchain/arm-eabi.cmake | 31 | ||||
-rw-r--r-- | cmake/copy_files.cmake | 15 | ||||
-rw-r--r-- | cmake/navit_macros.cmake | 13 | ||||
-rw-r--r-- | config.h.cmake | 1 | ||||
-rw-r--r-- | navit/CMakeLists.txt | 28 | ||||
-rw-r--r-- | navit/android/AndroidManifest.xml.cmake | 26 | ||||
-rw-r--r-- | navit/android/CMakeLists.txt | 46 | ||||
-rw-r--r-- | navit/graphics/android/CMakeLists.txt | 1 | ||||
-rw-r--r-- | navit/speech/android/CMakeLists.txt | 1 | ||||
-rw-r--r-- | navit/vehicle/android/CMakeLists.txt | 1 | ||||
-rw-r--r-- | navit/xpm/CMakeLists.txt | 2 |
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} |