1*5c90c05cSAndroid Build Coastguard Workerimport java.nio.file.Paths 2*5c90c05cSAndroid Build Coastguard Worker 3*5c90c05cSAndroid Build Coastguard Worker// General gradle arguments for root project 4*5c90c05cSAndroid Build Coastguard Workerbuildscript { 5*5c90c05cSAndroid Build Coastguard Worker repositories { 6*5c90c05cSAndroid Build Coastguard Worker google() 7*5c90c05cSAndroid Build Coastguard Worker jcenter() 8*5c90c05cSAndroid Build Coastguard Worker } 9*5c90c05cSAndroid Build Coastguard Worker dependencies { 10*5c90c05cSAndroid Build Coastguard Worker // 11*5c90c05cSAndroid Build Coastguard Worker // https://developer.android.com/studio/releases/gradle-plugin#updating-gradle 12*5c90c05cSAndroid Build Coastguard Worker // 13*5c90c05cSAndroid Build Coastguard Worker // Notice that 4.0.0 here is the version of [Android Gradle Plugin] 14*5c90c05cSAndroid Build Coastguard Worker // According to URL above you will need Gradle 6.1 or higher 15*5c90c05cSAndroid Build Coastguard Worker // 16*5c90c05cSAndroid Build Coastguard Worker classpath "com.android.tools.build:gradle:4.1.1" 17*5c90c05cSAndroid Build Coastguard Worker } 18*5c90c05cSAndroid Build Coastguard Worker} 19*5c90c05cSAndroid Build Coastguard Workerrepositories { 20*5c90c05cSAndroid Build Coastguard Worker google() 21*5c90c05cSAndroid Build Coastguard Worker jcenter() 22*5c90c05cSAndroid Build Coastguard Worker} 23*5c90c05cSAndroid Build Coastguard Worker 24*5c90c05cSAndroid Build Coastguard Worker// Project's root where CMakeLists.txt exists: rootDir/support/.cxx -> rootDir 25*5c90c05cSAndroid Build Coastguard Workerdef rootDir = Paths.get(project.buildDir.getParent()).getParent() 26*5c90c05cSAndroid Build Coastguard Workerprintln("rootDir: ${rootDir}") 27*5c90c05cSAndroid Build Coastguard Worker 28*5c90c05cSAndroid Build Coastguard Worker// Output: Shared library (.so) for Android 29*5c90c05cSAndroid Build Coastguard Workerapply plugin: "com.android.library" 30*5c90c05cSAndroid Build Coastguard Workerandroid { 31*5c90c05cSAndroid Build Coastguard Worker compileSdkVersion 25 // Android 7.0 32*5c90c05cSAndroid Build Coastguard Worker 33*5c90c05cSAndroid Build Coastguard Worker // Target ABI 34*5c90c05cSAndroid Build Coastguard Worker // - This option controls target platform of module 35*5c90c05cSAndroid Build Coastguard Worker // - The platform might be limited by compiler's support 36*5c90c05cSAndroid Build Coastguard Worker // some can work with Clang(default), but some can work only with GCC... 37*5c90c05cSAndroid Build Coastguard Worker // if bad, both toolchains might not support it 38*5c90c05cSAndroid Build Coastguard Worker splits { 39*5c90c05cSAndroid Build Coastguard Worker abi { 40*5c90c05cSAndroid Build Coastguard Worker enable true 41*5c90c05cSAndroid Build Coastguard Worker // Specify platforms for Application 42*5c90c05cSAndroid Build Coastguard Worker reset() 43*5c90c05cSAndroid Build Coastguard Worker include "arm64-v8a", "armeabi-v7a", "x86_64" 44*5c90c05cSAndroid Build Coastguard Worker } 45*5c90c05cSAndroid Build Coastguard Worker } 46*5c90c05cSAndroid Build Coastguard Worker ndkVersion "21.3.6528147" // ANDROID_NDK_HOME is deprecated. Be explicit 47*5c90c05cSAndroid Build Coastguard Worker 48*5c90c05cSAndroid Build Coastguard Worker defaultConfig { 49*5c90c05cSAndroid Build Coastguard Worker minSdkVersion 21 // Android 5.0+ 50*5c90c05cSAndroid Build Coastguard Worker targetSdkVersion 25 // Follow Compile SDK 51*5c90c05cSAndroid Build Coastguard Worker versionCode 34 // Follow release count 52*5c90c05cSAndroid Build Coastguard Worker versionName "7.1.2" // Follow Official version 53*5c90c05cSAndroid Build Coastguard Worker 54*5c90c05cSAndroid Build Coastguard Worker externalNativeBuild { 55*5c90c05cSAndroid Build Coastguard Worker cmake { 56*5c90c05cSAndroid Build Coastguard Worker arguments "-DANDROID_STL=c++_shared" // Specify Android STL 57*5c90c05cSAndroid Build Coastguard Worker arguments "-DBUILD_SHARED_LIBS=true" // Build shared object 58*5c90c05cSAndroid Build Coastguard Worker arguments "-DFMT_TEST=false" // Skip test 59*5c90c05cSAndroid Build Coastguard Worker arguments "-DFMT_DOC=false" // Skip document 60*5c90c05cSAndroid Build Coastguard Worker cppFlags "-std=c++17" 61*5c90c05cSAndroid Build Coastguard Worker targets "fmt" 62*5c90c05cSAndroid Build Coastguard Worker } 63*5c90c05cSAndroid Build Coastguard Worker } 64*5c90c05cSAndroid Build Coastguard Worker println(externalNativeBuild.cmake.cppFlags) 65*5c90c05cSAndroid Build Coastguard Worker println(externalNativeBuild.cmake.arguments) 66*5c90c05cSAndroid Build Coastguard Worker } 67*5c90c05cSAndroid Build Coastguard Worker 68*5c90c05cSAndroid Build Coastguard Worker // External Native build 69*5c90c05cSAndroid Build Coastguard Worker // - Use existing CMakeList.txt 70*5c90c05cSAndroid Build Coastguard Worker // - Give path to CMake. This gradle file should be 71*5c90c05cSAndroid Build Coastguard Worker // neighbor of the top level cmake 72*5c90c05cSAndroid Build Coastguard Worker externalNativeBuild { 73*5c90c05cSAndroid Build Coastguard Worker cmake { 74*5c90c05cSAndroid Build Coastguard Worker version "3.10.0+" 75*5c90c05cSAndroid Build Coastguard Worker path "${rootDir}/CMakeLists.txt" 76*5c90c05cSAndroid Build Coastguard Worker // buildStagingDirectory "./build" // Custom path for cmake output 77*5c90c05cSAndroid Build Coastguard Worker } 78*5c90c05cSAndroid Build Coastguard Worker } 79*5c90c05cSAndroid Build Coastguard Worker 80*5c90c05cSAndroid Build Coastguard Worker sourceSets{ 81*5c90c05cSAndroid Build Coastguard Worker // Android Manifest for Gradle 82*5c90c05cSAndroid Build Coastguard Worker main { 83*5c90c05cSAndroid Build Coastguard Worker manifest.srcFile "AndroidManifest.xml" 84*5c90c05cSAndroid Build Coastguard Worker } 85*5c90c05cSAndroid Build Coastguard Worker } 86*5c90c05cSAndroid Build Coastguard Worker 87*5c90c05cSAndroid Build Coastguard Worker // https://developer.android.com/studio/build/native-dependencies#build_system_configuration 88*5c90c05cSAndroid Build Coastguard Worker buildFeatures { 89*5c90c05cSAndroid Build Coastguard Worker prefab true 90*5c90c05cSAndroid Build Coastguard Worker prefabPublishing true 91*5c90c05cSAndroid Build Coastguard Worker } 92*5c90c05cSAndroid Build Coastguard Worker prefab { 93*5c90c05cSAndroid Build Coastguard Worker fmt { 94*5c90c05cSAndroid Build Coastguard Worker headers "${rootDir}/include" 95*5c90c05cSAndroid Build Coastguard Worker } 96*5c90c05cSAndroid Build Coastguard Worker } 97*5c90c05cSAndroid Build Coastguard Worker} 98*5c90c05cSAndroid Build Coastguard Worker 99*5c90c05cSAndroid Build Coastguard Workerassemble.doLast 100*5c90c05cSAndroid Build Coastguard Worker{ 101*5c90c05cSAndroid Build Coastguard Worker // Instead of `ninja install`, Gradle will deploy the files. 102*5c90c05cSAndroid Build Coastguard Worker // We are doing this since FMT is dependent to the ANDROID_STL after build 103*5c90c05cSAndroid Build Coastguard Worker copy { 104*5c90c05cSAndroid Build Coastguard Worker from "build/intermediates/cmake" 105*5c90c05cSAndroid Build Coastguard Worker into "${rootDir}/libs" 106*5c90c05cSAndroid Build Coastguard Worker } 107*5c90c05cSAndroid Build Coastguard Worker // Copy debug binaries 108*5c90c05cSAndroid Build Coastguard Worker copy { 109*5c90c05cSAndroid Build Coastguard Worker from "${rootDir}/libs/debug/obj" 110*5c90c05cSAndroid Build Coastguard Worker into "${rootDir}/libs/debug" 111*5c90c05cSAndroid Build Coastguard Worker } 112*5c90c05cSAndroid Build Coastguard Worker // Copy Release binaries 113*5c90c05cSAndroid Build Coastguard Worker copy { 114*5c90c05cSAndroid Build Coastguard Worker from "${rootDir}/libs/release/obj" 115*5c90c05cSAndroid Build Coastguard Worker into "${rootDir}/libs/release" 116*5c90c05cSAndroid Build Coastguard Worker } 117*5c90c05cSAndroid Build Coastguard Worker // Remove empty directory 118*5c90c05cSAndroid Build Coastguard Worker delete "${rootDir}/libs/debug/obj" 119*5c90c05cSAndroid Build Coastguard Worker delete "${rootDir}/libs/release/obj" 120*5c90c05cSAndroid Build Coastguard Worker 121*5c90c05cSAndroid Build Coastguard Worker // Copy AAR files. Notice that the aar is named after the folder of this script. 122*5c90c05cSAndroid Build Coastguard Worker copy { 123*5c90c05cSAndroid Build Coastguard Worker from "build/outputs/aar/support-release.aar" 124*5c90c05cSAndroid Build Coastguard Worker into "${rootDir}/libs" 125*5c90c05cSAndroid Build Coastguard Worker rename "support-release.aar", "fmt-release.aar" 126*5c90c05cSAndroid Build Coastguard Worker } 127*5c90c05cSAndroid Build Coastguard Worker copy { 128*5c90c05cSAndroid Build Coastguard Worker from "build/outputs/aar/support-debug.aar" 129*5c90c05cSAndroid Build Coastguard Worker into "${rootDir}/libs" 130*5c90c05cSAndroid Build Coastguard Worker rename "support-debug.aar", "fmt-debug.aar" 131*5c90c05cSAndroid Build Coastguard Worker } 132*5c90c05cSAndroid Build Coastguard Worker} 133