From 0793ad3fdf1feae519c8834b0873dbaff34ce896 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Thu, 21 Nov 2013 09:45:35 +0100 Subject: [PATCH 1/7] Renamed android specific variables. Added default path for jpeg specific library. --- CMakeLists.txt | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 70603918b..235d46ddb 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -280,24 +280,34 @@ if(ANDROID) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG} -gdwarf-3") endif() set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -llog") - if (NOT FREERDP_ANDROID_EXTERNAL_SSL_PATH) - if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/openssl") - set(FREERDP_ANDROID_EXTERNAL_SSL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/openssl") + + if (NOT FREERDP_EXTERNAL_JPEG_PATH) + if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/jpeg8d") + set(FREERDP_EXTERNAL_JPEG_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/jpeg8d") else() - message(STATUS "FREERDP_ANDROID_EXTERNAL_SSL_PATH not set! - Needs to be set if openssl is not found in the android NDK (which usually isn't)") + message(STATUS "FREERDP_EXTERNAL_SSL_PATH not set! - Needs to be set if openssl is not found in the android NDK (which usually isn't)") + endif() + endif() + if (NOT FREERDP_EXTERNAL_SSL_PATH) + if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/openssl") + set(FREERDP_EXTERNAL_SSL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/openssl") + else() + message(STATUS "FREERDP_EXTERNAL_SSL_PATH not set! - Needs to be set if openssl is not found in the android NDK (which usually isn't)") endif() if(WITH_GPROF) - if (NOT FREERDP_ANDROID_EXTERNAL_PROFILER_PATH) + if (NOT FREERDP_EXTERNAL_PROFILER_PATH) if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/android-ndk-profiler") - set(FREERDP_ANDROID_EXTERNAL_PROFILER_PATH + set(FREERDP_EXTERNAL_PROFILER_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/android-ndk-profiler") else() - message(STATUS "FREERDP_ANDROID_EXTERNAL_PROFILER_PATH not set!") + message(STATUS "FREERDP_EXTERNAL_PROFILER_PATH not set!") endif() endif() endif() endif() - set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_ANDROID_EXTERNAL_SSL_PATH}) +set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_EXTERNAL_SSL_PATH} ${FREERDP_EXTERNAL_JPEG_PATH}) +set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_EXTERNAL_PROFILER_PATH}) + set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/client/Android/FreeRDPCore/jni/${ANDROID_ABI}) CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/scripts/regenerate_jni_headers.sh.cmake ${CMAKE_BINARY_DIR}/scripts/regenerate_jni_headers.sh @ONLY) @@ -494,8 +504,8 @@ if(ANDROID) if(WITH_GPROF) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg") set(PROFILER_LIBRARIES - "${FREERDP_ANDROID_EXTERNAL_PROFILER_PATH}/obj/local/${ANDROID_ABI}/libandroid-ndk-profiler.a") - include_directories("${FREERDP_ANDROID_EXTERNAL_PROFILER_PATH}") + "${FREERDP_EXTERNAL_PROFILER_PATH}/obj/local/${ANDROID_ABI}/libandroid-ndk-profiler.a") + include_directories("${FREERDP_EXTERNAL_PROFILER_PATH}") endif() endif() From 5372153dd74a12256ad12dac79f5d2bdbed09050 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Thu, 21 Nov 2013 09:46:25 +0100 Subject: [PATCH 2/7] Updated documentation for android. --- docs/README.android | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/docs/README.android b/docs/README.android index 6896f8d89..7b0bf4fe2 100644 --- a/docs/README.android +++ b/docs/README.android @@ -31,10 +31,12 @@ Multiple source versions and builds of static openssl libraries are floating aro At the time of writing we have tested and used: https://github.com/bmiklautz/Android-external-openssl-ndk-static https://github.com/akallabeth/openssl-android -However, any other static build should work as well. -To build openssl: +For jpeg support https://github.com/akallabeth/jpeg8d has been tested and used. +However, any other static builds should work as well. +Build openssl and jpeg +====================== Set up ANDROID_NDK and ANDROID_SDK to the absolute paths on your machine. From the project root folder run './scripts/android_setup_build_env.sh' This will set up openssl and gprof helper libraries as required for FreeRDP. @@ -47,12 +49,13 @@ Integrated build ---------------- Run the following commands in the top level freerdp directory. Don't -forget to set ANDROID_NDK, ANDROID_SDK and FREERDP_ANDROID_EXTERNAL_SSL_PATH +forget to set ANDROID_NDK, ANDROID_SDK and FREERDP_EXTERNAL_SSL_PATH to the absolut paths on your machine: cmake -DCMAKE_TOOLCHAIN_FILE=cmake/AndroidToolchain.cmake \ -DANDROID_NDK="_your_ndk_path_here_" \ --DFREERDP_ANDROID_EXTERNAL_SSL_PATH="_your_ssl_build_root_path_" \ +-DFREERDP_EXTERNAL_SSL_PATH="_your_ssl_build_root_path_" \ +-DFREERDP_EXTERNAL_JPEG_PATH="_your_jpeg_build_root_path_" \ -DANDROID_SDK="_your_sdk_path_here_" \ -DCMAKE_BUILD_TYPE=Debug make @@ -62,12 +65,13 @@ After that you should have a client/Android/bin/aFreeRDP-debug.apk. Manual ant builds ----------------- First run cmake to prepare the build and build JNI. -Don't forget to set ANDROID_NDK, ANDROID_SDK and FREERDP_ANDROID_EXTERNAL_SSL_PATH +Don't forget to set ANDROID_NDK, ANDROID_SDK and FREERDP_EXTERNAL_SSL_PATH to the absolut paths on your machine: cmake -DCMAKE_TOOLCHAIN_FILE=cmake/AndroidToolchain.cmake \ -DANDROID_NDK="_your_ndk_path_here_" \ --DFREERDP_ANDROID_EXTERNAL_SSL_PATH="_your_ssl_build_root_path_" \ +-DFREERDP_EXTERNAL_SSL_PATH="_your_ssl_build_root_path_" \ +-DFREERDP_EXTERNAL_JPEG_PATH="_your_jpeg_build_root_path_" \ -DANDROID_SDK="_your_sdk_path_here_" -DANDROID_BUILD_JAVA=OFF \ -DCMAKE_BUILD_TYPE=Debug make @@ -85,7 +89,7 @@ the eclipse marketplace). cmake -DCMAKE_TOOLCHAIN_FILE=cmake/AndroidToolchain.cmake \ -DANDROID_NDK="_your_ndk_path_here_" \ --DFREERDP_ANDROID_EXTERNAL_SSL_PATH="_your_ssl_build_root_path_" \ +-DFREERDP_EXTERNAL_SSL_PATH="_your_ssl_build_root_path_" \ -DCMAKE_BUILD_TYPE=Debug -DANDROID_BUILD_JAVA=OFF make @@ -124,9 +128,12 @@ ANDROID_NDK (used from toolchain file) ANDROID_ABI (used from toolchain file) * Android ABI to build for (default is armeabi-v7a) -FREERDP_ANDROID_EXTERNAL_SSL_PATH (used by FindOpenSSL) +FREERDP_EXTERNAL_SSL_PATH (used by FindOpenSSL) * absolut root path to the prebuild static openssl libraries +FREERDP_EXTERNAL_JPEG_PATH (used by FindJPEG) +* absolute root path to the prebuild static jpeg libraries + WITH_DEBUG_ANDROID_JNI - enable debugging for JNI From cf71df78811b6620b363de764e651a6d236e6505 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Thu, 21 Nov 2013 09:46:43 +0100 Subject: [PATCH 3/7] Fixed include paths and linking for jpeg library. --- libfreerdp/codec/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libfreerdp/codec/CMakeLists.txt b/libfreerdp/codec/CMakeLists.txt index 2c2363e84..89895cec0 100644 --- a/libfreerdp/codec/CMakeLists.txt +++ b/libfreerdp/codec/CMakeLists.txt @@ -76,7 +76,8 @@ if(WITH_NEON) endif() if(WITH_JPEG) - set(FREERDP_JPEG_LIBS jpeg) + include_directories(${JPEG_INCLUDE_DIR}) + set(FREERDP_JPEG_LIBS ${JPEG_LIBRARIES}) endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" From f6a8c1e43175584ff413d26839cbdce7ce911cf6 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Thu, 21 Nov 2013 09:46:58 +0100 Subject: [PATCH 4/7] Updated build script, now also building jpeg library. --- scripts/android_setup_build_env.sh | 33 ++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/scripts/android_setup_build_env.sh b/scripts/android_setup_build_env.sh index d7f151d32..11010438a 100755 --- a/scripts/android_setup_build_env.sh +++ b/scripts/android_setup_build_env.sh @@ -6,15 +6,19 @@ # Specifically these are: # - OpenSSL # - Android NDK Profiler +# - Jpeg library # # Usage: # android_setup_build_env.sh -OPENSSL_SCM=https://github.com/akallabeth/openssl-android -NDK_PROFILER_SCM=https://github.com/richq/android-ndk-profiler +OPENSSL_SCM=https://github.com/akallabeth/openssl-android.git +NDK_PROFILER_SCM=https://github.com/richq/android-ndk-profiler.git +JPEG_LIBRARY_SCM=https://github.com/akallabeth/jpeg8d.git SCRIPT_NAME=`basename $0` + if [ $# -ne 1 ]; then + echo "Missing command line argument, current directory as root." ROOT=`pwd` ROOT=$ROOT/external @@ -42,7 +46,6 @@ if [ $RETVAL -ne 0 ]; then echo "Failed to execute git command [$RETVAL]" exit -3 fi - cd $OPENSSL_SRC make clean # The makefile has a bug, which aborts during @@ -54,7 +57,6 @@ if [ $RETVAL -ne 0 ]; then echo "Failed to execute make command [$RETVAL]" exit -4 fi - # Copy the created library to the default openssl directory, # so that CMake will detect it automatically. SSL_ROOT=`find $OPENSSL_SRC -type d -name "openssl-?.?.*"` @@ -87,5 +89,28 @@ if [ $RETVAL -ne 0 ]; then exit -6 fi +echo "Preparing JPEG library..." +JPEG_LIBRARY_SRC=$ROOT/jpeg8d +if [ -d $JPEG_LIBRARY_SRC ]; then + cd $JPEG_LIBRARY_SRC + git pull + RETVAL=$? +else + git clone $JPEG_LIBRARY_SCM $JPEG_LIBRARY_SRC + RETVAL=$? +fi +if [ $RETVAL -ne 0 ]; then + echo "Failed to execute git command [$RETVAL]" + exit -6 +fi +cd $JPEG_LIBRARY_SRC +ndk-build V=1 APP_ABI=armeabi-v7a clean +ndk-build V=1 APP_ABI=armeabi-v7a +RETVAL=$? +if [ $RETVAL -ne 0 ]; then + echo "Failed to execute ndk-build command [$RETVAL]" + exit -7 +fi + echo "Prepared external libraries, you can now build the application." exit 0 From 04b819086f1531a454b721d092702f893e63c450 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Thu, 21 Nov 2013 10:05:52 +0100 Subject: [PATCH 5/7] Fixed a problem when building openssl. --- scripts/android_setup_build_env.sh | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/scripts/android_setup_build_env.sh b/scripts/android_setup_build_env.sh index 11010438a..dfeb13843 100755 --- a/scripts/android_setup_build_env.sh +++ b/scripts/android_setup_build_env.sh @@ -52,6 +52,7 @@ make clean # first compilation. Rerun make to build the whole lib. make make +make RETVAL=0 # TODO: Check, why 2 is returned. if [ $RETVAL -ne 0 ]; then echo "Failed to execute make command [$RETVAL]" @@ -60,11 +61,16 @@ fi # Copy the created library to the default openssl directory, # so that CMake will detect it automatically. SSL_ROOT=`find $OPENSSL_SRC -type d -name "openssl-?.?.*"` +if [ -z "$SSL_ROOT" ]; then + echo "OpenSSL was not build successfully, aborting." + exit -42 +fi +mkdir -p $SSL_ROOT/obj/local/armeabi/ +cp $SSL_ROOT/libssl.a $SSL_ROOT/obj/local/armeabi/ +cp $SSL_ROOT/libcrypto.a $SSL_ROOT/obj/local/armeabi/ + rm -f $ROOT/openssl ln -s $SSL_ROOT $ROOT/openssl -mkdir -p $ROOT/openssl/obj/local/armeabi/ -cp $ROOT/openssl/libssl.a $ROOT/openssl/obj/local/armeabi/ -cp $ROOT/openssl/libcrypto.a $ROOT/openssl/obj/local/armeabi/ echo "Preparing NDK profiler..." NDK_PROFILER_SRC=$ROOT/android-ndk-profiler From b439c415689de122b9fdba76847618799392bd90 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Thu, 21 Nov 2013 12:27:26 +0100 Subject: [PATCH 6/7] Copying libraries now to subfoler lib, because CMake searches for them there. --- scripts/android_setup_build_env.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/android_setup_build_env.sh b/scripts/android_setup_build_env.sh index dfeb13843..f60fca422 100755 --- a/scripts/android_setup_build_env.sh +++ b/scripts/android_setup_build_env.sh @@ -65,9 +65,8 @@ if [ -z "$SSL_ROOT" ]; then echo "OpenSSL was not build successfully, aborting." exit -42 fi -mkdir -p $SSL_ROOT/obj/local/armeabi/ -cp $SSL_ROOT/libssl.a $SSL_ROOT/obj/local/armeabi/ -cp $SSL_ROOT/libcrypto.a $SSL_ROOT/obj/local/armeabi/ +mkdir -p $SSL_ROOT/lib +cp $SSL_ROOT/*.a $SSL_ROOT/lib/ rm -f $ROOT/openssl ln -s $SSL_ROOT $ROOT/openssl @@ -117,6 +116,8 @@ if [ $RETVAL -ne 0 ]; then echo "Failed to execute ndk-build command [$RETVAL]" exit -7 fi +mkdir -p $JPEG_LIBRARY_SRC/lib +cp $JPEG_LIBRARY_SRC/obj/local/armeabi-v7a/*.a $JPEG_LIBRARY_SRC/lib/ echo "Prepared external libraries, you can now build the application." exit 0 From 700060df3f9a306c174fa331bae5adeb6b693919 Mon Sep 17 00:00:00 2001 From: Bernhard Miklautz Date: Sun, 8 Dec 2013 14:07:12 +0100 Subject: [PATCH 7/7] android build: updated ssl path variable FREERDP_ANDROID_EXTERNAL_SSL_PATH -> FREERDP_EXTERNAL_SSL_PATH --- ci/cmake-preloads/config-android.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/cmake-preloads/config-android.txt b/ci/cmake-preloads/config-android.txt index 7e7e5048b..5f5e368bc 100644 --- a/ci/cmake-preloads/config-android.txt +++ b/ci/cmake-preloads/config-android.txt @@ -1,6 +1,6 @@ message("PRELOADING android cache") set(CMAKE_TOOLCHAIN_FILE "cmake/AndroidToolchain.cmake" CACHE PATH "ToolChain file") -set(FREERDP_ANDROID_EXTERNAL_SSL_PATH $ENV{ANDROID_SSL_PATH} CACHE PATH "android ssl") +set(FREERDP_EXTERNAL_SSL_PATH $ENV{ANDROID_SSL_PATH} CACHE PATH "android ssl") # ANDROID_NDK and ANDROID_SDK must be set as environment variable #set(ANDROID_NDK $ENV{ANDROID_SDK} CACHE PATH "Android NDK") #set(ANDROID_SDK "${ANDROID_NDK}" CACHE PATH "android SDK")