apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion '28.0.3'

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    lintOptions {
        // This is important as it will run lint but not abort on error
        // Lint has some overly obnoxious "errors" that should really be warnings
        abortOnError false
    }

    defaultConfig {
        applicationId "org.citra_emu"
        minSdkVersion 21
        targetSdkVersion 26

        versionCode(getBuildVersionCode())

        versionName "${getVersion()}"
    }

    signingConfigs {
        release {
            if (project.hasProperty('keystore')) {
                storeFile file(project.property('keystore'))
                storePassword project.property('storepass')
                keyAlias project.property('keyalias')
                keyPassword project.property('keypass')
            }
        }
    }

    // Define build types, which are orthogonal to product flavors.
    buildTypes {
        // Signed by release key, allowing for upload to Play Store.
        release {
            signingConfig signingConfigs.release
        }

        // Signed by debug key disallowing distribution on Play Store.
        // Attaches 'debug' suffix to version and package name, allowing installation alongside the release build.
        debug {
            // TODO If this is ever modified, change application_id in debug/strings.xml
            applicationIdSuffix ".debug"
            versionNameSuffix '-debug'
            jniDebuggable true
        }
    }

    externalNativeBuild {
        cmake {
            version getCmakeVersion()
            path "../../../CMakeLists.txt"
        }
    }

    defaultConfig {
        externalNativeBuild {
            cmake {
                arguments "-DENABLE_QT=0", // Don't use QT
                        "-DENABLE_SDL2=0", // Don't use SDL
                        "-DANDROID_ARM_NEON=true", // cryptopp requires Neon to work
                        "-DENABLE_CUBEB=0",
                        "-DANDROID_STL=c++_shared"

                abiFilters "arm64-v8a"

                targets "citra-android"
            }
        }
    }
}

ext {
    androidSupportVersion = '26.1.0'
}

dependencies {
    implementation "com.android.support:support-v13:$androidSupportVersion"
    implementation "com.android.support:cardview-v7:$androidSupportVersion"
    implementation "com.android.support:recyclerview-v7:$androidSupportVersion"
    implementation "com.android.support:design:$androidSupportVersion"

    // Android TV UI libraries.
    implementation "com.android.support:leanback-v17:$androidSupportVersion"

    implementation 'com.android.support.constraint:constraint-layout:1.1.0'

    testImplementation "com.android.support.test:runner:1.0.2"
    androidTestImplementation "com.android.support.test:runner:1.0.1"
}

def getVersion() {
    def versionNumber = '0.0'

    try {
        versionNumber = 'git describe --always --long'.execute([], project.rootDir).text
                .trim()
                .replaceAll(/(-0)?-[^-]+$/, "")
    } catch (Exception e) {
        logger.error('Cannot find git, defaulting to dummy version number')
    }

    return versionNumber
}


def getBuildVersionCode() {
    try {
        def versionNumber = 'git rev-list --first-parent --count HEAD'.execute([], project.rootDir).text
                .trim()
        return Integer.valueOf(versionNumber)
    } catch (Exception e) {
        logger.error('Cannot find git, defaulting to dummy version number')
    }

    return 0
}

def getCmakeVersion() {
    try {
        // Tokenized form of the output will be - ["cmake", "version", "M.m.p-rcx"], the version number
        // will be at index 2
        def version_string = 'cmake -version'.execute([], project.rootDir).text
                .trim().tokenize()[2]

        return version_string
    }
    catch(Exception e) {
        logger.error('Cannot find Cmake, using default Cmake')
    }

    return null
}
