Merge pull request #13 from G10h4ck/gitlab_maven_repo

Distribute libretroshare as an Android library AAR
This commit is contained in:
G10h4ck 2022-02-16 10:10:46 +01:00 committed by GitHub
commit f670ba34b4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 467 additions and 220 deletions

3
.gitignore vendored
View File

@ -6,3 +6,6 @@ build
# Ignore Gradle local options
local.properties
# Ignore Qt Creator local CMake configuration
CMakeLists.txt.user

33
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,33 @@
android-AAR-minapi16:
image: registry.gitlab.com/retroshare/retroshare:android_aar_base_16
script:
- >
./gradlew build publish
-Dorg.gradle.project.buildDir=/libretroshare-build/
-PANDROID_MIN_API_LEVEL=16
-PLIBRETROSHARE_SOURCE_VERSION="$CI_COMMIT_SHORT_SHA"
-PNATIVE_TOOLCHAINS_DIR="/libretroshare-native-toolchains/"
android-AAR-minapi21:
image: registry.gitlab.com/retroshare/retroshare:android_aar_base_21
script:
- >
./gradlew build publish
-Dorg.gradle.project.buildDir=/libretroshare-build/
-PANDROID_MIN_API_LEVEL=21
-PLIBRETROSHARE_SOURCE_VERSION="$CI_COMMIT_SHORT_SHA"
-PNATIVE_TOOLCHAINS_DIR="/libretroshare-native-toolchains/"
tags:
- storage50
android-AAR-minapi24:
image: registry.gitlab.com/retroshare/retroshare:android_aar_base_24
script:
- >
./gradlew build publish
-Dorg.gradle.project.buildDir=/libretroshare-build/
-PANDROID_MIN_API_LEVEL=24
-PLIBRETROSHARE_SOURCE_VERSION="$CI_COMMIT_SHORT_SHA"
-PNATIVE_TOOLCHAINS_DIR="/libretroshare-native-toolchains/"
tags:
- storage50

View File

@ -1,7 +1,7 @@
# RetroShare decentralized communication platform
#
# Copyright (C) 2021 Gioacchino Mazzurco <gio@eigenlab.org>
# Copyright (C) 2021 Asociación Civil Altermundi <info@altermundi.net>
# Copyright (C) 2021-2022 Gioacchino Mazzurco <gio@retroshare.cc>
# Copyright (C) 2021-2022 Asociación Civil Altermundi <info@altermundi.net>
#
# SPDX-License-Identifier: CC0-1.0
@ -131,6 +131,17 @@ option(
"Export libretroshare JNI_OnLoad. See src/rs_android/rsjni.cpp for details"
ON )
option(
RS_DEVELOPMENT_BUILD
"Disable optimization to speed up build, enable verbose build log. \
just for development purposes, not suitable for library usage"
OFF )
option(
RS_ANDROID
"Enable when compiling libretroshare for Android"
OFF )
################################################################################
find_package(Git REQUIRED)
@ -148,6 +159,13 @@ find_package(Git REQUIRED)
################################################################################
if(RS_DEVELOPMENT_BUILD)
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
endif(RS_DEVELOPMENT_BUILD)
################################################################################
include(src/CMakeLists.txt)
list(TRANSFORM RS_SOURCES PREPEND src/)
list(TRANSFORM RS_PUBLIC_HEADERS PREPEND src/)
@ -170,6 +188,14 @@ target_include_directories(
install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
if(RS_DEVELOPMENT_BUILD)
target_compile_options(${PROJECT_NAME} PRIVATE "-O0")
endif(RS_DEVELOPMENT_BUILD)
if(RS_ANDROID)
target_link_libraries(${PROJECT_NAME} PRIVATE log)
endif(RS_ANDROID)
# TODO: install public headers
find_package(OpenSSL REQUIRED)
@ -187,7 +213,7 @@ if(EXISTS "${OPENPGPSDK_DEVEL_DIR}/.git" )
else()
FetchContent_Declare(
openpgpsdk
GIT_REPOSITORY "https://gitlab.com/RetroShare/openpgpsdk.git"
GIT_REPOSITORY "https://gitlab.com/RetroShare/OpenPGP-SDK.git"
GIT_TAG "origin/master"
GIT_SHALLOW TRUE
GIT_PROGRESS TRUE
@ -211,7 +237,7 @@ if(RS_BITDHT)
else()
FetchContent_Declare(
bitdht
GIT_REPOSITORY "https://gitlab.com/RetroShare/bitdht.git"
GIT_REPOSITORY "https://gitlab.com/RetroShare/BitDHT.git"
GIT_TAG "origin/master"
GIT_SHALLOW TRUE
GIT_PROGRESS TRUE
@ -269,7 +295,7 @@ if(RS_JSON_API)
APPEND
"${JSON_API_GENERATOR_DOXYFILE}"
"OUTPUT_DIRECTORY=${JSONAPI_GENERATOR_OUTPUT_DIR}\n"
"INPUT=${CMAKE_CURRENT_SOURCE_DIR}" )
"INPUT=${CMAKE_CURRENT_SOURCE_DIR}/src/" )
add_custom_command(
OUTPUT
@ -292,6 +318,12 @@ if(RS_JSON_API)
set(BUILD_TESTS OFF CACHE BOOL "Do not build restbed tests")
set(BUILD_SSL OFF CACHE BOOL "Do not build restbed SSL support")
if(NOT RS_ANDROID)
## At moment depending on restbed this way doesn't seems to work at least on
## Android due to upstream CMake file limitation, patches should be sent
## upstream. Restbed is therefore compiled by Android toolchain preparation
## script
FetchContent_Declare(
restbed
GIT_REPOSITORY "https://github.com/Corvusoft/restbed.git"
@ -303,11 +335,18 @@ if(RS_JSON_API)
)
FetchContent_MakeAvailable(restbed)
target_link_libraries(${PROJECT_NAME} PRIVATE restbed)
## TODO: work around target_include_directories should be added upstream
include_directories(${restbed_SOURCE_DIR}/source/)
## TODO: work around target_link_libraries should be added upstream
## The workaround doesn't work as per documentation
## https://cmake.org/cmake/help/latest/command/link_directories.html
## "The command will apply only to targets created after it is called."
#link_directories(${restbed_BINARY_DIR})
endif(NOT RS_ANDROID)
target_link_libraries(${PROJECT_NAME} PRIVATE restbed)
add_compile_definitions(RS_JSONAPI)
endif(RS_JSON_API)
@ -362,6 +401,7 @@ endif(RS_DH_PRIME_INIT_CHECK)
if(RS_MINIUPNPC)
add_compile_definitions(RS_USE_LIBMINIUPNPC)
target_link_libraries(${PROJECT_NAME} PRIVATE miniupnpc)
endif(RS_MINIUPNPC)
if(RS_LIBUPNP)
@ -452,6 +492,3 @@ endif(RS_ANDROID)
#endif(CMAKE_SYSTEM_NAME STREQUAL "Android")
################################################################################
## Useful to debug CMake
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

25
README.asciidoc Normal file
View File

@ -0,0 +1,25 @@
// SPDX-FileCopyrightText: 2022 Retroshare Team <contact@retroshare.cc>
// SPDX-FileCopyrightText: 2022 Gioacchino Mazzurco <gio@retroshare.cc>
// SPDX-FileCopyrightText: 2022 Asociación Civil Altermundi <info@altermundi.net>
// SPDX-License-Identifier: CC-BY-SA-4.0
= RetroShare library
RetroShare is a decentralized, private, secure, cross-platform, communication
software.
RetroShare functionalities (file sharing, chat, messages, forums, channels...)
are implemented under the hood by libretroshare which offer a documented C++ and
JSON API.
While RetroShare is an application on it's own, libretroshare is meant to be
used as part of other programs, some of them are
https://retroshare.cc[RetroShare-gui],
https://retroshare.cc[RetroShare-service],
https://elrepo.io/[elRepo.io]
(let us know if there are more).
=== Continuous integration
image:https://gitlab.com/RetroShare/libretroshare/badges/master/pipeline.svg[link="https://gitlab.com/RetroShare/libretroshare/-/commits/master",title="pipeline status"]

View File

@ -7,6 +7,24 @@
* SPDX-License-Identifier: CC0-1.0
*/
/*
* Set minumum Android API level supported by this build passing
* -PANDROID_MIN_API_LEVEL=16 (change 16 to what you need) on the gradle command
* line.
*
* LIBRETROSHARE_SOURCE_VERSION Set source version ex:
* -PLIBRETROSHARE_SOURCE_VERSION="$(git describe --always)"
*
* Optionally set JNI_NATIVE_LIBS_ARCHS to a space separated target CPU
* architectures list named as seen in AAR native libraries directories passing
* -PJNI_NATIVE_LIBS_ARCHS="arm64-v8a armeabi-v7a" defaults to all architectures
* supported by current script at current Android minimum API
*
* Optionally set NATIVE_TOOLCHAINS_DIR for easier reuse of toolchains which
* take a lot to build and doesn't change often
* -PNATIVE_TOOLCHAINS_DIR="/native/toolchains/path"
*/
buildscript
{
repositories
@ -32,6 +50,74 @@ allprojects
}
}
apply plugin: 'com.android.library'
apply plugin: 'maven-publish'
ext.getAndroidMinApiLevel =
{ ->
if(project.hasProperty('ANDROID_MIN_API_LEVEL'))
{
return ANDROID_MIN_API_LEVEL.toInteger();
}
else
{
return 16
}
}
ext.getJniNativeLibsArchs =
{ ->
if(project.hasProperty('JNI_NATIVE_LIBS_ARCHS'))
{
return JNI_NATIVE_LIBS_ARCHS.split(' ') as List
}
else
{
if(getAndroidMinApiLevel() <= 16)
{
return ['armeabi-v7a']
}
else
{
return ['arm64-v8a', 'armeabi-v7a']
}
}
}
ext.getLibretroshareSourceVersion =
{ ->
if(project.hasProperty('LIBRETROSHARE_SOURCE_VERSION'))
{
return LIBRETROSHARE_SOURCE_VERSION
}
else
{
return 'unspecified'
}
}
ext.getNativeToolchainsDir =
{ ->
if(project.hasProperty('NATIVE_TOOLCHAINS_DIR'))
{
return NATIVE_TOOLCHAINS_DIR
}
else
{
return "${buildDir}/native_toolchains/"
}
}
ext.getjniLibsDir =
{ ->
return "${buildDir}/native_libs/"
}
ext.getArtifactBaseName =
{ ->
return project.name + "-MinApiLevel" + getAndroidMinApiLevel()
}
ext.buildLibretroshareNativeLib =
{
pApiLevel, /* Android API level */
@ -58,13 +144,13 @@ ext.buildLibretroshareNativeLib =
break;
}
def toolchainsWorkdir = "${buildDir}/native_toolchains/"
def toolchainsWorkdir = getNativeToolchainsDir()
mkdir toolchainsWorkdir
def currToolchainPath = "$toolchainsWorkdir/$pApiLevel-$toolchainArch/"
// Todo: use proper way to resolve the script path
def toolChainScriptPath = "${projectDir}/../build_scripts/Android/prepare-toolchain-clang.sh"
def toolChainScriptPath = "${projectDir}/misc/Android/prepare-toolchain-clang.sh"
if(!pReuseToolchain || !file(currToolchainPath).exists())
{
@ -75,11 +161,11 @@ ext.buildLibretroshareNativeLib =
environment "NATIVE_LIBS_TOOLCHAIN_PATH", currToolchainPath
environment "ANDROID_PLATFORM_VER", pApiLevel
environment "ANDROID_NDK_ARCH", toolchainArch
commandLine toolChainScriptPath /*, 'build_libretroshare'*/
commandLine toolChainScriptPath
}
}
else
{/*
{
exec
{
workingDir toolchainsWorkdir
@ -88,35 +174,65 @@ ext.buildLibretroshareNativeLib =
environment "ANDROID_PLATFORM_VER", pApiLevel
environment "ANDROID_NDK_ARCH", toolchainArch
commandLine toolChainScriptPath, 'build_libretroshare'
}*/
}
}
def nativeLibsDir = "${buildDir}/native_libs-$pApiLevel/"
mkdir nativeLibsDir
mkdir getjniLibsDir()
def currAbiLibDir = "${nativeLibsDir}/$pAbi/"
def currAbiLibDir = "${getjniLibsDir()}/$pAbi/"
mkdir currAbiLibDir
copy
{
from "${currToolchainPath}/sysroot/usr/lib/libretroshare.so"
into currAbiLibDir
}
copy
{
from "${currToolchainPath}/sysroot/usr/lib/${libcxxsharedTriple}/libc++_shared.so"
into currAbiLibDir
}
copy
{
from "${currToolchainPath}/sysroot/usr/lib/${libcxxsharedTriple}/${pApiLevel}/liblog.so"
into currAbiLibDir
}
}
apply plugin: 'com.android.library'
apply plugin: 'maven-publish'
task prepareRetroshareNativeLibs
{
doLast
{
def pNdkPath = android.getNdkDirectory().getAbsolutePath()
getJniNativeLibsArchs().each
{
abi ->
buildLibretroshareNativeLib(getAndroidMinApiLevel(), abi, pNdkPath)
}
}
}
preBuild.dependsOn prepareRetroshareNativeLibs
android
{
// see https://stackoverflow.com/questions/27301867/what-is-compilesdkversion
compileSdkVersion 21
ndkVersion "21.0.6113669"
defaultConfig
{
minSdkVersion getAndroidMinApiLevel()
targetSdkVersion 28
/* Prevent proguard run at applications build time, to alter
* libretroshare Java classes that are used by libretroshare C++ code */
consumerProguardFiles 'misc/Android/proguard-keep-libretroshare-java-classes.pro'
}
setProperty("archivesBaseName", getArtifactBaseName())
sourceSets
{
main
@ -124,22 +240,7 @@ android
java.srcDirs = [ 'src/rs_android/' ]
manifest.srcFile 'src/rs_android/AndroidManifest.xml'
assets.srcDirs = [ "${buildDir}/libretroshare-build/android-assets/" ]
jniLibs.srcDirs = [ "${buildDir}/native_libs-16" ]
}
minApi16
{
jniLibs.srcDirs = [ "${buildDir}/native_libs-16" ]
}
minApi21
{
jniLibs.srcDirs = [ "${buildDir}/native_libs-21" ]
}
minApi24
{
jniLibs.srcDirs = [ "${buildDir}/native_libs-24" ]
jniLibs.srcDirs = [ getjniLibsDir() ]
}
}
@ -148,48 +249,6 @@ android
disable 'LongLogTag'
}
flavorDimensions 'api'
def currNdk = android.getNdkDirectory().getAbsolutePath()
productFlavors
{
minApi16
{
minSdkVersion '16'
targetSdkVersion '16'
def currApi = minSdkVersion.mApiLevel
versionNameSuffix "-API_${currApi}"
buildLibretroshareNativeLib(currApi, "armeabi-v7a", currNdk)
}
minApi21
{
minSdkVersion '21'
targetSdkVersion '21'
def currApi = minSdkVersion.mApiLevel
versionNameSuffix "-API_${currApi}"
buildLibretroshareNativeLib(currApi, "arm64-v8a", currNdk)
buildLibretroshareNativeLib(currApi, "armeabi-v7a", currNdk)
}
minApi24
{
minSdkVersion '24'
targetSdkVersion '28'
def currApi = minSdkVersion.mApiLevel
versionNameSuffix "-API_${currApi}"
buildLibretroshareNativeLib(currApi, "arm64-v8a", currNdk)
buildLibretroshareNativeLib(currApi, "armeabi-v7a", currNdk)
}
}
publishing
{
multipleVariants
@ -206,21 +265,37 @@ afterEvaluate
// see https://developer.android.com/reference/tools/gradle-api/7.1/com/android/build/api/dsl/LibraryPublishing
publications
{
android.libraryVariants.each
debug(MavenPublication)
{
variant ->
publishing.publications.create(variant.name, MavenPublication)
groupId = 'org.retroshare.service'
artifactId "${getArtifactBaseName()}-debug"
version getLibretroshareSourceVersion()
artifact bundleReleaseAar
}
release(MavenPublication)
{
groupId = 'org.retroshare.service'
artifactId "${getArtifactBaseName()}-release"
version getLibretroshareSourceVersion()
artifact bundleReleaseAar
}
}
repositories
{
maven
{
url = uri("https://gitlab.com/api/v4/projects/${System.getenv('CI_PROJECT_ID')}/packages/maven")
name = "Gitlab"
credentials(HttpHeaderCredentials)
{
from components.findByName(variant.name)
groupId = 'org.retroshare.service'
// -${variant.flavorName}
artifactId "${rootProject.name}-${variant.name}"
version "0.6.6"
artifacts = [ "${buildDir}/outputs/aar/${rootProject.name}-${variant.flavorName}-${variant.buildType.name}.aar" ]
name = "Job-Token"
value = System.getenv("CI_JOB_TOKEN")
}
authentication
{
header(HttpHeaderAuthentication)
}
}
}
}
}
}

View File

@ -0,0 +1,66 @@
## To prepare an image suitable as base for Gitlab CI use
## image name must match gitlab repository name, you can play just with the tag
## the part after :
# export ANDROID_MIN_API_LEVEL=16
# export CI_IMAGE_NAME="registry.gitlab.com/retroshare/retroshare:android_aar_base_$ANDROID_MIN_API_LEVEL"
# docker build --squash --tag "${CI_IMAGE_NAME}" --build-arg ANDROID_MIN_API_LEVEL=$ANDROID_MIN_API_LEVEL --build-arg LIBRETROSHARE_SOURCE_VERSION="$(git describe --always)" --file misc/Android/Dockerfile-AAR .
## --squash is very important in case of GitlabCI shared runners as they are
## limited to 25GB disk size
## To push it to gitlab CI registry you need first to login and the to push
# docker login registry.gitlab.com
# docker push ${CI_IMAGE_NAME}
FROM ubuntu:21.10
ENV DEBIAN_FRONTEND=noninteractive
ENV APT_UNAT="--assume-yes --quiet"
RUN apt-get update $APT_UNAT && apt-get upgrade --show-upgraded $APT_UNAT && \
apt-get clean $APT_UNAT
RUN apt-get install --no-install-recommends $APT_UNAT \
bash build-essential bzip2 cmake curl chrpath doxygen \
git python python3 tclsh unzip wget zip
# Dependencies to create Android pkg
RUN apt-get install --no-install-recommends $APT_UNAT \
openjdk-11-jre openjdk-11-jdk openjdk-11-jdk-headless
ENV ANDROID_SDK_PATH="/opt/android-sdk"
ENV ANDROID_HOME="$ANDROID_SDK_PATH"
ENV ANDROID_SDK_ROOT="$ANDROID_SDK_PATH"
ENV JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64/"
ARG SOURCE_PATH=./
COPY $SOURCE_PATH /libretroshare
WORKDIR /libretroshare-build/
RUN /libretroshare/misc/Android/prepare-toolchain-clang.sh install_android_sdk
WORKDIR /libretroshare/
ARG ANDROID_MIN_API_LEVEL=16
ARG LIBRETROSHARE_SOURCE_VERSION="Dockerfile_AAR_unset"
ENV NATIVE_TOOLCHAINS_DIR="/libretroshare-native-toolchains/"
RUN ./gradlew build -Dorg.gradle.project.buildDir=/libretroshare-build/ \
-PANDROID_MIN_API_LEVEL=$ANDROID_MIN_API_LEVEL \
-PNATIVE_TOOLCHAINS_DIR=$NATIVE_TOOLCHAINS_DIR \
-PLIBRETROSHARE_SOURCE_VERSION="$LIBRETROSHARE_SOURCE_VERSION"
WORKDIR /
## Save generated AAR to make life easier to newcomers that might want to use
## this just to build the libretroshare AAR
RUN mv /libretroshare-build/outputs/aar/ /libretroshare-aar/
## Cleanup all the rest now unneded stuff so squashing is more effective
RUN rm -rf /libretroshare-build/
## Clean reamining cruft inside native_toolchains
RUN rm -rf $NATIVE_TOOLCHAINS_DIR/*-build
## Clean apt cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
## No need to keep sources inside the image
RUN rm -rf /libretroshare/

View File

@ -212,8 +212,8 @@ export ANDROID_NDK_LLVM_STRIP="${ANDROID_NDK_PATH}/toolchains/llvm/prebuilt/linu
cat > "${ANDROID_NDK_LLVM_STRIP}" << LLVMSTRIPTRICK
#!/bin/bash
echo "\${2}" | grep -q Debug ||
"${ANDROID_NDK_LLVM_STRIP}.back" --strip-all "\${2}"
echo "\${@}" | grep -q Debug ||
"${ANDROID_NDK_LLVM_STRIP}.back" "\${@}"
LLVMSTRIPTRICK

View File

@ -39,14 +39,10 @@ define_default_value ANDROID_PLATFORM_VER "16"
define_default_value NATIVE_LIBS_TOOLCHAIN_PATH "${HOME}/Builds/android-toolchains/retroshare-android-${ANDROID_PLATFORM_VER}-${ANDROID_NDK_ARCH}/"
define_default_value HOST_NUM_CPU $(nproc)
define_default_value ANDROID_SDK_INSTALL "false"
define_default_value ANDROID_SDK_TOOLS_VERSION "3859397"
define_default_value ANDROID_SDK_TOOLS_SHA256 444e22ce8ca0f67353bda4b85175ed3731cae3ffa695ca18119cbacef1c1bea0
define_default_value ANDROID_CMD_TOOLS_VERSION "8092744"
define_default_value ANDROID_CMD_TOOLS_SHA256 d71f75333d79c9c6ef5c39d3456c6c58c613de30e6a751ea0dbd433e8f8b9cbf
define_default_value ANDROID_SDK_VERSION "29.0.3"
define_default_value ANDROID_NDK_INSTALL "false"
define_default_value ANDROID_NDK_VERSION "r21"
define_default_value ANDROID_NDK_SHA256 b65ea2d5c5b68fb603626adcbcea6e4d12c68eb8a73e373bbb9d23c252fc647b
define_default_value ANDROID_NDK_VERSION "21.0.6113669"
define_default_value BZIP2_SOURCE_VERSION "1.0.6"
define_default_value BZIP2_SOURCE_SHA256 a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd
@ -73,6 +69,7 @@ define_default_value QT_INSTALL_PATH "${NATIVE_LIBS_TOOLCHAIN_PATH}/Qt/"
define_default_value QT_ANDROID_INSTALLER_SHA256 a214084e2295c9a9f8727e8a0131c37255bf724bfc69e80f7012ba3abeb1f763
## TODO: Report that 4.8 doesn't compile for Android and test newer versions
define_default_value RESTBED_SOURCE_REPO "https://github.com/Corvusoft/restbed.git"
define_default_value RESTBED_SOURCE_VERSION f74f9329dac82e662c1d570b7cd72c192b729eb4
@ -313,35 +310,30 @@ DUPLICATED_INCLUDES_DIR="${REPORT_DIR}/duplicated_includes/"
task_register install_android_sdk
install_android_sdk()
{
tFile="sdk-tools-linux-${ANDROID_SDK_TOOLS_VERSION}.zip"
# old SDK manager has been deprecated use new cmdline-tools as per
# https://stackoverflow.com/a/65782803
# https://developer.android.com/studio#command-tools
verified_download "${tFile}" "${ANDROID_SDK_TOOLS_SHA256}" \
tFile="commandlinetools-linux-${ANDROID_CMD_TOOLS_VERSION}_latest.zip"
verified_download "${tFile}" "${ANDROID_CMD_TOOLS_SHA256}" \
"https://dl.google.com/android/repository/${tFile}"
unzip "${tFile}"
mkdir -p "$ANDROID_SDK_PATH"
rm -rf "$ANDROID_SDK_PATH/tools/"
mv --verbose tools/ "$ANDROID_SDK_PATH/tools/"
rm -rf "$ANDROID_SDK_PATH"
CMD_TOOLS_DIR="$ANDROID_SDK_PATH/cmdline-tools/latest/"
mkdir -p "$CMD_TOOLS_DIR"
rm -rf "$CMD_TOOLS_DIR"
mv --verbose cmdline-tools/ "$CMD_TOOLS_DIR"
ANDROID_SDK_MANAGER="$CMD_TOOLS_DIR/bin/sdkmanager --sdk_root=$ANDROID_SDK_PATH"
# Install Android SDK
yes | $ANDROID_SDK_PATH/tools/bin/sdkmanager --licenses && \
$ANDROID_SDK_PATH/tools/bin/sdkmanager --update
$ANDROID_SDK_PATH/tools/bin/sdkmanager "platforms;android-$ANDROID_PLATFORM_VER"
$ANDROID_SDK_PATH/tools/bin/sdkmanager "build-tools;$ANDROID_SDK_VERSION"
}
task_register install_android_ndk
install_android_ndk()
{
tFile="android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip"
verified_download "${tFile}" "${ANDROID_NDK_SHA256}" \
"https://dl.google.com/android/repository/${tFile}"
unzip "${tFile}"
mkdir -p "$ANDROID_NDK_PATH"
rm -rf "$ANDROID_NDK_PATH"
mv --verbose "android-ndk-${ANDROID_NDK_VERSION}/" "$ANDROID_NDK_PATH/"
yes | $ANDROID_SDK_MANAGER --licenses && \
$ANDROID_SDK_MANAGER --update
$ANDROID_SDK_MANAGER "platforms;android-$ANDROID_PLATFORM_VER"
$ANDROID_SDK_MANAGER "build-tools;$ANDROID_SDK_VERSION"
$ANDROID_SDK_MANAGER "ndk;$ANDROID_NDK_VERSION"
}
## More information available at https://android.googlesource.com/platform/ndk/+/ics-mr0/docs/STANDALONE-TOOLCHAIN.html
@ -633,7 +625,7 @@ build_xapian()
https://oligarchy.co.uk/xapian/${XAPIAN_SOURCE_VERSION}/$D_file
rm -rf $B_dir
tar -xf $D_file
cd $B_dir
pushd $B_dir
B_endiannes_detection_failure_workaround="ac_cv_c_bigendian=no"
B_large_file=""
[ "${ANDROID_PLATFORM_VER}" -lt "24" ] && B_large_file="--disable-largefile"
@ -645,7 +637,10 @@ build_xapian()
--prefix="${PREFIX}" --with-sysroot="${SYSROOT}"
make -j${HOST_NUM_CPU}
make install
cd ..
# TODO: Fix upstream Xapian CMake package to find static library
sed -i 's/libxapian.so/libxapian.a/g' "${SYSROOT}/usr/lib/cmake/xapian/xapian-config.cmake"
popd
}
task_register build_miniupnpc
@ -858,22 +853,18 @@ build_mvptree()
task_register build_libretroshare
build_libretroshare()
{
S_dir="/home/gio/Development/rs-develop/libretroshare"
S_dir="$RS_SRC_DIR"
B_dir="libretroshare-build"
# -DCMAKE_SYSTEM_NAME="Android" \
# -DCMAKE_ANDROID_NDK="$ANDROID_NDK_PATH" \
# -DCMAKE_SYSTEM_VERSION=$ANDROID_PLATFORM_VER \
# -D RS_FORUM_DEEP_INDEX=ON -D RS_JSON_API=ON \
rm -rf $B_dir; mkdir $B_dir ; pushd $B_dir
andro_cmake -B. -H${S_dir} -DCMAKE_BUILD_TYPE=Release \
-D RS_ANDROID=ON -D RS_WARN_DEPRECATED=OFF -D RS_WARN_LESS=ON \
-D RS_LIBRETROSHARE_STATIC=OFF -D RS_LIBRETROSHARE_SHARED=ON \
-D RS_BRODCAST_DISCOVERY=ON -D RS_EXPORT_JNI_ONLOAD=ON
make -j${HOST_NUM_CPU}
make install
-D RS_BRODCAST_DISCOVERY=ON -D RS_EXPORT_JNI_ONLOAD=ON \
-D RS_SQLCIPHER=OFF -D RS_DH_PRIME_INIT_CHECK=OFF \
-D RS_FORUM_DEEP_INDEX=ON -D RS_JSON_API=ON || return $?
make -j${HOST_NUM_CPU} || return $?
make install || return $?
popd
}
@ -891,7 +882,7 @@ build_default_toolchain()
task_run build_openssl || return $?
task_run build_sqlcipher || return $?
task_run build_rapidjson || return $?
# task_run build_restbed || return $?
task_run build_restbed || return $?
# task_run build_udp-discovery-cpp || return $?
task_run build_xapian || return $?
task_run build_miniupnpc || return $?

View File

@ -0,0 +1,2 @@
# Keep libretroshare Java classes
-keep class org.retroshare.service.** { *; }

View File

@ -138,9 +138,10 @@ endif(RS_JSON_API)
list(
APPEND RS_SOURCES
pgp/pgpkeyutil.cc
pgp/openpgpsdkhandler.cc
pgp/pgpauxutils.cc
pgp/pgphandler.cc
pgp/pgpkeyutil.cc
pgp/rscertificate.cc )
#./plugins/dlfcn_win32.cc
@ -148,7 +149,10 @@ list(
#./plugins/pluginmanager.h
#./plugins/rscacheservice.h
#./plugins/rspqiservice.h
#./plugins/pluginmanager.cc
list(
APPEND RS_SOURCES
plugins/pluginmanager.cc )
list(
APPEND RS_SOURCES
@ -165,6 +169,7 @@ list(
pqi/p3cfgmgr.cc
pqi/p3notify.cc
pqi/p3servicecontrol.cc
pqi/pqifdbin.cc
pqi/pqinetstatebox.cc
pqi/pqiperson.cc
pqi/pqiservice.cc
@ -216,7 +221,6 @@ list(
#./rsitems/rsphotoitems.cc
#./rsitems/rsphotoitems.h
#./rsitems/rsposteditems.cc
#./rsitems/rsposteditems.h
#./rsitems/rswireitems.cc
#retroshare/rswire.h
@ -290,10 +294,12 @@ list(
#./services/p3photoservice.cc
#./services/p3photoservice.h
#./services/p3postbase.cc
#./services/p3postbase.h
#./services/p3posted.cc
#./services/p3posted.h
list(
APPEND RS_SOURCES
services/p3postbase.cc
services/p3posted.cc
rsitems/rsposteditems.cc )
if(RS_BRODCAST_DISCOVERY)
list(
@ -327,21 +333,19 @@ list(
list(
APPEND RS_SOURCES
# util/contentvalue.cc
# util/exampletst.c
# util/rsdbbind.cc
# util/rsdiscspace.cc
util/contentvalue.cc
util/rsdbbind.cc
util/rsdiscspace.cc
util/rsexpr.cc
util/rsprint.cc
# util/rsrecogn.cc
# util/rssharedptr.h
# util/rstickevent.cc
util/rsrecogn.cc
util/rstickevent.cc
util/rstime.cc
util/smallobject.cc
# util/retrodb.cc
util/retrodb.cc
util/rsbase64.cc
util/rsjson.cc
# util/rskbdinput.cc
util/rskbdinput.cc
util/rsrandom.cc
util/rsstring.cc
util/rsurl.cc
@ -383,13 +387,13 @@ list(
if(RS_MINIUPNPC)
list(
APPEND RS_SOURCES
rs_upnp/upnphandler_miniupnp.cc )
rs_upnp/upnphandler_miniupnp.cc
rs_upnp/upnputil.cc )
endif(RS_MINIUPNPC)
#./rs_upnp/UPnPBase.cpp
#./rs_upnp/upnphandler_libupnp.cc
#./rs_upnp/upnptest.cc
#./rs_upnp/upnputil.cc
#if(CMAKE_SYSTEM_NAME STREQUAL "Android")
if(RS_ANDROID)
@ -399,3 +403,22 @@ if(RS_ANDROID)
rs_android/retroshareserviceandroid.cpp
rs_android/rsjni.cpp )
endif()
list(
APPEND RS_SOURCES
tor/AddOnionCommand.cpp
tor/AuthenticateCommand.cpp
tor/CryptoKey.cpp
tor/GetConfCommand.cpp
tor/HiddenService.cpp
tor/PendingOperation.cpp
tor/ProtocolInfoCommand.cpp
tor/SetConfCommand.cpp
tor/StrUtil.cpp
tor/TorControl.cpp
tor/TorControlCommand.cpp
tor/TorControlSocket.cpp
tor/TorProcess.cpp
tor/TorManager.cpp
pqi/rstcpsocket.cc
pqi/pqiproxy.cc )

View File

@ -4,8 +4,8 @@
* libretroshare: retroshare core library *
* *
* Copyright (C) 2012 Christopher Evi-Parker *
* Copyright (C) 2018-2021 Gioacchino Mazzurco <gio@eigenlab.org> *
* Copyright (C) 2019-2021 Asociación Civil Altermundi <info@altermundi.net> *
* Copyright (C) 2018-2022 Gioacchino Mazzurco <gio@eigenlab.org> *
* Copyright (C) 2019-2022 Asociación Civil Altermundi <info@altermundi.net> *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as *
@ -36,7 +36,6 @@
#include "rsgxsnetutils.h"
#include "pqi/p3cfgmgr.h"
#include "rsgixs.h"
#include "util/rssharedptr.h"
/// keep track of transaction number
typedef std::map<uint32_t, NxsTransaction*> TransactionIdMap;

View File

@ -23,8 +23,10 @@
#include <string>
#include <sstream>
#include <memory>
#include <restbed>
#include <typeinfo>
#include <vector>
#include <restbed>
#include <openssl/crypto.h>

View File

@ -36,7 +36,6 @@ extern "C" {
#include "openpgpsdk/keyring.h"
}
/// This class offer an abstract pgp handler to be used in RetroShare.
class OpenPGPSDKHandler: public PGPHandler
{
public:

View File

@ -966,6 +966,23 @@ protected:
// Integral types VLQ //
//============================================================================//
/* Avoid bool-compare warning being emitted for specific sections of code, for
* compilers that supports it, clang would warn about unkown warning if not
* explicitely excluded (it defiles GCC macros too)
* @see https://nelkinda.com/blog/suppress-warnings-in-gcc-and-clang/#d11e201
* @see https://stackoverflow.com/a/28166605
*/
#if defined(__GNUG__) && ! defined(__clang__)
# define RsTypeSerializer_SUPPRESS_WBC_WARNING_PUSH \
_Pragma("GCC diagnostic push") \
_Pragma("GCC diagnostic ignored \"-Wbool-compare\"")
# define RsTypeSerializer_SUPPRESS_WBC_WARNING_POP \
_Pragma("GCC diagnostic pop")
#else
# define RsTypeSerializer_SUPPRESS_WBC_WARNING_PUSH
# define RsTypeSerializer_SUPPRESS_WBC_WARNING_POP
#endif
/**
* Size calculation of unsigned integers as Variable Lenght Quantity
* @see RsSerializationFlags::INTEGER_VLQ
@ -979,10 +996,9 @@ protected:
{
std::decay_t<T> memberBackup = member;
uint32_t ret = 1;
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wbool-compare"
RsTypeSerializer_SUPPRESS_WBC_WARNING_PUSH
while(member > 127) { ++ret; member >>= 7; }
#pragma GCC diagnostic pop
RsTypeSerializer_SUPPRESS_WBC_WARNING_POP
Dbg2() << __PRETTY_FUNCTION__ << " memberBackup: " << memberBackup
<< " return: " << ret << std::endl;
return ret;
@ -1006,8 +1022,7 @@ protected:
#endif
bool ok = true;
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wbool-compare"
RsTypeSerializer_SUPPRESS_WBC_WARNING_PUSH
/* Check with < and not with <= here as we write last byte after
* the loop. Order of && operands very important here! */
while(member > 127 && (ok = (offset < size)))
@ -1017,7 +1032,7 @@ protected:
// Remove the seven bits we just wrote
member >>= 7;
}
#pragma GCC diagnostic pop
RsTypeSerializer_SUPPRESS_WBC_WARNING_POP
if(!(ok = ok && offset <= size))
{

View File

@ -1,40 +0,0 @@
#include "utest.h"
#include <string.h>
/* must define the global variables */
INITTEST();
int main(int argc, char **argv)
{
int a = 2;
int b = 3;
int c = 2;
CHECK( a == c );
REPORT( "Initial Tests");
CHECK( (0 == strcmp("123", "123")) );
REPORT( "Successful Tests");
CHECK( a == b );
CHECK( (0 == strcmp("123", "12345")) );
REPORT( "Failed Tests" );
CHECK( 1 );
CHECK( a == c );
REPORT( "Later Successful Tests");
FINALREPORT( "Example Tests" );
return TESTRESULT();
}

View File

@ -310,7 +310,7 @@ struct hexDump {
using Dbg4 RS_DEPRECATED_FOR(RS_DBG4) = RsDbg;
namespace RsLog {
enum RS_DEPRECATED_FOR("RsErr, RsDbg, RsNoDbg") logLvl {
enum RS_DEPRECATED_FOR("RS_ERR, RS_DBG, RS_DBG3...") logLvl {
None = -1,
Default = 0,
Alert = 1,
@ -322,7 +322,7 @@ namespace RsLog {
};
// this struct must be provided by the caller (to rslog())
struct RS_DEPRECATED_FOR("RsErr, RsDbg, RsNoDbg") logInfo {
struct RS_DEPRECATED_FOR("RS_ERR, RS_DBG, RS_DBG3...") logInfo {
// module specific log lvl
logLvl lvl;
// module name (displayed in log)
@ -330,16 +330,16 @@ namespace RsLog {
};
}
RS_DEPRECATED_FOR("RsErr, RsDbg, RsNoDbg")
RS_DEPRECATED_FOR("RS_ERR, RS_DBG, RS_DBG3...")
int setDebugCrashMode(const char *cfile);
RS_DEPRECATED_FOR("RsErr, RsDbg, RsNoDbg")
RS_DEPRECATED_FOR("RS_ERR, RS_DBG, RS_DBG3...")
int setDebugFile(const char *fname);
RS_DEPRECATED_FOR("RsErr, RsDbg, RsNoDbg")
RS_DEPRECATED_FOR("RS_ERR, RS_DBG, RS_DBG3...")
int setOutputLevel(RsLog::logLvl lvl);
RS_DEPRECATED_FOR("RsErr, RsDbg, RsNoDbg")
RS_DEPRECATED_FOR("RS_ERR, RS_DBG, RS_DBG3...")
void rslog(const RsLog::logLvl lvl, RsLog::logInfo *info, const std::string &msg);

View File

@ -28,7 +28,17 @@
#include <namedpipeapi.h>
#include <errno.h>
#else
#include <fcntl.h>
# include <fcntl.h>
#endif
#ifdef __ANDROID__
# include <android/api-level.h>
# if __ANDROID_API__ < 18
# include "util/rsdebug.h"
# include "util/stacktrace.h"
# include <cstdlib>
# include <cerrno>
# endif
#endif
int RsFileUtil::set_fd_nonblock(int fd)
@ -101,7 +111,13 @@ ssize_t RsFileUtil::rs_getline(char **lineptr, size_t *n, FILE *stream)
ptr = new_lineptr + diff;
}
}
#elif defined(__ANDROID__) && __ANDROID_API__ < 18
#warning "RsFileUtil::rs_getline not supported for Android API < 18"
RS_FATAL("not supported for Android API ", __ANDROID_API__, " < 18");
print_stacktrace();
exit(ENOSYS);
#else // ie UNIX
return getline(lineptr, n, stream);
return getline(lineptr, n, stream);
#endif
}

View File

@ -127,4 +127,5 @@ std::string rs_getpass(const std::string& prompt, bool no_echo)
}
}
#endif
#endif
#endif // ndef __ANDROID__

View File

@ -1,7 +1,7 @@
/*******************************************************************************
* libretroshare *
* *
* Copyright (C) 2016-2018 Gioacchino Mazzurco <gio@eigenlab.org> *
* Copyright (C) 2016-2022 Gioacchino Mazzurco <gio@retroshare.cc> *
* Copyright (C) 2008 Timo Bingmann http://idlebox.net/ *
* *
* This program is free software: you can redistribute it and/or modify *
@ -37,7 +37,7 @@
* @param[in] out output file
* @param[in] maxFrames maximum number of stack frames you want to bu printed
*/
static inline void print_stacktrace(
static void print_stacktrace(
bool demangle = true, FILE *out = stderr, unsigned int maxFrames = 63 );
@ -46,7 +46,7 @@ static inline void print_stacktrace(
#include <execinfo.h>
#include <cxxabi.h>
static inline void print_stacktrace(
static void print_stacktrace(
bool demangle, FILE* out, unsigned int maxFrames )
{
if(!out)
@ -163,7 +163,7 @@ struct RsAndroidBacktraceState
void** end;
};
static inline _Unwind_Reason_Code android_unwind_callback(
static _Unwind_Reason_Code android_unwind_callback(
struct _Unwind_Context* context, void* arg )
{
RsAndroidBacktraceState* state = static_cast<RsAndroidBacktraceState*>(arg);
@ -177,7 +177,7 @@ static inline _Unwind_Reason_Code android_unwind_callback(
return _URC_NO_REASON;
}
static inline void print_stacktrace(
static void print_stacktrace(
bool demangle, FILE* /*out*/, unsigned int /*maxFrames*/)
{
constexpr int max = 5000;
@ -243,7 +243,7 @@ static inline void print_stacktrace(
#else // defined(__linux__) && defined(__GLIBC__)
static inline void print_stacktrace(
static void print_stacktrace(
bool /*demangle*/, FILE* out, unsigned int /*max_frames*/ )
{
/** Notify the user which signal was caught. We use printf, because this