Skip to content
Snippets Groups Projects
Commit a5fcd271 authored by Adrien Béraud's avatar Adrien Béraud Committed by Adrien Béraud
Browse files

build/cmake: allow to build JNI layer for Android

Change-Id: I7b22ee47240a0d17175492b30369e51bdf657358
parent da692fd3
No related branches found
No related tags found
No related merge requests found
cmake_minimum_required(VERSION 3.15) cmake_minimum_required(VERSION 3.16)
project(ring-daemon C CXX) project(jami-daemon CXX)
set(PACKAGE_NAME "Jami Daemon")
################################################################################
# Build options
################################################################################
option(JAMI_NATPMP "Build with NAT-PMP" ON)
option(JAMI_PUPNP "Build with PUPNP" ON)
option(JAMI_PLUGIN "Build with plugin support" ON)
option(JAMI_JNI "Build the JNI binding" OFF)
option(JAMI_VIDEO "Build with video support" ON)
################################################################################
# Check dependencies
################################################################################
if(NOT MSVC)
include(FindPkgConfig)
if (JAMI_NATPNP)
pkg_search_module (natpmp REQUIRED IMPORTED_TARGET natpmp)
endif()
if (JAMI_PUPNP)
pkg_search_module (upnp REQUIRED IMPORTED_TARGET upnp libupnp)
endif()
endif()
################################################################################ ################################################################################
# Source groups # Source groups
################################################################################ ################################################################################
# compat, src source group # compat, src source group
if(MSVC)
add_subdirectory("compat") add_subdirectory("compat")
add_subdirectory("src") endif()
add_subdirectory("src")
source_group("Source Files" FILES ${Source_Files}) source_group("Source Files" FILES ${Source_Files})
source_group("Source Files\\client" FILES ${Source_Files__client}) source_group("Source Files\\client" FILES ${Source_Files__client})
source_group("Source Files\\config" FILES ${Source_Files__config}) source_group("Source Files\\config" FILES ${Source_Files__config})
...@@ -42,6 +67,20 @@ if(MSVC) ...@@ -42,6 +67,20 @@ if(MSVC)
source_group("Source Files\\media\\video\\winvideo" FILES ${Source_Files__media__video__winvideo}) source_group("Source Files\\media\\video\\winvideo" FILES ${Source_Files__media__video__winvideo})
endif() endif()
# Android target mapping for contrib
if (ANDROID_ABI STREQUAL "x86")
set(TARGET "i686-linux-android")
elseif (ANDROID_ABI STREQUAL "x86_64")
set(TARGET "x86_64-linux-android")
elseif (ANDROID_ABI STREQUAL "arm64-v8a")
set(TARGET "aarch64-linux-android")
elseif (ANDROID_ABI STREQUAL "armeabi-v7a")
set(TARGET "arm-linux-androideabi")
else()
set(TARGET ${TARGET})
endif()
set(CONTRIB_PATH ${CMAKE_CURRENT_SOURCE_DIR}/contrib/${TARGET})
list (APPEND ALL_FILES list (APPEND ALL_FILES
${Source_Files} ${Source_Files}
${Source_Files__client} ${Source_Files__client}
...@@ -62,30 +101,82 @@ list (APPEND ALL_FILES ...@@ -62,30 +101,82 @@ list (APPEND ALL_FILES
${Source_Files__sip} ${Source_Files__sip}
${Source_Files__upnp} ${Source_Files__upnp}
${Source_Files__upnp__protocol} ${Source_Files__upnp__protocol}
${Source_Files__upnp__protocol__natpmp}
${Source_Files__upnp__protocol__pupnp}
${Source_Files__plugin}
) )
if (JAMI_NATPMP)
list (APPEND ALL_FILES ${Source_Files__upnp__protocol__natpmp})
endif()
if (JAMI_PUPNP)
list (APPEND ALL_FILES ${Source_Files__upnp__protocol__pupnp})
endif()
if (JAMI_PLUGIN)
list (APPEND ALL_FILES ${Source_Files__plugin})
endif()
if (ANDROID)
list (APPEND ALL_FILES ${ALL_FILES}
${CMAKE_CURRENT_SOURCE_DIR}/src/media/video/androidvideo/video_device_impl.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/media/video/androidvideo/video_device_monitor_impl.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/media/audio/opensl/audio_player.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/media/audio/opensl/audio_recorder.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/media/audio/opensl/opensllayer.cpp
)
endif()
if(MSVC) if(MSVC)
list (APPEND ALL_FILES ${ALL_FILES} list (APPEND ALL_FILES ${ALL_FILES}
"${Source_Files__media__audio__portaudio}" "${Source_Files__media__audio__portaudio}"
"${Source_Files__media__video__uwpvideo}" "${Source_Files__media__video__uwpvideo}"
"${Source_Files__media__video__winvideo}" "${Source_Files__media__video__winvideo}"
) )
endif()
add_library(${PROJECT_NAME} STATIC ${ALL_FILES})
set_target_properties(${PROJECT_NAME} PROPERTIES FOLDER "daemon")
set_target_properties (${PROJECT_NAME} PROPERTIES CXX_STANDARD 17)
target_compile_definitions(${PROJECT_NAME} PRIVATE
PACKAGE_NAME="${PACKAGE_NAME}"
PACKAGE="jami"
LIBJAMI_BUILD
HAVE_RINGNS
ASIO_STANDALONE
MSGPACK_NO_BOOST
)
if (JAMI_VIDEO)
target_compile_definitions(${PROJECT_NAME} PRIVATE ENABLE_VIDEO)
endif()
if (JAMI_PLUGIN)
target_compile_definitions(${PROJECT_NAME} PRIVATE ENABLE_PLUGIN)
endif()
if (JAMI_NATPMP)
target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_LIBNATPMP)
endif()
if (ANDROID)
target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_OPENSL)
endif()
target_include_directories(${PROJECT_NAME} PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}/.;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/config;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/connectivity;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/connectivity/security;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/connectivity/sip;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/connectivity/upnp;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/connectivity/upnp/igd;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/connectivity/upnp/protocol;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/connectivity/upnp/mapping;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/client;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/hooks;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/im;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/media;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/jamidht;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/jamidht/eth;"
PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src;" "${CMAKE_CURRENT_SOURCE_DIR}/src/jami;"
)
if(MSVC)
################################################################################ ################################################################################
# Target # Target
################################################################################ ################################################################################
include("CMake/Utils.cmake") include("CMake/Utils.cmake")
add_library(${PROJECT_NAME} STATIC ${ALL_FILES})
set_target_properties(${PROJECT_NAME} PROPERTIES FOLDER "daemon")
use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}") use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}")
set_target_properties (${PROJECT_NAME} PROPERTIES CXX_STANDARD 17)
################################################################################ ################################################################################
# Include necessary .cmake file (need to init use_props first) # Include necessary .cmake file (need to init use_props first)
################################################################################ ################################################################################
...@@ -94,7 +185,6 @@ if(MSVC) ...@@ -94,7 +185,6 @@ if(MSVC)
# Supress generation of ZERO_CHECK # Supress generation of ZERO_CHECK
set(CMAKE_SUPPRESS_REGENERATION true) set(CMAKE_SUPPRESS_REGENERATION true)
set(ROOT_NAMESPACE ringdaemon) set(ROOT_NAMESPACE ringdaemon)
################################################################################ ################################################################################
...@@ -123,23 +213,6 @@ if(MSVC) ...@@ -123,23 +213,6 @@ if(MSVC)
################################################################################ ################################################################################
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
target_include_directories(${PROJECT_NAME} PUBLIC target_include_directories(${PROJECT_NAME} PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}/.;"
"${CMAKE_CURRENT_SOURCE_DIR}/src;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/client;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/config;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/connectivity;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/connectivity/security;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/connectivity/sip;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/connectivity/upnp;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/connectivity/upnp/igd;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/connectivity/upnp/protocol;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/connectivity/upnp/mapping;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/jami;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/hooks;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/im;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/media;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/jamidht;"
"${CMAKE_CURRENT_SOURCE_DIR}/src/jamidht/eth;"
"${CMAKE_CURRENT_SOURCE_DIR}/compat/msvc;" "${CMAKE_CURRENT_SOURCE_DIR}/compat/msvc;"
"${CMAKE_CURRENT_SOURCE_DIR}/contrib/msvc;" "${CMAKE_CURRENT_SOURCE_DIR}/contrib/msvc;"
"${CMAKE_CURRENT_SOURCE_DIR}/contrib/msvc/include;" "${CMAKE_CURRENT_SOURCE_DIR}/contrib/msvc/include;"
...@@ -176,14 +249,12 @@ if(MSVC) ...@@ -176,14 +249,12 @@ if(MSVC)
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
target_compile_definitions(${PROJECT_NAME} PRIVATE target_compile_definitions(${PROJECT_NAME} PRIVATE
"_WIN32_WINNT=0x0A00;" "_WIN32_WINNT=0x0A00;"
"ASIO_STANDALONE;"
"STATIC_GETOPT;" "STATIC_GETOPT;"
"LIBARCHIVE_STATIC;" "LIBARCHIVE_STATIC;"
"OPENDHT_PROXY_CLIENT;" "OPENDHT_PROXY_CLIENT;"
"OPENDHT_PROXY_SERVER;" "OPENDHT_PROXY_SERVER;"
"OPENDHT_PUSH_NOTIFICATIONS;" "OPENDHT_PUSH_NOTIFICATIONS;"
"NATPMP_STATICLIB;" "NATPMP_STATICLIB;"
"ENABLE_PLUGIN;"
"NDEBUG;" "NDEBUG;"
"_USE_MATH_DEFINES;" "_USE_MATH_DEFINES;"
"_SCL_SECURE_NO_WARNINGS;" "_SCL_SECURE_NO_WARNINGS;"
...@@ -194,7 +265,6 @@ if(MSVC) ...@@ -194,7 +265,6 @@ if(MSVC)
"WEBRTC_WIN;" "WEBRTC_WIN;"
"WEBRTC_AUDIO_PROCESSING_ONLY_BUILD;" "WEBRTC_AUDIO_PROCESSING_ONLY_BUILD;"
"WEBRTC_NS_FLOAT;" "WEBRTC_NS_FLOAT;"
"MSGPACK_NO_BOOST;"
) )
endif() endif()
...@@ -287,5 +357,96 @@ if(MSVC) ...@@ -287,5 +357,96 @@ if(MSVC)
) )
set ( CMAKE_STATIC_LINKER_FLAGS ${libAdditionalDependencies} ) set ( CMAKE_STATIC_LINKER_FLAGS ${libAdditionalDependencies} )
else()
list(APPEND CMAKE_FIND_ROOT_PATH ${CONTRIB_PATH})
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH)
list(APPEND CMAKE_PREFIX_PATH ${CONTRIB_PATH})
find_package (jsoncpp REQUIRED)
find_package (yaml-cpp REQUIRED)
find_package (fmt REQUIRED)
pkg_search_module (webrtcap REQUIRED IMPORTED_TARGET webrtc-audio-processing)
pkg_search_module (gnutls REQUIRED IMPORTED_TARGET gnutls)
pkg_search_module (opendht REQUIRED IMPORTED_TARGET opendht)
pkg_search_module (git2 REQUIRED IMPORTED_TARGET libgit2)
pkg_search_module (archive REQUIRED IMPORTED_TARGET libarchive)
pkg_search_module (secp256k1 REQUIRED IMPORTED_TARGET libsecp256k1)
pkg_search_module (pjproject REQUIRED IMPORTED_TARGET libpjproject)
pkg_search_module (avformat REQUIRED IMPORTED_TARGET libavformat)
pkg_search_module (avdevice REQUIRED IMPORTED_TARGET libavdevice)
pkg_search_module (avfilter REQUIRED IMPORTED_TARGET libavfilter)
pkg_search_module (avcodec REQUIRED IMPORTED_TARGET libavcodec)
pkg_search_module (swresample REQUIRED IMPORTED_TARGET libswresample)
pkg_search_module (swscale REQUIRED IMPORTED_TARGET libswscale)
pkg_search_module (avutil REQUIRED IMPORTED_TARGET libavutil)
target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC ${CONTRIB_PATH}/include)
target_link_libraries(${PROJECT_NAME} PRIVATE
PkgConfig::opendht
PkgConfig::pjproject
PkgConfig::git2
PkgConfig::archive
PkgConfig::gnutls
PkgConfig::webrtcap
PkgConfig::avformat
PkgConfig::avdevice
PkgConfig::avfilter
PkgConfig::avcodec
PkgConfig::swresample
PkgConfig::swscale
jsoncpp
yaml-cpp
fmt
secp256k1
PUBLIC
PkgConfig::avutil
)
target_compile_options(${PROJECT_NAME} PRIVATE
-fvisibility=hidden
-Wall -Wextra
-Wnon-virtual-dtor
-Wno-deprecated
-Wno-deprecated-declarations
-Wno-unknown-pragmas
)
target_compile_definitions(${PROJECT_NAME} PRIVATE
JAMI_DATADIR="${JAMI_DATADIR}"
PJ_AUTOCONF=1
)
if (ANDROID)
target_link_libraries(${PROJECT_NAME} PRIVATE OpenSLES log)
endif()
if (JAMI_NATPMP)
target_link_libraries(${PROJECT_NAME} PRIVATE natpmp)
endif()
if (JAMI_PUPNP)
target_link_libraries(${PROJECT_NAME} PRIVATE upnp)
endif()
if (JAMI_JNI)
# Generate swig binding
add_custom_command(
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/bin/jni/jami_wrapper.cpp
COMMAND env PACKAGEDIR=${JAMI_JNI_PACKAGEDIR} "./make-swig.sh"
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/bin/jni/make-swig.sh
${CMAKE_CURRENT_SOURCE_DIR}/bin/jni/jni_interface.i
${CMAKE_CURRENT_SOURCE_DIR}/bin/jni/callmanager.i
${CMAKE_CURRENT_SOURCE_DIR}/bin/jni/configurationmanager.i
${CMAKE_CURRENT_SOURCE_DIR}/bin/jni/conversation.i
${CMAKE_CURRENT_SOURCE_DIR}/bin/jni/managerimpl.i
${CMAKE_CURRENT_SOURCE_DIR}/bin/jni/data_view.i
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin/jni
)
# Build jni binding
add_library(${PROJECT_NAME}-jni SHARED ${CMAKE_CURRENT_SOURCE_DIR}/bin/jni/jami_wrapper.cpp)
target_link_directories(${PROJECT_NAME}-jni PRIVATE ${CONTRIB_PATH}/lib)
target_link_libraries(${PROJECT_NAME}-jni ${PROJECT_NAME} android log)
set_target_properties(${PROJECT_NAME}-jni PROPERTIES CXX_STANDARD 17)
target_link_options(${PROJECT_NAME}-jni PRIVATE
-Wl,-Bsymbolic
-Wall -Wextra
)
endif()
endif() endif()
...@@ -37,17 +37,18 @@ if [[ $SWIGVER1 -lt 4 ]]; then ...@@ -37,17 +37,18 @@ if [[ $SWIGVER1 -lt 4 ]]; then
exit 3 exit 3
fi fi
mkdir -p $PACKAGEDIR PACKAGE_PATH="$PACKAGEDIR/${PACKAGE//.//}"
mkdir -p $PACKAGE_PATH
echo "Generating jami_wrapper.cpp..." echo "Generating jami_wrapper.cpp and java bindings to $PACKAGE_PATH"
swig -v -c++ -java \ swig -v -c++ -java \
-package $PACKAGE \ -package $PACKAGE \
-outdir $PACKAGEDIR \ -outdir $PACKAGE_PATH \
-o $JNIDIR/jami_wrapper.cpp $JNIDIR/jni_interface.i -o $JNIDIR/jami_wrapper.cpp $JNIDIR/jni_interface.i
echo "Generating jamiservice_loader.c..." echo "Generating jamiservice_loader.c..."
python $JNIDIR/JavaJNI2CJNI_Load.py \ python $JNIDIR/JavaJNI2CJNI_Load.py \
-i $PACKAGEDIR/JamiServiceJNI.java \ -i $PACKAGE_PATH/JamiServiceJNI.java \
-o $JNIDIR/jamiservice_loader.c \ -o $JNIDIR/jamiservice_loader.c \
-t $JNIDIR/jamiservice.c.template \ -t $JNIDIR/jamiservice.c.template \
-m JamiService \ -m JamiService \
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment