diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,16 +40,16 @@ set(ANDROID TRUE) endif() -if(BUILD_KSTARS_LITE AND ANDROID) +if(CMAKE_TOOLCHAIN_FILE STREQUAL ${CMAKE_SOURCE_DIR}/android/toolchain-android.cmake) include(${CMAKE_BINARY_DIR}/kf5/kde/install/share/ECM/cmake/ECMConfig.cmake) endif() find_package(ECM 1.7.0 REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" ${CMAKE_MODULE_PATH}) if(BUILD_KSTARS_LITE) - if(ANDROID) + if(CMAKE_TOOLCHAIN_FILE STREQUAL ${CMAKE_SOURCE_DIR}/android/toolchain-android.cmake) set(QT_ANDROID $ENV{QT_ANDROID}) include(${QT_ANDROID}/lib/cmake/Qt5/Qt5Config.cmake) include(${QT_ANDROID}/lib/cmake/Qt5Core/Qt5CoreConfig.cmake) @@ -65,6 +65,9 @@ include(${QT_ANDROID}/lib/cmake/Qt5Concurrent/Qt5ConcurrentConfig.cmake) include(${QT_ANDROID}/lib/cmake/Qt5AndroidExtras/Qt5AndroidExtrasConfig.cmake) else() + if(ANDROID) + list(APPEND QT_EXTRA_COMPONENTS AndroidExtras) + endif() find_package(Qt5 5.7 REQUIRED COMPONENTS Gui Qml Quick QuickControls2 Xml Svg Sql Network Positioning Concurrent ${QT_EXTRA_COMPONENTS}) endif() else() @@ -77,16 +80,16 @@ include(KDEInstallDirs) include(MacroBoolTo01) include(ECMQtDeclareLoggingCategory) -if(NOT ANDROID) +if(NOT CMAKE_TOOLCHAIN_FILE STREQUAL ${CMAKE_SOURCE_DIR}/android/toolchain-android.cmake) #We get error "could not find main method" with this module include(KDECompilerSettings NO_POLICY_SCOPE) endif() include(KDECMakeSettings) include(FeatureSummary) # Load the frameworks we need if(BUILD_KSTARS_LITE) - if(ANDROID) + if(CMAKE_TOOLCHAIN_FILE STREQUAL ${CMAKE_SOURCE_DIR}/android/toolchain-android.cmake) set(KF5_VERSION 5.28.0) set(KF5_HOST_TOOLING /usr/lib/x86_64-linux-gnu/cmake/) include(${CMAKE_BINARY_DIR}/kf5/kde/install/lib/cmake/KF5Config/KF5ConfigConfig.cmake) @@ -120,36 +123,43 @@ include_directories(SYSTEM ${EIGEN3_INCLUDE_DIR}) ## CFITSIO Library -if(BUILD_KSTARS_LITE) - if(ANDROID) - externalproject_add(cfitsio SOURCE_DIR "${CMAKE_BINARY_DIR}/android/3rdparty/cfitsio" - URL https://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/cfitsio3370.tar.gz - PATCH_COMMAND bash -c "cd ${CMAKE_BINARY_DIR}/android/3rdparty/cfitsio && dos2unix ${CMAKE_BINARY_DIR}/android/3rdparty/cfitsio/CMakeLists.txt && patch -p0 < ${CMAKE_SOURCE_DIR}/android/3rdparty/cfitsio.patch" - CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_SOURCE_DIR}/android/toolchain-android.cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - BUILD_COMMAND make cfitsio - BUILD_IN_SOURCE 1 - INSTALL_COMMAND "") - - set(CFITSIO_INCLUDE_DIR ${CMAKE_BINARY_DIR}/android/3rdparty/cfitsio) - set(CFITSIO_LIBRARIES ${CMAKE_BINARY_DIR}/android/3rdparty/cfitsio/libcfitsio.a) - else() - find_package(CFitsio REQUIRED) +if(ANDROID) + if(CMAKE_TOOLCHAIN_FILE STREQUAL ${CMAKE_SOURCE_DIR}/android/toolchain-android.cmake) + set(extra_cmake "-DM_LIB=-lm") endif() + externalproject_add(cfitsio SOURCE_DIR "${CMAKE_BINARY_DIR}/android/3rdparty/cfitsio" + URL https://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/cfitsio3420.tar.gz + PATCH_COMMAND bash -c "cd ${CMAKE_BINARY_DIR}/android/3rdparty/cfitsio && patch -p0 < ${CMAKE_SOURCE_DIR}/android/3rdparty/cfitsio.patch" + CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} ${extra_cmake} + BUILD_COMMAND make cfitsio + BUILD_IN_SOURCE 1 + INSTALL_COMMAND "") + + set(CFITSIO_FOUND TRUE) + set(CFITSIO_INCLUDE_DIR PUBLIC ${CMAKE_BINARY_DIR}/android/3rdparty/cfitsio) + set(CFITSIO_LIBRARIES ${CMAKE_BINARY_DIR}/android/3rdparty/cfitsio/libcfitsio.a) else() - find_package(CFitsio) + if(BUILD_KSTARS_LITE) + find_package(CFitsio REQUIRED) + else() + find_package(CFitsio) + endif() endif() MACRO_BOOL_TO_01(CFITSIO_FOUND HAVE_CFITSIO) set_package_properties(CFitsio PROPERTIES DESCRIPTION "FITS IO Library" URL "http://heasarc.gsfc.nasa.gov/fitsio/fitsio.html" TYPE OPTIONAL PURPOSE "Support for the FITS (Flexible Image Transport System) data format in KStars.") ## INDI Library if (ANDROID) set(QT_ANDROID $ENV{QT_ANDROID}) + if(CMAKE_TOOLCHAIN_FILE STREQUAL ${CMAKE_SOURCE_DIR}/android/toolchain-android.cmake) + set(extra_cmake -DCMAKE_AR=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar) + endif() externalproject_add(indi SOURCE_DIR "${CMAKE_BINARY_DIR}/android/indi" URL https://github.com/indilib/indi/archive/master.zip - CONFIGURE_COMMAND cd libindi && cmake . -DCMAKE_TOOLCHAIN_FILE=${CMAKE_SOURCE_DIR}/android/toolchain-android.cmake -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \\ + CONFIGURE_COMMAND cd libindi && cmake . -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \\ -DINDI_BUILD_POSIX_CLIENT=OFF -DINDI_BUILD_SERVER=OFF -DINDI_BUILD_DRIVERS=OFF -DINDI_BUILD_UNITTESTS=OFF \\ - -DINDI_BUILD_DRIVERS=OFF -DINDI_BUILD_QT5_CLIENT=ON -DINDI_CALCULATE_MINMAX=ON -DCMAKE_AR=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar \\ - -DQT_ANDROID=${QT_ANDROID} -DCFITSIO_DIR=${CMAKE_BINARY_DIR}/android/3rdparty/cfitsio + -DINDI_BUILD_DRIVERS=OFF -DINDI_BUILD_QT5_CLIENT=ON -DINDI_CALCULATE_MINMAX=ON \\ + -DCFITSIO_DIR=${CMAKE_BINARY_DIR}/android/3rdparty/cfitsio -DQT_ANDROID=${QT_ANDROID} -DCMAKE_PREFIX_PATH=${QT_ANDROID} ${extra_cmake} BUILD_COMMAND make -C libindi BUILD_IN_SOURCE 1 INSTALL_COMMAND "") @@ -171,14 +181,14 @@ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lgomp") externalproject_add(raw SOURCE_DIR "${CMAKE_BINARY_DIR}/android/3rdparty/libraw" - URL https://www.libraw.org/data/LibRaw-0.17.2.tar.gz - PATCH_COMMAND bash -c "cd ${CMAKE_BINARY_DIR}/android/3rdparty/libraw && wget -qO- https://github.com/LibRaw/LibRaw-cmake/archive/master.zip | jar xvf /dev/stdin && mv -f LibRaw-cmake-master/* . && patch -p0 < ${CMAKE_SOURCE_DIR}/android/3rdparty/libraw.patch" - CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_SOURCE_DIR}/android/toolchain-android.cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DENABLE_OPENMP=OFF -DENABLE_LCMS=OFF + URL https://www.libraw.org/data/LibRaw-0.17.2.tar.gz + PATCH_COMMAND bash -c "cd ${CMAKE_BINARY_DIR}/android/3rdparty/libraw && wget -qO- https://github.com/LibRaw/LibRaw-cmake/archive/master.zip | jar xvf /dev/stdin && rm -rf cmake && mv -f LibRaw-cmake-master/CMakeLists.txt LibRaw-cmake-master/cmake . && patch -p1 < ${CMAKE_SOURCE_DIR}/android/3rdparty/libraw.patch" + CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DENABLE_OPENMP=OFF -DENABLE_LCMS=OFF BUILD_COMMAND make raw BUILD_IN_SOURCE 1 INSTALL_COMMAND "") include_directories(${CMAKE_BINARY_DIR}/android/3rdparty/libraw) - set(LIBRAW_LIBRARIES ${CMAKE_BINARY_DIR}/android/3rdparty/libraw/libraw.a -lgnustl_static) + set(LIBRAW_LIBRARIES ${CMAKE_BINARY_DIR}/android/3rdparty/libraw/libraw.a) set(LibRaw_FOUND true) else() find_package(LibRaw) @@ -388,7 +398,7 @@ ENDIF () # Final package generation -if (ANDROID) +if (CMAKE_TOOLCHAIN_FILE STREQUAL ${CMAKE_SOURCE_DIR}/android/toolchain-android.cmake) set(EXPORT_DIR "${CMAKE_BINARY_DIR}/android/kstars_build_apk/") set(ANDROID_APK_DIR "${CMAKE_SOURCE_DIR}/android/apk/") set(EXECUTABLE_DESTINATION_PATH "${EXPORT_DIR}/libs/armeabi-v7a/libkstars.so") diff --git a/android/3rdparty/cfitsio.patch b/android/3rdparty/cfitsio.patch --- a/android/3rdparty/cfitsio.patch +++ b/android/3rdparty/cfitsio.patch @@ -1,36 +1,32 @@ ---- CMakeLists.txt.orig 2017-05-20 13:30:52.859404414 +0300 -+++ CMakeLists.txt 2017-05-20 13:28:38.682343341 +0300 -@@ -1,6 +1,6 @@ - PROJECT(CFITSIO) - CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0) -- -+include(${CMAKE_TOOLCHAIN_FILE}) - # Allow the developer to select if Dynamic or Static libraries are built - OPTION (BUILD_SHARED_LIBS "Build Shared Libraries" ON) - OPTION (USE_PTHREADS "Thread-safe build (using pthreads)" OFF) -@@ -59,8 +59,8 @@ - ) - - SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES VERSION ${${PROJECT_NAME}_VERSION} SOVERSION ${${PROJECT_NAME}_MAJOR_VERSION}) --install(TARGETS ${LIB_NAME} LIBRARY DESTINATION ${LIB_DESTINATION}) --install(FILES ${H_FILES} DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel) -+#install(TARGETS ${LIB_NAME} LIBRARY DESTINATION ${LIB_DESTINATION}) -+#install(FILES ${H_FILES} DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel) +diff --git a/CMakeLists.txt b/CMakeLists.txt +index c749abb..2f259a2 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -64,6 +64,10 @@ install(FILES ${H_FILES} DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel) ENABLE_TESTING() ---- fitscore.c.orig 2017-05-20 13:33:54.887384468 +0300 -+++ fitscore.c 2017-05-20 13:08:19.014783064 +0300 -@@ -9230,7 +9230,7 @@ ++IF(${CMAKE_TOOLCHAIN_FILE} MATCHES ".*toolchain-android.cmake") ++ include(${CMAKE_TOOLCHAIN_FILE}) ++ENDIF() ++ + ADD_EXECUTABLE(TestProg testprog.c) + TARGET_LINK_LIBRARIES(TestProg ${LIB_NAME}) + ADD_TEST(TestProg TestProg) +diff --git a/fitscore.c b/fitscore.c +index 4c90df0..5e59cc1 100644 +--- a/fitscore.c ++++ b/fitscore.c +@@ -9230,7 +9230,7 @@ int ffc2rr(const char *cval, /* I - string representation of the value */ if (!decimalpt) { /* only do this once for efficiency */ lcc = localeconv(); /* set structure containing local decimal point symbol */ - decimalpt = *(lcc->decimal_point); +// decimalpt = *(lcc->decimal_point); } errno = 0; -@@ -9300,7 +9300,7 @@ +@@ -9300,7 +9300,7 @@ int ffc2dd(const char *cval, /* I - string representation of the value */ if (!decimalpt) { /* only do this once for efficiency */ lcc = localeconv(); /* set structure containing local decimal point symbol */ diff --git a/android/3rdparty/libraw.patch b/android/3rdparty/libraw.patch --- a/android/3rdparty/libraw.patch +++ b/android/3rdparty/libraw.patch @@ -1,48 +1,42 @@ ---- CMakeLists.txt.orig 2017-05-20 20:42:17.997533874 +0300 -+++ CMakeLists.txt 2017-05-20 20:43:31.245445501 +0300 -@@ -26,6 +26,8 @@ - - PROJECT(libraw) - -+include(${CMAKE_TOOLCHAIN_FILE}) -+ - # ================================================================================================== - # Library version info extraction - -@@ -114,10 +116,15 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 47f3869..2007a3d 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -114,9 +114,13 @@ INCLUDE(MacroLogFeature) INCLUDE(MacroOptionalFindPackage) INCLUDE(MacroJPEG) -+IF (ANDROID) -+ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/android-hack) -+ENDIF () ++INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/android-hack) + # Math library check - IF(NOT WIN32) -- FIND_LIBRARY(MATH_LIBRARY m) -+# FIND_LIBRARY(MATH_LIBRARY m) -+ set(MATH_LIBRARY -lm) +-IF(NOT WIN32) ++IF(${CMAKE_TOOLCHAIN_FILE} MATCHES ".*toolchain-android.cmake") ++ set(MATH_LIBRARY -lm) # toolchain-android.cmake can't find libm.so ++ELSEIF(NOT WIN32) + FIND_LIBRARY(MATH_LIBRARY m) ENDIF() - # LCMS version 1 and 2 library check +diff --git a/android-hack/swab.h b/android-hack/swab.h new file mode 100644 index 0000000..061c61e --- /dev/null -+++ android-hack/swab.h ++++ b/android-hack/swab.h @@ -0,0 +1,6 @@ + +#pragma once + +#include + +void swab(const void *from, void*to, ssize_t n); ---- internal/dcraw_common.cpp -+++ internal/dcraw_common.cpp -@@ -21,6 +21,24 @@ - for more information +diff --git a/internal/dcraw_common.cpp b/internal/dcraw_common.cpp +index 608641a..0f991e4 100644 +--- a/internal/dcraw_common.cpp ++++ b/internal/dcraw_common.cpp +@@ -19,6 +19,24 @@ it under the terms of the one of two licenses as you choose: */ + +#ifdef ANDROID +#include + @@ -64,9 +58,11 @@ #include #define CLASS LibRaw:: #include "libraw/libraw_types.h" ---- src/libraw_cxx.cpp 2016-05-14 09:53:59.000000000 +0300 -+++ src/libraw_cxx.cpp 2017-04-18 15:01:21.806381052 +0300 -@@ -19,6 +19,10 @@ +diff --git a/src/libraw_cxx.cpp b/src/libraw_cxx.cpp +index c977302..2112ba8 100644 +--- a/src/libraw_cxx.cpp ++++ b/src/libraw_cxx.cpp +@@ -16,6 +16,10 @@ it under the terms of the one of two licenses as you choose: */ diff --git a/android/apk/AndroidManifest.xml b/android/apk/AndroidManifest.xml --- a/android/apk/AndroidManifest.xml +++ b/android/apk/AndroidManifest.xml @@ -6,7 +6,7 @@ - + diff --git a/kstars/CMakeLists.txt b/kstars/CMakeLists.txt --- a/kstars/CMakeLists.txt +++ b/kstars/CMakeLists.txt @@ -970,6 +970,7 @@ endif(NOT WIN32) if (CFITSIO_FOUND) + target_include_directories(KStarsLib PUBLIC ${CFITSIO_INCLUDE_DIR}) target_link_libraries(KStarsLib ${CFITSIO_LIBRARIES}) endif(CFITSIO_FOUND) @@ -1045,7 +1046,7 @@ qt5_add_resources(KSTARS_APP_SRCS data/kstars.qrc) endif(NOT BUILD_KSTARS_LITE) -if (ANDROID) +if (CMAKE_TOOLCHAIN_FILE STREQUAL ${CMAKE_SOURCE_DIR}/android/toolchain-android.cmake) add_library(kstars SHARED ${KSTARS_APP_SRCS}) add_dependencies(KStarsLib cfitsio indi raw) set(ANDROID_NDK $ENV{ANDROID_NDK}) diff --git a/kstars/main.cpp b/kstars/main.cpp --- a/kstars/main.cpp +++ b/kstars/main.cpp @@ -20,6 +20,7 @@ #include #include +#include #ifdef KSTARS_LITE #include "kstarslite.h" @@ -55,11 +56,11 @@ #endif -int main(int argc, char *argv[]) #if defined(Q_OS_ANDROID) // __attribute__ is needed because clang-based linking removes the main() symbol from the shared library on Android -__attribute__ ((visibility ("default"))) +Q_DECL_EXPORT #endif +int main(int argc, char *argv[]) { #ifdef KSTARS_LITE QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);