mirror of
https://github.com/RetroShare/libretroshare.git
synced 2026-09-12 11:40:04 +05:00
Fix Android build for ndk r29 on ubuntu 26.04
Drop armeabi-v7a and minapi16 (EOL), build arm64-v8a at API 21/24 only. Toolchain: - Replace make_standalone_toolchain.py with direct NDK toolchain copy - Use NDK r29 compiler triple naming and llvm-ar/llvm-ranlib - Add gentoo_disturl() for hash-based Gentoo mirror URLs Dependencies: - Add librnp (openssl backend) with json-c and sexpp support - Add qemu-user for librnp cross-compilation feature detection - Replace sqlcipher with plain sqlite (RS_SQLCIPHER=OFF) - Switch rapidjson to git source for C++17 compatibility - Bump bzip2, zlib, libpng, xapian, tiff, cimg, sqlite versions CMake: - Remove Android C++14 workaround (NDK r29 std::filesystem works) - Refactor RS_RNPLIB to support inline, pre-built, and FetchContent - Add CMAKE_POLICY_VERSION_MINIMUM for CMake 4.x compatibility Dockerfile: - Move to Ubuntu 26.04, python-is-python3 - Split COPY for layer caching of SDK and toolchain builds
This commit is contained in:
parent
aa8832f70c
commit
ba90b27199
123
.gitlab-ci.yml
123
.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/
|
||||
|
||||
140
CMakeLists.txt
140
CMakeLists.txt
@ -1,7 +1,6 @@
|
||||
# RetroShare decentralized communication platform
|
||||
#
|
||||
# Copyright (C) 2021-2022 Gioacchino Mazzurco <gio@retroshare.cc>
|
||||
# Copyright (C) 2021-2022 Asociación Civil Altermundi <info@altermundi.net>
|
||||
# Copyright (C) 2021-2026 Gioacchino Mazzurco <gio@retroshare.cc>
|
||||
#
|
||||
# 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
|
||||
|
||||
24
build.gradle
24
build.gradle
@ -1,15 +1,14 @@
|
||||
/*
|
||||
* libretroshare Android AAR library gradle builder
|
||||
*
|
||||
* Copyright (C) 2022 Gioacchino Mazzurco <gio@retroshare.cc>
|
||||
* Copyright (C) 2022 Asociación Civil Altermundi <info@altermundi.net>
|
||||
* Copyright (C) 2022-2026 Gioacchino Mazzurco <gio@retroshare.cc>
|
||||
*
|
||||
* 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
|
||||
{
|
||||
|
||||
@ -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 \
|
||||
|
||||
@ -2,8 +2,7 @@
|
||||
|
||||
# Script to prepare libretroshare Android testing and publishing Docker images
|
||||
#
|
||||
# Copyright (C) 2016-2022 Gioacchino Mazzurco <gio@eigenlab.org>
|
||||
# Copyright (C) 2020-2022 Asociación Civil Altermundi <info@altermundi.net>
|
||||
# Copyright (C) 2016-2026 Gioacchino Mazzurco <gio@retroshare.cc>
|
||||
#
|
||||
# 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" ] ||
|
||||
{
|
||||
|
||||
@ -2,8 +2,7 @@
|
||||
|
||||
# Script to prepare RetroShare Android package building toolchain
|
||||
#
|
||||
# Copyright (C) 2016-2022 Gioacchino Mazzurco <gio@eigenlab.org>
|
||||
# Copyright (C) 2020-2022 Asociación Civil Altermundi <info@altermundi.net>
|
||||
# Copyright (C) 2016-2026 Gioacchino Mazzurco <gio@retroshare.cc>
|
||||
#
|
||||
# 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 $?
|
||||
|
||||
Loading…
Reference in New Issue
Block a user