Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion android/tunnel/src/go/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ set(NDK_TOOLCHAIN "${ANDROID_NDK}/toolchains/llvm/prebuilt/$<LOWER_CASE:${CMAKE_

# Set paths explicitly for CGO
set(CGO_CFLAGS "--sysroot=${NDK_TOOLCHAIN}/sysroot -I${NDK_TOOLCHAIN}/sysroot/usr/include")
set(CGO_LDFLAGS "--sysroot=${NDK_TOOLCHAIN}/sysroot -L${NDK_TOOLCHAIN}/sysroot/usr/lib/${GO_TRIPLE}/${ANDROID_API_LEVEL} -llog")
set(CGO_LDFLAGS "--sysroot=${NDK_TOOLCHAIN}/sysroot -L${NDK_TOOLCHAIN}/sysroot/usr/lib/${GO_TRIPLE}/${ANDROID_API_LEVEL} -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384 -llog")

# Go build environment
set(GO_ENV
Expand Down
2 changes: 1 addition & 1 deletion env-android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ dependencies:
- -r requirements.txt
- -r taskcluster/scripts/requirements.txt
variables:
QT_VERSION: 6.9.2
QT_VERSION: 6.9.3
2 changes: 1 addition & 1 deletion qtglean/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Emscripten")

# On Android we will build a dynamic lib,
# so that it can be linked to both the main app and the daemon.
set(RUSTFLAGS "-Ctarget-feature=-crt-static")
set(RUSTFLAGS "-Ctarget-feature=-crt-static -C link-arg=-Wl,-z,max-page-size=16384 -C link-arg=-Wl,-z,common-page-size=16384")
set(SHARED 1)
elseif(QT_FEATURE_static AND QT_FEATURE_openssl AND QT_FEATURE_openssl_linked)
# If Qt is statically linked to OpenSSL, so to should the glean libs.
Expand Down
97 changes: 32 additions & 65 deletions src/cmake/android_openssl.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,80 +3,47 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

# This section integrates the OpenSSL-Prefab into our build system. Google
# Publishes builds of openSSL for android on maven.

include(ExternalProject)

ExternalProject_Add(ndk_openssl
URL https://maven.google.com/com/android/ndk/thirdparty/openssl/1.1.1q-beta-1/openssl-1.1.1q-beta-1.aar
URL_HASH SHA256=a5b05c4b362d35c022238ef9b2e4e2196248adea3bac9dd683845ee75a3a8d66
BUILD_IN_SOURCE 1
DOWNLOAD_NAME "openssl_android.zip" # Save it as zip, so cmake knows to extract.
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
)

# Sadly, since we're not building the client in the gradle enviroment
# We can't use this "raw".
# These 2 Tasks fetch the artifact and unpack them, making it usable for us.
# Publishes builds of openSSL for android on maven.
# However, that Google Maven one is out of date. So we use the KDAB one.

# It will Set 3 Global Properties to read from
# OPENSSL_CRYPTO_MODULE -> the prefab path of ssl::crypto (abi-checked)
# OPENSSL_SSL_MODULE -> the prefab path of ssl::ssl (abi-checked)
# OPENSSL_LIBS -> a folder containing both shared libarys.
# Note: OPENSSL_LIBS has each file 2 times:
# once named <libname>.so and <libname>_1_1.so
# OPENSSL_LIBS -> a folder containing all shared libraries.
# Note: OPENSSL_LIBS has each file 3 times:
# once named <libname>.so and <libname>_1_1.so and <libname>_3.so
# QT only seeems to load them if they are called x.1_1.so
# For the Rust/Openssl-sys crate we need x.so
# For newer versions of QT (6.4+), we need 3.x.x bundled alongside.

SET( _OPENSSL_CRYPTO_MODULE "${CMAKE_BINARY_DIR}/ndk_openssl-prefix/src/ndk_openssl/prefab/modules/crypto")
SET( _OPENSSL_SSL_MODULE "${CMAKE_BINARY_DIR}/ndk_openssl-prefix/src/ndk_openssl/prefab/modules/ssl")
SET( _OPENSSL_LIBS "${CMAKE_BINARY_DIR}/ndk_openssl/libs")
SET( _OPENSSL_INCLUDE "${CMAKE_BINARY_DIR}/ndk_openssl/include")

file(MAKE_DIRECTORY ${_OPENSSL_LIBS})
file(MAKE_DIRECTORY ${_OPENSSL_INCLUDE})

set_property(GLOBAL PROPERTY OPENSSL_CRYPTO_MODULE ${_OPENSSL_CRYPTO_MODULE})
set_property(GLOBAL PROPERTY OPENSSL_SSL_MODULE ${_OPENSSL_SSL_MODULE})
set_property(GLOBAL PROPERTY OPENSSL_LIBS ${_OPENSSL_LIBS})

# Copy them in one folder so that they can be used in
# rust-openssl's env:OPENSSL_LIB_DIR
# and qt's extra libs.
add_custom_target(ndk_openssl_merged)
add_dependencies(ndk_openssl_merged ndk_openssl)
add_custom_command(
TARGET ndk_openssl_merged
COMMAND ${CMAKE_COMMAND} -E copy ${_OPENSSL_SSL_MODULE}/libs/android.${ANDROID_ABI}/libssl.so ${_OPENSSL_LIBS}/libssl_1_1.so
COMMAND ${CMAKE_COMMAND} -E copy ${_OPENSSL_CRYPTO_MODULE}/libs/android.${ANDROID_ABI}/libcrypto.so ${_OPENSSL_LIBS}/libcrypto_1_1.so
COMMAND ${CMAKE_COMMAND} -E copy ${_OPENSSL_SSL_MODULE}/libs/android.${ANDROID_ABI}/libssl.so ${_OPENSSL_LIBS}/libssl.so
COMMAND ${CMAKE_COMMAND} -E copy ${_OPENSSL_CRYPTO_MODULE}/libs/android.${ANDROID_ABI}/libcrypto.so ${_OPENSSL_LIBS}/libcrypto.so)


# In case of newer versions of QT, for QtSLL we need to
# have 3.x.x bundled alongside.
# Some rust crates seem to need 1.x? so ugh. both i guess.
# This piece just add's the _3.so libs into the merged folder.
find_package(Qt6 COMPONENTS Core)
if( ${Qt6_VERSION} VERSION_GREATER_EQUAL 6.4.0)
include(FetchContent)
include(FetchContent)

FetchContent_Declare(
android_openssl
DOWNLOAD_EXTRACT_TIMESTAMP true
GIT_REPOSITORY https://github.com/KDAB/android_openssl.git
GIT_TAG 32ebe304ff064a9affb699b2185af78e3494f49a # Latest commit as of July 2nd, 2025 # UPDATE DATE HERE
)
FetchContent_MakeAvailable(android_openssl)

# Google does not provide openssl v 3.0
# so let's use the builds from kdab
FetchContent_Declare(
android_openssl
DOWNLOAD_EXTRACT_TIMESTAMP true
GIT_REPOSITORY https://github.com/KDAB/android_openssl.git
GIT_TAG 0025bbe48f69792f95e02c9289df0fae68c954d6 # Latest commit as of July 2nd, 2025
)
FetchContent_MakeAvailable(android_openssl)
SET( _OPENSSL_MODULE "${android_openssl_SOURCE_DIR}/ssl_1.1/${ANDROID_ABI}/")
SET( _OPENSSL_LIBS "${android_openssl_SOURCE_DIR}/combined_libs")
file(MAKE_DIRECTORY ${_OPENSSL_LIBS})

add_custom_command(
TARGET ndk_openssl_merged
COMMAND ${CMAKE_COMMAND} -E copy ${android_openssl_SOURCE_DIR}/ssl_3/${ANDROID_ABI}/libssl_3.so ${_OPENSSL_LIBS}/libssl_3.so
COMMAND ${CMAKE_COMMAND} -E copy ${android_openssl_SOURCE_DIR}/ssl_3/${ANDROID_ABI}/libcrypto_3.so ${_OPENSSL_LIBS}/libcrypto_3.so
)
endif()
set_property(GLOBAL PROPERTY OPENSSL_SSL_MODULE ${_OPENSSL_MODULE})
set_property(GLOBAL PROPERTY OPENSSL_LIBS ${_OPENSSL_LIBS})

# Copy them in one folder so that they can be used in
# rust-openssl's env:OPENSSL_LIB_DIR
# and qt's extra libs.
add_custom_command(
TARGET ndk_openssl_merged
COMMAND ${CMAKE_COMMAND} -E copy ${android_openssl_SOURCE_DIR}/ssl_3/${ANDROID_ABI}/libssl_3.so ${_OPENSSL_LIBS}/libssl_3.so
COMMAND ${CMAKE_COMMAND} -E copy ${android_openssl_SOURCE_DIR}/ssl_3/${ANDROID_ABI}/libcrypto_3.so ${_OPENSSL_LIBS}/libcrypto_3.so
COMMAND ${CMAKE_COMMAND} -E copy ${android_openssl_SOURCE_DIR}/ssl_1.1/${ANDROID_ABI}/libssl.so ${_OPENSSL_LIBS}/libssl.so
COMMAND ${CMAKE_COMMAND} -E copy ${android_openssl_SOURCE_DIR}/ssl_1.1/${ANDROID_ABI}/libcrypto.so ${_OPENSSL_LIBS}/libcrypto.so
COMMAND ${CMAKE_COMMAND} -E copy ${android_openssl_SOURCE_DIR}/ssl_1.1/${ANDROID_ABI}/libssl_1_1.so ${_OPENSSL_LIBS}/libssl_1_1.so
COMMAND ${CMAKE_COMMAND} -E copy ${android_openssl_SOURCE_DIR}/ssl_1.1/${ANDROID_ABI}/libcrypto_1_1.so ${_OPENSSL_LIBS}/libcrypto_1_1.so
)