xref: /aosp_15_r20/external/fmtlib/support/build.gradle (revision 5c90c05cd622c0a81b57953a4d343e0e489f2e08)
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