mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-14 00:14:11 +09:00
Merge pull request #1629 from bmiklautz/update_pull_1609
Android jpeg build enhancement
This commit is contained in:
@@ -306,24 +306,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)
|
||||
@@ -527,8 +537,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()
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -80,7 +80,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"
|
||||
|
||||
@@ -6,15 +6,19 @@
|
||||
# Specifically these are:
|
||||
# - OpenSSL
|
||||
# - Android NDK Profiler
|
||||
# - Jpeg library
|
||||
#
|
||||
# Usage:
|
||||
# android_setup_build_env.sh <source root>
|
||||
|
||||
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,27 +46,30 @@ 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
|
||||
# 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]"
|
||||
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-?.?.*"`
|
||||
if [ -z "$SSL_ROOT" ]; then
|
||||
echo "OpenSSL was not build successfully, aborting."
|
||||
exit -42
|
||||
fi
|
||||
mkdir -p $SSL_ROOT/lib
|
||||
cp $SSL_ROOT/*.a $SSL_ROOT/lib/
|
||||
|
||||
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
|
||||
@@ -87,5 +94,30 @@ 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
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user