Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
jami-daemon
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Deploy
Releases
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
savoirfairelinux
jami-daemon
Commits
a5fcd271
Commit
a5fcd271
authored
2 years ago
by
Adrien Béraud
Committed by
Adrien Béraud
2 years ago
Browse files
Options
Downloads
Patches
Plain Diff
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
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
CMakeLists.txt
+196
-35
196 additions, 35 deletions
CMakeLists.txt
bin/jni/make-swig.sh
+5
-4
5 additions, 4 deletions
bin/jni/make-swig.sh
with
201 additions
and
39 deletions
CMakeLists.txt
+
196
−
35
View file @
a5fcd271
cmake_minimum_required
(
VERSION 3.1
5
)
cmake_minimum_required
(
VERSION 3.1
6
)
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
()
This diff is collapsed.
Click to expand it.
bin/jni/make-swig.sh
+
5
−
4
View file @
a5fcd271
...
@@ -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
$PACKAGE
DIR
\
-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
$PACKAGE
DIR
/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
\
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment