diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0154c8272..beb4dbb2d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,21 +3,6 @@ # for each minimum Android API level. After build the AAR packages are published # on the project Gitlab maven repository -android-AAR-minapi16: - rules: - - if: $PROJECT_HAVE_STORAGE50_RUNNERS == "true" - image: registry.gitlab.com/retroshare/retroshare:android_aar_base_16 - script: - - rm -rf /libretroshare-aar/ - - > - ./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/" - tags: - - storage50 - android-AAR-minapi21: rules: - if: $PROJECT_HAVE_STORAGE50_RUNNERS == "true" @@ -53,42 +38,6 @@ android-AAR-minapi24: # split per architecture and build type and without maven publishing, instead at # the end of the job the artifact is made available -android-minapi16_armeabi-v7a_bundleDebugAar: - rules: - - if: $PROJECT_HAVE_STORAGE50_RUNNERS != "true" - image: registry.gitlab.com/retroshare/retroshare:android_aar_base_16_armeabi-v7a_bundleDebugAar - script: - - rm -rf /libretroshare-aar/ - - > - ./gradlew bundleDebugAar - -Dorg.gradle.project.buildDir=/libretroshare-build/ - -PANDROID_MIN_API_LEVEL=16 - -PLIBRETROSHARE_SOURCE_VERSION="$CI_COMMIT_SHORT_SHA" - -PNATIVE_TOOLCHAINS_DIR="/libretroshare-native-toolchains/" - -PJNI_NATIVE_LIBS_ARCHS="armeabi-v7a" - - mv /libretroshare-build/outputs/aar/ $CI_PROJECT_DIR/outputs-aar/ - artifacts: - paths: - - outputs-aar/ - -android-minapi16_armeabi-v7a_bundleReleaseAar: - rules: - - if: $PROJECT_HAVE_STORAGE50_RUNNERS != "true" - image: registry.gitlab.com/retroshare/retroshare:android_aar_base_16_armeabi-v7a_bundleReleaseAar - script: - - rm -rf /libretroshare-aar/ - - > - ./gradlew bundleReleaseAar - -Dorg.gradle.project.buildDir=/libretroshare-build/ - -PANDROID_MIN_API_LEVEL=16 - -PLIBRETROSHARE_SOURCE_VERSION="$CI_COMMIT_SHORT_SHA" - -PNATIVE_TOOLCHAINS_DIR="/libretroshare-native-toolchains/" - -PJNI_NATIVE_LIBS_ARCHS="armeabi-v7a" - - mv /libretroshare-build/outputs/aar/ $CI_PROJECT_DIR/outputs-aar/ - artifacts: - paths: - - outputs-aar/ - android-minapi21_arm64-v8a_bundleDebugAar: rules: - if: $PROJECT_HAVE_STORAGE50_RUNNERS != "true" @@ -125,42 +74,6 @@ android-minapi21_arm64-v8a_bundleReleaseAar: paths: - outputs-aar/ -android-minapi21_armeabi-v7a_bundleDebugAar: - rules: - - if: $PROJECT_HAVE_STORAGE50_RUNNERS != "true" - image: registry.gitlab.com/retroshare/retroshare:android_aar_base_21_armeabi-v7a_bundleDebugAar - script: - - rm -rf /libretroshare-aar/ - - > - ./gradlew bundleDebugAar - -Dorg.gradle.project.buildDir=/libretroshare-build/ - -PANDROID_MIN_API_LEVEL=21 - -PLIBRETROSHARE_SOURCE_VERSION="$CI_COMMIT_SHORT_SHA" - -PNATIVE_TOOLCHAINS_DIR="/libretroshare-native-toolchains/" - -PJNI_NATIVE_LIBS_ARCHS="armeabi-v7a" - - mv /libretroshare-build/outputs/aar/ $CI_PROJECT_DIR/outputs-aar/ - artifacts: - paths: - - outputs-aar/ - -android-minapi21_armeabi-v7a_bundleReleaseAar: - rules: - - if: $PROJECT_HAVE_STORAGE50_RUNNERS != "true" - image: registry.gitlab.com/retroshare/retroshare:android_aar_base_21_armeabi-v7a_bundleReleaseAar - script: - - rm -rf /libretroshare-aar/ - - > - ./gradlew bundleReleaseAar - -Dorg.gradle.project.buildDir=/libretroshare-build/ - -PANDROID_MIN_API_LEVEL=21 - -PLIBRETROSHARE_SOURCE_VERSION="$CI_COMMIT_SHORT_SHA" - -PNATIVE_TOOLCHAINS_DIR="/libretroshare-native-toolchains/" - -PJNI_NATIVE_LIBS_ARCHS="armeabi-v7a" - - mv /libretroshare-build/outputs/aar/ $CI_PROJECT_DIR/outputs-aar/ - artifacts: - paths: - - outputs-aar/ - android-minapi24_arm64-v8a_bundleDebugAar: rules: - if: $PROJECT_HAVE_STORAGE50_RUNNERS != "true" @@ -196,39 +109,3 @@ android-minapi24_arm64-v8a_bundleReleaseAar: artifacts: paths: - outputs-aar/ - -android-minapi24_armeabi-v7a_bundleDebugAar: - rules: - - if: $PROJECT_HAVE_STORAGE50_RUNNERS != "true" - image: registry.gitlab.com/retroshare/retroshare:android_aar_base_24_armeabi-v7a_bundleDebugAar - script: - - rm -rf /libretroshare-aar/ - - > - ./gradlew bundleDebugAar - -Dorg.gradle.project.buildDir=/libretroshare-build/ - -PANDROID_MIN_API_LEVEL=24 - -PLIBRETROSHARE_SOURCE_VERSION="$CI_COMMIT_SHORT_SHA" - -PNATIVE_TOOLCHAINS_DIR="/libretroshare-native-toolchains/" - -PJNI_NATIVE_LIBS_ARCHS="armeabi-v7a" - - mv /libretroshare-build/outputs/aar/ $CI_PROJECT_DIR/outputs-aar/ - artifacts: - paths: - - outputs-aar/ - -android-minapi24_armeabi-v7a_bundleReleaseAar: - rules: - - if: $PROJECT_HAVE_STORAGE50_RUNNERS != "true" - image: registry.gitlab.com/retroshare/retroshare:android_aar_base_24_armeabi-v7a_bundleReleaseAar - script: - - rm -rf /libretroshare-aar/ - - > - ./gradlew bundleReleaseAar - -Dorg.gradle.project.buildDir=/libretroshare-build/ - -PANDROID_MIN_API_LEVEL=24 - -PLIBRETROSHARE_SOURCE_VERSION="$CI_COMMIT_SHORT_SHA" - -PNATIVE_TOOLCHAINS_DIR="/libretroshare-native-toolchains/" - -PJNI_NATIVE_LIBS_ARCHS="armeabi-v7a" - - mv /libretroshare-build/outputs/aar/ $CI_PROJECT_DIR/outputs-aar/ - artifacts: - paths: - - outputs-aar/ diff --git a/CMakeLists.txt b/CMakeLists.txt index cc53b58f4..99df682d6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,6 @@ # RetroShare decentralized communication platform # -# Copyright (C) 2021-2022 Gioacchino Mazzurco -# Copyright (C) 2021-2022 Asociación Civil Altermundi +# Copyright (C) 2021-2026 Gioacchino Mazzurco # # SPDX-License-Identifier: CC0-1.0 @@ -244,23 +243,7 @@ if(RS_LIBRETROSHARE_SHARED) endif() endif(RS_LIBRETROSHARE_SHARED) - - -if(RS_ANDROID) - # As of today Android NDK libc++ doesn't support std::filesystem properly, - # in a very confusing manner the headers have the function declarations but - # then the shared object file doesn't have the implementation. - # This fools the compiler which doesn't report any error but then at runtime - # we get a crash with this error: - # java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol - # "_ZNSt6__ndk14__fs10filesystem20__create_directoriesERKNS1_4pathEPNS_10error_codeE" - # referenced by "/data/app/==/lib/arm64/libretroshare.so - # So set maximum supported C++ version to 14 to workaround this Android bug - # https://github.com/android/ndk/issues/609 - set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14) -else() - set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 17) -endif() +set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 17) if(WIN32) target_compile_definitions( @@ -331,27 +314,73 @@ target_include_directories(${PROJECT_NAME} PRIVATE ${OPENSSL_INCLUDE_DIR}) target_link_libraries(${PROJECT_NAME} PRIVATE OpenSSL::SSL OpenSSL::Crypto) ################################################################################ - if(RS_RNPLIB) - # librnp - set(SAVED_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) - set(BUILD_TESTING OFF) - set(BUILD_SHARED_LIBS OFF) - set(DOWNLOAD_GTEST OFF) - set(ENABLE_DOC OFF CACHE BOOL "Disable librnp docs" FORCE) - add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/../supportlibs/librnp" "${CMAKE_CURRENT_BINARY_DIR}/librnp") - set(BUILD_SHARED_LIBS ${SAVED_BUILD_SHARED_LIBS}) + macro(rnplib_set_inline_build_options) + set(RNPLIB_BUILD_SHARED ${RS_LIBRETROSHARE_SHARED}) + set(SAVED_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) + set(BUILD_TESTING OFF) + set(BUILD_SHARED_LIBS ${RNPLIB_BUILD_SHARED}) + set(DOWNLOAD_GTEST OFF) + set(ENABLE_DOC OFF CACHE BOOL "Disable librnp docs" FORCE) + endmacro() - target_link_libraries(${PROJECT_NAME} PRIVATE - librnp - sexpp - ) + macro(rnplib_restore_build_options) + set(BUILD_SHARED_LIBS ${SAVED_BUILD_SHARED_LIBS}) + endmacro() - target_include_directories(${PROJECT_NAME} PUBLIC - "${CMAKE_CURRENT_SOURCE_DIR}/../supportlibs/librnp/include" - "${CMAKE_CURRENT_BINARY_DIR}/librnp/src/lib" - ) + set(RNPLIB_DEVEL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../supportlibs/librnp/") + + if(EXISTS "${RNPLIB_DEVEL_DIR}/CMakeLists.txt") + message(STATUS "librnp source found at ${RNPLIB_DEVEL_DIR} using it") + rnplib_set_inline_build_options() + add_subdirectory("${RNPLIB_DEVEL_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/librnp") + rnplib_restore_build_options() + set(RNPLIB_SRC_DIR "${RNPLIB_DEVEL_DIR}") + set(RNPLIB_BIN_DIR "${CMAKE_CURRENT_BINARY_DIR}/librnp") + set(RNPLIB_INLINE_BUILD ON) + else() + find_library(LIBRNP_LIBRARY NAMES rnp) + if(LIBRNP_LIBRARY) + message(STATUS "Found pre-built librnp at ${LIBRNP_LIBRARY}") + find_library(LIBSEXPP_LIBRARY NAMES sexpp) + target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBRNP_LIBRARY}) + if(LIBSEXPP_LIBRARY) + message(STATUS "and sexpp at ${LIBSEXPP_LIBRARY}") + target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBSEXPP_LIBRARY}) + endif() + set(RNPLIB_INLINE_BUILD OFF) + else() + message(STATUS "librnp not found locally, using FetchContent") + rnplib_set_inline_build_options() + FetchContent_Declare( + librnp + GIT_REPOSITORY "https://github.com/rnpgp/rnp.git" + GIT_TAG "origin/main" + GIT_SHALLOW TRUE + GIT_PROGRESS TRUE + TIMEOUT 10 + ) + FetchContent_MakeAvailable(librnp) + rnplib_restore_build_options() + set(RNPLIB_SRC_DIR "${librnp_SOURCE_DIR}") + set(RNPLIB_BIN_DIR "${librnp_BINARY_DIR}") + set(RNPLIB_INLINE_BUILD ON) + endif() + endif() + + if(RNPLIB_INLINE_BUILD) + target_include_directories(${PROJECT_NAME} PUBLIC + "${RNPLIB_SRC_DIR}/include" + "${RNPLIB_BIN_DIR}/src/lib" + ) + + if(RNPLIB_BUILD_SHARED) + target_link_libraries(${PROJECT_NAME} PRIVATE librnp) + else() + target_link_libraries(${PROJECT_NAME} PRIVATE librnp sexpp) + endif() + endif() else() set(OPENPGPSDK_DEVEL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../openpgpsdk/") @@ -391,7 +420,7 @@ if(RS_BITDHT) else() FetchContent_Declare( bitdht - GIT_REPOSITORY "https://github.com/RetroShare/BitDHT.git" + GIT_REPOSITORY "https://github.com/RetroShare/BitDHT.git" GIT_TAG "origin/master" GIT_SHALLOW TRUE GIT_PROGRESS TRUE @@ -650,6 +679,8 @@ if(RS_BRODCAST_DISCOVERY) set(BUILD_EXAMPLE OFF CACHE BOOL "Do not build udp-discovery-cpp examples") set(BUILD_TOOL OFF CACHE BOOL "Do not build udp-discovery-tool application") + set(CMAKE_POLICY_VERSION_MINIMUM 3.5) + set(UDP_DISCOVERY_DEVEL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../supportlibs/udp-discovery-cpp/") if(EXISTS "${UDP_DISCOVERY_DEVEL_DIR}/CMakeLists.txt") message( STATUS @@ -746,23 +777,20 @@ set(V_VERSION_SET OFF) if( NOT RS_MAJOR_VERSION STREQUAL "" AND NOT RS_MINOR_VERSION STREQUAL "" AND NOT RS_MINI_VERSION STREQUAL "" ) - message(STATUS "RetroShare version ${RS_MAJOR_VERSION}.${RS_MINOR_VERSION}.${RS_MINI_VERSION}${RS_EXTRA_VERSION} defined in command line") + message(STATUS "libRetroShare version ${RS_MAJOR_VERSION}.${RS_MINOR_VERSION}.${RS_MINI_VERSION}${RS_EXTRA_VERSION} defined in command line") set(V_VERSION_SET ON) else() set(V_GIT_DESCRIBE_OUTPUT "") set(V_GIT_DESCRIBE_REGEXP "^v([0-9]+).([0-9]+).([0-9]+)(.*)\n$") - set(V_GIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}") - if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../.git") - set(V_GIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/..") - endif() - execute_process( COMMAND ${GIT_EXECUTABLE} describe --tags --long --match v*.*.* - WORKING_DIRECTORY "${V_GIT_DIR}" - OUTPUT_VARIABLE V_GIT_DESCRIBE_OUTPUT ) + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + OUTPUT_VARIABLE V_GIT_DESCRIBE_OUTPUT + RESULT_VARIABLE V_GIT_RESULT ) # Avoid CMake failure if git fails - if(V_GIT_DESCRIBE_OUTPUT MATCHES "${V_GIT_DESCRIBE_REGEXP}") + if( V_GIT_RESULT EQUAL 0 AND + V_GIT_DESCRIBE_OUTPUT MATCHES "${V_GIT_DESCRIBE_REGEXP}" ) string( REGEX REPLACE "${V_GIT_DESCRIBE_REGEXP}" "\\1;\\2;\\3;\\4" @@ -772,10 +800,10 @@ else() list(GET V_GIT_DESCRIBE_LIST 2 RS_MINI_VERSION) list(GET V_GIT_DESCRIBE_LIST 3 RS_EXTRA_VERSION) - message("RetroShare version ${RS_MAJOR_VERSION}.${RS_MINOR_VERSION}.${RS_MINI_VERSION}${RS_EXTRA_VERSION} determined via git") + message("libRetroShare version ${RS_MAJOR_VERSION}.${RS_MINOR_VERSION}.${RS_MINI_VERSION}${RS_EXTRA_VERSION} determined via git") set(V_VERSION_SET ON) else() - message(WARNING "Determining RetroShare version via git failed plese specify it through CMake command line arguments!") + message(WARNING "Determining libRetroShare version via git failed please specify it through CMake command line arguments!") endif() endif() @@ -788,22 +816,6 @@ if(V_VERSION_SET) PUBLIC RS_EXTRA_VERSION="${RS_EXTRA_VERSION}" ) endif(V_VERSION_SET) -# Define the libretroshare specific version hash (submodule hash) -set(V_LIB_GIT_HASH "") -execute_process( - COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=7 --always --dirty - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - OUTPUT_VARIABLE V_LIB_GIT_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE ) - -if(V_LIB_GIT_HASH STREQUAL "") - set(V_LIB_GIT_HASH "[version not available]") -endif() - -target_compile_definitions( - ${PROJECT_NAME} - PUBLIC RS_LIB_VERSION_HASH="${V_LIB_GIT_HASH}" ) - ################################################################################ # TODO: Use generator expressions instead of CMAKE_BUILD_TYPE see diff --git a/build.gradle b/build.gradle index 31baadaa7..21d093738 100644 --- a/build.gradle +++ b/build.gradle @@ -1,15 +1,14 @@ /* * libretroshare Android AAR library gradle builder * - * Copyright (C) 2022 Gioacchino Mazzurco - * Copyright (C) 2022 Asociación Civil Altermundi + * Copyright (C) 2022-2026 Gioacchino Mazzurco * * 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 + * -PANDROID_MIN_API_LEVEL=21 (change 21 to what you need) on the gradle command * line. * * LIBRETROSHARE_SOURCE_VERSION Set source version ex: @@ -17,7 +16,7 @@ * * 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 + * -PJNI_NATIVE_LIBS_ARCHS="arm64-v8a" defaults to all architectures * supported by current script at current Android minimum API * * Optionally set NATIVE_TOOLCHAINS_DIR for easier reuse of toolchains which @@ -65,7 +64,7 @@ ext.getAndroidMinApiLevel = } else { - return 16 + return 21 } } @@ -77,14 +76,7 @@ ext.getJniNativeLibsArchs = } else { - if(getAndroidMinApiLevel() <= 16) - { - return ['armeabi-v7a'] - } - else - { - return ['arm64-v8a', 'armeabi-v7a'] - } + return ['arm64-v8a'] } } @@ -191,10 +183,6 @@ ext.buildLibretroshareNativeLib = def libcxxsharedTriple = "unsupported" switch(pAbi) { - case "armeabi-v7a": - toolchainArch = "arm"; - libcxxsharedTriple = "arm-linux-androideabi"; - break; case "arm64-v8a": toolchainArch = "arm64"; libcxxsharedTriple = "aarch64-linux-android"; @@ -287,7 +275,7 @@ android // see https://stackoverflow.com/questions/27301867/what-is-compilesdkversion compileSdkVersion 21 - ndkVersion "21.0.6113669" + ndkVersion "29.0.14206865" defaultConfig { diff --git a/misc/Android/Dockerfile b/misc/Android/Dockerfile index f93207b96..cdac93ec3 100644 --- a/misc/Android/Dockerfile +++ b/misc/Android/Dockerfile @@ -1,7 +1,7 @@ ## 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 ANDROID_MIN_API_LEVEL=21 # 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 . @@ -9,49 +9,65 @@ ## use --squash ## and set ## GRADLE_BUILD_TASK to bundleDebugAar or bundleReleaseAar -## JNI_NATIVE_LIBS_ARCHS to arm64-v8a or armeabi-v7a +## JNI_NATIVE_LIBS_ARCHS to arm64-v8a ## 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} -## To esly extract artifacts and other files you ar einterested into from the +## To easly extract artifacts and other files you are interested into from the ## image you can use a command similar to: # docker cp $(docker create --rm ${CI_IMAGE_NAME}):/libretroshare-aar/* $HOME/ ## see https://stackoverflow.com/a/59055906 -FROM ubuntu:21.10 +FROM ubuntu:26.04 ENV DEBIAN_FRONTEND=noninteractive ENV APT_UNAT="--assume-yes --quiet" +ENV APT_INSTALL="apt-get install --no-install-recommends $APT_UNAT" 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 \ +RUN $APT_INSTALL \ bash build-essential bzip2 cmake curl chrpath doxygen \ - git python python3 tclsh unzip wget zip + git python-is-python3 python3 tclsh unzip wget zip # Dependencies to create Android pkg -RUN apt-get install --no-install-recommends $APT_UNAT \ +RUN $APT_INSTALL \ openjdk-11-jre openjdk-11-jdk openjdk-11-jdk-headless +# Dependecies to run librnp compile time openssl feature detection +RUN $APT_INSTALL qemu-user + 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/" +## Copy only the toolchain build script first so Docker layer cache is not +## invalidated by unrelated source changes (C++, CMake, etc). This avoids +## re-downloading the Android SDK and rebuilding all native dependencies +## from scratch on every source edit. The full source tree is copied later +## just before the Gradle build which actually needs it. ARG SOURCE_PATH=./ -COPY $SOURCE_PATH /libretroshare +COPY $SOURCE_PATH/misc/Android/prepare-toolchain-clang.sh /libretroshare/misc/Android/prepare-toolchain-clang.sh WORKDIR /libretroshare-build/ RUN /libretroshare/misc/Android/prepare-toolchain-clang.sh install_android_sdk WORKDIR /libretroshare/ -ARG ANDROID_MIN_API_LEVEL=16 +ARG ANDROID_MIN_API_LEVEL=21 ARG LIBRETROSHARE_SOURCE_VERSION="Dockerfile_unset" ARG GRADLE_BUILD_TASK="build" -ARG JNI_NATIVE_LIBS_ARCHS="arm64-v8a armeabi-v7a" +ARG JNI_NATIVE_LIBS_ARCHS="arm64-v8a" ARG NATIVE_TOOLCHAINS_DIR="/libretroshare-native-toolchains/" + +## Full source tree needed at this point for the Gradle build. Changes to +## source files will invalidate Docker layer cache from here onward, but all +## toolchain layers above remain cached as long as prepare-toolchain-clang.sh +## is unchanged. +COPY $SOURCE_PATH /libretroshare + RUN ./gradlew $GRADLE_BUILD_TASK \ -Dorg.gradle.project.buildDir=/libretroshare-build/ \ -PANDROID_MIN_API_LEVEL=$ANDROID_MIN_API_LEVEL \ diff --git a/misc/Android/GitlabCI_images_prepare.sh b/misc/Android/GitlabCI_images_prepare.sh index 05b1916f9..2080be74e 100755 --- a/misc/Android/GitlabCI_images_prepare.sh +++ b/misc/Android/GitlabCI_images_prepare.sh @@ -2,8 +2,7 @@ # Script to prepare libretroshare Android testing and publishing Docker images # -# Copyright (C) 2016-2022 Gioacchino Mazzurco -# Copyright (C) 2020-2022 Asociación Civil Altermundi +# Copyright (C) 2016-2026 Gioacchino Mazzurco # # This program is free software: you can redistribute it and/or modify it under # the terms of the GNU Affero General Public License as published by the @@ -34,8 +33,8 @@ function define_default_value() } define_default_value LIBRETROSHARE_SOURCE_VERSION "$(git describe --always)" -define_default_value ANDROID_MIN_API_LEVELS "16 21 24" -define_default_value JNI_NATIVE_LIBS_ARCHS "arm64-v8a armeabi-v7a" +define_default_value ANDROID_MIN_API_LEVELS "21 24" +define_default_value JNI_NATIVE_LIBS_ARCHS "arm64-v8a" define_default_value GRADLE_FULL_TASK "build" # set to "none" to disable define_default_value GRADLE_SPLIT_TASKS "bundleDebugAar bundleReleaseAar" @@ -58,7 +57,6 @@ function buildDetachPush() for mApiLevel in $(shuf --echo $ANDROID_MIN_API_LEVELS) ; do ANDROID_MIN_API_LEVEL=$mApiLevel CURR_JNI_NATIVE_LIBS_ARCHS="$JNI_NATIVE_LIBS_ARCHS" - [ "$mApiLevel" -gt "16" ] || CURR_JNI_NATIVE_LIBS_ARCHS="armeabi-v7a" [ "$GRADLE_FULL_TASK" == "none" ] || { diff --git a/misc/Android/prepare-toolchain-clang.sh b/misc/Android/prepare-toolchain-clang.sh index bf240c166..43f2103de 100755 --- a/misc/Android/prepare-toolchain-clang.sh +++ b/misc/Android/prepare-toolchain-clang.sh @@ -2,8 +2,7 @@ # Script to prepare RetroShare Android package building toolchain # -# Copyright (C) 2016-2022 Gioacchino Mazzurco -# Copyright (C) 2020-2022 Asociación Civil Altermundi +# Copyright (C) 2016-2026 Gioacchino Mazzurco # # This program is free software: you can redistribute it and/or modify it under # the terms of the GNU Affero General Public License as published by the @@ -39,26 +38,26 @@ function define_default_value() ## You are supposed to provide the following variables according to your system setup define_default_value ANDROID_SDK_PATH "/opt/android-sdk/" -define_default_value ANDROID_NDK_PATH "/opt/android-ndk/" -define_default_value ANDROID_NDK_ARCH "arm" -define_default_value ANDROID_PLATFORM_VER "16" +define_default_value ANDROID_NDK_ARCH "arm64" +define_default_value ANDROID_PLATFORM_VER "21" 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_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_VERSION "21.0.6113669" +define_default_value ANDROID_NDK_VERSION "29.0.14206865" +define_default_value ANDROID_NDK_PATH "${ANDROID_SDK_PATH}/ndk/${ANDROID_NDK_VERSION}/" -define_default_value BZIP2_SOURCE_VERSION "1.0.6" -define_default_value BZIP2_SOURCE_SHA256 a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd +define_default_value BZIP2_SOURCE_VERSION "1.0.8" +define_default_value BZIP2_SOURCE_SHA256 ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269 define_default_value OPENSSL_SOURCE_VERSION "1.1.1n" define_default_value OPENSSL_SOURCE_SHA256 40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a -define_default_value SQLITE_SOURCE_YEAR "2018" -define_default_value SQLITE_SOURCE_VERSION "3250200" -define_default_value SQLITE_SOURCE_SHA256 da9a1484423d524d3ac793af518cdf870c8255d209e369bd6a193e9f9d0e3181 +define_default_value SQLITE_SOURCE_YEAR "2026" +define_default_value SQLITE_SOURCE_VERSION "3530200" +define_default_value SQLITE_SOURCE_SHA256 588ad51949419a56ebe81fe56193d510c559eb94c9a57748387860b5d3069316 define_default_value SQLCIPHER_SOURCE_VERSION "4.4.3" define_default_value SQLCIPHER_SOURCE_SHA256 b8df69b998c042ce7f8a99f07cf11f45dfebe51110ef92de95f1728358853133 @@ -73,37 +72,47 @@ define_default_value RESTBED_SOURCE_VERSION f74f9329dac82e662c1d570b7cd72c192b72 define_default_value UDP_DISCOVERY_CPP_SOURCE "https://github.com/truvorskameikin/udp-discovery-cpp.git" define_default_value UDP_DISCOVERY_CPP_VERSION "develop" -define_default_value XAPIAN_SOURCE_VERSION "1.4.7" -define_default_value XAPIAN_SOURCE_SHA256 13f08a0b649c7afa804fa0e85678d693fd6069dd394c9b9e7d41973d74a3b5d3 +define_default_value XAPIAN_SOURCE_VERSION "1.4.29" +define_default_value XAPIAN_SOURCE_SHA256 c55c9bc8613ad3ec2c218eafca088c218ab7cddcba7ef08f3af0e542f4e521bc -define_default_value RAPIDJSON_SOURCE_VERSION "1.1.0" -define_default_value RAPIDJSON_SOURCE_SHA256 bf7ced29704a1e696fbccf2a2b4ea068e7774fa37f6d7dd4039d0787f8bed98e +define_default_value RAPIDJSON_SOURCE_REPO https://github.com/Tencent/rapidjson.git +define_default_value RAPIDJSON_SOURCE_VERSION origin/master define_default_value MINIUPNPC_SOURCE_VERSION "2.1.20190625" define_default_value MINIUPNPC_SOURCE_SHA256 8723f5d7fd7970de23635547700878cd29a5c2bb708b5e5475b2d1d2510317fb # zlib and libpng versions walks toghether -define_default_value ZLIB_SOURCE_VERSION "1.2.11" -define_default_value ZLIB_SOURCE_SHA256 c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1 +define_default_value ZLIB_SOURCE_VERSION "1.3.2" +define_default_value ZLIB_SOURCE_SHA256 d7a0654783a4da529d1bb793b7ad9c3318020af77667bcae35f95d0e42a792f3 -define_default_value LIBPNG_SOURCE_VERSION "1.6.37" -define_default_value LIBPNG_SOURCE_SHA256 505e70834d35383537b6491e7ae8641f1a4bed1876dbfe361201fc80868d88ca +define_default_value LIBPNG_SOURCE_VERSION "1.6.58" +define_default_value LIBPNG_SOURCE_SHA256 28eb403f51f0f7405249132cecfe82ea5c0ef97f1b32c5a65828814ae0d34775 define_default_value LIBJPEG_SOURCE_VERSION "9e" define_default_value LIBJPEG_SOURCE_SHA256 4077d6a6a75aeb01884f708919d25934c93305e49f7e3f36db9129320e6f4f3d -define_default_value TIFF_SOURCE_VERSION "4.2.0" -define_default_value TIFF_SOURCE_SHA256 eb0484e568ead8fa23b513e9b0041df7e327f4ee2d22db5a533929dfc19633cb +define_default_value TIFF_SOURCE_VERSION "4.7.1" +define_default_value TIFF_SOURCE_SHA256 b92017489bdc1db3a4c97191aa4b75366673cb746de0dce5d7a749d5954681ba -define_default_value CIMG_SOURCE_VERSION "2.9.7" -define_default_value CIMG_SOURCE_SHA256 595dda9718431a123b418fa0db88e248c44590d47d9b1646970fa0503e27fa5c +define_default_value CIMG_SOURCE_VERSION "3.7.6" +define_default_value CIMG_SOURCE_SHA256 ff1711da822b2b5f3bb68eed7c9b6b6c9391a7865ef6e34cf3e05659834ff0f3 -define_default_value PHASH_SOURCE_REPO "https://github.com/RetroShare/pHash.git" +#define_default_value PHASH_SOURCE_REPO "https://github.com/RetroShare/pHash.git" +define_default_value PHASH_SOURCE_REPO "https://github.com/aetilius/pHash.git" define_default_value PHASH_SOURCE_VERSION origin/master define_default_value MVPTREE_SOURCE_REPO "https://github.com/starkdg/mvptree.git" define_default_value MVPTREE_SOURCE_VERSION origin/master +define_default_value BOTAN_SOURCE_VERSION "2.19.5" +define_default_value BOTAN_SOURCE_SHA256 dfeea0e0a6f26d6724c4af01da9a7b88487adb2d81ba7c72fcaf52db522c9ad4 + +define_default_value JSONC_SOURCE_REPO "https://github.com/json-c/json-c.git" +define_default_value JSONC_SOURCE_VERSION "json-c-0.18-20240915" + +define_default_value LIBRNP_SOURCE_REPO "https://github.com/rnpgp/rnp.git" +define_default_value LIBRNP_SOURCE_VERSION "origin/main" + define_default_value REPORT_DIR "$(pwd)/$(basename ${NATIVE_LIBS_TOOLCHAIN_PATH})_build_report/" define_default_value RS_SRC_DIR "$(realpath $(dirname $BASH_SOURCE)/../../)" @@ -114,47 +123,59 @@ define_default_value TOOLCHAIN_BUILD_TYPE Release cArch="" eABI="" +compilerTriple="" case "${ANDROID_NDK_ARCH}" in "arm") - cArch="${ANDROID_NDK_ARCH}" - eABI="eabi" + echo "ANDROID_NDK_ARCH=${ANDROID_NDK_ARCH} not supported anymore EOL" + exit 1 ;; "arm64") cArch="aarch64" eABI="" + compilerTriple="aarch64-linux-android" ;; "x86") + echo "ANDROID_NDK_ARCH=${ANDROID_NDK_ARCH} not supported yet" + exit 1 cArch="i686" eABI="" + compilerTriple="??" ;; "x86_64") echo "ANDROID_NDK_ARCH=${ANDROID_NDK_ARCH} not supported yet" exit 1 cArch="??" eABI="" + compilerTriple="??" esac export SYSROOT="${NATIVE_LIBS_TOOLCHAIN_PATH}/sysroot/" export PREFIX="${SYSROOT}/usr/" -export CC="${NATIVE_LIBS_TOOLCHAIN_PATH}/bin/${cArch}-linux-android${eABI}-clang" -export CXX="${NATIVE_LIBS_TOOLCHAIN_PATH}/bin/${cArch}-linux-android${eABI}-clang++" -export AR="${NATIVE_LIBS_TOOLCHAIN_PATH}/bin/${cArch}-linux-android${eABI}-ar" -export RANLIB="${NATIVE_LIBS_TOOLCHAIN_PATH}/bin/${cArch}-linux-android${eABI}-ranlib" +export CC="${NATIVE_LIBS_TOOLCHAIN_PATH}/bin/${compilerTriple}${ANDROID_PLATFORM_VER}-clang" +export CXX="${NATIVE_LIBS_TOOLCHAIN_PATH}/bin/${compilerTriple}${ANDROID_PLATFORM_VER}-clang++" +export AR="${NATIVE_LIBS_TOOLCHAIN_PATH}/bin/llvm-ar" +export RANLIB="${NATIVE_LIBS_TOOLCHAIN_PATH}/bin/llvm-ranlib" # More interesting GNU Make variables at http://www.gnu.org/software/make/manual/make.html#Implicit-Variables # Used to instruct cmake to explicitely ignore host libraries export HOST_IGNORE_PREFIX="/usr/" -export ARMv7_OPTIMIZATION_FLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=vfp" - - ## $1 filename, $2 sha256 hash function check_sha256() { echo ${2} "${1}" | sha256sum -c &> /dev/null } +## $1 filename +gentoo_disturl() +{ + local base="https://distfiles.gentoo.org/distfiles" + local file="${1}" + local dir="$(printf '%s' "$file" | b2sum | cut -c1-2)" + printf '%s/%s/%s\n' "$base" "$dir" "$file" +} + ## $1 filename, $2 sha256 hash, $3 url function verified_download() { @@ -194,11 +215,6 @@ function andro_cmake() cmakeProc="" case "${ANDROID_NDK_ARCH}" in - "arm") - cmakeProc="armv7-a" - export CFLAGS="$ARMv7_OPTIMIZATION_FLAGS" - export CXXFLAGS="$ARMv7_OPTIMIZATION_FLAGS" - ;; "arm64") cmakeProc="aarch64" ;; @@ -361,13 +377,13 @@ install_android_sdk() task_register bootstrap_toolchain bootstrap_toolchain() { - rm -rf "${NATIVE_LIBS_TOOLCHAIN_PATH}" - ${ANDROID_NDK_PATH}/build/tools/make_standalone_toolchain.py --verbose \ - --arch ${ANDROID_NDK_ARCH} --install-dir ${NATIVE_LIBS_TOOLCHAIN_PATH} \ - --api ${ANDROID_PLATFORM_VER} || return $? + NDK_TC="${ANDROID_NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64" - # Avoid problems with arm64 some libraries installing on lib64 - ln -s "${PREFIX}/lib/" "${PREFIX}/lib64" || return $? + rm -rf "${NATIVE_LIBS_TOOLCHAIN_PATH}" + cp --archive --verbose \ + "${NDK_TC}" "${NATIVE_LIBS_TOOLCHAIN_PATH}" || return $? + + mkdir -p "${SYSROOT}/usr/lib" "${SYSROOT}/usr/include" || return $? } ## More information available at retroshare://file?name=Android%20Native%20Development%20Kit%20Cookbook.pdf&size=29214468&hash=0123361c1b14366ce36118e82b90faf7c7b1b136 @@ -375,13 +391,13 @@ task_register build_bzlib build_bzlib() { B_dir="bzip2-${BZIP2_SOURCE_VERSION}" + D_file="$B_dir.tar.gz" + rm -rf $B_dir - verified_download $B_dir.tar.gz $BZIP2_SOURCE_SHA256 \ - http://distfiles.gentoo.org/distfiles/bzip2-${BZIP2_SOURCE_VERSION}.tar.gz \ - || return $? + $(gentoo_disturl "${D_file}") || return $? - tar -xf $B_dir.tar.gz || return $? + tar -xf $D_file || return $? pushd $B_dir || return $? sed -i "/^CC=.*/d" Makefile || return $? sed -i "/^AR=.*/d" Makefile || return $? @@ -418,12 +434,9 @@ build_openssl() ## non neglegible security concerns. oBits="32" [[ ${ANDROID_NDK_ARCH} =~ .*64.* ]] && oBits=64 - - armOptimizationFlags="" - [[ "${ANDROID_NDK_ARCH}" != "arm" ]] || armOptimizationFlags="$ARMv7_OPTIMIZATION_FLAGS" - ANDROID_NDK="${ANDROID_NDK_PATH}" PATH="${SYSROOT}/bin/:${PATH}" \ - ./Configure linux-generic${oBits} -fPIC $armOptimizationFlags \ + ANDROID_NDK="${ANDROID_NDK_PATH}" PATH="${NATIVE_LIBS_TOOLCHAIN_PATH}/bin/:${PATH}" \ + ./Configure linux-generic${oBits} -fPIC \ --prefix="${PREFIX}" --openssldir="${SYSROOT}/etc/ssl" || return $? # sed -i 's/LIBNAME=$$i LIBVERSION=$(SHLIB_MAJOR).$(SHLIB_MINOR) \\/LIBNAME=$$i \\/g' Makefile # sed -i '/LIBCOMPATVERSIONS=";$(SHLIB_VERSION_HISTORY)" \\/d' Makefile @@ -449,17 +462,20 @@ build_sqlite() tar -xf $B_dir.tar.gz || return $? pushd $B_dir || return $? - ./configure --with-pic --prefix="${PREFIX}" --host=${cArch}-linux || return $? + ./configure --prefix="${PREFIX}" --host=${cArch}-linux || return $? make -j${HOST_NUM_CPU} || return $? make install || return $? rm -f ${PREFIX}/lib/libsqlite3.so* popd + + ls -al "${PREFIX}/include/sqlite3.h" || return $? + ls -al "${PREFIX}/lib/libsqlite3.a" || return $? } task_register build_sqlcipher build_sqlcipher() { - task_run build_sqlite + #task_run build_sqlite || return $? B_dir="sqlcipher-${SQLCIPHER_SOURCE_VERSION}" rm -rf $B_dir @@ -505,7 +521,7 @@ build_libupnp() || return $? tar -xf $B_file || return $? - pusdh $B_dir || return $? + pushd $B_dir || return $? ./bootstrap || return $? ## libupnp must be configured as static library because if not the linker will ## look for libthreadutils.so.6 at runtime that cannot be packaged on android @@ -513,7 +529,8 @@ build_libupnp() ## crash at startup. ./configure --with-pic --enable-static --disable-shared --disable-samples \ --disable-largefile \ - --prefix="${PREFIX}" --host=${cArch}-linux || return $? + --prefix="${PREFIX}" --host=${cArch}-linux \ + || return $? make -j${HOST_NUM_CPU} || return $? make install || return $? popd @@ -522,13 +539,10 @@ build_libupnp() task_register build_rapidjson build_rapidjson() { - B_dir="rapidjson-${RAPIDJSON_SOURCE_VERSION}" - D_file="${B_dir}.tar.gz" - verified_download $D_file $RAPIDJSON_SOURCE_SHA256 \ - https://github.com/Tencent/rapidjson/archive/v${RAPIDJSON_SOURCE_VERSION}.tar.gz \ - || return $? - tar -xf $D_file || return $? - cp -r "${B_dir}/include/rapidjson/" "${PREFIX}/include/rapidjson" || return $? + S_dir="rapidjson" + git_source_get "$S_dir" \ + "$RAPIDJSON_SOURCE_REPO" "${RAPIDJSON_SOURCE_VERSION}" || return $? + cp -r "${S_dir}/include/rapidjson/" "${PREFIX}/include/rapidjson" || return $? } task_register build_restbed @@ -541,7 +555,13 @@ build_restbed() rm -rf "$B_dir"; mkdir "$B_dir" pushd "$B_dir" - andro_cmake -DBUILD_TESTS=OFF -DBUILD_SSL=OFF -B. -H../${S_dir} || return $? + + # Temporary fix for restbed cmake error, + # need update or/and upstream proper fix + # -DCMAKE_POLICY_VERSION_MINIMUM=3.5 + andro_cmake -DBUILD_TESTS=OFF -DBUILD_SSL=OFF \ + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ + -B. -H../${S_dir} || return $? make -j${HOST_NUM_CPU} || return $? make install || return $? popd @@ -621,9 +641,9 @@ build_zlib() { S_dir="zlib-${ZLIB_SOURCE_VERSION}" B_dir="zlib-${ZLIB_SOURCE_VERSION}-build" - D_file="$S_dir.tar.gz" + D_file="$S_dir.tar.xz" verified_download $D_file $ZLIB_SOURCE_SHA256 \ - http://distfiles.gentoo.org/distfiles/${D_file} || return $? + $(gentoo_disturl "${D_file}") || return $? rm -rf $S_dir $B_dir tar -xf $D_file || return $? mkdir $B_dir || return $? @@ -644,7 +664,7 @@ build_libpng() B_dir="libpng-${LIBPNG_SOURCE_VERSION}-build" D_file="$S_dir.tar.xz" verified_download $D_file $LIBPNG_SOURCE_SHA256 \ - http://distfiles.gentoo.org/distfiles/${D_file} || return $? + $(gentoo_disturl "${D_file}") || return $? rm -rf $S_dir $B_dir tar -xf $D_file || return $? @@ -700,7 +720,7 @@ build_tiff() { S_dir="tiff-${TIFF_SOURCE_VERSION}" B_dir="${S_dir}-build" - D_file="tiff-${TIFF_SOURCE_VERSION}.tar.gz" + D_file="tiff-${TIFF_SOURCE_VERSION}.tar.xz" verified_download $D_file $TIFF_SOURCE_SHA256 \ https://download.osgeo.org/libtiff/${D_file} || return $? @@ -727,13 +747,10 @@ build_tiff() echo "" > $S_dir/man/CMakeLists.txt echo "" > $S_dir/port/CMakeLists.txt - # Change to static library build - sed -i 's\add_library(tiff\add_library(tiff STATIC\' \ - $S_dir/libtiff/CMakeLists.txt || return $? - pushd $B_dir #TODO: build dependecies to support more formats andro_cmake \ + -DBUILD_SHARED_LIBS=OFF \ -Dlibdeflate=OFF -Djbig=OFF -Dlzma=OFF -Dzstd=OFF -Dwebp=OFF \ -Djpeg12=OFF \ -Dcxx=OFF \ @@ -775,8 +792,7 @@ build_phash() rm -rf $B_dir; mkdir $B_dir || return $? pushd $B_dir || return $? - andro_cmake -DPHASH_DYNAMIC=OFF -DPHASH_STATIC=ON -B. -H../pHash \ - || return $? + andro_cmake -DPHASH_DYNAMIC=OFF -DPHASH_STATIC=ON -B. -H../pHash || return $? make -j${HOST_NUM_CPU} || return $? make install || return $? popd @@ -799,13 +815,97 @@ build_mvptree() popd } +task_register build_jsonc +build_jsonc() +{ + S_dir="json-c" + B_dir="${S_dir}-build" + + git_source_get "$S_dir" "$JSONC_SOURCE_REPO" \ + "${JSONC_SOURCE_VERSION}" || return $? + + rm -rf "$B_dir"; mkdir "$B_dir" + pushd "$B_dir" || return $? + andro_cmake \ + -DBUILD_SHARED_LIBS=OFF \ + -DBUILD_TESTING=OFF \ + -DDISABLE_WERROR=ON \ + -DDISABLE_EXTRA_LIBS=ON \ + -DBUILD_APPS=OFF \ + -B. -S../${S_dir} || return $? + make -j${HOST_NUM_CPU} || return $? + make install || return $? + popd +} + +task_register build_librnp +build_librnp() +{ + task_run build_zlib || return $? + task_run build_bzlib || return $? + task_run build_openssl || return $? + task_run build_jsonc || return $? + + S_dir="librnp" + B_dir="${S_dir}-build" + + git_source_get "$S_dir" "$LIBRNP_SOURCE_REPO" \ + "${LIBRNP_SOURCE_VERSION}" "src/libsexpp" || return $? + + # Patch FindOpenSSLFeatures.cmake to support cross-compilation via + # CMAKE_CROSSCOMPILING_EMULATOR (e.g. qemu-user-static). + # 1. Prepend emulator to FOF before the feature detection foreach loop + # 2. Forward CMAKE_CROSSCOMPILING_EMULATOR to the fossl sub-build via MKF + # 3. Add -static linking via MKF so the binary doesn't need the Android + # dynamic linker which is unavailable on the host even via qemu + # 4. Remove quotes around FOF so CMake expands the list correctly + # TODO: remove when upstream patches are accepted + # + sed -i '/foreach(feature "hashes"/i\ +if(CMAKE_CROSSCOMPILING_EMULATOR)\ + set(FOF ${CMAKE_CROSSCOMPILING_EMULATOR} ${FOF})\ +endif() +' "${S_dir}/cmake/Modules/FindOpenSSLFeatures.cmake" + + sed -i '/endif(CMAKE_GENERATOR_TOOLSET)/a\ +\ +if(CMAKE_CROSSCOMPILING_EMULATOR)\ + set(MKF ${MKF} "-DCMAKE_CROSSCOMPILING_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}")\ + set(MKF ${MKF} "-DCMAKE_EXE_LINKER_FLAGS=-static")\ +endif(CMAKE_CROSSCOMPILING_EMULATOR)' \ + "${S_dir}/cmake/Modules/FindOpenSSLFeatures.cmake" + + sed -i 's|COMMAND "${FOF}" "${feature}"|COMMAND ${FOF} "${feature}"|' \ + "${S_dir}/cmake/Modules/FindOpenSSLFeatures.cmake" + + rm -rf "$B_dir"; mkdir "$B_dir" + pushd "$B_dir" || return $? + # CRYPTO_BACKEND use openssl on which we already depends instead of default + # botan keep the binary and dependency tree smaller + # CMAKE_CROSSCOMPILING_EMULATOR needed because rnp CMake needs to run some + # binaries to query openssl features + andro_cmake \ + -DBUILD_TESTING=OFF \ + -DDOWNLOAD_GTEST=OFF \ + -DBUILD_SHARED_LIBS=OFF \ + -DENABLE_DOC=OFF \ + -DCRYPTO_BACKEND=openssl \ + -DCMAKE_CROSSCOMPILING_EMULATOR="/usr/bin/qemu-${cArch}" \ + -B. -S../${S_dir} || return $? + make -j${HOST_NUM_CPU} || return $? + make install || return $? + popd +} + task_register build_libretroshare build_libretroshare() { task_run build_zlib || return $? task_run build_bzlib || return $? task_run build_openssl || return $? - task_run build_sqlcipher || return $? + task_run build_librnp || return $? + task_run build_sqlite || return $? +# task_run build_sqlcipher || return $? task_run build_rapidjson || return $? task_run build_restbed || return $? task_run build_xapian || return $?