apply plugin: 'sdk-files'

import com.android.tools.internal.emulator.BuildEmulator

task buildDefaultEmulator(type: BuildEmulator) {
    output = new File(project.buildDir, "default")
}

task buildWindowsEmulator(type: BuildEmulator) {
    output = new File(project.buildDir, "windows")
    windows = true
}

sdk {

    common(mac, linux) {
        item('android/avd/hardware-properties.ini') {
            into 'lib'
            notice null
        }

        item("$buildDefaultEmulator.output/emulator") {
            executable true
            builtBy buildDefaultEmulator
        }
        item("$buildDefaultEmulator.output/qemu") {
            into 'qemu'
            builtBy buildDefaultEmulator
        }
        item("$buildDefaultEmulator.output/lib") {
            into 'lib'
            builtBy buildDefaultEmulator
        }
        item("$buildDefaultEmulator.output/lib64") {
            into 'lib64'
            builtBy buildDefaultEmulator
        }
        item("$project.rootDir/../prebuilts/qemu-kernel/x86/pc-bios/bios.bin") {
            into 'lib/pc-bios'
        }
        item("$project.rootDir/../prebuilts/qemu-kernel/x86/pc-bios/vgabios-cirrus.bin") {
            into 'lib/pc-bios'
        }

        item("$buildDefaultEmulator.output/emulator64-ranchu-arm64") {
            executable true
            builtBy buildDefaultEmulator
        }

        item("$buildDefaultEmulator.output/emulator64-ranchu-mips64") {
            executable true
            builtBy buildDefaultEmulator
        }

        item("$buildDefaultEmulator.output/emulator64-arm") {
            executable true
            builtBy buildDefaultEmulator
        }

        item("$buildDefaultEmulator.output/emulator64-mips") {
            executable true
            builtBy buildDefaultEmulator
        }

        item("$buildDefaultEmulator.output/emulator64-x86") {
            executable true
            builtBy buildDefaultEmulator
        }
    }

    // 32 bit binaries are linux only
    linux {
        item("$buildDefaultEmulator.output/emulator-arm") {
            executable true
            builtBy buildDefaultEmulator
        }
        item("$buildDefaultEmulator.output/emulator-mips") {
            executable true
            builtBy buildDefaultEmulator
        }
        item("$buildDefaultEmulator.output/emulator-x86") {
            executable true
            builtBy buildDefaultEmulator
        }
        item("$buildDefaultEmulator.output/emulator-ranchu-arm64") {
            executable true
            builtBy buildDefaultEmulator
        }
        item("$buildDefaultEmulator.output/emulator-ranchu-mips64") {
            executable true
            builtBy buildDefaultEmulator
        }
    }

    windows {
        item("$buildWindowsEmulator.output/emulator.exe") {
            builtBy buildWindowsEmulator
        }
        item("$buildWindowsEmulator.output/qemu") {
            into 'qemu'
            builtBy buildWindowsEmulator
        }
        item("$buildWindowsEmulator.output/lib") {
            into 'lib'
            builtBy buildWindowsEmulator
        }
        item("$project.rootDir/../prebuilts/qemu-kernel/x86/pc-bios/bios.bin") {
            into 'lib/pc-bios'
        }
        item("$project.rootDir/../prebuilts/qemu-kernel/x86/pc-bios/vgabios-cirrus.bin") {
            into 'lib/pc-bios'
        }

        item("$buildWindowsEmulator.output/emulator64-ranchu-arm64.exe") {
            builtBy buildWindowsEmulator
        }
        item("$buildWindowsEmulator.output/emulator64-ranchu-mips64.exe") {
            builtBy buildWindowsEmulator
        }
        item("$buildWindowsEmulator.output/emulator-ranchu-arm64.exe") {
            builtBy buildWindowsEmulator
        }
        item("$buildWindowsEmulator.output/emulator-ranchu-mips64.exe") {
            builtBy buildWindowsEmulator
        }
        item("$buildWindowsEmulator.output/emulator-arm.exe") {
            builtBy buildWindowsEmulator
        }
        item("$buildWindowsEmulator.output/emulator-mips.exe") {
            builtBy buildWindowsEmulator
        }
        item("$buildWindowsEmulator.output/emulator-x86.exe") {
            builtBy buildWindowsEmulator
        }

/*
XAV(2014-06-17): DISABLE win64 exe until it's ready
        item("$buildWindowsEmulator.output/emulator64-arm.exe") {
            builtBy buildWindowsEmulator
        }

        item("$buildWindowsEmulator.output/emulator64-mips.exe") {
            builtBy buildWindowsEmulator
        }

        item("$buildWindowsEmulator.output/emulator64-x86.exe") {
            builtBy buildWindowsEmulator
        }
*/
    }
}

