mirror of
https://github.com/RetroShare/libretroshare.git
synced 2026-09-12 19:50:03 +05:00
Parametrize gradle build
Make API level parameter and get rid of flavours so build take less time and require less disk space, and builder can configure it at the API level needed Add Dockerfile to produce AAR Attempt to use the generated doker images for gitlab.com CI
This commit is contained in:
parent
47626b7106
commit
6733885330
@ -1,6 +1,6 @@
|
||||
deploy:
|
||||
image: gradle:6.5-jdk11
|
||||
image: registry.gitlab.com/retroshare/retroshare:android_aar_base_16
|
||||
script:
|
||||
- './gradlew publish'
|
||||
- './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/"'
|
||||
only:
|
||||
- gitlab_maven_repo
|
||||
|
||||
177
build.gradle
177
build.gradle
@ -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,9 @@ allprojects
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'com.android.library'
|
||||
apply plugin: 'maven-publish'
|
||||
|
||||
ext.buildLibretroshareNativeLib =
|
||||
{
|
||||
pApiLevel, /* Android API level */
|
||||
@ -58,7 +79,16 @@ ext.buildLibretroshareNativeLib =
|
||||
break;
|
||||
}
|
||||
|
||||
def toolchainsWorkdir = "${buildDir}/native_toolchains/"
|
||||
def toolchainsWorkdir = null
|
||||
if(project.hasProperty('NATIVE_TOOLCHAINS_DIR'))
|
||||
{
|
||||
toolchainsWorkdir = NATIVE_TOOLCHAINS_DIR
|
||||
}
|
||||
else
|
||||
{
|
||||
toolchainsWorkdir = "${buildDir}/native_toolchains/"
|
||||
}
|
||||
|
||||
mkdir toolchainsWorkdir
|
||||
|
||||
def currToolchainPath = "$toolchainsWorkdir/$pApiLevel-$toolchainArch/"
|
||||
@ -91,7 +121,7 @@ ext.buildLibretroshareNativeLib =
|
||||
}
|
||||
}
|
||||
|
||||
def nativeLibsDir = "${buildDir}/native_libs-$pApiLevel/"
|
||||
def nativeLibsDir = "${buildDir}/native_libs/"
|
||||
mkdir nativeLibsDir
|
||||
|
||||
def currAbiLibDir = "${nativeLibsDir}/$pAbi/"
|
||||
@ -115,8 +145,43 @@ ext.buildLibretroshareNativeLib =
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'com.android.library'
|
||||
apply plugin: 'maven-publish'
|
||||
task prepareRetroshareNativeLibs
|
||||
{
|
||||
doLast
|
||||
{
|
||||
def pAbis = null
|
||||
if(project.hasProperty('JNI_NATIVE_LIBS_ARCHS'))
|
||||
{
|
||||
pAbis = JNI_NATIVE_LIBS_ARCHS.split(' ') as List
|
||||
}
|
||||
else
|
||||
{
|
||||
if(ANDROID_MIN_API_LEVEL.toInteger() <= 16)
|
||||
{
|
||||
pAbis = ['armeabi-v7a']
|
||||
}
|
||||
else
|
||||
{
|
||||
pAbis = ['arm64-v8a', 'armeabi-v7a']
|
||||
}
|
||||
}
|
||||
|
||||
def pNdkPath = android.getNdkDirectory().getAbsolutePath()
|
||||
|
||||
pAbis.each
|
||||
{
|
||||
abi ->
|
||||
buildLibretroshareNativeLib(ANDROID_MIN_API_LEVEL, abi, pNdkPath)
|
||||
}
|
||||
}
|
||||
}
|
||||
build.dependsOn prepareRetroshareNativeLibs
|
||||
|
||||
ext.getArtifactBaseName =
|
||||
{
|
||||
config ->
|
||||
return project.name + "-MinApiLevel" + ANDROID_MIN_API_LEVEL
|
||||
}
|
||||
|
||||
android
|
||||
{
|
||||
@ -127,11 +192,16 @@ android
|
||||
|
||||
defaultConfig
|
||||
{
|
||||
minSdkVersion ANDROID_MIN_API_LEVEL
|
||||
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(defaultConfig))
|
||||
|
||||
sourceSets
|
||||
{
|
||||
main
|
||||
@ -139,22 +209,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 = [ "${buildDir}/native_libs/" ]
|
||||
}
|
||||
}
|
||||
|
||||
@ -163,48 +218,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
|
||||
@ -221,21 +234,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 LIBRETROSHARE_SOURCE_VERSION
|
||||
artifact bundleReleaseAar
|
||||
}
|
||||
release(MavenPublication)
|
||||
{
|
||||
groupId = 'org.retroshare.service'
|
||||
artifactId "${getArtifactBaseName()}-release"
|
||||
version LIBRETROSHARE_SOURCE_VERSION
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
66
misc/Android/Dockerfile-AAR
Normal file
66
misc/Android/Dockerfile-AAR
Normal 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/
|
||||
Loading…
Reference in New Issue
Block a user